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 )