@firecms/user_management 3.0.0-canary.155 → 3.0.0-canary.157
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.
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +9 -9
package/dist/index.umd.js.map
CHANGED
@@ -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 * Maximum number of users that can be created.\n */\n usersLimit?: number;\n\n /**\n * Can the logged user edit roles\n */\n canEditRoles?: boolean;\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 usersLimit\n * @param canEditRoles\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 usersPath = \"__FIRECMS/config/users\",\n rolesPath = \"__FIRECMS/config/roles\",\n usersLimit,\n canEditRoles = true,\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 [rolesLoading, setRolesLoading] = React.useState<boolean>(true);\n const [usersLoading, setUsersLoading] = React.useState<boolean>(true);\n const [roles, setRoles] = React.useState<Role[]>([]);\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 (!dataSourceDelegate || !rolesPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) return;\n if (authController?.initialLoading) return;\n // if (authController.user === null) {\n // setRolesLoading(false);\n // return;\n // }\n\n setRolesLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: rolesPath,\n onUpdate(entities: Entity<any>[]): void {\n setRolesError(undefined);\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 }, [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\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 if (loading) {\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 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 roles\", userRoles);\n authController.setUserRoles?.(userRoles ?? []);\n }, [userRoleIds]);\n\n return {\n loading,\n roles,\n users,\n saveUser,\n saveRole,\n rolesError,\n deleteUser,\n deleteRole,\n usersLimit,\n usersError,\n isAdmin,\n canEditRoles: canEditRoles === undefined ? true : canEditRoles,\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 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 Dialog,\n DialogActions,\n DialogContent, DialogTitle,\n DoneIcon,\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 console.log(\"loggedUserIsAdmin\", loggedUser);\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-8\"}>\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 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 startIcon={<DoneIcon/>}\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'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, Tooltip, Typography } from \"@firecms/ui\";\nimport { RolesTable } from \"./RolesTable\";\nimport { RolesDetailsForm } from \"./RolesDetailsForm\";\nimport { useUserManagement } from \"../../hooks\";\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 { canEditRoles } = useUserManagement();\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 <Tooltip\n asChild={true}\n title={!canEditRoles ? \"Update plans to customise roles\" : undefined}>\n <Button\n size={\"large\"}\n disabled={!canEditRoles}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add role\n </Button>\n </Tooltip>\n </div>\n\n <RolesTable onRoleClicked={onRoleClicked} editable={Boolean(canEditRoles)}/>\n\n <RolesDetailsForm\n key={selectedRole?.id ?? \"new\"}\n open={dialogOpen}\n role={selectedRole}\n editable={canEditRoles}\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 Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n DoneIcon,\n LoadingButton,\n MultiSelect,\n MultiSelectItem,\n TextField,\n Typography,\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-8\"}>\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 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 startIcon={<DoneIcon/>}\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>();\n const [selectedUser, setSelectedUser] = useState<User | undefined>();\n\n const { users, usersLimit } = useUserManagement();\n\n const reachedUsersLimit = usersLimit !== undefined && (users && users.length >= usersLimit);\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 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 disabled={reachedUsersLimit}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add user\n </Button>\n </div>\n\n <UsersTable onUserClicked={onUserClicked}/>\n\n <UserDetailsForm\n key={selectedUser?.uid ?? \"new\"}\n open={dialogOpen ?? false}\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\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 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","usersPath","rolesPath","usersLimit","canEditRoles","allowDefaultRolesCreation","includeCollectionConfigPermissions","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","newRoles","entityToRoles","equal","e","error","onError","debug","newUsers","entitiesToUsers","saveUser","useCallback","roleIds","email","toLowerCase","trim","userExists","created_on","saveEntity","status","entityId","values","removeUndefined","then","saveRole","roleData","deleteUser","entity","deleteEntity","deleteRole","defineRolesFor","mgmtUser","authenticator","console","warn","userRoles","some","userRoleIds","setUserRoles","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","log","RolesDetailsForm","open","editable","handleClose","collections","isNewRole","loggedInUser","useAuthController","savingError","setSavingError","role_0","onRoleUpdated","t2","t3","role_1","formexController","resetForm","catch","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","DoneIcon","t83","t84","LoadingButton","t85","DialogActions","t86","handleSubmit","t87","Formex","t88","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","reachedUsersLimit","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 * Maximum number of users that can be created.\n */\n usersLimit?: number;\n\n /**\n * Can the logged user edit roles\n */\n canEditRoles?: boolean;\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 usersLimit\n * @param canEditRoles\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 usersPath = \"__FIRECMS/config/users\",\n rolesPath = \"__FIRECMS/config/roles\",\n usersLimit,\n canEditRoles = true,\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 [rolesLoading, setRolesLoading] = React.useState<boolean>(true);\n const [usersLoading, setUsersLoading] = React.useState<boolean>(true);\n const [roles, setRoles] = React.useState<Role[]>([]);\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 (!dataSourceDelegate || !rolesPath) return;\n if (dataSourceDelegate.initialised !== undefined && !dataSourceDelegate.initialised) return;\n if (authController?.initialLoading) return;\n // if (authController.user === null) {\n // setRolesLoading(false);\n // return;\n // }\n\n setRolesLoading(true);\n return dataSourceDelegate.listenCollection?.({\n path: rolesPath,\n onUpdate(entities: Entity<any>[]): void {\n setRolesError(undefined);\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 }, [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\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 if (loading) {\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 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 roles\", userRoles);\n authController.setUserRoles?.(userRoles ?? []);\n }, [userRoleIds]);\n\n return {\n loading,\n roles,\n users,\n saveUser,\n saveRole,\n rolesError,\n deleteUser,\n deleteRole,\n usersLimit,\n usersError,\n isAdmin,\n canEditRoles: canEditRoles === undefined ? true : canEditRoles,\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 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 Dialog,\n DialogActions,\n DialogContent, DialogTitle,\n DoneIcon,\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 console.log(\"loggedUserIsAdmin\", loggedUser);\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-8\"}>\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 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 startIcon={<DoneIcon/>}\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'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, Tooltip, Typography } from \"@firecms/ui\";\nimport { RolesTable } from \"./RolesTable\";\nimport { RolesDetailsForm } from \"./RolesDetailsForm\";\nimport { useUserManagement } from \"../../hooks\";\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 { canEditRoles } = useUserManagement();\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 <Tooltip\n asChild={true}\n title={!canEditRoles ? \"Update plans to customise roles\" : undefined}>\n <Button\n size={\"large\"}\n disabled={!canEditRoles}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add role\n </Button>\n </Tooltip>\n </div>\n\n <RolesTable onRoleClicked={onRoleClicked} editable={Boolean(canEditRoles)}/>\n\n <RolesDetailsForm\n key={selectedRole?.id ?? \"new\"}\n open={dialogOpen}\n role={selectedRole}\n editable={canEditRoles}\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 Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n DoneIcon,\n LoadingButton,\n MultiSelect,\n MultiSelectItem,\n TextField,\n Typography,\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-8\"}>\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 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 startIcon={<DoneIcon/>}\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>();\n const [selectedUser, setSelectedUser] = useState<User | undefined>();\n\n const { users, usersLimit } = useUserManagement();\n\n const reachedUsersLimit = usersLimit !== undefined && (users && users.length >= usersLimit);\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 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 disabled={reachedUsersLimit}\n startIcon={<AddIcon/>}\n onClick={() => setDialogOpen(true)}>\n Add user\n </Button>\n </div>\n\n <UsersTable onUserClicked={onUserClicked}/>\n\n <UserDetailsForm\n key={selectedUser?.uid ?? \"new\"}\n open={dialogOpen ?? false}\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\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 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","usersPath","rolesPath","usersLimit","canEditRoles","allowDefaultRolesCreation","includeCollectionConfigPermissions","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","newRoles","entityToRoles","equal","e","error","onError","debug","newUsers","entitiesToUsers","saveUser","useCallback","roleIds","email","toLowerCase","trim","userExists","created_on","saveEntity","status","entityId","values","removeUndefined","then","saveRole","roleData","deleteUser","entity","deleteEntity","deleteRole","defineRolesFor","mgmtUser","authenticator","console","warn","userRoles","some","userRoleIds","setUserRoles","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","log","RolesDetailsForm","open","editable","handleClose","collections","isNewRole","loggedInUser","useAuthController","savingError","setSavingError","role_0","onRoleUpdated","t2","t3","role_1","formexController","resetForm","catch","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","DoneIcon","t83","t84","LoadingButton","t85","DialogActions","t86","handleSubmit","t87","Formex","t88","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","reachedUsersLimit","useUserManagementPlugin","noUsers","noRoles","additionalChildrenStart","Component","props","homePage","provider","IntroWidget","buttonLabel","userManagementAdminViews","group","icon","view"],"mappings":"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"}
|