75 lines
2.7 KiB
JavaScript
75 lines
2.7 KiB
JavaScript
// 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
|
|
}; |