// Shared user form view-model helpers. function normalizeSelectedRoleIds(selectedRoleIds) { return new Set((Array.isArray(selectedRoleIds) ? selectedRoleIds : []).map(function (roleId) { return Number(roleId); }).filter(function (roleId) { return Number.isInteger(roleId) && roleId > 0; })); } function mapRolesForForm(roles, selectedRoleIds) { const selectedIds = normalizeSelectedRoleIds(selectedRoleIds); return (Array.isArray(roles) ? roles : []).map(function (role) { return Object.assign({}, role, { isSelected: selectedIds.has(Number(role.id)) }); }); } function buildUsersAddViewModel(message, currentUser, roles, formValues, messageVariant) { return { title: 'Add user', active: 'users', userManagementMenuOpen: true, isEdit: false, formId: 'user-form', formAction: '/settings/users', footerSaveUrl: '/settings/users', footerCancelUrl: '/settings/users', footerDeleteUrl: '', footerDeleteDisabled: true, footerDeleteTitle: 'Delete is available after the user has been created.', footerShowDelete: true, message: message, messageVariant: messageVariant || 'success', currentUser: currentUser || null, roles: mapRolesForForm(roles, []), formValues: formValues || {}, formAttrs: 'data-async-save data-async-save-close-url="/settings/users" data-async-save-new-redirect="response-url" data-async-save-new-url="/settings/users/new"' }; } function buildUsersEditViewModel(user, message, currentUser, roles, sessions) { return { title: 'Edit user', active: 'users', userManagementMenuOpen: true, isEdit: true, formId: 'user-profile-form', formAction: '/settings/users/' + user.id + '/username', formAttrs: 'data-async-save data-async-save-close-url="/settings/users"', footerSaveUrl: '/settings/users/' + user.id + '/username', footerCancelUrl: '/settings/users', footerDeleteUrl: '/settings/users/' + user.id + '/delete', footerDeleteDisabled: Boolean(user && user.inUse), footerDeleteConfirmMessage: 'Delete this user?', footerDeleteTitle: user && user.inUse ? 'Delete is disabled while this user is the only account left.' : '', footerShowDelete: true, showSaveSecondaryActions: true, message: message, currentUser: currentUser || null, user: user, sessions: Array.isArray(sessions) ? sessions : [], inUse: Boolean(user && user.inUse), roles: mapRolesForForm(roles, user && user.roleIds), formAttrs: 'data-async-save data-async-save-close-url="/settings/users" data-async-save-new-url="/settings/users/new"' }; } module.exports = { mapRolesForForm: mapRolesForForm, buildUsersAddViewModel: buildUsersAddViewModel, buildUsersEditViewModel: buildUsersEditViewModel };