finetune Form presentation

Ease the development of future forms
Adapt tenant and user forms
This commit is contained in:
Josako
2024-04-26 18:17:42 +02:00
parent 9c1a3e8f55
commit e8f97b7317
9 changed files with 106 additions and 79 deletions

View File

@@ -0,0 +1,12 @@
.form-control {
border: 1px solid #d2d6da;
padding: 0.625rem 0.75rem;
}
.form-control:focus {
color: #495057;
background-color: transparent;
border-color: #d2d6da;
outline: 0;
box-shadow: none;
}

View File

@@ -20,6 +20,7 @@
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round" rel="stylesheet">
<!-- CSS Files -->
<link id="pagestyle" href="{{url_for('static', filename='/assets/css/material-kit-pro.css')}}" rel="stylesheet" />
<link id="pagestyle" href="{{url_for('static', filename='/assets/css/eveai.css')}}" rel="stylesheet" />
</head>
<body class="presentation-page bg-gray-200">

View File

@@ -0,0 +1,24 @@
{% macro render_field(field, disabled_fields=[], exclude_fields=[]) %}
{% set disabled = field.name in disabled_fields %}
{% set exclude_fields = exclude_fields + ['csrf_token', 'submit'] %}
{% if field.name not in exclude_fields %}
{% if field.type == 'BooleanField' %}
<div class="form-check">
{{ field(class="form-check-input", type="checkbox", id="flexSwitchCheckDefault") }}
{{ field.label(class="form-check-label", for="flexSwitchCheckDefault", disabled=disabled) }}
</div>
{% else %}
<div class="form-group">
{{ field.label(class="form-label") }}
{{ field(class="form-control", disabled=disabled) }}
{% if field.errors %}
<div class="invalid-feedback">
{% for error in field.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
{% endif %}
{% endmacro %}

View File

@@ -0,0 +1,21 @@
{% extends 'base.html' %}
{% from "macros.html" import render_field %}
{% block title %}Update Tenant{% endblock %}
{% block content_title %}Update Tenant{% endblock %}
{% block content_description %}Update given tenant{% endblock %}
{% block content %}
<form method="post">
{{ form.hidden_tag() }}
{% set disabled_fields = ['name'] %}
{% set exclude_fields = [] %}
{% for field in form %}
{{ render_field(field, disabled_fields, exclude_fields) }}
{% endfor %}
<button type="submit" class="btn btn-primary">Update Tenant</button>
</form>
{% endblock %}
{% block content_footer %} {% endblock %}

View File

@@ -1,25 +1,18 @@
{% extends "base.html" %}
{% from "macros.html" import render_field %}
{% block title %}Update User{% endblock %}
{% block content_title %}Update User{% endblock %}
{% block content_description %}Update given user account{% endblock %}
{% block content %}
<form method="post">
<form method="post">
{{ form.hidden_tag() }}
{% set disabled_fields = ['email', 'user_name'] %}
{% set exclude_fields = ['password', 'confirm_password'] %}
{% for field in form %}
<div class="form-group">
{{ field.label }}
{{ field(class="form-control", disabled=true) if field.name in ['email', 'user_name'] else field(class="form-control") }}
{% if field.errors %}
<div class="alert alert-danger">
{% for error in field.errors %}
<p>{{ error }}</p>
{% endfor %}
</div>
{% endif %}
</div>
{{ render_field(field, disabled_fields, exclude_fields) }}
{% endfor %}
<button type="submit" class="btn btn-primary">Update User</button>
</form>
</form>
{% endblock %}

View File

@@ -1,29 +1,21 @@
{% extends 'base.html' %}
{% from "macros.html" import render_field %}
{% block title %}Tenant Details{% endblock %}
{% block title %}Tenant Registration{% endblock %}
{% block content_title %}Register Tenant{% endblock %}
{% block content_description %}Add a new tenant to EveAI{% endblock %}
{% block content %}
<form action="" method="post" novalidate>
<p>
{{ form.name.label }}<br>
{{ form.name(size=80) }}
</p>
<p>
{{ form.website.label }}<br>
{{ form.website(size=80) }}
</p>
<p>
{{ form.license_start_date.label }}<br>
{{ form.license_start_date(size=20) }}
</p>
<p>
{{ form.license_end_date.label }}<br>
{{ form.license_end_date(size=20) }}
</p>
<p>
{{ form.allowed_monthly_interactions.label }}<br>
{{ form.allowed_monthly_interactions(size=20) }}
</p>
<p>{{ form.submit() }}</p>
<form method="post">
{{ form.hidden_tag() }}
{% set disabled_fields = [] %}
{% set exclude_fields = [] %}
{% for field in form %}
{{ render_field(field, disabled_fields, exclude_fields) }}
{% endfor %}
<button type="submit" class="btn btn-primary">Register Tenant</button>
</form>
{% endblock %}
{% block content_footer %} {% endblock %}

View File

@@ -1,4 +1,5 @@
{% extends 'base.html' %}
{% from "macros.html" import render_field %}
{% block title %}User Registration{% endblock %}
@@ -6,45 +7,14 @@
{% block content_description %}Make a new user account{% endblock %}
{% block content %}
<form action="" method="post">
<form method="post">
{{ form.hidden_tag() }}
<p>
{{ form.user_name.label }}<br>
{{ form.user_name(size=80) }}
</p>
<p>
{{ form.email.label }}<br>
{{ form.email(size=80) }}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=80) }}
</p>
<p>
{{ form.confirm_password.label }}<br>
{{ form.confirm_password(size=80) }}
</p>
<p>
{{ form.first_name.label }}<br>
{{ form.first_name(size=80) }}
</p>
<p>
{{ form.last_name.label }}<br>
{{ form.last_name(size=80) }}
</p>
<p>
{{ form.is_active.label }}<br>
{{ form.is_active() }}
</p>
<p>
{{ form.valid_to.label }}<br>
{{ form.valid_to() }}
</p>
<p>
{{ form.tenant_id.label }}<br>
{{ form.tenant_id() }}
</p>
<p>{{ form.submit() }}</p>
{% set disabled_fields = [] %}
{% set exclude_fields = [] %}
{% for field in form %}
{{ render_field(field, disabled_fields, exclude_fields) }}
{% endfor %}
<button type="submit" class="btn btn-primary">Register User</button>
</form>
{% endblock %}

View File

@@ -19,7 +19,7 @@ class UserForm(FlaskForm):
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), Length(min=8)])
first_name = StringField('First Name', validators=[DataRequired(), Length(max=80)])
last_name = StringField('Last Name', validators=[DataRequired(), Length(max=80)])
is_active = BooleanField('Is Active')
is_active = BooleanField('Is Active', id='flexSwitchCheckDefault')
valid_to = DateField('Valid to', id='datepicker')
tenant_id = IntegerField('Tenant ID', validators=[NumberRange(min=0)])
submit = SubmitField('Submit')

View File

@@ -64,6 +64,20 @@ def tenant():
return render_template('user/tenant.html', form=form)
@user_bp.route('/tenant/<int:tenant_id>', methods=['GET', 'POST'])
def edit_tenant(tenant_id):
tenant = Tenant.query.get_or_404(tenant_id) # This will return a 404 if no tenant is found
form = TenantForm(obj=tenant)
if request.method == 'POST' and form.validate_on_submit():
# Populate the tenant with form data
form.populate_obj(tenant)
db.session.commit()
flash('User updated successfully.', 'success')
return redirect(url_for(f"user/tenant/tenant_id"))
return render_template('user/edit_tenant.html', form=form, tenant_id=tenant_id)
@user_bp.route('/user', methods=['GET', 'POST'])
def user():
form = UserForm()