import { signedGet, isSuccess } from '@/api/client'; import { dropdownMap } from '@/api/dropdowns'; const roles = { service: 'ums', module: 'roles', title: 'Roles', baseUrl: '/role', listPath: '/roles', listFields: [ { key: 'actions', title: 'Actions', buttons: ['edit', 'duplicate', 'delete'] }, { key: 'name', title: 'Role Name', type: 'text' }, { key: 'code', title: 'Role Code', type: 'text' }, { key: 'status', title: 'Status', type: 'select' }, ], formFields: async () => { const [master, hierarchies] = await Promise.all([ signedGet('ums', 'roles/masterlist'), dropdownMap('ums', 'hierarchy', (item) => `${item.name} (${item.code})`), ]); const permissions = {}; const list = isSuccess(master) ? master.data?.permissions || [] : []; list.forEach((permission) => { permissions[permission] = permission; }); return [ { key: 'name', title: 'Role Name', type: 'text', required: true }, { key: 'code', title: 'Role Code', type: 'text', required: true }, { key: 'mimik_position', title: 'Mimik Position (Applicable to HO)', type: 'select', values: hierarchies }, { key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } }, { key: 'permissions', title: 'permissions', type: 'bigmultiselect', required: true, values: permissions, fullwidth: true }, ]; }, beforeForm: (item, _mode, context) => { const next = { ...item, permissions: Array.isArray(item.permissions) ? item.permissions.map(String) : String(item.permissions || '') .split(/[#~,]/) .filter(Boolean), }; if (context?.duplicate && next.code && !String(next.code).endsWith('-copy')) { next.code = `${next.code}-copy`; } return next; }, }; export default roles;