use super::state::{ValidationPageState, ValidationSetForm}; const ADMIN_CSS: &str = include_str!("../../../static/admin.css"); pub(crate) fn render_page(page: &ValidationPageState) -> String { let profiles = datalist("profiles", &page.profiles); let tables = datalist("tables", &page.tables); let error = page.error.as_deref().map(render_error).unwrap_or_default(); let (title, action, mut identity) = if page.reusable_rule { ( "Add reusable validation rule", "/admin/validation/rules", format!("", crate::escape_html(&page.form.rule_name), crate::escape_html(&page.form.description)), ) } else { ( "Add field validation", "/admin/validation", format!("", crate::escape_html(&page.form.table_name), crate::escape_html(&page.form.data_key)), ) }; let profile_field = if page.reusable_rule { let set_field = if page.reusable_rule { String::new() } else { format!("", crate::escape_html(&page.form.validation_set_name)) }; identity.push_str(&format!( "{set_field}", crate::escape_html(&page.form.pattern_rules), crate::escape_html(&page.form.pattern_description), )); String::new() } else { format!("", crate::escape_html(&page.form.profile_name)) }; format!( "{title}
Komp Accounting
← Admin panel

Validation

{title}

{profile_field}{identity}
{}{}{}{}{}
{profiles}{tables}
{error}
Cancel
", crate::escape_html(&page.form.minimum), crate::escape_html(&page.form.maximum), crate::escape_html(&page.form.warn_at), crate::escape_html(&page.form.allowed_values), crate::escape_html(&page.form.mask_pattern), crate::escape_html(&page.form.mask_input_char), crate::escape_html(&page.form.mask_template_char), checkbox("required", "Required", page.form.required), checkbox("allow_empty", "Allow empty", page.form.allow_empty), checkbox("case_insensitive", "Case insensitive", page.form.case_insensitive), checkbox("external_validation_enabled", "External validation", page.form.external_validation_enabled), checkbox("locked", "Lock configuration", page.form.locked), ) } pub(crate) fn render_set_page(form: &ValidationSetForm, error: Option<&str>) -> String { let error = error.map(render_error).unwrap_or_default(); format!( "Add validation set
Komp Accounting
← Admin panel

Global validation library

Add validation set

Compose an ordered set from existing reusable rule names.

{error}
Cancel
", crate::escape_html(&form.name), crate::escape_html(&form.description), crate::escape_html(&form.global_rules), ) } fn datalist(id: &str, values: &[String]) -> String { let options = values.iter().map(|value| format!("", crate::escape_html(value))).collect::(); format!("{options}") } fn checkbox(name: &str, label: &str, checked: bool) -> String { format!("", if checked { "checked" } else { "" }) } pub(crate) fn render_error(message: &str) -> String { format!("
Could not save validation

{}

", crate::escape_html(message)) } pub(crate) fn render_success(message: &str) -> String { format!("
Validation saved

{}

", crate::escape_html(message)) }