@firecms/user_management 3.0.0-tw4.6 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/utils/permissions.ts","../src/utils/local_storage.ts","../src/utils/colors.ts","../src/hooks/useBuildUserManagement.tsx","../src/UserManagementProvider.tsx","../src/hooks/useUserManagement.tsx","../src/components/roles/RoleChip.tsx","../src/components/roles/RolesDetailsForm.tsx","../src/components/roles/default_roles.tsx","../src/components/roles/RolesTable.tsx","../src/components/roles/RolesView.tsx","../src/components/users/UserDetailsForm.tsx","../src/components/users/UsersTable.tsx","../src/components/users/UsersView.tsx","../src/useUserManagementPlugin.tsx","../src/admin_views.tsx"],"sourcesContent":["import { EntityCollection, Permissions, Role, User } from \"@firecms/core\";\n\nexport const RESERVED_GROUPS = [\"Admin\"];\n\nconst DEFAULT_PERMISSIONS = {\n read: false,\n edit: false,\n create: false,\n delete: false\n};\n\nexport function resolveUserRolePermissions<USER extends User>\n({\n collection,\n user\n }: {\n collection: EntityCollection<any>,\n user: USER | null\n}): Permissions {\n\n const roles = user?.roles;\n if (!roles) {\n return DEFAULT_PERMISSIONS;\n } else if (collection.ownerId === user?.uid) {\n return {\n read: true,\n create: true,\n edit: true,\n delete: true\n };\n } else {\n const basePermissions = {\n read: false,\n create: false,\n edit: false,\n delete: false\n };\n\n return roles\n .map(role => resolveCollectionRole(role, collection.id))\n .reduce(mergePermissions, basePermissions);\n }\n}\n\nfunction resolveCollectionRole(role: Role, id: string): Permissions {\n\n const basePermissions = {\n read: (role.isAdmin || role.defaultPermissions?.read) ?? false,\n create: (role.isAdmin || role.defaultPermissions?.create) ?? false,\n edit: (role.isAdmin || role.defaultPermissions?.edit) ?? false,\n delete: (role.isAdmin || role.defaultPermissions?.delete) ?? false\n };\n const thisCollectionPermissions = role.collectionPermissions?.[id];\n if (thisCollectionPermissions) {\n return mergePermissions(thisCollectionPermissions, basePermissions);\n } else if (role.defaultPermissions) {\n return mergePermissions(role.defaultPermissions, basePermissions);\n } else {\n return basePermissions;\n }\n}\n\nconst mergePermissions = (permA: Permissions, permB: Permissions) => {\n return {\n read: permA.read || permB.read,\n create: permA.create || permB.create,\n edit: permA.edit || permB.edit,\n delete: permA.delete || permB.delete\n };\n}\n\nexport function getUserRoles(roles: Role[], fireCMSUser: User): Role[] | undefined {\n return !roles\n ? undefined\n : (fireCMSUser.roles\n ? fireCMSUser.roles\n .map(role => roles.find((r) => r.id === role.id))\n .filter(Boolean) as Role[]\n : []);\n}\n\nexport const areRolesEqual = (rolesA: Role[], rolesB: Role[]) => {\n const rolesAIds = rolesA.map(r => r.id);\n const rolesBIds = rolesB.map(r => r.id);\n return rolesAIds.length === rolesB.length && rolesAIds.every((role) => rolesBIds.includes(role));\n}\n","// const tokens = new Map<string, {\n// token: string,\n// expiry: Date\n// }>();\n\nexport function cacheDelegatedLoginToken(projectId: string, delegatedToken?: string) {\n if (!delegatedToken) {\n return;\n }\n\n const data = parseJwt(delegatedToken);\n // @ts-ignore\n const expiry = new Date(data.exp * 1000);\n localStorage.setItem(`auth_token::${projectId}`, JSON.stringify({\n token: delegatedToken,\n expiry\n }));\n\n}\n\nexport function getDelegatedLoginTokenFromCache(projectId: string) {\n const entry = localStorage.getItem(`auth_token::${projectId}`);\n if (entry) {\n const data = JSON.parse(entry);\n data.expiry = new Date(data.expiry);\n if (data.expiry > new Date()) {\n return data.token;\n }\n }\n return undefined;\n}\n\nexport function clearDelegatedLoginTokensCache() {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(\"auth_token::\")) {\n localStorage.removeItem(key);\n }\n }\n}\n\nfunction parseJwt(token?: string): object {\n if (!token) {\n throw new Error(\"No JWT token\");\n }\n const base64Url = token.split(\".\")[1];\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const jsonPayload = decodeURIComponent(window.atob(base64).split(\"\").map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(\"\"));\n\n return JSON.parse(jsonPayload);\n}\n","export function darkenColor(hexColor: string, darkenBy = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n let r = parseInt(color[0] + color[1], 16);\n let g = parseInt(color[2] + color[3], 16);\n let b = parseInt(color[4] + color[5], 16);\n\n // Reduce each color component by the specified percentage (darkenBy)\n r = Math.floor(r * (1 - darkenBy / 100));\n g = Math.floor(g * (1 - darkenBy / 100));\n b = Math.floor(b * (1 - darkenBy / 100));\n\n // Recombine into hex and return\n return \"#\" +\n (r < 16 ? \"0\" : \"\") + r.toString(16) +\n (g < 16 ? \"0\" : \"\") + g.toString(16) +\n (b < 16 ? \"0\" : \"\") + b.toString(16);\n}\n\nexport function hexToRgbaWithOpacity(hexColor: string, opacity = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n const r = parseInt(color[0] + color[1], 16);\n const g = parseInt(color[2] + color[3], 16);\n const b = parseInt(color[4] + color[5], 16);\n\n // Convert opacity to a decimal for CSS\n const alpha = opacity / 100;\n\n // Construct and return the RGBA color\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import React, { useCallback, useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { UserManagement } from \"../types\";\nimport {\n AuthController,\n Authenticator,\n DataSourceDelegate,\n Entity,\n PermissionsBuilder,\n removeUndefined,\n Role,\n User\n} from \"@firecms/core\";\nimport { resolveUserRolePermissions } from \"../utils\";\n\ntype UserWithRoleIds<USER extends User = any> = Omit<USER, \"roles\"> & { roles: string[] };\n\nexport interface UserManagementParams<CONTROLLER extends AuthController<any> = AuthController<any>> {\n\n authController: CONTROLLER;\n\n /**\n * The delegate in charge of persisting the data.\n */\n dataSourceDelegate?: DataSourceDelegate;\n\n /**\n * Path where the plugin users configuration is stored.\n * Default: __FIRECMS/config/users\n * You can specify a different path if you want to store the user management configuration in a different place.\n * Please keep in mind that the FireCMS users are not necessarily the same as the Firebase users (but they can be).\n * The path should be relative to the root of the database, and should always have an odd number of segments.\n */\n usersPath?: string;\n\n /**\n * Path where the plugin roles configuration is stored.\n * Default: __FIRECMS/config/roles\n */\n rolesPath?: string;\n\n /**\n * The roles that are available in the user management system.\n * If you provide this, the user management system will not fetch the roles from the database.\n */\n roles?: Role[];\n\n /**\n * If there are no roles in the database, provide a button to create the default roles.\n */\n allowDefaultRolesCreation?: boolean;\n\n /**\n * Include the collection config permissions in the user management system.\n */\n includeCollectionConfigPermissions?: boolean;\n\n}\n\n/**\n * This hook is used to build a user management object that can be used to\n * manage users and roles in a Firestore backend.\n * @param authController\n * @param dataSourceDelegate\n * @param usersPath\n * @param rolesPath\n * @param roles\n * @param allowDefaultRolesCreation\n * @param includeCollectionConfigPermissions\n */\nexport function useBuildUserManagement<CONTROLLER extends AuthController<any> = AuthController<any>,\n USER extends User = CONTROLLER extends AuthController<infer U> ? U : any>\n({\n authController,\n dataSourceDelegate,\n roles: rolesProp,\n usersPath = \"__FIRECMS/config/users\",\n rolesPath = \"__FIRECMS/config/roles\",\n allowDefaultRolesCreation,\n includeCollectionConfigPermissions\n }: UserManagementParams<CONTROLLER>): UserManagement<USER> & CONTROLLER {\n\n if (!authController) {\n throw Error(\"useBuildUserManagement: You need to provide an authController since version 3.0.0-beta.11. Check https://firecms.co/docs/pro/migrating_from_v3_beta\");\n }\n\n const rolesDefinedInCode = (rolesProp ?? [])?.length > 0;\n const [rolesLoading, setRolesLoading] = React.useState<boolean>(!rolesDefinedInCode);\n const [usersLoading, setUsersLoading] = React.useState<boolean>(true);\n const [roles, setRoles] = React.useState<Role[]>(rolesProp ?? []);\n const [usersWithRoleIds, setUsersWithRoleIds] = React.useState<UserWithRoleIds<USER>[]>([]);\n\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as USER);\n\n const [rolesError, setRolesError] = React.useState<Error | undefined>();\n const [usersError, setUsersError] = React.useState<Error | undefined>();\n\n const _usersLoading = usersLoading;\n const _rolesLoading = rolesLoading;\n\n const loading = _rolesLoading || _usersLoading;\n\n useEffect(() => {\n if (rolesDefinedInCode) return;\n if (!dataSourceDelegate || !rolesPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) return;\n if (authController?.initialLoading) return;\n\n setRolesLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: rolesPath,\n onUpdate(entities: Entity<any>[]): void {\n setRolesError(undefined);\n console.debug(\"Updating roles\", entities);\n try {\n const newRoles = entityToRoles(entities);\n if (!equal(newRoles, roles)) {\n setRoles(newRoles);\n }\n } catch (e) {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e as Error);\n }\n setRolesLoading(false);\n },\n onError(e: any): void {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e);\n setRolesLoading(false);\n }\n });\n\n }, [rolesDefinedInCode, dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, rolesPath]);\n\n useEffect(() => {\n if (!dataSourceDelegate || !usersPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) {\n return;\n }\n if (authController?.initialLoading) {\n return;\n }\n\n setUsersLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: usersPath,\n onUpdate(entities: Entity<any>[]): void {\n console.debug(\"Updating users\", entities);\n setUsersError(undefined);\n try {\n const newUsers = entitiesToUsers(entities);\n // if (!equal(newUsers, usersWithRoleIds))\n setUsersWithRoleIds(newUsers);\n } catch (e) {\n setUsersWithRoleIds([]);\n console.error(\"Error loading users\", e);\n setUsersError(e as Error);\n }\n setUsersLoading(false);\n },\n onError(e: any): void {\n console.error(\"Error loading users\", e);\n setUsersWithRoleIds([]);\n setUsersError(e);\n setUsersLoading(false);\n }\n });\n\n }, [dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, usersPath]);\n\n const saveUser = useCallback(async (user: USER): Promise<USER> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n\n console.debug(\"Persisting user\", user);\n\n const roleIds = user.roles?.map(r => r.id);\n const email = user.email?.toLowerCase().trim();\n if (!email) throw Error(\"Email is required\");\n\n const userExists = users.find(u => u.email?.toLowerCase() === email);\n const data = {\n ...user,\n roles: roleIds ?? []\n };\n if (!userExists) {\n // @ts-ignore\n data.created_on = new Date();\n }\n // delete the previous user entry if it exists and the uid has changed\n if (userExists && userExists.uid !== user.uid) {\n const entity: Entity<any> = {\n values: {},\n path: usersPath,\n id: userExists.uid\n }\n await dataSourceDelegate.deleteEntity({ entity })\n .then(() => {\n console.debug(\"Deleted previous user\", userExists);\n })\n .catch(e => {\n console.error(\"Error deleting user\", e);\n });\n\n }\n\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: usersPath,\n entityId: email,\n values: removeUndefined(data)\n }).then(() => user);\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const saveRole = useCallback((role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Persisting role\", role);\n const {\n id,\n ...roleData\n } = role;\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: rolesPath,\n entityId: id,\n values: removeUndefined(roleData)\n }).then(() => {\n return;\n });\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const deleteUser = useCallback(async (user: User): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", user);\n const { uid } = user;\n const entity: Entity<any> = {\n path: usersPath,\n id: uid,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const deleteRole = useCallback(async (role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", role);\n const { id } = role;\n const entity: Entity<any> = {\n path: rolesPath,\n id: id,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const collectionPermissions: PermissionsBuilder = useCallback(({\n collection,\n user\n }) =>\n resolveUserRolePermissions({\n collection,\n user\n }), []);\n\n const defineRolesFor: ((user: User) => Role[] | undefined) = useCallback((user) => {\n if (!usersWithRoleIds) throw Error(\"Users not loaded\");\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as User);\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n return mgmtUser?.roles;\n }, [roles, usersWithRoleIds]);\n\n const authenticator: Authenticator<USER> = useCallback(({ user }) => {\n\n if (loading) {\n return false;\n }\n if (user === null) {\n console.warn(\"User is null, returning\");\n return false;\n }\n\n if (users.length === 0) {\n console.warn(\"No users created yet\");\n return true; // If there are no users created yet, we allow access to every user\n }\n\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n if (mgmtUser) {\n // check if the uid is updated in the user management system\n if (mgmtUser.uid !== user.uid) {\n console.warn(\"User uid has changed, updating user in user management system\");\n saveUser({\n ...mgmtUser,\n uid: user.uid\n }).then(() => {\n console.debug(\"User updated in user management system\", mgmtUser);\n }).catch(e => {\n console.error(\"Error updating user in user management system\", e);\n });\n }\n console.debug(\"User found in user management system\", mgmtUser);\n return true;\n }\n\n throw Error(\"Could not find a user with the provided email in the user management system.\");\n }, [loading, users]);\n\n const userRoles = authController.user ? defineRolesFor(authController.user) : undefined;\n const isAdmin = (userRoles ?? []).some(r => r.id === \"admin\");\n\n const userRoleIds = userRoles?.map(r => r.id);\n useEffect(() => {\n console.debug(\"Setting user roles\", { userRoles, roles });\n authController.setUserRoles?.(userRoles ?? []);\n }, [userRoleIds]);\n\n const getUser = useCallback((uid: string): USER | null => {\n if (!users) return null;\n const user = users.find(u => u.uid === uid);\n return user ?? null;\n }, [users]);\n\n return {\n loading,\n roles,\n users,\n saveUser,\n saveRole,\n rolesError,\n deleteUser,\n deleteRole,\n usersError,\n isAdmin,\n allowDefaultRolesCreation: allowDefaultRolesCreation === undefined ? true : allowDefaultRolesCreation,\n includeCollectionConfigPermissions: Boolean(includeCollectionConfigPermissions),\n collectionPermissions,\n defineRolesFor,\n authenticator,\n ...authController,\n initialLoading: authController.initialLoading || loading,\n userRoles: userRoles,\n getUser,\n user: authController.user ? {\n ...authController.user,\n roles: userRoles\n } : null\n }\n}\n\nconst entitiesToUsers = (docs: Entity<Omit<UserWithRoleIds, \"id\">>[]): (UserWithRoleIds)[] => {\n return docs.map((doc) => {\n const data = doc.values as any;\n const newVar = {\n uid: doc.id,\n ...data,\n created_on: data?.created_on,\n updated_on: data?.updated_on\n };\n return newVar as (UserWithRoleIds);\n });\n}\n\nconst entityToRoles = (entities: Entity<Omit<Role, \"id\">>[]): Role[] => {\n return entities.map((doc) => ({\n id: doc.id,\n ...doc.values\n } as Role));\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { UserManagement } from \"./types\";\nimport { User } from \"@firecms/core\";\n\nexport const UserManagementContext = React.createContext<UserManagement<any>>({} as any);\n\nexport interface UserManagementProviderProps<U extends User = User> {\n userManagement: UserManagement<U>\n}\n\nexport function UserManagementProvider<U extends User = User>({\n children,\n userManagement\n }: PropsWithChildren<UserManagementProviderProps<U>>) {\n return (\n <UserManagementContext.Provider value={userManagement}>\n {children}\n </UserManagementContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { UserManagement } from \"../types\";\nimport { UserManagementContext } from \"../UserManagementProvider\";\nimport { User } from \"@firecms/core\";\nexport const useUserManagement = <USER extends User>() => useContext<UserManagement<USER>>(UserManagementContext);\n","import { Chip, getColorSchemeForSeed } from \"@firecms/ui\";\nimport { Role } from \"@firecms/core\";\n\nexport type RoleChipProps = {\n role: Role;\n}\n\nexport function RoleChip({ role }: RoleChipProps) {\n let colorScheme;\n if (role.isAdmin) {\n colorScheme = \"blueDarker\";\n } else if (role.id === \"editor\") {\n colorScheme = \"yellowLight\";\n } else if (role.id === \"viewer\") {\n colorScheme = \"grayLight\";\n } else {\n colorScheme = getColorSchemeForSeed(role.id);\n }\n\n return (\n <Chip\n colorScheme={colorScheme}\n key={role.id}>\n {role.name}\n </Chip>\n );\n\n}\n","import React, { useCallback, useState } from \"react\";\nimport * as Yup from \"yup\";\n\nimport { EntityCollection, FieldCaption, Role, toSnakeCase, useAuthController, User, } from \"@firecms/core\";\nimport {\n Button,\n Checkbox,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n Paper,\n Select,\n SelectItem,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n TextField,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { Formex, getIn, useCreateFormex } from \"@firecms/formex\";\n\nexport const RoleYupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\")\n});\n\nfunction canRoleBeEdited(loggedUser: User) {\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n if (!loggedUserIsAdmin) {\n throw new Error(\"Only admins can edit roles\");\n }\n\n return true;\n}\n\nexport function RolesDetailsForm({\n open,\n role,\n editable,\n handleClose,\n collections\n }: {\n open: boolean,\n editable?: boolean,\n role?: Role,\n handleClose: () => void,\n collections?: EntityCollection[]\n}) {\n\n const { saveRole } = useUserManagement();\n const isNewRole = !role;\n const {\n user: loggedInUser\n } = useAuthController();\n\n const [savingError, setSavingError] = useState<Error | undefined>();\n\n const onRoleUpdated = useCallback((role: Role) => {\n setSavingError(undefined);\n if (!loggedInUser) throw new Error(\"User not found\");\n canRoleBeEdited(loggedInUser);\n return saveRole(role);\n }, [saveRole, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: role ?? {\n name: \"\"\n } as Role,\n onSubmit: (role: Role, formexController) => {\n try {\n return onRoleUpdated(role)\n .then(() => {\n formexController.resetForm({\n values: role\n });\n handleClose();\n })\n .catch(e => {\n setSavingError(e);\n });\n } catch (e: any) {\n setSavingError(e);\n return Promise.resolve();\n }\n },\n validation: (values) => {\n return RoleYupSchema.validate(values, { abortEarly: false })\n .then(() => ({}))\n .catch((e) => {\n const errors: Record<string, string> = {};\n e.inner.forEach((error: any) => {\n errors[error.path] = error.message;\n });\n return errors;\n });\n }\n\n });\n\n const {\n isSubmitting,\n touched,\n values,\n errors,\n handleChange,\n setFieldValue,\n dirty,\n setFieldTouched\n } = formex;\n\n const isAdmin = values.isAdmin ?? false;\n const defaultCreate = values.defaultPermissions?.create ?? false;\n const defaultRead = values.defaultPermissions?.read ?? false;\n const defaultEdit = values.defaultPermissions?.edit ?? false;\n const defaultDelete = values.defaultPermissions?.delete ?? false;\n\n React.useEffect(() => {\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && values.name) {\n setFieldValue(\"id\", toSnakeCase(values.name))\n }\n }, [touched, values.name]);\n\n return (\n <Dialog\n open={open}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form noValidate\n autoComplete={\"off\"}\n onSubmit={formex.handleSubmit}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n Role\n </DialogTitle>\n <DialogContent className=\"flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12 md:col-span-8\"}>\n <TextField\n name=\"name\"\n required\n error={touched.name && Boolean(errors.name)}\n value={values.name}\n disabled={isAdmin || !editable}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <TextField\n name=\"id\"\n required\n error={touched.id && Boolean(errors.id)}\n value={values.id}\n disabled={!isNewRole || !editable}\n onChange={(e) => {\n handleChange(e);\n setFieldTouched(\"id\", true)\n }}\n aria-describedby=\"id-helper-text\"\n label=\"ID\"\n />\n <FieldCaption>\n {touched.id && Boolean(errors.id) ? errors.id : \"ID of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Paper className=\"bg-inherit overflow-hidden\">\n <Table className={\"w-full rounded-md\"}>\n <TableHeader className={\"rounded-md\"}>\n <TableCell></TableCell>\n <TableCell\n align=\"center\">Create\n entities\n </TableCell>\n <TableCell\n align=\"center\">Read\n entities\n </TableCell>\n <TableCell\n align=\"center\">Update\n entities\n </TableCell>\n <TableCell\n align=\"center\">Delete\n entities\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableHeader>\n\n <TableBody>\n <TableRow>\n <TableCell\n scope=\"row\">\n <strong>All\n collections</strong>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Create entities in collections\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultCreate) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.create\", checked)}\n />\n </Tooltip>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Access all data in every collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultRead) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.read\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Update data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultEdit) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.edit\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Delete data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultDelete) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.delete\", checked)}\n />\n\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableRow>\n {collections && collections.map((col) => (\n <TableRow key={col.name}>\n <TableCell\n scope=\"row\">\n {col.name}\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultCreate || !editable}\n checked={(isAdmin || defaultCreate || getIn(values, `collectionPermissions.${col.id}.create`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.create`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultRead || !editable}\n checked={(isAdmin || defaultRead || getIn(values, `collectionPermissions.${col.id}.read`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.read`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultEdit || !editable}\n checked={(isAdmin || defaultEdit || getIn(values, `collectionPermissions.${col.id}.edit`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.edit`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultDelete || !editable}\n checked={(isAdmin || defaultDelete || getIn(values, `collectionPermissions.${col.id}.delete`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.delete`, checked)}/>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Allow all permissions in this collections\">\n <Button\n className={\"color-inherit\"}\n onClick={() => {\n setFieldValue(`collectionPermissions.${col.id}.create`, true);\n setFieldValue(`collectionPermissions.${col.id}.read`, true);\n setFieldValue(`collectionPermissions.${col.id}.edit`, true);\n setFieldValue(`collectionPermissions.${col.id}.delete`, true);\n }}\n disabled={isAdmin || !editable}\n variant={\"text\"}>\n All\n </Button>\n\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Paper>\n <FieldCaption>\n You can customise the permissions\n that the users related to this\n role can perform in the entities\n of each collection\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n error={touched.config && Boolean(errors.config)}\n size={\"large\"}\n fullWidth={true}\n id=\"createCollections\"\n name=\"createCollections\"\n label=\"Create collections\"\n position={\"item-aligned\"}\n disabled={isAdmin || !editable}\n onChange={(event) => setFieldValue(\"config.createCollections\", event.target.value === \"true\")}\n value={isAdmin || values.config?.createCollections ? \"true\" : \"false\"}\n renderValue={(value: any) => value === \"true\" ? \"Yes\" : \"No\"}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user create collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"editCollections\"\n name=\"editCollections\"\n label=\"Edit collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.editCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.editCollections === \"own\" ? \"own\" : (values.config?.editCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user edit collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"deleteCollections\"\n name=\"deleteCollections\"\n label=\"Delete collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.deleteCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.deleteCollections === \"own\" ? \"own\" : (values.config?.deleteCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user delete collections\"}\n </FieldCaption>\n\n </div>\n\n </div>\n </DialogContent>\n\n <DialogActions position={\"sticky\"}>\n {savingError && <Typography className={\"text-red-500 dark:text-red-500\"}>\n {savingError.message ?? \"There was an error saving this role\"}\n </Typography>}\n <Button variant={\"text\"}\n color={\"primary\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n >\n {isNewRole ? \"Create role\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n\n </Formex>\n </Dialog>\n );\n}\n","import { Role } from \"@firecms/core\";\n\nexport const DEFAULT_ROLES: Role[] = [\n {\n id: \"admin\",\n name: \"Admin\",\n isAdmin: true\n },\n {\n id: \"editor\",\n name: \"Editor\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: true,\n edit: true,\n delete: true\n },\n config: {\n createCollections: true,\n editCollections: \"own\",\n deleteCollections: \"own\"\n }\n },\n {\n id: \"viewer\",\n name: \"Viewer\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: false,\n edit: false,\n delete: false\n }\n }\n];\n","import { useState } from \"react\";\nimport {\n Button,\n CenteredView,\n Checkbox,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { ConfirmationDialog, Role } from \"@firecms/core\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"./RoleChip\";\nimport { DEFAULT_ROLES } from \"./default_roles\";\n\nexport function RolesTable({\n onRoleClicked,\n editable\n }: {\n onRoleClicked: (role: Role) => void;\n editable: boolean;\n}) {\n\n const {\n roles,\n saveRole,\n deleteRole,\n allowDefaultRolesCreation\n } = useUserManagement();\n\n const [roleToBeDeleted, setRoleToBeDeleted] = useState<Role | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return <div\n className=\"w-full overflow-auto\">\n <Table className={\"w-full\"}>\n <TableHeader>\n <TableCell header={true} className=\"w-16\"></TableCell>\n <TableCell header={true}>Role</TableCell>\n <TableCell header={true} className={\"items-center\"}>Is Admin</TableCell>\n <TableCell header={true}>Default permissions</TableCell>\n </TableHeader>\n\n <TableBody>\n {roles && roles.map((role) => {\n const canCreateAll = role.isAdmin || role.defaultPermissions?.create;\n const canReadAll = role.isAdmin || role.defaultPermissions?.read;\n const canUpdateAll = role.isAdmin || role.defaultPermissions?.edit;\n const canDeleteAll = role.isAdmin || role.defaultPermissions?.delete;\n return (\n <TableRow\n key={role.name}\n onClick={() => {\n onRoleClicked(role);\n }}\n >\n <TableCell style={{ width: \"64px\" }}>\n {!role.isAdmin &&\n <Tooltip\n asChild={true}\n title={\"Delete this role\"}>\n <IconButton\n size={\"small\"}\n disabled={!editable}\n onClick={(event) => {\n event.stopPropagation();\n return setRoleToBeDeleted(role);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>}\n </TableCell>\n <TableCell>\n <RoleChip role={role}/>\n </TableCell>\n <TableCell className={\"items-center\"}>\n <Checkbox checked={role.isAdmin ?? false}/>\n </TableCell>\n <TableCell>\n <ul>\n {canCreateAll && <li>Create</li>}\n {canReadAll && <li>Read</li>}\n {canUpdateAll && <li>Update</li>}\n {canDeleteAll && <li>Delete</li>}\n </ul>\n </TableCell>\n </TableRow>\n );\n })}\n\n {(!roles || roles.length === 0) && <TableRow>\n <TableCell colspan={4}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n You don&apos;t have any roles yet.\n </Typography>\n {allowDefaultRolesCreation && <Button variant={\"outlined\"}\n onClick={() => {\n DEFAULT_ROLES.forEach((role) => {\n saveRole(role);\n });\n }}>\n Create default roles\n </Button>}\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n\n </Table>\n\n <ConfirmationDialog\n open={Boolean(roleToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (roleToBeDeleted) {\n setDeleteInProgress(true);\n deleteRole(roleToBeDeleted)\n .then(() => {\n setRoleToBeDeleted(undefined);\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setRoleToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this role?</>}/>\n\n </div>;\n}\n","import React, { useCallback, useState } from \"react\";\n\nimport { Role, useNavigationController } from \"@firecms/core\";\nimport { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\nimport { RolesTable } from \"./RolesTable\";\nimport { RolesDetailsForm } from \"./RolesDetailsForm\";\n\nexport const RolesView = React.memo(\n function RolesView({ children }: { children?: React.ReactNode }) {\n\n const { collections } = useNavigationController();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedRole, setSelectedRole] = useState<Role | undefined>();\n\n const onRoleClicked = useCallback((user: Role) => {\n setDialogOpen(true);\n setSelectedRole(user);\n }, []);\n\n const handleClose = () => {\n setSelectedRole(undefined);\n setDialogOpen(false);\n };\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Roles\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add role\n </Button>\n </div>\n\n <RolesTable onRoleClicked={onRoleClicked} editable={true}/>\n\n <RolesDetailsForm\n key={selectedRole?.id ?? \"new\"}\n open={dialogOpen}\n role={selectedRole}\n editable={true}\n collections={collections}\n handleClose={handleClose}/>\n\n </Container>\n )\n });\n","import React, { useCallback } from \"react\";\nimport * as Yup from \"yup\";\nimport {\n Button,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n MultiSelect,\n MultiSelectItem,\n TextField,\n} from \"@firecms/ui\";\nimport { FieldCaption, Role, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { Formex, useCreateFormex } from \"@firecms/formex\";\n\nimport { areRolesEqual } from \"../../utils\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\n\nexport const UserYupSchema = Yup.object().shape({\n displayName: Yup.string().required(\"Required\"),\n email: Yup.string().email().required(\"Required\"),\n roles: Yup.array().min(1)\n});\n\nfunction canUserBeEdited(loggedUser: User, user: User, users: User[], roles: Role[], prevUser?: User) {\n const admins = users.filter(u => u.roles?.map(r => r.id).includes(\"admin\"));\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n const didRolesChange = !prevUser || !areRolesEqual(prevUser.roles ?? [], user.roles ?? []);\n\n if (didRolesChange && !loggedUserIsAdmin) {\n throw new Error(\"Only admins can change roles\");\n }\n\n // was the admin role removed\n const adminRoleRemoved = prevUser && prevUser.roles?.map(r => r.id).includes(\"admin\") && !user.roles?.map(r => r.id).includes(\"admin\");\n\n // avoid removing the last admin\n if (adminRoleRemoved && admins.length === 1) {\n throw new Error(\"There must be at least one admin\");\n }\n return true;\n}\n\nexport function UserDetailsForm({\n open,\n user: userProp,\n handleClose\n }: {\n open: boolean,\n user?: User,\n handleClose: () => void\n}) {\n\n const snackbarController = useSnackbarController();\n const {\n user: loggedInUser\n } = useAuthController();\n const {\n saveUser,\n users,\n roles,\n } = useUserManagement();\n const isNewUser = !userProp;\n\n const onUserUpdated = useCallback((savedUser: User): Promise<User> => {\n if (!loggedInUser) {\n throw new Error(\"Logged user not found\");\n }\n try {\n canUserBeEdited(loggedInUser, savedUser, users, roles, userProp);\n return saveUser(savedUser);\n } catch (e: any) {\n return Promise.reject(e);\n }\n }, [roles, saveUser, userProp, users, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: userProp ?? {\n displayName: \"\",\n email: \"\",\n roles: roles.filter(r => r.id === \"editor\")\n } as User,\n validation: (values) => {\n return UserYupSchema.validate(values, { abortEarly: false })\n .then(() => {\n return {};\n }).catch((e) => {\n return e.inner.reduce((acc: any, error: any) => {\n acc[error.path] = error.message;\n return acc;\n }, {});\n });\n },\n onSubmit: (user: User, formexController) => {\n\n return onUserUpdated(user)\n .then(() => {\n handleClose();\n formexController.resetForm({\n values: user\n });\n }).catch((e) => {\n snackbarController.open({\n type: \"error\",\n message: e.message\n });\n });\n }\n });\n\n const {\n isSubmitting,\n touched,\n handleChange,\n values,\n errors,\n setFieldValue,\n dirty,\n handleSubmit,\n submitCount\n } = formex;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open ? handleClose() : undefined}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form\n onSubmit={handleSubmit}\n autoComplete={\"off\"}\n noValidate\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n User\n </DialogTitle>\n <DialogContent className=\"h-full flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n name=\"displayName\"\n required\n error={submitCount > 0 && Boolean(errors.displayName)}\n value={values.displayName ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.displayName) ? errors.displayName : \"Name of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n required\n error={submitCount > 0 && Boolean(errors.email)}\n name=\"email\"\n value={values.email ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"email-helper-text\"\n label=\"Email\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.email) ? errors.email : \"Email of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <MultiSelect\n className={\"w-full\"}\n label=\"Roles\"\n value={values.roles?.map(r => r.id) ?? []}\n onValueChange={(value: string[]) => setFieldValue(\"roles\", value.map(id => roles.find(r => r.id === id) as Role))}\n // renderValue={(value: string) => {\n // const userRole = roles\n // .find((role) => role.id === value);\n // if (!userRole) return null;\n // return <div className=\"flex flex-wrap space-x-2 space-y-2\">\n // <RoleChip key={userRole?.id} role={userRole}/>\n // </div>;\n // }}\n >\n {roles.map(userRole => <MultiSelectItem key={userRole.id}\n value={userRole.id}>\n <RoleChip key={userRole?.id} role={userRole}/>\n </MultiSelectItem>)}\n </MultiSelect>\n </div>\n\n </div>\n\n </DialogContent>\n\n <DialogActions>\n\n <Button variant={\"text\"}\n color={\"primary\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n >\n {isNewUser ? \"Create user\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n </Formex>\n\n </Dialog>\n );\n}\n","import { useState } from \"react\";\n\nimport { format } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\n\nimport {\n defaultDateFormat,\n ConfirmationDialog, Role,\n useAuthController,\n useCustomizationController, User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n Button,\n CenteredView,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\nimport { PersistedUser } from \"../../types\";\n\nexport function UsersTable({ onUserClicked }: {\n onUserClicked: (user: User) => void;\n}) {\n\n const {\n users,\n saveUser,\n deleteUser\n } = useUserManagement<PersistedUser>();\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const customizationController = useCustomizationController();\n const dateUtilsLocale = customizationController?.locale ? locales[customizationController?.locale as keyof typeof locales] : undefined;\n const dateFormat: string = customizationController?.dateTimeFormat ?? defaultDateFormat;\n\n const [userToBeDeleted, setUserToBeDeleted] = useState<User | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return (\n <div className=\"overflow-auto\">\n\n <Table className={\"w-full\"}>\n\n <TableHeader>\n <TableCell className=\"truncate w-16\"></TableCell>\n <TableCell>Email</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Roles</TableCell>\n <TableCell>Created on</TableCell>\n </TableHeader>\n <TableBody>\n {users && users.map((user) => {\n\n const userRoles: Role[] | undefined = user.roles;\n\n const formattedDate = user.created_on ? format(user.created_on, dateFormat, { locale: dateUtilsLocale }) : \"\";\n\n return (\n <TableRow\n key={\"row_\" + user.uid}\n onClick={() => {\n onUserClicked(user);\n }}\n >\n <TableCell className={\"w-10\"}>\n <Tooltip\n asChild={true}\n title={\"Delete this user\"}>\n <IconButton\n size={\"small\"}\n onClick={(event) => {\n event.stopPropagation();\n return setUserToBeDeleted(user);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>\n </TableCell>\n <TableCell>{user.email}</TableCell>\n <TableCell className={\"font-medium align-left\"}>{user.displayName}</TableCell>\n <TableCell className=\"align-left\">\n {userRoles\n ? <div className=\"flex flex-wrap gap-2\">\n {userRoles.map(userRole =>\n <RoleChip key={userRole?.id} role={userRole}/>\n )}\n </div>\n : null}\n </TableCell>\n <TableCell>{formattedDate}</TableCell>\n </TableRow>\n );\n })}\n\n {(!users || users.length === 0) && <TableRow>\n <TableCell colspan={6}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n There are no users yet\n </Typography>\n <Button variant={\"outlined\"}\n onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{ id: \"admin\", name: \"Admin\" }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message,\n })\n });\n }}>\n\n Add the logged user as an admin\n </Button>\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n </Table>\n\n <ConfirmationDialog\n open={Boolean(userToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (userToBeDeleted) {\n setDeleteInProgress(true);\n deleteUser(userToBeDeleted)\n .then(() => {\n setUserToBeDeleted(undefined);\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting user: \" + error.message,\n })\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setUserToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this user?</>}/>\n </div>);\n}\n","import { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\n\nimport { UsersTable } from \"./UsersTable\";\nimport { UserDetailsForm } from \"./UserDetailsForm\";\nimport React, { useCallback, useState } from \"react\";\nimport { useUserManagement } from \"../../hooks/useUserManagement\";\nimport { User } from \"@firecms/core\";\n\nexport const UsersView = function UsersView({ children }: { children?: React.ReactNode }) {\n\n const [dialogOpen, setDialogOpen] = useState<boolean>(false);\n const [selectedUser, setSelectedUser] = useState<User | undefined>();\n const [newFormKey, setNewFormKey] = useState<number>(0);\n\n const { users } = useUserManagement();\n\n const onUserClicked = useCallback((user: User) => {\n setSelectedUser(user);\n setDialogOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setDialogOpen(false);\n setSelectedUser(undefined);\n }, []);\n\n const handleAddUser = useCallback(() => {\n setSelectedUser(undefined);\n setNewFormKey(k => k + 1);\n setDialogOpen(true);\n }, []);\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div\n className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Users\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={handleAddUser}>\n Add user\n </Button>\n </div>\n\n <UsersTable onUserClicked={onUserClicked}/>\n\n <UserDetailsForm\n key={selectedUser?.uid ?? `new-${newFormKey}`}\n open={dialogOpen}\n user={selectedUser}\n handleClose={handleClose}/>\n\n </Container>\n )\n};\n","import { FireCMSPlugin, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { UserManagementProvider } from \"./UserManagementProvider\";\nimport { UserManagement } from \"./types\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { DEFAULT_ROLES } from \"./components/roles/default_roles\";\n\nexport function useUserManagementPlugin<USER extends User = any>({ userManagement }: {\n userManagement: UserManagement<USER>,\n}): FireCMSPlugin {\n\n const noUsers = userManagement.users.length === 0;\n const noRoles = userManagement.roles.length === 0;\n\n return {\n key: \"user_management\",\n loading: userManagement.loading,\n userManagement:{\n ...userManagement,\n },\n homePage: {\n additionalChildrenStart: noUsers || noRoles\n ? <IntroWidget\n noUsers={noUsers}\n noRoles={noRoles}\n userManagement={userManagement}/>\n : undefined\n },\n provider: {\n Component: UserManagementProvider,\n props: {\n userManagement\n }\n }\n }\n}\n\nexport function IntroWidget({\n noUsers,\n noRoles,\n userManagement\n }: {\n noUsers: boolean;\n noRoles: boolean;\n userManagement: UserManagement<any>;\n}) {\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const buttonLabel = noUsers && noRoles\n ? \"Create default roles and add current user as admin\"\n : noUsers\n ? \"Add current user as admin\"\n : noRoles ? \"Create default roles\" : undefined;\n\n return (\n <Paper\n className={\"my-4 flex flex-col px-4 py-6 bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>Create your users and roles</Typography>\n <Typography>\n You have no users or roles defined. You can create default roles and add the current user as admin.\n </Typography>\n <Button\n variant={\"outlined\"}\n onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n if (noUsers) {\n userManagement.saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{\n id: \"admin\",\n name: \"Admin\"\n }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message\n })\n });\n }\n if (noRoles) {\n DEFAULT_ROLES.forEach((role) => {\n userManagement.saveRole(role);\n });\n }\n }}>\n <AddIcon/>\n {buttonLabel}\n </Button>\n </Paper>\n );\n\n}\n","import { CMSView } from \"@firecms/core\";\nimport { RolesView, UsersView } from \"./components\";\n\nexport const userManagementAdminViews: CMSView[] = [\n {\n path: \"users\",\n name: \"CMS Users\",\n group: \"Admin\",\n icon: \"face\",\n view: <UsersView/>\n },\n {\n path: \"roles\",\n name: \"Roles\",\n group: \"Admin\",\n icon: \"gpp_good\",\n view: <RolesView/>\n }\n]\n"],"names":["RESERVED_GROUPS","DEFAULT_PERMISSIONS","read","edit","create","delete","resolveUserRolePermissions","collection","user","roles","ownerId","uid","basePermissions","map","role","resolveCollectionRole","id","reduce","mergePermissions","isAdmin","defaultPermissions","thisCollectionPermissions","collectionPermissions","permA","permB","getUserRoles","fireCMSUser","undefined","find","r","filter","Boolean","areRolesEqual","rolesA","rolesB","rolesAIds","rolesBIds","length","every","includes","cacheDelegatedLoginToken","projectId","delegatedToken","data","parseJwt","expiry","Date","exp","localStorage","setItem","JSON","stringify","token","getDelegatedLoginTokenFromCache","entry","getItem","parse","clearDelegatedLoginTokensCache","i","key","startsWith","removeItem","Error","base64Url","split","base64","replace","jsonPayload","decodeURIComponent","window","atob","c","charCodeAt","toString","slice","join","darkenColor","hexColor","darkenBy","test","color","substring","parseInt","g","b","Math","floor","hexToRgbaWithOpacity","opacity","alpha","useBuildUserManagement","authController","dataSourceDelegate","rolesProp","usersPath","rolesPath","allowDefaultRolesCreation","includeCollectionConfigPermissions","rolesDefinedInCode","rolesLoading","setRolesLoading","React","useState","usersLoading","setUsersLoading","setRoles","usersWithRoleIds","setUsersWithRoleIds","users","u","rolesError","setRolesError","usersError","setUsersError","_usersLoading","_rolesLoading","loading","useEffect","initialised","initialLoading","listenCollection","path","onUpdate","entities","console","debug","newRoles","entityToRoles","equal","e","error","onError","newUsers","entitiesToUsers","saveUser","useCallback","roleIds","email","toLowerCase","trim","userExists","created_on","entity","values","deleteEntity","then","catch","saveEntity","status","entityId","removeUndefined","saveRole","roleData","deleteUser","deleteRole","defineRolesFor","mgmtUser","authenticator","warn","userRoles","some","userRoleIds","setUserRoles","getUser","docs","doc","newVar","updated_on","UserManagementContext","createContext","UserManagementProvider","t0","$","_c","children","userManagement","t1","useUserManagement","useContext","RoleChip","colorScheme","getColorSchemeForSeed","name","Chip","RoleYupSchema","Yup","object","shape","string","required","canRoleBeEdited","loggedUser","loggedUserIsAdmin","RolesDetailsForm","open","editable","handleClose","collections","isNewRole","loggedInUser","useAuthController","savingError","setSavingError","role_0","onRoleUpdated","t2","t3","role_1","formexController","resetForm","e_0","t4","Promise","resolve","initialValues","onSubmit","validation","_temp3","formex","useCreateFormex","isSubmitting","touched","values_0","errors","errors_0","handleChange","setFieldValue","dirty","setFieldTouched","defaultCreate","defaultRead","defaultEdit","defaultDelete","t5","idTouched","getIn","toSnakeCase","t6","t7","t8","Symbol","for","display","flexDirection","position","height","DialogTitle","t9","t10","t11","TextField","t12","t13","jsx","FieldCaption","t14","jsxs","t15","t16","t17","e_2","t18","t19","t20","t21","t22","TableHeader","TableCell","t23","t24","t25","t26","checked","t27","Tooltip","Checkbox","t28","t29","t30","checked_0","t31","t32","t33","t34","checked_1","t35","t36","t37","t38","checked_2","t39","t40","t41","TableRow","t42","col","checked_3","checked_4","checked_5","checked_6","Button","t43","Paper","Table","TableBody","t44","t45","t46","config","t47","t48","event","target","value","t49","createCollections","t50","t51","SelectItem","t52","Select","_temp4","t53","t54","t55","t56","t57","t58","event_0","t59","editCollections","t60","t61","t62","t63","_temp5","t64","t65","t66","t67","t68","t69","event_1","t70","deleteCollections","t71","t72","t73","t74","_temp6","t75","t76","t77","t78","DialogContent","t79","Typography","message","t80","t81","t82","t83","LoadingButton","t84","DialogActions","t85","handleSubmit","t86","Formex","t87","Dialog","value_1","value_0","validate","abortEarly","_temp","_temp2","e_1","inner","forEach","DEFAULT_ROLES","RolesTable","onRoleClicked","roleToBeDeleted","setRoleToBeDeleted","deleteInProgress","setDeleteInProgress","canCreateAll","canReadAll","canUpdateAll","canDeleteAll","width","IconButton","stopPropagation","DeleteIcon","CenteredView","finally","ConfirmationDialog","RolesView","memo","useNavigationController","dialogOpen","setDialogOpen","selectedRole","setSelectedRole","AddIcon","Container","UserYupSchema","displayName","array","min","canUserBeEdited","prevUser","admins","didRolesChange","adminRoleRemoved","UserDetailsForm","userProp","snackbarController","useSnackbarController","isNewUser","savedUser","reject","onUserUpdated","type","submitCount","open_0","r_1","_temp7","MultiSelect","userRole","MultiSelectItem","r_0","acc","UsersTable","onUserClicked","customizationController","useCustomizationController","dateUtilsLocale","locale","locales","dateFormat","dateTimeFormat","defaultDateFormat","userToBeDeleted","setUserToBeDeleted","formattedDate","format","photoURL","providerId","isAnonymous","error_0","UsersView","selectedUser","setSelectedUser","newFormKey","setNewFormKey","handleAddUser","k","useUserManagementPlugin","noUsers","noRoles","additionalChildrenStart","Component","props","homePage","provider","IntroWidget","buttonLabel","userManagementAdminViews","group","icon","view"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/utils/permissions.ts","../src/utils/local_storage.ts","../src/utils/colors.ts","../src/hooks/useBuildUserManagement.tsx","../src/UserManagementProvider.tsx","../src/hooks/useUserManagement.tsx","../src/components/roles/RoleChip.tsx","../src/components/roles/RolesDetailsForm.tsx","../src/components/roles/default_roles.tsx","../src/components/roles/RolesTable.tsx","../src/components/roles/RolesView.tsx","../src/components/users/UserDetailsForm.tsx","../src/components/users/UsersTable.tsx","../src/components/users/UsersView.tsx","../src/useUserManagementPlugin.tsx","../src/admin_views.tsx"],"sourcesContent":["import { EntityCollection, Permissions, Role, User } from \"@firecms/core\";\n\nexport const RESERVED_GROUPS = [\"Admin\"];\n\nconst DEFAULT_PERMISSIONS = {\n read: false,\n edit: false,\n create: false,\n delete: false\n};\n\nexport function resolveUserRolePermissions<USER extends User>\n({\n collection,\n user\n }: {\n collection: EntityCollection<any>,\n user: USER | null\n}): Permissions {\n\n const roles = user?.roles;\n if (!roles) {\n return DEFAULT_PERMISSIONS;\n } else if (collection.ownerId === user?.uid) {\n return {\n read: true,\n create: true,\n edit: true,\n delete: true\n };\n } else {\n const basePermissions = {\n read: false,\n create: false,\n edit: false,\n delete: false\n };\n\n return roles\n .map(role => resolveCollectionRole(role, collection.id))\n .reduce(mergePermissions, basePermissions);\n }\n}\n\nfunction resolveCollectionRole(role: Role, id: string): Permissions {\n\n const basePermissions = {\n read: (role.isAdmin || role.defaultPermissions?.read) ?? false,\n create: (role.isAdmin || role.defaultPermissions?.create) ?? false,\n edit: (role.isAdmin || role.defaultPermissions?.edit) ?? false,\n delete: (role.isAdmin || role.defaultPermissions?.delete) ?? false\n };\n const thisCollectionPermissions = role.collectionPermissions?.[id];\n if (thisCollectionPermissions) {\n return mergePermissions(thisCollectionPermissions, basePermissions);\n } else if (role.defaultPermissions) {\n return mergePermissions(role.defaultPermissions, basePermissions);\n } else {\n return basePermissions;\n }\n}\n\nconst mergePermissions = (permA: Permissions, permB: Permissions) => {\n return {\n read: permA.read || permB.read,\n create: permA.create || permB.create,\n edit: permA.edit || permB.edit,\n delete: permA.delete || permB.delete\n };\n}\n\nexport function getUserRoles(roles: Role[], fireCMSUser: User): Role[] | undefined {\n return !roles\n ? undefined\n : (fireCMSUser.roles\n ? fireCMSUser.roles\n .map(role => roles.find((r) => r.id === role.id))\n .filter(Boolean) as Role[]\n : []);\n}\n\nexport const areRolesEqual = (rolesA: Role[], rolesB: Role[]) => {\n const rolesAIds = rolesA.map(r => r.id);\n const rolesBIds = rolesB.map(r => r.id);\n return rolesAIds.length === rolesB.length && rolesAIds.every((role) => rolesBIds.includes(role));\n}\n","// const tokens = new Map<string, {\n// token: string,\n// expiry: Date\n// }>();\n\nexport function cacheDelegatedLoginToken(projectId: string, delegatedToken?: string) {\n if (!delegatedToken) {\n return;\n }\n\n const data = parseJwt(delegatedToken);\n // @ts-ignore\n const expiry = new Date(data.exp * 1000);\n localStorage.setItem(`auth_token::${projectId}`, JSON.stringify({\n token: delegatedToken,\n expiry\n }));\n\n}\n\nexport function getDelegatedLoginTokenFromCache(projectId: string) {\n const entry = localStorage.getItem(`auth_token::${projectId}`);\n if (entry) {\n const data = JSON.parse(entry);\n data.expiry = new Date(data.expiry);\n if (data.expiry > new Date()) {\n return data.token;\n }\n }\n return undefined;\n}\n\nexport function clearDelegatedLoginTokensCache() {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(\"auth_token::\")) {\n localStorage.removeItem(key);\n }\n }\n}\n\nfunction parseJwt(token?: string): object {\n if (!token) {\n throw new Error(\"No JWT token\");\n }\n const base64Url = token.split(\".\")[1];\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const jsonPayload = decodeURIComponent(window.atob(base64).split(\"\").map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(\"\"));\n\n return JSON.parse(jsonPayload);\n}\n","export function darkenColor(hexColor: string, darkenBy = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n let r = parseInt(color[0] + color[1], 16);\n let g = parseInt(color[2] + color[3], 16);\n let b = parseInt(color[4] + color[5], 16);\n\n // Reduce each color component by the specified percentage (darkenBy)\n r = Math.floor(r * (1 - darkenBy / 100));\n g = Math.floor(g * (1 - darkenBy / 100));\n b = Math.floor(b * (1 - darkenBy / 100));\n\n // Recombine into hex and return\n return \"#\" +\n (r < 16 ? \"0\" : \"\") + r.toString(16) +\n (g < 16 ? \"0\" : \"\") + g.toString(16) +\n (b < 16 ? \"0\" : \"\") + b.toString(16);\n}\n\nexport function hexToRgbaWithOpacity(hexColor: string, opacity = 10): string {\n // Check input validity\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(hexColor)) {\n throw new Error(\"Invalid color format\");\n }\n\n // If shorthand form, convert to full form\n let color = hexColor.substring(1).split(\"\");\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]];\n }\n\n // Convert to RGB values\n const r = parseInt(color[0] + color[1], 16);\n const g = parseInt(color[2] + color[3], 16);\n const b = parseInt(color[4] + color[5], 16);\n\n // Convert opacity to a decimal for CSS\n const alpha = opacity / 100;\n\n // Construct and return the RGBA color\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import React, { useCallback, useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { UserManagement } from \"../types\";\nimport {\n AuthController,\n Authenticator,\n DataSourceDelegate,\n Entity,\n PermissionsBuilder,\n removeUndefined,\n Role,\n User\n} from \"@firecms/core\";\nimport { resolveUserRolePermissions } from \"../utils\";\n\ntype UserWithRoleIds<USER extends User = any> = Omit<USER, \"roles\"> & { roles: string[] };\n\nexport interface UserManagementParams<CONTROLLER extends AuthController<any> = AuthController<any>> {\n\n authController: CONTROLLER;\n\n /**\n * The delegate in charge of persisting the data.\n */\n dataSourceDelegate?: DataSourceDelegate;\n\n /**\n * Path where the plugin users configuration is stored.\n * Default: __FIRECMS/config/users\n * You can specify a different path if you want to store the user management configuration in a different place.\n * Please keep in mind that the FireCMS users are not necessarily the same as the Firebase users (but they can be).\n * The path should be relative to the root of the database, and should always have an odd number of segments.\n */\n usersPath?: string;\n\n /**\n * Path where the plugin roles configuration is stored.\n * Default: __FIRECMS/config/roles\n */\n rolesPath?: string;\n\n /**\n * The roles that are available in the user management system.\n * If you provide this, the user management system will not fetch the roles from the database.\n */\n roles?: Role[];\n\n /**\n * If there are no roles in the database, provide a button to create the default roles.\n */\n allowDefaultRolesCreation?: boolean;\n\n /**\n * Include the collection config permissions in the user management system.\n */\n includeCollectionConfigPermissions?: boolean;\n\n}\n\n/**\n * This hook is used to build a user management object that can be used to\n * manage users and roles in a Firestore backend.\n * @param authController\n * @param dataSourceDelegate\n * @param usersPath\n * @param rolesPath\n * @param roles\n * @param allowDefaultRolesCreation\n * @param includeCollectionConfigPermissions\n */\nexport function useBuildUserManagement<CONTROLLER extends AuthController<any> = AuthController<any>,\n USER extends User = CONTROLLER extends AuthController<infer U> ? U : any>\n({\n authController,\n dataSourceDelegate,\n roles: rolesProp,\n usersPath = \"__FIRECMS/config/users\",\n rolesPath = \"__FIRECMS/config/roles\",\n allowDefaultRolesCreation,\n includeCollectionConfigPermissions\n }: UserManagementParams<CONTROLLER>): UserManagement<USER> & CONTROLLER {\n\n if (!authController) {\n throw Error(\"useBuildUserManagement: You need to provide an authController since version 3.0.0-beta.11. Check https://firecms.co/docs/pro/migrating_from_v3_beta\");\n }\n\n const rolesDefinedInCode = (rolesProp ?? [])?.length > 0;\n const [rolesLoading, setRolesLoading] = React.useState<boolean>(!rolesDefinedInCode);\n const [usersLoading, setUsersLoading] = React.useState<boolean>(true);\n const [roles, setRoles] = React.useState<Role[]>(rolesProp ?? []);\n const [usersWithRoleIds, setUsersWithRoleIds] = React.useState<UserWithRoleIds<USER>[]>([]);\n\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as USER);\n\n const [rolesError, setRolesError] = React.useState<Error | undefined>();\n const [usersError, setUsersError] = React.useState<Error | undefined>();\n\n const _usersLoading = usersLoading;\n const _rolesLoading = rolesLoading;\n\n const loading = _rolesLoading || _usersLoading;\n\n useEffect(() => {\n if (rolesDefinedInCode) return;\n if (!dataSourceDelegate || !rolesPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) return;\n if (authController?.initialLoading) return;\n\n setRolesLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: rolesPath,\n onUpdate(entities: Entity<any>[]): void {\n setRolesError(undefined);\n console.debug(\"Updating roles\", entities);\n try {\n const newRoles = entityToRoles(entities);\n if (!equal(newRoles, roles)) {\n setRoles(newRoles);\n }\n } catch (e) {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e as Error);\n }\n setRolesLoading(false);\n },\n onError(e: any): void {\n setRoles([]);\n console.error(\"Error loading roles\", e);\n setRolesError(e);\n setRolesLoading(false);\n }\n });\n\n }, [rolesDefinedInCode, dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, rolesPath]);\n\n useEffect(() => {\n if (!dataSourceDelegate || !usersPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) {\n return;\n }\n if (authController?.initialLoading) {\n return;\n }\n\n setUsersLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: usersPath,\n onUpdate(entities: Entity<any>[]): void {\n console.debug(\"Updating users\", entities);\n setUsersError(undefined);\n try {\n const newUsers = entitiesToUsers(entities);\n // if (!equal(newUsers, usersWithRoleIds))\n setUsersWithRoleIds(newUsers);\n } catch (e) {\n setUsersWithRoleIds([]);\n console.error(\"Error loading users\", e);\n setUsersError(e as Error);\n }\n setUsersLoading(false);\n },\n onError(e: any): void {\n console.error(\"Error loading users\", e);\n setUsersWithRoleIds([]);\n setUsersError(e);\n setUsersLoading(false);\n }\n });\n\n }, [dataSourceDelegate?.initialised, authController?.initialLoading, authController?.user?.uid, usersPath]);\n\n const saveUser = useCallback(async (user: USER): Promise<USER> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n\n console.debug(\"Persisting user\", user);\n\n const roleIds = user.roles?.map(r => r.id);\n const email = user.email?.toLowerCase().trim();\n if (!email) throw Error(\"Email is required\");\n\n const userExists = users.find(u => u.email?.toLowerCase() === email);\n const data = {\n ...user,\n roles: roleIds ?? []\n };\n if (!userExists) {\n // @ts-ignore\n data.created_on = new Date();\n }\n // delete the previous user entry if it exists and the uid has changed\n if (userExists && userExists.uid !== user.uid) {\n const entity: Entity<any> = {\n values: {},\n path: usersPath,\n id: userExists.uid\n }\n await dataSourceDelegate.deleteEntity({ entity })\n .then(() => {\n console.debug(\"Deleted previous user\", userExists);\n })\n .catch(e => {\n console.error(\"Error deleting user\", e);\n });\n\n }\n\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: usersPath,\n entityId: email,\n values: removeUndefined(data)\n }).then(() => user);\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const saveRole = useCallback((role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Persisting role\", role);\n const {\n id,\n ...roleData\n } = role;\n return dataSourceDelegate.saveEntity({\n status: \"existing\",\n path: rolesPath,\n entityId: id,\n values: removeUndefined(roleData)\n }).then(() => {\n return;\n });\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const deleteUser = useCallback(async (user: User): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!usersPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", user);\n const { uid } = user;\n const entity: Entity<any> = {\n path: usersPath,\n id: uid,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [usersPath, dataSourceDelegate?.initialised]);\n\n const deleteRole = useCallback(async (role: Role): Promise<void> => {\n if (!dataSourceDelegate) throw Error(\"useBuildUserManagement Firebase not initialised\");\n if (!rolesPath) throw Error(\"useBuildUserManagement Firestore not initialised\");\n console.debug(\"Deleting\", role);\n const { id } = role;\n const entity: Entity<any> = {\n path: rolesPath,\n id: id,\n values: {}\n };\n await dataSourceDelegate.deleteEntity({ entity })\n }, [rolesPath, dataSourceDelegate?.initialised]);\n\n const collectionPermissions: PermissionsBuilder = useCallback(({\n collection,\n user\n }) =>\n resolveUserRolePermissions({\n collection,\n user\n }), []);\n\n const defineRolesFor: ((user: User) => Role[] | undefined) = useCallback((user) => {\n if (!usersWithRoleIds) throw Error(\"Users not loaded\");\n const users = usersWithRoleIds.map(u => ({\n ...u,\n roles: roles.filter(r => u.roles?.includes(r.id))\n }) as User);\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n return mgmtUser?.roles;\n }, [roles, usersWithRoleIds]);\n\n const authenticator: Authenticator<USER> = useCallback(({ user }) => {\n\n if (loading) {\n return false;\n }\n if (user === null) {\n console.warn(\"User is null, returning\");\n return false;\n }\n\n if (users.length === 0) {\n console.warn(\"No users created yet\");\n return true; // If there are no users created yet, we allow access to every user\n }\n\n const mgmtUser = users.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());\n if (mgmtUser) {\n // check if the uid is updated in the user management system\n if (mgmtUser.uid !== user.uid) {\n console.warn(\"User uid has changed, updating user in user management system\");\n saveUser({\n ...mgmtUser,\n uid: user.uid\n }).then(() => {\n console.debug(\"User updated in user management system\", mgmtUser);\n }).catch(e => {\n console.error(\"Error updating user in user management system\", e);\n });\n }\n console.debug(\"User found in user management system\", mgmtUser);\n return true;\n }\n\n throw Error(\"Could not find a user with the provided email in the user management system.\");\n }, [loading, users]);\n\n const userRoles = authController.user ? defineRolesFor(authController.user) : undefined;\n const isAdmin = (userRoles ?? []).some(r => r.id === \"admin\");\n\n const userRoleIds = userRoles?.map(r => r.id);\n useEffect(() => {\n console.debug(\"Setting user roles\", { userRoles, roles });\n authController.setUserRoles?.(userRoles ?? []);\n }, [userRoleIds]);\n\n const getUser = useCallback((uid: string): USER | null => {\n if (!users) return null;\n const user = users.find(u => u.uid === uid);\n return user ?? null;\n }, [users]);\n\n return {\n loading,\n roles,\n users,\n saveUser,\n saveRole,\n rolesError,\n deleteUser,\n deleteRole,\n usersError,\n isAdmin,\n allowDefaultRolesCreation: allowDefaultRolesCreation === undefined ? true : allowDefaultRolesCreation,\n includeCollectionConfigPermissions: Boolean(includeCollectionConfigPermissions),\n collectionPermissions,\n defineRolesFor,\n authenticator,\n ...authController,\n initialLoading: authController.initialLoading || loading,\n userRoles: userRoles,\n getUser,\n user: authController.user ? {\n ...authController.user,\n roles: userRoles\n } : null\n }\n}\n\nconst entitiesToUsers = (docs: Entity<Omit<UserWithRoleIds, \"id\">>[]): (UserWithRoleIds)[] => {\n return docs.map((doc) => {\n const data = doc.values as any;\n const newVar = {\n uid: doc.id,\n ...data,\n created_on: data?.created_on,\n updated_on: data?.updated_on\n };\n return newVar as (UserWithRoleIds);\n });\n}\n\nconst entityToRoles = (entities: Entity<Omit<Role, \"id\">>[]): Role[] => {\n return entities.map((doc) => ({\n id: doc.id,\n ...doc.values\n } as Role));\n}\n","import React, { PropsWithChildren } from \"react\";\nimport { UserManagement } from \"./types\";\nimport { User } from \"@firecms/core\";\n\nexport const UserManagementContext = React.createContext<UserManagement<any>>({} as any);\n\nexport interface UserManagementProviderProps<U extends User = User> {\n userManagement: UserManagement<U>\n}\n\nexport function UserManagementProvider<U extends User = User>({\n children,\n userManagement\n }: PropsWithChildren<UserManagementProviderProps<U>>) {\n return (\n <UserManagementContext.Provider value={userManagement}>\n {children}\n </UserManagementContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { UserManagement } from \"../types\";\nimport { UserManagementContext } from \"../UserManagementProvider\";\nimport { User } from \"@firecms/core\";\nexport const useUserManagement = <USER extends User>() => useContext<UserManagement<USER>>(UserManagementContext);\n","import { Chip, getColorSchemeForSeed } from \"@firecms/ui\";\nimport { Role } from \"@firecms/core\";\n\nexport type RoleChipProps = {\n role: Role;\n}\n\nexport function RoleChip({ role }: RoleChipProps) {\n let colorScheme;\n if (role.isAdmin) {\n colorScheme = \"blueDarker\";\n } else if (role.id === \"editor\") {\n colorScheme = \"yellowLight\";\n } else if (role.id === \"viewer\") {\n colorScheme = \"grayLight\";\n } else {\n colorScheme = getColorSchemeForSeed(role.id);\n }\n\n return (\n <Chip\n colorScheme={colorScheme}\n key={role.id}>\n {role.name}\n </Chip>\n );\n\n}\n","import React, { useCallback, useState } from \"react\";\nimport * as Yup from \"yup\";\n\nimport { EntityCollection, FieldCaption, Role, toSnakeCase, useAuthController, User, } from \"@firecms/core\";\nimport {\n Button,\n Checkbox,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n Paper,\n Select,\n SelectItem,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n TextField,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { Formex, getIn, useCreateFormex } from \"@firecms/formex\";\n\nexport const RoleYupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\")\n});\n\nfunction canRoleBeEdited(loggedUser: User) {\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n if (!loggedUserIsAdmin) {\n throw new Error(\"Only admins can edit roles\");\n }\n\n return true;\n}\n\nexport function RolesDetailsForm({\n open,\n role,\n editable,\n handleClose,\n collections\n }: {\n open: boolean,\n editable?: boolean,\n role?: Role,\n handleClose: () => void,\n collections?: EntityCollection[]\n}) {\n\n const { saveRole } = useUserManagement();\n const isNewRole = !role;\n const {\n user: loggedInUser\n } = useAuthController();\n\n const [savingError, setSavingError] = useState<Error | undefined>();\n\n const onRoleUpdated = useCallback((role: Role) => {\n setSavingError(undefined);\n if (!loggedInUser) throw new Error(\"User not found\");\n canRoleBeEdited(loggedInUser);\n return saveRole(role);\n }, [saveRole, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: role ?? {\n name: \"\"\n } as Role,\n onSubmit: (role: Role, formexController) => {\n try {\n return onRoleUpdated(role)\n .then(() => {\n formexController.resetForm({\n values: role\n });\n handleClose();\n })\n .catch(e => {\n setSavingError(e);\n });\n } catch (e: any) {\n setSavingError(e);\n return Promise.resolve();\n }\n },\n validation: (values) => {\n return RoleYupSchema.validate(values, { abortEarly: false })\n .then(() => ({}))\n .catch((e) => {\n const errors: Record<string, string> = {};\n e.inner.forEach((error: any) => {\n errors[error.path] = error.message;\n });\n return errors;\n });\n }\n\n });\n\n const {\n isSubmitting,\n touched,\n values,\n errors,\n handleChange,\n setFieldValue,\n dirty,\n setFieldTouched\n } = formex;\n\n const isAdmin = values.isAdmin ?? false;\n const defaultCreate = values.defaultPermissions?.create ?? false;\n const defaultRead = values.defaultPermissions?.read ?? false;\n const defaultEdit = values.defaultPermissions?.edit ?? false;\n const defaultDelete = values.defaultPermissions?.delete ?? false;\n\n React.useEffect(() => {\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && values.name) {\n setFieldValue(\"id\", toSnakeCase(values.name))\n }\n }, [touched, values.name]);\n\n return (\n <Dialog\n open={open}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form noValidate\n autoComplete={\"off\"}\n onSubmit={formex.handleSubmit}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n Role\n </DialogTitle>\n <DialogContent className=\"flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12 md:col-span-8\"}>\n <TextField\n name=\"name\"\n required\n error={touched.name && Boolean(errors.name)}\n value={values.name}\n disabled={isAdmin || !editable}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <TextField\n name=\"id\"\n required\n error={touched.id && Boolean(errors.id)}\n value={values.id}\n disabled={!isNewRole || !editable}\n onChange={(e) => {\n handleChange(e);\n setFieldTouched(\"id\", true)\n }}\n aria-describedby=\"id-helper-text\"\n label=\"ID\"\n />\n <FieldCaption>\n {touched.id && Boolean(errors.id) ? errors.id : \"ID of this role\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Paper className=\"bg-inherit overflow-hidden\">\n <Table className={\"w-full rounded-md\"}>\n <TableHeader className={\"rounded-md\"}>\n <TableCell></TableCell>\n <TableCell\n align=\"center\">Create\n entities\n </TableCell>\n <TableCell\n align=\"center\">Read\n entities\n </TableCell>\n <TableCell\n align=\"center\">Update\n entities\n </TableCell>\n <TableCell\n align=\"center\">Delete\n entities\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableHeader>\n\n <TableBody>\n <TableRow>\n <TableCell\n scope=\"row\">\n <strong>All\n collections</strong>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Create entities in collections\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultCreate) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.create\", checked)}\n />\n </Tooltip>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Access all data in every collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultRead) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.read\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Update data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultEdit) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.edit\", checked)}\n />\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Delete data in any collection\">\n <Checkbox\n disabled={isAdmin || !editable}\n checked={(isAdmin || defaultDelete) ?? false}\n onCheckedChange={(checked) => setFieldValue(\"defaultPermissions.delete\", checked)}\n />\n\n </Tooltip>\n </TableCell>\n <TableCell\n align=\"center\">\n </TableCell>\n </TableRow>\n {collections && collections.map((col) => (\n <TableRow key={col.name}>\n <TableCell\n scope=\"row\">\n {col.name}\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultCreate || !editable}\n checked={(isAdmin || defaultCreate || getIn(values, `collectionPermissions.${col.id}.create`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.create`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultRead || !editable}\n checked={(isAdmin || defaultRead || getIn(values, `collectionPermissions.${col.id}.read`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.read`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultEdit || !editable}\n checked={(isAdmin || defaultEdit || getIn(values, `collectionPermissions.${col.id}.edit`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.edit`, checked)}/>\n </TableCell>\n <TableCell\n align=\"center\">\n <Checkbox\n disabled={isAdmin || defaultDelete || !editable}\n checked={(isAdmin || defaultDelete || getIn(values, `collectionPermissions.${col.id}.delete`)) ?? false}\n onCheckedChange={(checked) => setFieldValue(`collectionPermissions.${col.id}.delete`, checked)}/>\n </TableCell>\n\n <TableCell\n align=\"center\">\n <Tooltip\n title=\"Allow all permissions in this collections\">\n <Button\n className={\"color-inherit\"}\n onClick={() => {\n setFieldValue(`collectionPermissions.${col.id}.create`, true);\n setFieldValue(`collectionPermissions.${col.id}.read`, true);\n setFieldValue(`collectionPermissions.${col.id}.edit`, true);\n setFieldValue(`collectionPermissions.${col.id}.delete`, true);\n }}\n disabled={isAdmin || !editable}\n variant={\"text\"}>\n All\n </Button>\n\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Paper>\n <FieldCaption>\n You can customise the permissions\n that the users related to this\n role can perform in the entities\n of each collection\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n error={touched.config && Boolean(errors.config)}\n size={\"large\"}\n fullWidth={true}\n id=\"createCollections\"\n name=\"createCollections\"\n label=\"Create collections\"\n position={\"item-aligned\"}\n disabled={isAdmin || !editable}\n onChange={(event) => setFieldValue(\"config.createCollections\", event.target.value === \"true\")}\n value={isAdmin || values.config?.createCollections ? \"true\" : \"false\"}\n renderValue={(value: any) => value === \"true\" ? \"Yes\" : \"No\"}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user create collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"editCollections\"\n name=\"editCollections\"\n label=\"Edit collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.editCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.editCollections === \"own\" ? \"own\" : (values.config?.editCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user edit collections\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 md:col-span-4\"}>\n <Select\n size={\"large\"}\n fullWidth={true}\n error={touched.config && Boolean(errors.config)}\n id=\"deleteCollections\"\n name=\"deleteCollections\"\n label=\"Delete collections\"\n disabled={isAdmin || !editable}\n position={\"item-aligned\"}\n onChange={(event) => setFieldValue(\"config.deleteCollections\", event.target.value === \"own\" ? \"own\" : event.target.value === \"true\")}\n value={isAdmin ? \"true\" : (values.config?.deleteCollections === \"own\" ? \"own\" : (values.config?.deleteCollections ? \"true\" : \"false\"))}\n renderValue={(value: any) => value === \"own\" ? \"Own\" : (value === \"true\" ? \"Yes\" : \"No\")}\n >\n <SelectItem\n value={\"true\"}> Yes </SelectItem>\n <SelectItem\n value={\"false\"}> No </SelectItem>\n <SelectItem\n value={\"own\"}> Only\n his/her own </SelectItem>\n </Select>\n\n <FieldCaption>\n {touched.config && Boolean(errors.config) ? errors.config : \"Can the user delete collections\"}\n </FieldCaption>\n\n </div>\n\n </div>\n </DialogContent>\n\n <DialogActions position={\"sticky\"}>\n {savingError && <Typography className={\"text-red-500 dark:text-red-500\"}>\n {savingError.message ?? \"There was an error saving this role\"}\n </Typography>}\n <Button variant={\"text\"}\n color={\"primary\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n >\n {isNewRole ? \"Create role\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n\n </Formex>\n </Dialog>\n );\n}\n","import { Role } from \"@firecms/core\";\n\nexport const DEFAULT_ROLES: Role[] = [\n {\n id: \"admin\",\n name: \"Admin\",\n isAdmin: true\n },\n {\n id: \"editor\",\n name: \"Editor\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: true,\n edit: true,\n delete: true\n },\n config: {\n createCollections: true,\n editCollections: \"own\",\n deleteCollections: \"own\"\n }\n },\n {\n id: \"viewer\",\n name: \"Viewer\",\n isAdmin: false,\n defaultPermissions: {\n read: true,\n create: false,\n edit: false,\n delete: false\n }\n }\n];\n","import { useState } from \"react\";\nimport {\n Button,\n CenteredView,\n Checkbox,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\nimport { ConfirmationDialog, Role } from \"@firecms/core\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"./RoleChip\";\nimport { DEFAULT_ROLES } from \"./default_roles\";\n\nexport function RolesTable({\n onRoleClicked,\n editable\n }: {\n onRoleClicked: (role: Role) => void;\n editable: boolean;\n}) {\n\n const {\n roles,\n saveRole,\n deleteRole,\n allowDefaultRolesCreation\n } = useUserManagement();\n\n const [roleToBeDeleted, setRoleToBeDeleted] = useState<Role | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return <div\n className=\"w-full overflow-auto\">\n <Table className={\"w-full\"}>\n <TableHeader>\n <TableCell header={true} className=\"w-16\"></TableCell>\n <TableCell header={true}>Role</TableCell>\n <TableCell header={true} className={\"items-center\"}>Is Admin</TableCell>\n <TableCell header={true}>Default permissions</TableCell>\n </TableHeader>\n\n <TableBody>\n {roles && roles.map((role) => {\n const canCreateAll = role.isAdmin || role.defaultPermissions?.create;\n const canReadAll = role.isAdmin || role.defaultPermissions?.read;\n const canUpdateAll = role.isAdmin || role.defaultPermissions?.edit;\n const canDeleteAll = role.isAdmin || role.defaultPermissions?.delete;\n return (\n <TableRow\n key={role.name}\n onClick={() => {\n onRoleClicked(role);\n }}\n >\n <TableCell style={{ width: \"64px\" }}>\n {!role.isAdmin &&\n <Tooltip\n asChild={true}\n title={\"Delete this role\"}>\n <IconButton\n size={\"small\"}\n disabled={!editable}\n onClick={(event) => {\n event.stopPropagation();\n return setRoleToBeDeleted(role);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>}\n </TableCell>\n <TableCell>\n <RoleChip role={role}/>\n </TableCell>\n <TableCell className={\"items-center\"}>\n <Checkbox checked={role.isAdmin ?? false}/>\n </TableCell>\n <TableCell>\n <ul>\n {canCreateAll && <li>Create</li>}\n {canReadAll && <li>Read</li>}\n {canUpdateAll && <li>Update</li>}\n {canDeleteAll && <li>Delete</li>}\n </ul>\n </TableCell>\n </TableRow>\n );\n })}\n\n {(!roles || roles.length === 0) && <TableRow>\n <TableCell colspan={4}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n You don&apos;t have any roles yet.\n </Typography>\n {allowDefaultRolesCreation && <Button variant={\"outlined\"}\n onClick={() => {\n DEFAULT_ROLES.forEach((role) => {\n saveRole(role);\n });\n }}>\n Create default roles\n </Button>}\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n\n </Table>\n\n <ConfirmationDialog\n open={Boolean(roleToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (roleToBeDeleted) {\n setDeleteInProgress(true);\n deleteRole(roleToBeDeleted)\n .then(() => {\n setRoleToBeDeleted(undefined);\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setRoleToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this role?</>}/>\n\n </div>;\n}\n","import React, { useCallback, useState } from \"react\";\n\nimport { Role, useNavigationController } from \"@firecms/core\";\nimport { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\nimport { RolesTable } from \"./RolesTable\";\nimport { RolesDetailsForm } from \"./RolesDetailsForm\";\n\nexport const RolesView = React.memo(\n function RolesView({ children }: { children?: React.ReactNode }) {\n\n const { collections } = useNavigationController();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedRole, setSelectedRole] = useState<Role | undefined>();\n\n const onRoleClicked = useCallback((user: Role) => {\n setDialogOpen(true);\n setSelectedRole(user);\n }, []);\n\n const handleClose = () => {\n setSelectedRole(undefined);\n setDialogOpen(false);\n };\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Roles\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add role\n </Button>\n </div>\n\n <RolesTable onRoleClicked={onRoleClicked} editable={true}/>\n\n <RolesDetailsForm\n key={selectedRole?.id ?? \"new\"}\n open={dialogOpen}\n role={selectedRole}\n editable={true}\n collections={collections}\n handleClose={handleClose}/>\n\n </Container>\n )\n });\n","import React, { useCallback } from \"react\";\nimport * as Yup from \"yup\";\nimport {\n Button,\n CheckIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LoadingButton,\n MultiSelect,\n MultiSelectItem,\n TextField,\n} from \"@firecms/ui\";\nimport { FieldCaption, Role, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { Formex, useCreateFormex } from \"@firecms/formex\";\n\nimport { areRolesEqual } from \"../../utils\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\n\nexport const UserYupSchema = Yup.object().shape({\n displayName: Yup.string().required(\"Required\"),\n email: Yup.string().email().required(\"Required\"),\n roles: Yup.array().min(1)\n});\n\nfunction canUserBeEdited(loggedUser: User, user: User, users: User[], roles: Role[], prevUser?: User) {\n const admins = users.filter(u => u.roles?.map(r => r.id).includes(\"admin\"));\n const loggedUserIsAdmin = loggedUser.roles?.map(r => r.id).includes(\"admin\");\n const didRolesChange = !prevUser || !areRolesEqual(prevUser.roles ?? [], user.roles ?? []);\n\n if (didRolesChange && !loggedUserIsAdmin) {\n throw new Error(\"Only admins can change roles\");\n }\n\n // was the admin role removed\n const adminRoleRemoved = prevUser && prevUser.roles?.map(r => r.id).includes(\"admin\") && !user.roles?.map(r => r.id).includes(\"admin\");\n\n // avoid removing the last admin\n if (adminRoleRemoved && admins.length === 1) {\n throw new Error(\"There must be at least one admin\");\n }\n return true;\n}\n\nexport function UserDetailsForm({\n open,\n user: userProp,\n handleClose\n }: {\n open: boolean,\n user?: User,\n handleClose: () => void\n}) {\n\n const snackbarController = useSnackbarController();\n const {\n user: loggedInUser\n } = useAuthController();\n const {\n saveUser,\n users,\n roles,\n } = useUserManagement();\n const isNewUser = !userProp;\n\n const onUserUpdated = useCallback((savedUser: User): Promise<User> => {\n if (!loggedInUser) {\n throw new Error(\"Logged user not found\");\n }\n try {\n canUserBeEdited(loggedInUser, savedUser, users, roles, userProp);\n return saveUser(savedUser);\n } catch (e: any) {\n return Promise.reject(e);\n }\n }, [roles, saveUser, userProp, users, loggedInUser]);\n\n const formex = useCreateFormex({\n initialValues: userProp ?? {\n displayName: \"\",\n email: \"\",\n roles: roles.filter(r => r.id === \"editor\")\n } as User,\n validation: (values) => {\n return UserYupSchema.validate(values, { abortEarly: false })\n .then(() => {\n return {};\n }).catch((e) => {\n return e.inner.reduce((acc: any, error: any) => {\n acc[error.path] = error.message;\n return acc;\n }, {});\n });\n },\n onSubmit: (user: User, formexController) => {\n\n return onUserUpdated(user)\n .then(() => {\n handleClose();\n formexController.resetForm({\n values: user\n });\n }).catch((e) => {\n snackbarController.open({\n type: \"error\",\n message: e.message\n });\n });\n }\n });\n\n const {\n isSubmitting,\n touched,\n handleChange,\n values,\n errors,\n setFieldValue,\n dirty,\n handleSubmit,\n submitCount\n } = formex;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open ? handleClose() : undefined}\n maxWidth={\"4xl\"}\n >\n <Formex value={formex}>\n <form\n onSubmit={handleSubmit}\n autoComplete={\"off\"}\n noValidate\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n height: \"100%\"\n }}>\n\n <DialogTitle variant={\"h4\"} gutterBottom={false}>\n User\n </DialogTitle>\n <DialogContent className=\"h-full flex-grow\">\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n name=\"displayName\"\n required\n error={submitCount > 0 && Boolean(errors.displayName)}\n value={values.displayName ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"name-helper-text\"\n label=\"Name\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.displayName) ? errors.displayName : \"Name of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n required\n error={submitCount > 0 && Boolean(errors.email)}\n name=\"email\"\n value={values.email ?? \"\"}\n onChange={handleChange}\n aria-describedby=\"email-helper-text\"\n label=\"Email\"\n />\n <FieldCaption>\n {submitCount > 0 && Boolean(errors.email) ? errors.email : \"Email of this user\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <MultiSelect\n className={\"w-full\"}\n label=\"Roles\"\n value={values.roles?.map(r => r.id) ?? []}\n onValueChange={(value: string[]) => setFieldValue(\"roles\", value.map(id => roles.find(r => r.id === id) as Role))}\n // renderValue={(value: string) => {\n // const userRole = roles\n // .find((role) => role.id === value);\n // if (!userRole) return null;\n // return <div className=\"flex flex-wrap space-x-2 space-y-2\">\n // <RoleChip key={userRole?.id} role={userRole}/>\n // </div>;\n // }}\n >\n {roles.map(userRole => <MultiSelectItem key={userRole.id}\n value={userRole.id}>\n <RoleChip key={userRole?.id} role={userRole}/>\n </MultiSelectItem>)}\n </MultiSelect>\n </div>\n\n </div>\n\n </DialogContent>\n\n <DialogActions>\n\n <Button variant={\"text\"}\n color={\"primary\"}\n onClick={() => {\n handleClose();\n }}>\n Cancel\n </Button>\n\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={!dirty}\n loading={isSubmitting}\n >\n {isNewUser ? \"Create user\" : \"Update\"}\n </LoadingButton>\n </DialogActions>\n </form>\n </Formex>\n\n </Dialog>\n );\n}\n","import { useState } from \"react\";\n\nimport { format } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\n\nimport {\n defaultDateFormat,\n ConfirmationDialog, Role,\n useAuthController,\n useCustomizationController, User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n Button,\n CenteredView,\n DeleteIcon,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { useUserManagement } from \"../../hooks\";\nimport { RoleChip } from \"../roles\";\nimport { PersistedUser } from \"../../types\";\n\nexport function UsersTable({ onUserClicked }: {\n onUserClicked: (user: User) => void;\n}) {\n\n const {\n users,\n saveUser,\n deleteUser\n } = useUserManagement<PersistedUser>();\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const customizationController = useCustomizationController();\n const dateUtilsLocale = customizationController?.locale ? locales[customizationController?.locale as keyof typeof locales] : undefined;\n const dateFormat: string = customizationController?.dateTimeFormat ?? defaultDateFormat;\n\n const [userToBeDeleted, setUserToBeDeleted] = useState<User | undefined>(undefined);\n const [deleteInProgress, setDeleteInProgress] = useState<boolean>(false);\n\n return (\n <div className=\"overflow-auto\">\n\n <Table className={\"w-full\"}>\n\n <TableHeader>\n <TableCell className=\"truncate w-16\"></TableCell>\n <TableCell>Email</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Roles</TableCell>\n <TableCell>Created on</TableCell>\n </TableHeader>\n <TableBody>\n {users && users.map((user) => {\n\n const userRoles: Role[] | undefined = user.roles;\n\n const formattedDate = user.created_on ? format(user.created_on, dateFormat, { locale: dateUtilsLocale }) : \"\";\n\n return (\n <TableRow\n key={\"row_\" + user.uid}\n onClick={() => {\n onUserClicked(user);\n }}\n >\n <TableCell className={\"w-10\"}>\n <Tooltip\n asChild={true}\n title={\"Delete this user\"}>\n <IconButton\n size={\"small\"}\n onClick={(event) => {\n event.stopPropagation();\n return setUserToBeDeleted(user);\n }}>\n <DeleteIcon/>\n </IconButton>\n </Tooltip>\n </TableCell>\n <TableCell>{user.email}</TableCell>\n <TableCell className={\"font-medium align-left\"}>{user.displayName}</TableCell>\n <TableCell className=\"align-left\">\n {userRoles\n ? <div className=\"flex flex-wrap gap-2\">\n {userRoles.map(userRole =>\n <RoleChip key={userRole?.id} role={userRole}/>\n )}\n </div>\n : null}\n </TableCell>\n <TableCell>{formattedDate}</TableCell>\n </TableRow>\n );\n })}\n\n {(!users || users.length === 0) && <TableRow>\n <TableCell colspan={6}>\n <CenteredView className={\"flex flex-col gap-4 my-8 items-center\"}>\n <Typography variant={\"label\"}>\n There are no users yet\n </Typography>\n <Button variant={\"outlined\"}\n onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{ id: \"admin\", name: \"Admin\" }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message,\n })\n });\n }}>\n\n Add the logged user as an admin\n </Button>\n </CenteredView>\n </TableCell>\n </TableRow>}\n\n </TableBody>\n </Table>\n\n <ConfirmationDialog\n open={Boolean(userToBeDeleted)}\n loading={deleteInProgress}\n onAccept={() => {\n if (userToBeDeleted) {\n setDeleteInProgress(true);\n deleteUser(userToBeDeleted)\n .then(() => {\n setUserToBeDeleted(undefined);\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting user: \" + error.message,\n })\n })\n .finally(() => {\n setDeleteInProgress(false);\n })\n }\n }}\n onCancel={() => {\n setUserToBeDeleted(undefined);\n }}\n title={<>Delete?</>}\n body={<>Are you sure you want to delete this user?</>}/>\n </div>);\n}\n","import { AddIcon, Button, Container, Typography } from \"@firecms/ui\";\n\nimport { UsersTable } from \"./UsersTable\";\nimport { UserDetailsForm } from \"./UserDetailsForm\";\nimport React, { useCallback, useState } from \"react\";\nimport { useUserManagement } from \"../../hooks/useUserManagement\";\nimport { User } from \"@firecms/core\";\n\nexport const UsersView = function UsersView({ children }: { children?: React.ReactNode }) {\n\n const [dialogOpen, setDialogOpen] = useState<boolean>(false);\n const [selectedUser, setSelectedUser] = useState<User | undefined>();\n const [newFormKey, setNewFormKey] = useState<number>(0);\n\n const { users } = useUserManagement();\n\n const onUserClicked = useCallback((user: User) => {\n setSelectedUser(user);\n setDialogOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setDialogOpen(false);\n setSelectedUser(undefined);\n }, []);\n\n const handleAddUser = useCallback(() => {\n setSelectedUser(undefined);\n setNewFormKey(k => k + 1);\n setDialogOpen(true);\n }, []);\n\n return (\n <Container className=\"w-full flex flex-col py-4 gap-4\" maxWidth={\"6xl\"}>\n\n {children}\n\n <div\n className=\"flex items-center mt-12\">\n <Typography gutterBottom variant=\"h4\"\n className=\"flex-grow\"\n component=\"h4\">\n Users\n </Typography>\n <Button\n size={\"large\"}\n startIcon={<AddIcon/>}\n onClick={handleAddUser}>\n Add user\n </Button>\n </div>\n\n <UsersTable onUserClicked={onUserClicked}/>\n\n <UserDetailsForm\n key={selectedUser?.uid ?? `new-${newFormKey}`}\n open={dialogOpen}\n user={selectedUser}\n handleClose={handleClose}/>\n\n </Container>\n )\n};\n","import { FireCMSPlugin, useAuthController, User, useSnackbarController } from \"@firecms/core\";\nimport { UserManagementProvider } from \"./UserManagementProvider\";\nimport { UserManagement } from \"./types\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { DEFAULT_ROLES } from \"./components/roles/default_roles\";\n\nexport function useUserManagementPlugin<USER extends User = any>({ userManagement }: {\n userManagement: UserManagement<USER>,\n}): FireCMSPlugin {\n\n const noUsers = userManagement.users.length === 0;\n const noRoles = userManagement.roles.length === 0;\n\n return {\n key: \"user_management\",\n loading: userManagement.loading,\n userManagement:{\n ...userManagement,\n },\n homePage: {\n additionalChildrenStart: noUsers || noRoles\n ? <IntroWidget\n noUsers={noUsers}\n noRoles={noRoles}\n userManagement={userManagement}/>\n : undefined\n },\n provider: {\n Component: UserManagementProvider,\n props: {\n userManagement\n }\n }\n }\n}\n\nexport function IntroWidget({\n noUsers,\n noRoles,\n userManagement\n }: {\n noUsers: boolean;\n noRoles: boolean;\n userManagement: UserManagement<any>;\n}) {\n\n const authController = useAuthController();\n const snackbarController = useSnackbarController();\n\n const buttonLabel = noUsers && noRoles\n ? \"Create default roles and add current user as admin\"\n : noUsers\n ? \"Add current user as admin\"\n : noRoles ? \"Create default roles\" : undefined;\n\n return (\n <Paper\n className={\"my-4 flex flex-col px-4 py-6 bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>Create your users and roles</Typography>\n <Typography>\n You have no users or roles defined. You can create default roles and add the current user as admin.\n </Typography>\n <Button\n variant={\"outlined\"}\n onClick={() => {\n if (!authController.user?.uid) {\n throw Error(\"UsersTable, authController misconfiguration\");\n }\n if (noUsers) {\n userManagement.saveUser({\n uid: authController.user?.uid,\n email: authController.user?.email,\n displayName: authController.user?.displayName,\n photoURL: authController.user?.photoURL,\n providerId: authController.user?.providerId,\n isAnonymous: authController.user?.isAnonymous,\n roles: [{\n id: \"admin\",\n name: \"Admin\"\n }],\n created_on: new Date()\n })\n .then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"User added successfully\"\n })\n })\n .catch((error) => {\n snackbarController.open({\n type: \"error\",\n message: \"Error adding user: \" + error.message\n })\n });\n }\n if (noRoles) {\n DEFAULT_ROLES.forEach((role) => {\n userManagement.saveRole(role);\n });\n }\n }}>\n <AddIcon/>\n {buttonLabel}\n </Button>\n </Paper>\n );\n\n}\n","import { CMSView } from \"@firecms/core\";\nimport { RolesView, UsersView } from \"./components\";\n\nexport const userManagementAdminViews: CMSView[] = [\n {\n path: \"users\",\n name: \"CMS Users\",\n group: \"Admin\",\n icon: \"face\",\n view: <UsersView/>\n },\n {\n path: \"roles\",\n name: \"Roles\",\n group: \"Admin\",\n icon: \"gpp_good\",\n view: <RolesView/>\n }\n]\n"],"names":["RESERVED_GROUPS","DEFAULT_PERMISSIONS","read","edit","create","delete","resolveUserRolePermissions","collection","user","roles","ownerId","uid","basePermissions","map","role","resolveCollectionRole","id","reduce","mergePermissions","isAdmin","defaultPermissions","thisCollectionPermissions","collectionPermissions","permA","permB","getUserRoles","fireCMSUser","undefined","find","r","filter","Boolean","areRolesEqual","rolesA","rolesB","rolesAIds","rolesBIds","length","every","includes","cacheDelegatedLoginToken","projectId","delegatedToken","data","parseJwt","expiry","Date","exp","localStorage","setItem","JSON","stringify","token","getDelegatedLoginTokenFromCache","entry","getItem","parse","clearDelegatedLoginTokensCache","i","key","startsWith","removeItem","Error","base64Url","split","base64","replace","jsonPayload","decodeURIComponent","window","atob","c","charCodeAt","toString","slice","join","darkenColor","hexColor","darkenBy","test","color","substring","parseInt","g","b","Math","floor","hexToRgbaWithOpacity","opacity","alpha","useBuildUserManagement","authController","dataSourceDelegate","rolesProp","usersPath","rolesPath","allowDefaultRolesCreation","includeCollectionConfigPermissions","rolesDefinedInCode","rolesLoading","setRolesLoading","React","useState","usersLoading","setUsersLoading","setRoles","usersWithRoleIds","setUsersWithRoleIds","users","u","rolesError","setRolesError","usersError","setUsersError","_usersLoading","_rolesLoading","loading","useEffect","initialised","initialLoading","listenCollection","path","onUpdate","entities","console","debug","newRoles","entityToRoles","equal","e","error","onError","newUsers","entitiesToUsers","saveUser","useCallback","roleIds","email","toLowerCase","trim","userExists","created_on","entity","values","deleteEntity","then","catch","saveEntity","status","entityId","removeUndefined","saveRole","roleData","deleteUser","deleteRole","defineRolesFor","mgmtUser","authenticator","warn","userRoles","some","userRoleIds","setUserRoles","getUser","docs","doc","newVar","updated_on","UserManagementContext","createContext","UserManagementProvider","t0","$","_c","children","userManagement","t1","useUserManagement","useContext","RoleChip","colorScheme","getColorSchemeForSeed","name","Chip","RoleYupSchema","Yup","object","shape","string","required","canRoleBeEdited","loggedUser","loggedUserIsAdmin","RolesDetailsForm","open","editable","handleClose","collections","isNewRole","loggedInUser","useAuthController","savingError","setSavingError","role_0","onRoleUpdated","t2","t3","role_1","formexController","resetForm","e_0","t4","Promise","resolve","initialValues","onSubmit","validation","_temp3","formex","useCreateFormex","isSubmitting","touched","values_0","errors","errors_0","handleChange","setFieldValue","dirty","setFieldTouched","defaultCreate","defaultRead","defaultEdit","defaultDelete","t5","idTouched","getIn","toSnakeCase","t6","t7","t8","Symbol","for","display","flexDirection","position","height","DialogTitle","t9","t10","t11","TextField","t12","t13","jsx","FieldCaption","t14","jsxs","t15","t16","t17","e_2","t18","t19","t20","t21","t22","TableHeader","TableCell","t23","t24","t25","t26","checked","t27","Tooltip","Checkbox","t28","t29","t30","checked_0","t31","t32","t33","t34","checked_1","t35","t36","t37","t38","checked_2","t39","t40","t41","TableRow","t42","col","checked_3","checked_4","checked_5","checked_6","Button","t43","Paper","Table","TableBody","t44","t45","t46","config","t47","t48","event","target","value","t49","createCollections","t50","t51","SelectItem","t52","Select","_temp4","t53","t54","t55","t56","t57","t58","event_0","t59","editCollections","t60","t61","t62","t63","_temp5","t64","t65","t66","t67","t68","t69","event_1","t70","deleteCollections","t71","t72","t73","t74","_temp6","t75","t76","t77","t78","DialogContent","t79","Typography","message","t80","t81","t82","t83","LoadingButton","t84","DialogActions","t85","handleSubmit","t86","Formex","t87","Dialog","value_1","value_0","validate","abortEarly","_temp","_temp2","e_1","inner","forEach","DEFAULT_ROLES","RolesTable","onRoleClicked","roleToBeDeleted","setRoleToBeDeleted","deleteInProgress","setDeleteInProgress","canCreateAll","canReadAll","canUpdateAll","canDeleteAll","width","IconButton","stopPropagation","DeleteIcon","CenteredView","finally","ConfirmationDialog","RolesView","memo","useNavigationController","dialogOpen","setDialogOpen","selectedRole","setSelectedRole","AddIcon","Container","UserYupSchema","displayName","array","min","canUserBeEdited","prevUser","admins","didRolesChange","adminRoleRemoved","UserDetailsForm","userProp","snackbarController","useSnackbarController","isNewUser","savedUser","reject","onUserUpdated","type","submitCount","open_0","r_1","_temp7","MultiSelect","userRole","MultiSelectItem","r_0","acc","UsersTable","onUserClicked","customizationController","useCustomizationController","dateUtilsLocale","locale","locales","dateFormat","dateTimeFormat","defaultDateFormat","userToBeDeleted","setUserToBeDeleted","formattedDate","format","photoURL","providerId","isAnonymous","error_0","UsersView","selectedUser","setSelectedUser","newFormKey","setNewFormKey","handleAddUser","k","useUserManagementPlugin","noUsers","noRoles","additionalChildrenStart","Component","props","homePage","provider","IntroWidget","buttonLabel","userManagementAdminViews","group","icon","view"],"mappings":"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"}