Mojolicious-Plugin-Fondation-User-UI-Bootstrap

 view release on metacpan or  search on metacpan

share/public/js/DatatableUser.js  view on Meta::CPAN

$(function() {
    if (!$('#panel-user').length) return;
    initialiseTabUser();
    $('#menuAddUser').on('click', function(event) {
        addUser();
    });

    // ────────────────────────────────────────────────
    // Form validation using validators.js
    // ────────────────────────────────────────────────
async function validateUserForm() {
    const form = document.getElementById('user-form');
    if (!form) {
        console.error("Form #user-form not found");
        return { valid: false, errors: [{ field: null, message: l("Form not found") }], data: {} };
    }

    // Collect raw data
    const formDataObj = Object.fromEntries(new FormData(form).entries());

    // Cleanup and conversions (trim all strings)
    Object.keys(formDataObj).forEach(key => {
        if (typeof formDataObj[key] === 'string') {
            formDataObj[key] = formDataObj[key].trim();
        }
    });

    // IMPORTANT: DO NOT REMOVE password_confirm here, we need it for verification

    // Validate via FondationValidators
    if (typeof window.FondationValidators === 'undefined' || typeof FondationValidators.validate !== 'function') {
        console.error("FondationValidators not loaded or invalid");
        return { valid: false, errors: [{ field: null, message: l("Validator not available") }], data: {} };
    }

    // Determine schema based on mode
    const isUpdate = formDataObj.id && formDataObj.id.trim() !== '';
    const schemaName = isUpdate ? 'UserUpdate' : 'UserCreate';

    // In create mode, remove id to avoid sending an empty string to the server
    if (!isUpdate) {
        delete formDataObj.id;
    }
    const result = FondationValidators.validate(schemaName, formDataObj);

    // Additional validation for password / confirm (only if password is filled)
    if (formDataObj.password) {
        const pw = formDataObj.password.trim();
        const confirm = (formDataObj.password_confirm || '').trim();

        if (pw && !confirm) {
            result.valid = false;
            result.errors.push(l("Please confirm the password"));
        } else if (pw && confirm && pw !== confirm) {

share/public/js/DatatableUser.js  view on Meta::CPAN

    }

    // ────────────────────────────────────────────────
    // "Save" button
    // ────────────────────────────────────────────────
    $('#saveObject').on('click', async function() {
        const button = $(this);
        button.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> ' + l("Saving..."));

        try {
            const validation = await validateUserForm();
            if (!validation.valid) {
                displayValidationErrors(validation.errors);
                return;
            }

            const id = validation.data.id;
            const method = id ? 'PUT' : 'POST';
            const url = id ? `/api/user/${id}` : '/api/user';

            // id is in the URL path, not the request body



( run in 1.838 second using v1.01-cache-2.11-cpan-f4a522933cf )