Mojolicious-Plugin-Fondation-Group-UI-Bootstrap

 view release on metacpan or  search on metacpan

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

$(function() {
    if (!$('#panel-group').length) return;
    initialiseTabGroup();
    $('#menuAddGroup').on('click', function(event) {
        addGroup();
    });

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

        const formDataObj = Object.fromEntries(new FormData(form).entries());

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

        // 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: {} };
        }

        const schemaName = 'Group';

        const result = FondationValidators.validate(schemaName, formDataObj);

        // Collect perm assignments (provided by Fondation::Perm::UI::Bootstrap)
        if (typeof collectPermAssignments === 'function') {
            formDataObj.perms = collectPermAssignments();
        }

        return {
            valid: result.valid,
            errors: result.errors.map(msg => ({
                field: null,

share/public/js/DatatableGroup.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 validateGroupForm();
            if (!validation.valid) {
                displayValidationErrors(validation.errors);
                return;
            }

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

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

share/templates/zones/js/user/add/groups.js.ep  view on Meta::CPAN

            sel.append('<option value="' + g.id + '"' + selected + '>' + g.name + '</option>');
        }

        sel.selectpicker('refresh');
        $('#groups-group').show();
    });
}

/**
 * Intercepts the save to collect group assignments.
 * Called by validateUserForm() in DatatableUser.js before save.
 */
function collectGroupAssignments() {
    return $('#groupes').val() || [];
}
</script>



( run in 0.282 second using v1.01-cache-2.11-cpan-ad19def0cd9 )