@strapi/admin 5.51.0 → 5.51.2
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/admin/admin/src/StrapiApp.js +3 -3
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +3 -3
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +35 -26
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +35 -27
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +3 -2
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +3 -2
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +642 -664
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +642 -664
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +22 -26
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +22 -26
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +38 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +18 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js +4 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs +4 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +17 -6
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs +18 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js +23 -26
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs +23 -26
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js +10 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs +10 -2
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-domain.js +1 -0
- package/dist/admin/shared/utils/auth-cookie-domain.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-domain.mjs +1 -0
- package/dist/admin/shared/utils/auth-cookie-domain.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +1 -0
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +1 -0
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/admin/src/pages/Auth/components/Register.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.d.ts +6 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.d.ts +5 -3
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +8 -4
- package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +3 -1
- package/dist/ee/admin/src/services/auditLogs.d.ts +5 -2
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +1 -0
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +16 -0
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/destroy.d.ts +1 -4
- package/dist/ee/server/src/destroy.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js +10 -0
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs +11 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js +24 -32
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs +24 -32
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +36 -4
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +36 -4
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +8 -0
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs +8 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +1 -1
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/destroy.js +1 -1
- package/dist/server/ee/server/src/destroy.js.map +1 -1
- package/dist/server/ee/server/src/destroy.mjs +1 -1
- package/dist/server/ee/server/src/destroy.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +1 -3
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +1 -3
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/index.js.map +1 -1
- package/dist/server/ee/server/src/services/index.mjs +2 -2
- package/dist/server/ee/server/src/services/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +2 -2
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +4 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.js +2 -2
- package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.mjs +2 -2
- package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +1 -2
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +2 -2
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -8
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +5 -5
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js +1 -5
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.mjs +2 -2
- package/dist/server/server/src/services/transfer/permission.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +1 -1
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-domain.js +1 -0
- package/dist/server/shared/utils/auth-cookie-domain.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-domain.mjs +1 -0
- package/dist/server/shared/utils/auth-cookie-domain.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +1 -0
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +1 -0
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/transfer/permission.d.ts +2 -2
- package/dist/server/src/services/transfer/permission.d.ts.map +1 -1
- package/dist/shared/contracts/api-token.d.ts +2 -2
- package/dist/shared/contracts/api-token.d.ts.map +1 -1
- package/dist/shared/contracts/audit-logs.d.ts +19 -1
- package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
- package/dist/shared/contracts/authentication.d.ts +1 -1
- package/dist/shared/contracts/authentication.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +2 -2
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/dist/shared/contracts/user.d.ts +1 -1
- package/dist/shared/contracts/user.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-domain.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useAuth } from '../../../../features/Auth';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n const { user: currentUser } = useAuth('ListPageCE', (auth) => auth);\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete && currentUser?.id !== user.id ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, object>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status size=\"S\" variant={isActive ? 'success' : 'danger'}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {isActive ? 'Active' : 'Inactive'}\n </Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","user","currentUser","useAuth","auth","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","err","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","zIndex","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","fontWeight","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useAuth } from '../../../../features/Auth';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n const { user: currentUser } = useAuth('ListPageCE', (auth) => auth);\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete && currentUser?.id !== user.id ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, object>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status size=\"S\" variant={isActive ? 'success' : 'danger'}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {isActive ? 'Active' : 'Inactive'}\n </Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","user","currentUser","useAuth","auth","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","zIndex","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","fontWeight","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useAuth } from '../../../../features/Auth';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n const { user: currentUser } = useAuth('ListPageCE', (auth) => auth);\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete && currentUser?.id !== user.id ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, object>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status size=\"S\" variant={isActive ? 'success' : 'danger'}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {isActive ? 'Active' : 'Inactive'}\n </Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","user","currentUser","useAuth","auth","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","err","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","zIndex","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","fontWeight","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useAuth } from '../../../../features/Auth';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n const { user: currentUser } = useAuth('ListPageCE', (auth) => auth);\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete && currentUser?.id !== user.id ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, object>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status size=\"S\" variant={isActive ? 'success' : 'danger'}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {isActive ? 'Active' : 'Inactive'}\n </Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","user","currentUser","useAuth","auth","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","zIndex","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","fontWeight","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UseCasePage.js","sources":["../../../../../admin/src/pages/UseCasePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n SingleSelectOption,\n SingleSelect,\n TextButton,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst UseCasePage = () => {\n const { toggleNotification } = useNotification();\n const location = useLocation();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n\n const { firstname, email } = useAuth('UseCasePage', (state) => state.user) ?? {};\n const { hasAdmin } = parse(location.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/register`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n }),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n }),\n });\n navigate('/');\n } catch (err) {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={`25rem`}>\n <Typography textAlign=\"center\" variant=\"alpha\" tag=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </Typography>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root name=\"usecase\">\n <Field.Label>\n {formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n </Field.Label>\n <SingleSelect onChange={(value) => setRole(value)} value={role}>\n {options.map(({ intlLabel, value }) => (\n <SingleSelectOption key={value} value={value}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n {isOther && (\n <Field.Root name=\"other\">\n <Field.Label>\n {formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n </Field.Label>\n <TextInput\n type=\"text\"\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n />\n </Field.Root>\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => handleSubmit(event, true)}\n >\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PrivateUseCasePage = () => {\n return (\n <PrivateRoute>\n <UseCasePage />\n </PrivateRoute>\n );\n};\n\nexport { PrivateUseCasePage, UseCasePage };\n"],"names":["options","intlLabel","id","defaultMessage","value","UseCasePage","toggleNotification","useNotification","location","useLocation","navigate","useNavigate","formatMessage","useIntl","role","setRole","React","useState","otherRole","setOtherRole","firstname","email","useAuth","state","user","hasAdmin","parse","search","ignoreQueryPrefix","isOther","handleSubmit","event","skipPersona","preventDefault","fetch","process","env","STRAPI_ANALYTICS_URL","method","headers","body","JSON","stringify","username","firstAdmin","Boolean","persona","undefined","type","message","err","_jsx","UnauthenticatedLayout","_jsxs","Main","labelledBy","LayoutContent","form","onSubmit","e","Flex","direction","paddingBottom","Logo","Box","paddingTop","width","Typography","textAlign","variant","tag","alignItems","gap","Field","Root","name","Label","SingleSelect","onChange","map","SingleSelectOption","TextInput","target","Button","size","fullWidth","disabled","justifyContent","TextButton","onClick","PrivateUseCasePage","PrivateRoute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UseCasePage.js","sources":["../../../../../admin/src/pages/UseCasePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n SingleSelectOption,\n SingleSelect,\n TextButton,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst UseCasePage = () => {\n const { toggleNotification } = useNotification();\n const location = useLocation();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n\n const { firstname, email } = useAuth('UseCasePage', (state) => state.user) ?? {};\n const { hasAdmin } = parse(location.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/register`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n }),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n }),\n });\n navigate('/');\n } catch {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={`25rem`}>\n <Typography textAlign=\"center\" variant=\"alpha\" tag=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </Typography>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root name=\"usecase\">\n <Field.Label>\n {formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n </Field.Label>\n <SingleSelect onChange={(value) => setRole(value)} value={role}>\n {options.map(({ intlLabel, value }) => (\n <SingleSelectOption key={value} value={value}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n {isOther && (\n <Field.Root name=\"other\">\n <Field.Label>\n {formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n </Field.Label>\n <TextInput\n type=\"text\"\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n />\n </Field.Root>\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => handleSubmit(event, true)}\n >\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PrivateUseCasePage = () => {\n return (\n <PrivateRoute>\n <UseCasePage />\n </PrivateRoute>\n );\n};\n\nexport { PrivateUseCasePage, UseCasePage };\n"],"names":["options","intlLabel","id","defaultMessage","value","UseCasePage","toggleNotification","useNotification","location","useLocation","navigate","useNavigate","formatMessage","useIntl","role","setRole","React","useState","otherRole","setOtherRole","firstname","email","useAuth","state","user","hasAdmin","parse","search","ignoreQueryPrefix","isOther","handleSubmit","event","skipPersona","preventDefault","fetch","process","env","STRAPI_ANALYTICS_URL","method","headers","body","JSON","stringify","username","firstAdmin","Boolean","persona","undefined","type","message","_jsx","UnauthenticatedLayout","_jsxs","Main","labelledBy","LayoutContent","form","onSubmit","e","Flex","direction","paddingBottom","Logo","Box","paddingTop","width","Typography","textAlign","variant","tag","alignItems","gap","Field","Root","name","Label","SingleSelect","onChange","map","SingleSelectOption","TextInput","target","Button","size","fullWidth","disabled","justifyContent","TextButton","onClick","PrivateUseCasePage","PrivateRoute"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UseCasePage.mjs","sources":["../../../../../admin/src/pages/UseCasePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n SingleSelectOption,\n SingleSelect,\n TextButton,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst UseCasePage = () => {\n const { toggleNotification } = useNotification();\n const location = useLocation();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n\n const { firstname, email } = useAuth('UseCasePage', (state) => state.user) ?? {};\n const { hasAdmin } = parse(location.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/register`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n }),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n }),\n });\n navigate('/');\n } catch (err) {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={`25rem`}>\n <Typography textAlign=\"center\" variant=\"alpha\" tag=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </Typography>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root name=\"usecase\">\n <Field.Label>\n {formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n </Field.Label>\n <SingleSelect onChange={(value) => setRole(value)} value={role}>\n {options.map(({ intlLabel, value }) => (\n <SingleSelectOption key={value} value={value}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n {isOther && (\n <Field.Root name=\"other\">\n <Field.Label>\n {formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n </Field.Label>\n <TextInput\n type=\"text\"\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n />\n </Field.Root>\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => handleSubmit(event, true)}\n >\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PrivateUseCasePage = () => {\n return (\n <PrivateRoute>\n <UseCasePage />\n </PrivateRoute>\n );\n};\n\nexport { PrivateUseCasePage, UseCasePage };\n"],"names":["options","intlLabel","id","defaultMessage","value","UseCasePage","toggleNotification","useNotification","location","useLocation","navigate","useNavigate","formatMessage","useIntl","role","setRole","React","useState","otherRole","setOtherRole","firstname","email","useAuth","state","user","hasAdmin","parse","search","ignoreQueryPrefix","isOther","handleSubmit","event","skipPersona","preventDefault","fetch","process","env","STRAPI_ANALYTICS_URL","method","headers","body","JSON","stringify","username","firstAdmin","Boolean","persona","undefined","type","message","err","_jsx","UnauthenticatedLayout","_jsxs","Main","labelledBy","LayoutContent","form","onSubmit","e","Flex","direction","paddingBottom","Logo","Box","paddingTop","width","Typography","textAlign","variant","tag","alignItems","gap","Field","Root","name","Label","SingleSelect","onChange","map","SingleSelectOption","TextInput","target","Button","size","fullWidth","disabled","justifyContent","TextButton","onClick","PrivateUseCasePage","PrivateRoute"],"mappings":";;;;;;;;;;;;MAwBaA,OAAAA,GAAU;AACrB,IAAA;QACEC,SAAAA,EAAW;YACTC,EAAAA,EAAI,mBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,kBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,oBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,wBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,yBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,eAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT;;AAGF,MAAMC,WAAAA,GAAc,IAAA;IAClB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjB,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,GAAGC,KAAAA,CAAMC,QAAQ,CAAyB,IAAA,CAAA;AAC/D,IAAA,MAAM,CAACC,SAAAA,EAAWC,YAAAA,CAAa,GAAGH,KAAAA,CAAMC,QAAQ,CAAC,EAAA,CAAA;AAEjD,IAAA,MAAM,EAAEG,SAAS,EAAEC,KAAK,EAAE,GAAGC,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,IAAI,KAAK,EAAC;AAC/E,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGC,KAAAA,CAAMlB,QAAAA,CAASmB,MAAM,EAAE;QAAEC,iBAAAA,EAAmB;AAAK,KAAA,CAAA;AACtE,IAAA,MAAMC,UAAUf,IAAAA,KAAS,OAAA;IAEzB,MAAMgB,YAAAA,GAAe,OAAOC,KAAAA,EAAwBC,WAAAA,GAAAA;AAClDD,QAAAA,KAAAA,CAAME,cAAc,EAAA;QACpB,IAAI;YACF,MAAMC,KAAAA,CAAM,CAAA,EAAGC,OAAAA,CAAQC,GAAG,CAACC,oBAAoB,IAAI,6BAAA,CAA8B,SAAS,CAAC,EAAE;gBAC3FC,MAAAA,EAAQ,MAAA;gBACRC,OAAAA,EAAS;oBACP,cAAA,EAAgB;AAClB,iBAAA;gBACAC,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAAC;AACnBrB,oBAAAA,KAAAA;oBACAsB,QAAAA,EAAUvB,SAAAA;AACVwB,oBAAAA,UAAAA,EAAYC,QAAQ,CAACpB,QAAAA,CAAAA;oBACrBqB,OAAAA,EAAS;AACPhC,wBAAAA,IAAAA,EAAMkB,cAAce,SAAAA,GAAYjC,IAAAA;AAChCI,wBAAAA,SAAAA,EAAWc,cAAce,SAAAA,GAAY7B;AACvC;AACF,iBAAA;AACF,aAAA,CAAA;YAEAZ,kBAAAA,CAAmB;gBACjB0C,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;oBACrBV,EAAAA,EAAI,8CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;YACAO,QAAAA,CAAS,GAAA,CAAA;AACX,QAAA,CAAA,CAAE,OAAOwC,GAAAA,EAAK;;AAEd,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEC,GAAA,CAACC,qBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAC,IAAA,CAACC,IAAAA,EAAAA;YAAKC,UAAAA,EAAW,eAAA;;8BACfJ,GAAA,CAACK,aAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAH,IAAA,CAACI,MAAAA,EAAAA;wBAAKC,QAAAA,EAAU,CAACC,CAAAA,GAAM7B,YAAAA,CAAa6B,CAAAA,EAAG,KAAA,CAAA;;0CACrCN,IAAA,CAACO,IAAAA,EAAAA;gCAAKC,SAAAA,EAAU,QAAA;gCAASC,aAAAA,EAAe,CAAA;;kDACtCX,GAAA,CAACY,IAAAA,EAAAA,EAAAA,CAAAA;kDACDZ,GAAA,CAACa,GAAAA,EAAAA;wCAAIC,UAAAA,EAAY,CAAA;wCAAGH,aAAAA,EAAe,CAAA;wCAAGI,KAAAA,EAAO,CAAC,KAAK,CAAC;AAClD,wCAAA,QAAA,gBAAAf,GAAA,CAACgB,UAAAA,EAAAA;4CAAWC,SAAAA,EAAU,QAAA;4CAASC,OAAAA,EAAQ,OAAA;4CAAQC,GAAAA,EAAI,IAAA;4CAAKpE,EAAAA,EAAG,eAAA;sDACxDU,aAAAA,CAAc;gDACbV,EAAAA,EAAI,eAAA;gDACJC,cAAAA,EAAgB;AAClB,6CAAA;;;;;0CAINkD,IAAA,CAACO,IAAAA,EAAAA;gCAAKC,SAAAA,EAAU,QAAA;gCAASU,UAAAA,EAAW,SAAA;gCAAUC,GAAAA,EAAK,CAAA;;AACjD,kDAAAnB,IAAA,CAACoB,MAAMC,IAAI,EAAA;wCAACC,IAAAA,EAAK,SAAA;;AACf,0DAAAxB,GAAA,CAACsB,MAAMG,KAAK,EAAA;0DACThE,aAAAA,CAAc;oDACbV,EAAAA,EAAI,yBAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;0DAEFgD,GAAA,CAAC0B,YAAAA,EAAAA;gDAAaC,QAAAA,EAAU,CAAC1E,QAAUW,OAAAA,CAAQX,KAAAA,CAAAA;gDAAQA,KAAAA,EAAOU,IAAAA;0DACvDd,OAAAA,CAAQ+E,GAAG,CAAC,CAAC,EAAE9E,SAAS,EAAEG,KAAK,EAAE,iBAChC+C,GAAA,CAAC6B,kBAAAA,EAAAA;wDAA+B5E,KAAAA,EAAOA,KAAAA;kEACpCQ,aAAAA,CAAcX,SAAAA;AADQG,qDAAAA,EAAAA,KAAAA,CAAAA;;;;oCAM9ByB,OAAAA,kBACCwB,IAAA,CAACoB,MAAMC,IAAI,EAAA;wCAACC,IAAAA,EAAK,OAAA;;AACf,0DAAAxB,GAAA,CAACsB,MAAMG,KAAK,EAAA;0DACThE,aAAAA,CAAc;oDAAEV,EAAAA,EAAI,eAAA;oDAAiBC,cAAAA,EAAgB;AAAQ,iDAAA;;0DAEhEgD,GAAA,CAAC8B,SAAAA,EAAAA;gDACCjC,IAAAA,EAAK,MAAA;gDACL5C,KAAAA,EAAOc,SAAAA;AACP4D,gDAAAA,QAAAA,EAAU,CAACnB,CAAAA,GAAMxC,YAAAA,CAAawC,CAAAA,CAAEuB,MAAM,CAAC9E,KAAK;;;;kDAIlD+C,GAAA,CAACgC,MAAAA,EAAAA;wCAAOnC,IAAAA,EAAK,QAAA;wCAASoC,IAAAA,EAAK,GAAA;wCAAIC,SAAS,EAAA,IAAA;AAACC,wCAAAA,QAAAA,EAAU,CAACxE,IAAAA;kDACjDF,aAAAA,CAAc;4CAAEV,EAAAA,EAAI,eAAA;4CAAiBC,cAAAA,EAAgB;AAAS,yCAAA;;;;;;;8BAKvEgD,GAAA,CAACS,IAAAA,EAAAA;oBAAK2B,cAAAA,EAAe,QAAA;AACnB,oBAAA,QAAA,gBAAApC,GAAA,CAACa,GAAAA,EAAAA;wBAAIC,UAAAA,EAAY,CAAA;AACf,wBAAA,QAAA,gBAAAd,GAAA,CAACqC,UAAAA,EAAAA;4BACCC,OAAAA,EAAS,CAAC1D,KAAAA,GAA+CD,YAAAA,CAAaC,KAAAA,EAAO,IAAA,CAAA;sCAE5EnB,aAAAA,CAAc;gCACbV,EAAAA,EAAI,qBAAA;gCACJC,cAAAA,EAAgB;AAClB,6BAAA;;;;;;;AAOd;AAEA,MAAMuF,kBAAAA,GAAqB,IAAA;AACzB,IAAA,qBACEvC,GAAA,CAACwC,YAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAxC,GAAA,CAAC9C,WAAAA,EAAAA,EAAAA;;AAGP;;;;"}
|
|
1
|
+
{"version":3,"file":"UseCasePage.mjs","sources":["../../../../../admin/src/pages/UseCasePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Main,\n SingleSelectOption,\n SingleSelect,\n TextButton,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { parse } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { Logo } from '../components/UnauthenticatedLogo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { LayoutContent, UnauthenticatedLayout } from '../layouts/UnauthenticatedLayout';\n\nexport const options = [\n {\n intlLabel: {\n id: 'Usecase.front-end',\n defaultMessage: 'Front-end developer',\n },\n value: 'front_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.back-end',\n defaultMessage: 'Back-end developer',\n },\n value: 'back_end_developer',\n },\n {\n intlLabel: {\n id: 'Usecase.full-stack',\n defaultMessage: 'Full-stack developer',\n },\n value: 'full_stack_developer',\n },\n {\n intlLabel: {\n id: 'global.content-manager',\n defaultMessage: 'Content Manager',\n },\n value: 'content_manager',\n },\n {\n intlLabel: {\n id: 'Usecase.content-creator',\n defaultMessage: 'Content Creator',\n },\n value: 'content_creator',\n },\n {\n intlLabel: {\n id: 'Usecase.other',\n defaultMessage: 'Other',\n },\n value: 'other',\n },\n];\n\nconst UseCasePage = () => {\n const { toggleNotification } = useNotification();\n const location = useLocation();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const [role, setRole] = React.useState<string | number | null>(null);\n const [otherRole, setOtherRole] = React.useState('');\n\n const { firstname, email } = useAuth('UseCasePage', (state) => state.user) ?? {};\n const { hasAdmin } = parse(location.search, { ignoreQueryPrefix: true });\n const isOther = role === 'other';\n\n const handleSubmit = async (event: React.FormEvent, skipPersona: boolean) => {\n event.preventDefault();\n try {\n await fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/register`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email,\n username: firstname,\n firstAdmin: Boolean(!hasAdmin),\n persona: {\n role: skipPersona ? undefined : role,\n otherRole: skipPersona ? undefined : otherRole,\n },\n }),\n });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'Usecase.notification.success.project-created',\n defaultMessage: 'Project has been successfully created',\n }),\n });\n navigate('/');\n } catch {\n // Silent\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main labelledBy=\"usecase-title\">\n <LayoutContent>\n <form onSubmit={(e) => handleSubmit(e, false)}>\n <Flex direction=\"column\" paddingBottom={7}>\n <Logo />\n <Box paddingTop={6} paddingBottom={1} width={`25rem`}>\n <Typography textAlign=\"center\" variant=\"alpha\" tag=\"h1\" id=\"usecase-title\">\n {formatMessage({\n id: 'Usecase.title',\n defaultMessage: 'Tell us a bit more about yourself',\n })}\n </Typography>\n </Box>\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root name=\"usecase\">\n <Field.Label>\n {formatMessage({\n id: 'Usecase.input.work-type',\n defaultMessage: 'What type of work do you do?',\n })}\n </Field.Label>\n <SingleSelect onChange={(value) => setRole(value)} value={role}>\n {options.map(({ intlLabel, value }) => (\n <SingleSelectOption key={value} value={value}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n {isOther && (\n <Field.Root name=\"other\">\n <Field.Label>\n {formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}\n </Field.Label>\n <TextInput\n type=\"text\"\n value={otherRole}\n onChange={(e) => setOtherRole(e.target.value)}\n />\n </Field.Root>\n )}\n <Button type=\"submit\" size=\"L\" fullWidth disabled={!role}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <TextButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => handleSubmit(event, true)}\n >\n {formatMessage({\n id: 'Usecase.button.skip',\n defaultMessage: 'Skip this question',\n })}\n </TextButton>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nconst PrivateUseCasePage = () => {\n return (\n <PrivateRoute>\n <UseCasePage />\n </PrivateRoute>\n );\n};\n\nexport { PrivateUseCasePage, UseCasePage };\n"],"names":["options","intlLabel","id","defaultMessage","value","UseCasePage","toggleNotification","useNotification","location","useLocation","navigate","useNavigate","formatMessage","useIntl","role","setRole","React","useState","otherRole","setOtherRole","firstname","email","useAuth","state","user","hasAdmin","parse","search","ignoreQueryPrefix","isOther","handleSubmit","event","skipPersona","preventDefault","fetch","process","env","STRAPI_ANALYTICS_URL","method","headers","body","JSON","stringify","username","firstAdmin","Boolean","persona","undefined","type","message","_jsx","UnauthenticatedLayout","_jsxs","Main","labelledBy","LayoutContent","form","onSubmit","e","Flex","direction","paddingBottom","Logo","Box","paddingTop","width","Typography","textAlign","variant","tag","alignItems","gap","Field","Root","name","Label","SingleSelect","onChange","map","SingleSelectOption","TextInput","target","Button","size","fullWidth","disabled","justifyContent","TextButton","onClick","PrivateUseCasePage","PrivateRoute"],"mappings":";;;;;;;;;;;;MAwBaA,OAAAA,GAAU;AACrB,IAAA;QACEC,SAAAA,EAAW;YACTC,EAAAA,EAAI,mBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,kBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,oBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,wBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,yBAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEH,SAAAA,EAAW;YACTC,EAAAA,EAAI,eAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;QACAC,KAAAA,EAAO;AACT;;AAGF,MAAMC,WAAAA,GAAc,IAAA;IAClB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjB,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,IAAAA,EAAMC,OAAAA,CAAQ,GAAGC,KAAAA,CAAMC,QAAQ,CAAyB,IAAA,CAAA;AAC/D,IAAA,MAAM,CAACC,SAAAA,EAAWC,YAAAA,CAAa,GAAGH,KAAAA,CAAMC,QAAQ,CAAC,EAAA,CAAA;AAEjD,IAAA,MAAM,EAAEG,SAAS,EAAEC,KAAK,EAAE,GAAGC,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,IAAI,KAAK,EAAC;AAC/E,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGC,KAAAA,CAAMlB,QAAAA,CAASmB,MAAM,EAAE;QAAEC,iBAAAA,EAAmB;AAAK,KAAA,CAAA;AACtE,IAAA,MAAMC,UAAUf,IAAAA,KAAS,OAAA;IAEzB,MAAMgB,YAAAA,GAAe,OAAOC,KAAAA,EAAwBC,WAAAA,GAAAA;AAClDD,QAAAA,KAAAA,CAAME,cAAc,EAAA;QACpB,IAAI;YACF,MAAMC,KAAAA,CAAM,CAAA,EAAGC,OAAAA,CAAQC,GAAG,CAACC,oBAAoB,IAAI,6BAAA,CAA8B,SAAS,CAAC,EAAE;gBAC3FC,MAAAA,EAAQ,MAAA;gBACRC,OAAAA,EAAS;oBACP,cAAA,EAAgB;AAClB,iBAAA;gBACAC,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAAC;AACnBrB,oBAAAA,KAAAA;oBACAsB,QAAAA,EAAUvB,SAAAA;AACVwB,oBAAAA,UAAAA,EAAYC,QAAQ,CAACpB,QAAAA,CAAAA;oBACrBqB,OAAAA,EAAS;AACPhC,wBAAAA,IAAAA,EAAMkB,cAAce,SAAAA,GAAYjC,IAAAA;AAChCI,wBAAAA,SAAAA,EAAWc,cAAce,SAAAA,GAAY7B;AACvC;AACF,iBAAA;AACF,aAAA,CAAA;YAEAZ,kBAAAA,CAAmB;gBACjB0C,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAAA,CAAc;oBACrBV,EAAAA,EAAI,8CAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;YACAO,QAAAA,CAAS,GAAA,CAAA;AACX,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEwC,GAAA,CAACC,qBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAC,IAAA,CAACC,IAAAA,EAAAA;YAAKC,UAAAA,EAAW,eAAA;;8BACfJ,GAAA,CAACK,aAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAH,IAAA,CAACI,MAAAA,EAAAA;wBAAKC,QAAAA,EAAU,CAACC,CAAAA,GAAM5B,YAAAA,CAAa4B,CAAAA,EAAG,KAAA,CAAA;;0CACrCN,IAAA,CAACO,IAAAA,EAAAA;gCAAKC,SAAAA,EAAU,QAAA;gCAASC,aAAAA,EAAe,CAAA;;kDACtCX,GAAA,CAACY,IAAAA,EAAAA,EAAAA,CAAAA;kDACDZ,GAAA,CAACa,GAAAA,EAAAA;wCAAIC,UAAAA,EAAY,CAAA;wCAAGH,aAAAA,EAAe,CAAA;wCAAGI,KAAAA,EAAO,CAAC,KAAK,CAAC;AAClD,wCAAA,QAAA,gBAAAf,GAAA,CAACgB,UAAAA,EAAAA;4CAAWC,SAAAA,EAAU,QAAA;4CAASC,OAAAA,EAAQ,OAAA;4CAAQC,GAAAA,EAAI,IAAA;4CAAKnE,EAAAA,EAAG,eAAA;sDACxDU,aAAAA,CAAc;gDACbV,EAAAA,EAAI,eAAA;gDACJC,cAAAA,EAAgB;AAClB,6CAAA;;;;;0CAINiD,IAAA,CAACO,IAAAA,EAAAA;gCAAKC,SAAAA,EAAU,QAAA;gCAASU,UAAAA,EAAW,SAAA;gCAAUC,GAAAA,EAAK,CAAA;;AACjD,kDAAAnB,IAAA,CAACoB,MAAMC,IAAI,EAAA;wCAACC,IAAAA,EAAK,SAAA;;AACf,0DAAAxB,GAAA,CAACsB,MAAMG,KAAK,EAAA;0DACT/D,aAAAA,CAAc;oDACbV,EAAAA,EAAI,yBAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;0DAEF+C,GAAA,CAAC0B,YAAAA,EAAAA;gDAAaC,QAAAA,EAAU,CAACzE,QAAUW,OAAAA,CAAQX,KAAAA,CAAAA;gDAAQA,KAAAA,EAAOU,IAAAA;0DACvDd,OAAAA,CAAQ8E,GAAG,CAAC,CAAC,EAAE7E,SAAS,EAAEG,KAAK,EAAE,iBAChC8C,GAAA,CAAC6B,kBAAAA,EAAAA;wDAA+B3E,KAAAA,EAAOA,KAAAA;kEACpCQ,aAAAA,CAAcX,SAAAA;AADQG,qDAAAA,EAAAA,KAAAA,CAAAA;;;;oCAM9ByB,OAAAA,kBACCuB,IAAA,CAACoB,MAAMC,IAAI,EAAA;wCAACC,IAAAA,EAAK,OAAA;;AACf,0DAAAxB,GAAA,CAACsB,MAAMG,KAAK,EAAA;0DACT/D,aAAAA,CAAc;oDAAEV,EAAAA,EAAI,eAAA;oDAAiBC,cAAAA,EAAgB;AAAQ,iDAAA;;0DAEhE+C,GAAA,CAAC8B,SAAAA,EAAAA;gDACChC,IAAAA,EAAK,MAAA;gDACL5C,KAAAA,EAAOc,SAAAA;AACP2D,gDAAAA,QAAAA,EAAU,CAACnB,CAAAA,GAAMvC,YAAAA,CAAauC,CAAAA,CAAEuB,MAAM,CAAC7E,KAAK;;;;kDAIlD8C,GAAA,CAACgC,MAAAA,EAAAA;wCAAOlC,IAAAA,EAAK,QAAA;wCAASmC,IAAAA,EAAK,GAAA;wCAAIC,SAAS,EAAA,IAAA;AAACC,wCAAAA,QAAAA,EAAU,CAACvE,IAAAA;kDACjDF,aAAAA,CAAc;4CAAEV,EAAAA,EAAI,eAAA;4CAAiBC,cAAAA,EAAgB;AAAS,yCAAA;;;;;;;8BAKvE+C,GAAA,CAACS,IAAAA,EAAAA;oBAAK2B,cAAAA,EAAe,QAAA;AACnB,oBAAA,QAAA,gBAAApC,GAAA,CAACa,GAAAA,EAAAA;wBAAIC,UAAAA,EAAY,CAAA;AACf,wBAAA,QAAA,gBAAAd,GAAA,CAACqC,UAAAA,EAAAA;4BACCC,OAAAA,EAAS,CAACzD,KAAAA,GAA+CD,YAAAA,CAAaC,KAAAA,EAAO,IAAA,CAAA;sCAE5EnB,aAAAA,CAAc;gCACbV,EAAAA,EAAI,qBAAA;gCACJC,cAAAA,EAAgB;AAClB,6BAAA;;;;;;;AAOd;AAEA,MAAMsF,kBAAAA,GAAqB,IAAA;AACzB,IAAA,qBACEvC,GAAA,CAACwC,YAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAxC,GAAA,CAAC7C,WAAAA,EAAAA,EAAAA;;AAGP;;;;"}
|
|
@@ -65,12 +65,13 @@ const simpleQuery = async (query, api)=>{
|
|
|
65
65
|
getFetchClient.triggerSessionExpired();
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
const responseData = err.response?.data;
|
|
69
|
+
if (typeof responseData === 'object' && responseData !== null && 'error' in responseData) {
|
|
69
70
|
/**
|
|
70
71
|
* This will most likely be ApiError
|
|
71
72
|
*/ return {
|
|
72
73
|
data: undefined,
|
|
73
|
-
error:
|
|
74
|
+
error: responseData.error
|
|
74
75
|
};
|
|
75
76
|
} else {
|
|
76
77
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseQuery.js","sources":["../../../../../admin/src/utils/baseQuery.ts"],"sourcesContent":["import { SerializedError } from '@reduxjs/toolkit';\nimport { BaseQueryFn } from '@reduxjs/toolkit/query';\n\nimport { logout as logoutAction } from '../reducer';\nimport {\n getFetchClient,\n triggerSessionExpired,\n type FetchOptions,\n ApiError,\n isFetchError,\n} from '../utils/getFetchClient';\n\ninterface QueryArguments {\n url: string;\n method?: 'GET' | 'POST' | 'DELETE' | 'PUT';\n data?: unknown;\n config?: FetchOptions;\n}\n\ninterface UnknownApiError {\n name: 'UnknownError';\n message: string;\n details?: unknown;\n status?: number;\n}\n\ntype BaseQueryError = ApiError | UnknownApiError;\n\nconst isAuthPath = (url: string) => /^\\/admin\\/(login|logout|access-token)\\b/.test(url);\n\nconst simpleQuery: BaseQueryFn<\n string | QueryArguments,\n unknown,\n BaseQueryError | SerializedError\n> = async (query, api) => {\n const { signal, dispatch } = api;\n\n const executeQuery = async (queryToExecute: string | QueryArguments) => {\n const { get, post, del, put } = getFetchClient();\n if (typeof queryToExecute === 'string') {\n const result = await get(queryToExecute, { signal });\n return result;\n }\n\n const { url, method = 'GET', data, config } = queryToExecute;\n if (method === 'POST') {\n return post(url, data, { ...config, signal });\n }\n if (method === 'DELETE') {\n return del(url, { ...config, signal });\n }\n if (method === 'PUT') {\n return put(url, data, { ...config, signal });\n }\n return get(url, { ...config, signal });\n };\n\n try {\n const result = await executeQuery(query);\n return { data: result.data };\n } catch (err) {\n // Handle error of type FetchError\n\n if (isFetchError(err)) {\n // If we receive a 401 here, getFetchClient already tried to refresh and failed.\n // Log the user out since their session is no longer valid.\n if (err.status === 401) {\n const url = typeof query === 'string' ? query : query.url;\n\n if (!isAuthPath(url)) {\n try {\n const { post } = getFetchClient();\n await post('/admin/logout');\n } catch {\n // no-op\n }\n\n dispatch(logoutAction());\n // Notify the React layer so the active tab redirects to /auth/login.\n // Without this, only other tabs (via the storage event) would react;\n // the tab that originated the failing request would stay put until\n // the user clicked something or refreshed.\n triggerSessionExpired();\n }\n }\n\n
|
|
1
|
+
{"version":3,"file":"baseQuery.js","sources":["../../../../../admin/src/utils/baseQuery.ts"],"sourcesContent":["import { SerializedError } from '@reduxjs/toolkit';\nimport { BaseQueryFn } from '@reduxjs/toolkit/query';\n\nimport { logout as logoutAction } from '../reducer';\nimport {\n getFetchClient,\n triggerSessionExpired,\n type FetchOptions,\n ApiError,\n isFetchError,\n} from '../utils/getFetchClient';\n\ninterface QueryArguments {\n url: string;\n method?: 'GET' | 'POST' | 'DELETE' | 'PUT';\n data?: unknown;\n config?: FetchOptions;\n}\n\ninterface UnknownApiError {\n name: 'UnknownError';\n message: string;\n details?: unknown;\n status?: number;\n}\n\ntype BaseQueryError = ApiError | UnknownApiError;\n\nconst isAuthPath = (url: string) => /^\\/admin\\/(login|logout|access-token)\\b/.test(url);\n\nconst simpleQuery: BaseQueryFn<\n string | QueryArguments,\n unknown,\n BaseQueryError | SerializedError\n> = async (query, api) => {\n const { signal, dispatch } = api;\n\n const executeQuery = async (queryToExecute: string | QueryArguments) => {\n const { get, post, del, put } = getFetchClient();\n if (typeof queryToExecute === 'string') {\n const result = await get(queryToExecute, { signal });\n return result;\n }\n\n const { url, method = 'GET', data, config } = queryToExecute;\n if (method === 'POST') {\n return post(url, data, { ...config, signal });\n }\n if (method === 'DELETE') {\n return del(url, { ...config, signal });\n }\n if (method === 'PUT') {\n return put(url, data, { ...config, signal });\n }\n return get(url, { ...config, signal });\n };\n\n try {\n const result = await executeQuery(query);\n return { data: result.data };\n } catch (err) {\n // Handle error of type FetchError\n\n if (isFetchError(err)) {\n // If we receive a 401 here, getFetchClient already tried to refresh and failed.\n // Log the user out since their session is no longer valid.\n if (err.status === 401) {\n const url = typeof query === 'string' ? query : query.url;\n\n if (!isAuthPath(url)) {\n try {\n const { post } = getFetchClient();\n await post('/admin/logout');\n } catch {\n // no-op\n }\n\n dispatch(logoutAction());\n // Notify the React layer so the active tab redirects to /auth/login.\n // Without this, only other tabs (via the storage event) would react;\n // the tab that originated the failing request would stay put until\n // the user clicked something or refreshed.\n triggerSessionExpired();\n }\n }\n\n const responseData = err.response?.data;\n\n if (typeof responseData === 'object' && responseData !== null && 'error' in responseData) {\n /**\n * This will most likely be ApiError\n */\n return { data: undefined, error: responseData.error as BaseQueryError };\n } else {\n return {\n data: undefined,\n error: {\n name: 'UnknownError',\n message: err.message,\n details: err.response,\n status: err.status,\n } as UnknownApiError,\n };\n }\n }\n\n const error = err instanceof Error ? err : new Error('Unknown error');\n return {\n data: undefined,\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n } satisfies SerializedError,\n };\n }\n};\n\nconst fetchBaseQuery = () => simpleQuery;\n\nconst isBaseQueryError = (error: BaseQueryError | SerializedError): error is BaseQueryError => {\n return error.name !== undefined;\n};\n\nexport { fetchBaseQuery, isBaseQueryError };\nexport type { BaseQueryError, UnknownApiError, QueryArguments };\n"],"names":["isAuthPath","url","test","simpleQuery","query","api","signal","dispatch","executeQuery","queryToExecute","get","post","del","put","getFetchClient","result","method","data","config","err","isFetchError","status","logoutAction","triggerSessionExpired","responseData","response","undefined","error","name","message","details","Error","stack","fetchBaseQuery","isBaseQueryError"],"mappings":"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"}
|
|
@@ -63,12 +63,13 @@ const simpleQuery = async (query, api)=>{
|
|
|
63
63
|
triggerSessionExpired();
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
const responseData = err.response?.data;
|
|
67
|
+
if (typeof responseData === 'object' && responseData !== null && 'error' in responseData) {
|
|
67
68
|
/**
|
|
68
69
|
* This will most likely be ApiError
|
|
69
70
|
*/ return {
|
|
70
71
|
data: undefined,
|
|
71
|
-
error:
|
|
72
|
+
error: responseData.error
|
|
72
73
|
};
|
|
73
74
|
} else {
|
|
74
75
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseQuery.mjs","sources":["../../../../../admin/src/utils/baseQuery.ts"],"sourcesContent":["import { SerializedError } from '@reduxjs/toolkit';\nimport { BaseQueryFn } from '@reduxjs/toolkit/query';\n\nimport { logout as logoutAction } from '../reducer';\nimport {\n getFetchClient,\n triggerSessionExpired,\n type FetchOptions,\n ApiError,\n isFetchError,\n} from '../utils/getFetchClient';\n\ninterface QueryArguments {\n url: string;\n method?: 'GET' | 'POST' | 'DELETE' | 'PUT';\n data?: unknown;\n config?: FetchOptions;\n}\n\ninterface UnknownApiError {\n name: 'UnknownError';\n message: string;\n details?: unknown;\n status?: number;\n}\n\ntype BaseQueryError = ApiError | UnknownApiError;\n\nconst isAuthPath = (url: string) => /^\\/admin\\/(login|logout|access-token)\\b/.test(url);\n\nconst simpleQuery: BaseQueryFn<\n string | QueryArguments,\n unknown,\n BaseQueryError | SerializedError\n> = async (query, api) => {\n const { signal, dispatch } = api;\n\n const executeQuery = async (queryToExecute: string | QueryArguments) => {\n const { get, post, del, put } = getFetchClient();\n if (typeof queryToExecute === 'string') {\n const result = await get(queryToExecute, { signal });\n return result;\n }\n\n const { url, method = 'GET', data, config } = queryToExecute;\n if (method === 'POST') {\n return post(url, data, { ...config, signal });\n }\n if (method === 'DELETE') {\n return del(url, { ...config, signal });\n }\n if (method === 'PUT') {\n return put(url, data, { ...config, signal });\n }\n return get(url, { ...config, signal });\n };\n\n try {\n const result = await executeQuery(query);\n return { data: result.data };\n } catch (err) {\n // Handle error of type FetchError\n\n if (isFetchError(err)) {\n // If we receive a 401 here, getFetchClient already tried to refresh and failed.\n // Log the user out since their session is no longer valid.\n if (err.status === 401) {\n const url = typeof query === 'string' ? query : query.url;\n\n if (!isAuthPath(url)) {\n try {\n const { post } = getFetchClient();\n await post('/admin/logout');\n } catch {\n // no-op\n }\n\n dispatch(logoutAction());\n // Notify the React layer so the active tab redirects to /auth/login.\n // Without this, only other tabs (via the storage event) would react;\n // the tab that originated the failing request would stay put until\n // the user clicked something or refreshed.\n triggerSessionExpired();\n }\n }\n\n
|
|
1
|
+
{"version":3,"file":"baseQuery.mjs","sources":["../../../../../admin/src/utils/baseQuery.ts"],"sourcesContent":["import { SerializedError } from '@reduxjs/toolkit';\nimport { BaseQueryFn } from '@reduxjs/toolkit/query';\n\nimport { logout as logoutAction } from '../reducer';\nimport {\n getFetchClient,\n triggerSessionExpired,\n type FetchOptions,\n ApiError,\n isFetchError,\n} from '../utils/getFetchClient';\n\ninterface QueryArguments {\n url: string;\n method?: 'GET' | 'POST' | 'DELETE' | 'PUT';\n data?: unknown;\n config?: FetchOptions;\n}\n\ninterface UnknownApiError {\n name: 'UnknownError';\n message: string;\n details?: unknown;\n status?: number;\n}\n\ntype BaseQueryError = ApiError | UnknownApiError;\n\nconst isAuthPath = (url: string) => /^\\/admin\\/(login|logout|access-token)\\b/.test(url);\n\nconst simpleQuery: BaseQueryFn<\n string | QueryArguments,\n unknown,\n BaseQueryError | SerializedError\n> = async (query, api) => {\n const { signal, dispatch } = api;\n\n const executeQuery = async (queryToExecute: string | QueryArguments) => {\n const { get, post, del, put } = getFetchClient();\n if (typeof queryToExecute === 'string') {\n const result = await get(queryToExecute, { signal });\n return result;\n }\n\n const { url, method = 'GET', data, config } = queryToExecute;\n if (method === 'POST') {\n return post(url, data, { ...config, signal });\n }\n if (method === 'DELETE') {\n return del(url, { ...config, signal });\n }\n if (method === 'PUT') {\n return put(url, data, { ...config, signal });\n }\n return get(url, { ...config, signal });\n };\n\n try {\n const result = await executeQuery(query);\n return { data: result.data };\n } catch (err) {\n // Handle error of type FetchError\n\n if (isFetchError(err)) {\n // If we receive a 401 here, getFetchClient already tried to refresh and failed.\n // Log the user out since their session is no longer valid.\n if (err.status === 401) {\n const url = typeof query === 'string' ? query : query.url;\n\n if (!isAuthPath(url)) {\n try {\n const { post } = getFetchClient();\n await post('/admin/logout');\n } catch {\n // no-op\n }\n\n dispatch(logoutAction());\n // Notify the React layer so the active tab redirects to /auth/login.\n // Without this, only other tabs (via the storage event) would react;\n // the tab that originated the failing request would stay put until\n // the user clicked something or refreshed.\n triggerSessionExpired();\n }\n }\n\n const responseData = err.response?.data;\n\n if (typeof responseData === 'object' && responseData !== null && 'error' in responseData) {\n /**\n * This will most likely be ApiError\n */\n return { data: undefined, error: responseData.error as BaseQueryError };\n } else {\n return {\n data: undefined,\n error: {\n name: 'UnknownError',\n message: err.message,\n details: err.response,\n status: err.status,\n } as UnknownApiError,\n };\n }\n }\n\n const error = err instanceof Error ? err : new Error('Unknown error');\n return {\n data: undefined,\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n } satisfies SerializedError,\n };\n }\n};\n\nconst fetchBaseQuery = () => simpleQuery;\n\nconst isBaseQueryError = (error: BaseQueryError | SerializedError): error is BaseQueryError => {\n return error.name !== undefined;\n};\n\nexport { fetchBaseQuery, isBaseQueryError };\nexport type { BaseQueryError, UnknownApiError, QueryArguments };\n"],"names":["isAuthPath","url","test","simpleQuery","query","api","signal","dispatch","executeQuery","queryToExecute","get","post","del","put","getFetchClient","result","method","data","config","err","isFetchError","status","logoutAction","triggerSessionExpired","responseData","response","undefined","error","name","message","details","Error","stack","fetchBaseQuery","isBaseQueryError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sources":["../../../../../admin/src/utils/users.ts"],"sourcesContent":["import type { User } from '../features/Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * getDisplayName\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({ firstname, lastname, username, email }: Partial<User> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getInitials\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the initials of the user (based on their firstname / lastname or their display name)\n */\nconst getInitials = (user: Partial<User> = {}): string => {\n return user?.firstname && user?.lastname\n ? `${user.firstname.substring(0, 1)}${user.lastname.substring(0, 1)}`\n : getDisplayName(user)\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 1)\n .toUpperCase();\n};\n\n/* -------------------------------------------------------------------------------------------------\n * hashAdminUserEmail\n * -----------------------------------------------------------------------------------------------*/\n\nconst hashAdminUserEmail = async (payload?: User) => {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await digestMessage(payload.email);\n } catch
|
|
1
|
+
{"version":3,"file":"users.js","sources":["../../../../../admin/src/utils/users.ts"],"sourcesContent":["import type { User } from '../features/Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * getDisplayName\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({ firstname, lastname, username, email }: Partial<User> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getInitials\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the initials of the user (based on their firstname / lastname or their display name)\n */\nconst getInitials = (user: Partial<User> = {}): string => {\n return user?.firstname && user?.lastname\n ? `${user.firstname.substring(0, 1)}${user.lastname.substring(0, 1)}`\n : getDisplayName(user)\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 1)\n .toUpperCase();\n};\n\n/* -------------------------------------------------------------------------------------------------\n * hashAdminUserEmail\n * -----------------------------------------------------------------------------------------------*/\n\nconst hashAdminUserEmail = async (payload?: User) => {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await digestMessage(payload.email);\n } catch {\n return null;\n }\n};\n\nconst bufferToHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n};\nconst digestMessage = async (message: string) => {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return bufferToHex(hashBuffer);\n};\n\nexport { getDisplayName, getInitials, hashAdminUserEmail };\n"],"names":["getDisplayName","firstname","lastname","username","email","trim","getInitials","user","substring","split","map","name","join","toUpperCase","hashAdminUserEmail","payload","digestMessage","bufferToHex","buffer","Uint8Array","b","toString","padStart","message","msgUint8","TextEncoder","encode","hashBuffer","crypto","subtle","digest"],"mappings":";;AAEA;;;;AAMC,IACD,MAAMA,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAiB,GAAG,EAAE,GAAA;AAClF,IAAA,IAAID,QAAAA,EAAU;QACZ,OAAOA,QAAAA;AACT,IAAA;;AAGA,IAAA,IAAIF,SAAAA,EAAW;AACb,QAAA,OAAO,GAAGA,SAAAA,CAAU,CAAC,EAAEC,QAAAA,IAAY,EAAA,CAAA,CAAI,CAACG,IAAI,EAAA;AAC9C,IAAA;AAEA,IAAA,OAAOD,KAAAA,IAAS,EAAA;AAClB;AAEA;;;;AAMC,IACD,MAAME,WAAAA,GAAc,CAACC,IAAAA,GAAsB,EAAE,GAAA;AAC3C,IAAA,OAAOA,MAAMN,SAAAA,IAAaM,IAAAA,EAAML,WAC5B,CAAA,EAAGK,IAAAA,CAAKN,SAAS,CAACO,SAAS,CAAC,CAAA,EAAG,KAAKD,IAAAA,CAAKL,QAAQ,CAACM,SAAS,CAAC,GAAG,CAAA,CAAA,CAAA,CAAI,GACnER,cAAAA,CAAeO,IAAAA,CAAAA,CACZE,KAAK,CAAC,GAAA,CAAA,CACNC,GAAG,CAAC,CAACC,OAASA,IAAAA,CAAKH,SAAS,CAAC,CAAA,EAAG,CAAA,CAAA,CAAA,CAChCI,IAAI,CAAC,EAAA,CAAA,CACLJ,SAAS,CAAC,CAAA,EAAG,GACbK,WAAW,EAAA;AACpB;AAEA;;qGAIA,MAAMC,qBAAqB,OAAOC,OAAAA,GAAAA;AAChC,IAAA,IAAI,CAACA,OAAAA,IAAW,CAACA,OAAAA,CAAQX,KAAK,EAAE;QAC9B,OAAO,IAAA;AACT,IAAA;IAEA,IAAI;QACF,OAAO,MAAMY,aAAAA,CAAcD,OAAAA,CAAQX,KAAK,CAAA;AAC1C,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,IAAA;AACT,IAAA;AACF;AAEA,MAAMa,cAAc,CAACC,MAAAA,GAAAA;IACnB,OAAO;AAAI,QAAA,GAAA,IAAIC,UAAAA,CAAWD,MAAAA;AAAQ,KAAA,CAACR,GAAG,CAAC,CAACU,CAAAA,GAAMA,CAAAA,CAAEC,QAAQ,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,CAAA,EAAG,GAAA,CAAA,CAAA,CAAMV,IAAI,CAAC,EAAA,CAAA;AACtF,CAAA;AACA,MAAMI,gBAAgB,OAAOO,OAAAA,GAAAA;AAC3B,IAAA,MAAMC,QAAAA,GAAW,IAAIC,WAAAA,EAAAA,CAAcC,MAAM,CAACH,OAAAA,CAAAA;AAC1C,IAAA,MAAMI,aAAa,MAAMC,MAAAA,CAAOC,MAAM,CAACC,MAAM,CAAC,SAAA,EAAWN,QAAAA,CAAAA;AAEzD,IAAA,OAAOP,WAAAA,CAAYU,UAAAA,CAAAA;AACrB,CAAA;;;;;;"}
|