@strapi/plugin-users-permissions 5.0.0-beta.0 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/_chunks/{EditViewPage-1NY3YGcc-PZo-tzC4.mjs → EditViewPage-BJdNfzBZ-XIkFGBc4.mjs} +4 -6
  2. package/dist/_chunks/{EditViewPage-1NY3YGcc-PZo-tzC4.mjs.map → EditViewPage-BJdNfzBZ-XIkFGBc4.mjs.map} +1 -1
  3. package/dist/_chunks/{EditViewPage-1NY3YGcc-l5uN1p3e.js → EditViewPage-BJdNfzBZ-eKwHxgPQ.js} +163 -165
  4. package/dist/_chunks/{EditViewPage-1NY3YGcc-l5uN1p3e.js.map → EditViewPage-BJdNfzBZ-eKwHxgPQ.js.map} +1 -1
  5. package/dist/_chunks/{ListViewPage-rkQXnquk-rBwGjRm0.js → ListViewPage-FE12IpwT-Wq63ge4-.js} +106 -106
  6. package/dist/_chunks/{ListViewPage-rkQXnquk-rBwGjRm0.js.map → ListViewPage-FE12IpwT-Wq63ge4-.js.map} +1 -1
  7. package/dist/_chunks/{ListViewPage-rkQXnquk-LJPTb3bJ.mjs → ListViewPage-FE12IpwT-qmEuoG2g.mjs} +6 -6
  8. package/dist/_chunks/{ListViewPage-rkQXnquk-LJPTb3bJ.mjs.map → ListViewPage-FE12IpwT-qmEuoG2g.mjs.map} +1 -1
  9. package/dist/_chunks/{ReviewWorkflowsColumn-m0_IsejA-vbOQ9Ruh.mjs → ReviewWorkflowsColumn-NUu47oVz-8gQO_Y5x.mjs} +2 -2
  10. package/dist/_chunks/{ReviewWorkflowsColumn-m0_IsejA-vbOQ9Ruh.mjs.map → ReviewWorkflowsColumn-NUu47oVz-8gQO_Y5x.mjs.map} +1 -1
  11. package/dist/_chunks/{ReviewWorkflowsColumn-m0_IsejA-8zmlk45y.js → ReviewWorkflowsColumn-NUu47oVz-ARD7iQQF.js} +5 -5
  12. package/dist/_chunks/{ReviewWorkflowsColumn-m0_IsejA-8zmlk45y.js.map → ReviewWorkflowsColumn-NUu47oVz-ARD7iQQF.js.map} +1 -1
  13. package/dist/_chunks/{constants--j5MCV5y-TtrVffUD.js → constants-D6NLEhwu-4IL8biHd.js} +18 -18
  14. package/dist/_chunks/{constants--j5MCV5y-TtrVffUD.js.map → constants-D6NLEhwu-4IL8biHd.js.map} +1 -1
  15. package/dist/_chunks/{constants--j5MCV5y-h4BGe6Tp.mjs → constants-D6NLEhwu-gRKBHArd.mjs} +2 -2
  16. package/dist/_chunks/{constants--j5MCV5y-h4BGe6Tp.mjs.map → constants-D6NLEhwu-gRKBHArd.mjs.map} +1 -1
  17. package/dist/_chunks/{index-NzLAHRwx-MeSnW6w9.mjs → index-1NFAbkxM-Km1zKLTh.mjs} +11 -9
  18. package/dist/_chunks/{index-NzLAHRwx-MeSnW6w9.mjs.map → index-1NFAbkxM-Km1zKLTh.mjs.map} +1 -1
  19. package/dist/_chunks/{index-NzLAHRwx-bcHTdv6V.js → index-1NFAbkxM-c8HdvwSA.js} +11 -9
  20. package/dist/_chunks/{index-NzLAHRwx-bcHTdv6V.js.map → index-1NFAbkxM-c8HdvwSA.js.map} +1 -1
  21. package/dist/_chunks/{index-nKbtq7R-.js → index-46oU0LRy.js} +2 -2
  22. package/dist/_chunks/{index-nKbtq7R-.js.map → index-46oU0LRy.js.map} +1 -1
  23. package/dist/_chunks/{index-cC7LGLsK.mjs → index-DtWla9tx.mjs} +2 -2
  24. package/dist/_chunks/{index-cC7LGLsK.mjs.map → index-DtWla9tx.mjs.map} +1 -1
  25. package/dist/_chunks/{index-OPfJFEYD.mjs → index-G9pZniMC.mjs} +3 -3
  26. package/dist/_chunks/{index-OPfJFEYD.mjs.map → index-G9pZniMC.mjs.map} +1 -1
  27. package/dist/_chunks/{index-YtsLdO8d.js → index-JO4fO3Yj.js} +10 -10
  28. package/dist/_chunks/{index-YtsLdO8d.js.map → index-JO4fO3Yj.js.map} +1 -1
  29. package/dist/_chunks/{index-VQ3uu7FR.mjs → index-PTS42_em.mjs} +10 -10
  30. package/dist/_chunks/{index-VQ3uu7FR.mjs.map → index-PTS42_em.mjs.map} +1 -1
  31. package/dist/_chunks/{index-deaP9rgn.js → index-UxzhJuP2.js} +4 -4
  32. package/dist/_chunks/{index-deaP9rgn.js.map → index-UxzhJuP2.js.map} +1 -1
  33. package/dist/_chunks/{index-eH8XAk_H.mjs → index-Vg50EMBp.mjs} +2 -2
  34. package/dist/_chunks/{index-eH8XAk_H.mjs.map → index-Vg50EMBp.mjs.map} +1 -1
  35. package/dist/_chunks/{index-Omcy-t4F.js → index-_UNneVIg.js} +2 -2
  36. package/dist/_chunks/{index-Omcy-t4F.js.map → index-_UNneVIg.js.map} +1 -1
  37. package/dist/_chunks/{index-AT8MwqgE.js → index-gw-9XoIT.js} +4 -4
  38. package/dist/_chunks/{index-AT8MwqgE.js.map → index-gw-9XoIT.js.map} +1 -1
  39. package/dist/_chunks/{index-i1lZHF3N.mjs → index-oUZpvYqS.mjs} +3 -3
  40. package/dist/_chunks/{index-i1lZHF3N.mjs.map → index-oUZpvYqS.mjs.map} +1 -1
  41. package/dist/_chunks/{useSyncRbac-Od0wrAnD-mYMbQBry.js → useSyncRbac-LNOzRXJ5-5S0qhFuZ.js} +7 -7
  42. package/dist/_chunks/{useSyncRbac-Od0wrAnD-mYMbQBry.js.map → useSyncRbac-LNOzRXJ5-5S0qhFuZ.js.map} +1 -1
  43. package/dist/_chunks/{useSyncRbac-Od0wrAnD-fP3UP9Sk.mjs → useSyncRbac-LNOzRXJ5-PZzFwA1X.mjs} +2 -2
  44. package/dist/_chunks/{useSyncRbac-Od0wrAnD-fP3UP9Sk.mjs.map → useSyncRbac-LNOzRXJ5-PZzFwA1X.mjs.map} +1 -1
  45. package/dist/admin/index.js +1 -1
  46. package/dist/admin/index.mjs +1 -1
  47. package/package.json +6 -6
  48. package/server/controllers/auth.js +1 -2
  49. package/server/controllers/user.js +3 -4
  50. package/server/services/user.js +3 -3
  51. package/server/utils/sanitize/sanitizers.js +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-i1lZHF3N.mjs","sources":["../../admin/src/pages/EmailTemplates/utils/schema.js","../../admin/src/pages/EmailTemplates/components/EmailForm.jsx","../../admin/src/pages/EmailTemplates/components/EmailTable.jsx","../../admin/src/pages/EmailTemplates/index.jsx"],"sourcesContent":["import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n options: yup\n .object()\n .shape({\n from: yup\n .object()\n .shape({\n name: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n email: yup.string().email(translatedErrors.email).required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(),\n response_email: yup.string().email(translatedErrors.email),\n object: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n message: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(translatedErrors.required.id),\n});\n\nexport default schema;\n","import React from 'react';\n\nimport {\n Button,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n} from '@strapi/design-system';\nimport { Breadcrumbs, Crumb } from '@strapi/design-system/v2';\nimport { Form, InputRenderer } from '@strapi/strapi/admin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\nimport schema from '../utils/schema';\n\nconst EmailForm = ({ template, onToggle, onSubmit }) => {\n const { formatMessage } = useIntl();\n\n return (\n <ModalLayout\n onClose={onToggle}\n labelledBy={`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}`}\n >\n <ModalHeader>\n <Breadcrumbs\n label={`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${formatMessage({\n id: getTrad(template.display),\n defaultMessage: template.display,\n })}`}\n >\n <Crumb>\n {formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}\n </Crumb>\n <Crumb isCurrent>\n {formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}\n </Crumb>\n </Breadcrumbs>\n </ModalHeader>\n <Form onSubmit={onSubmit} initialValues={template} validationSchema={schema}>\n {({ isSubmitting }) => {\n return (\n <>\n <ModalBody>\n <Grid gap={5}>\n {[\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.name.label'),\n defaultMessage: 'Shipper name',\n }),\n name: 'options.from.name',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.email.label'),\n defaultMessage: 'Shipper email',\n }),\n name: 'options.from.email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.response_email.label'),\n defaultMessage: 'Response email',\n }),\n name: 'options.response_email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.object.label'),\n defaultMessage: 'Subject',\n }),\n name: 'options.object',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.message.label'),\n defaultMessage: 'Message',\n }),\n name: 'options.message',\n size: 12,\n type: 'text',\n },\n ].map(({ size, ...field }) => (\n <GridItem key={field.name} col={size}>\n <InputRenderer {...field} />\n </GridItem>\n ))}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onToggle} variant=\"tertiary\">\n Cancel\n </Button>\n }\n endActions={\n <Button loading={isSubmitting} type=\"submit\">\n Finish\n </Button>\n }\n />\n </>\n );\n }}\n </Form>\n </ModalLayout>\n );\n};\n\nEmailForm.propTypes = {\n template: PropTypes.shape({\n display: PropTypes.string,\n icon: PropTypes.string,\n options: PropTypes.shape({\n from: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string,\n }),\n message: PropTypes.string,\n object: PropTypes.string,\n response_email: PropTypes.string,\n }),\n }).isRequired,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n};\n\nexport default EmailForm;\n","import React from 'react';\n\nimport {\n Icon,\n IconButton,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Check, Pencil, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nconst EmailTable = ({ canUpdate, onEditClick }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Table colCount={3} rowCount={3}>\n <Thead>\n <Tr>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.icon.label'),\n defaultMessage: 'icon',\n })}\n </VisuallyHidden>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Email.template.table.name.label'),\n defaultMessage: 'name',\n })}\n </Typography>\n </Th>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.action.label'),\n defaultMessage: 'action',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr onClick={() => onEditClick('reset_password')}>\n <Td>\n <Icon>\n <Refresh\n aria-label={formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n />\n </Icon>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('reset_password')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n noBorder\n icon={canUpdate && <Pencil />}\n />\n </Td>\n </Tr>\n <Tr onClick={() => onEditClick('email_confirmation')}>\n <Td>\n <Icon>\n <Check\n aria-label={formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n />\n </Icon>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('email_confirmation')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n noBorder\n icon={canUpdate && <Pencil />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n};\n\nEmailTable.propTypes = {\n canUpdate: PropTypes.bool.isRequired,\n onEditClick: PropTypes.func.isRequired,\n};\n\nexport default EmailTable;\n","import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { ContentLayout, HeaderLayout, useNotifyAT } from '@strapi/design-system';\nimport {\n Page,\n useAPIErrorHandler,\n useNotification,\n useFetchClient,\n useRBAC,\n} from '@strapi/strapi/admin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport EmailForm from './components/EmailForm';\nimport EmailTable from './components/EmailTable';\n\nconst ProtectedEmailTemplatesPage = () => (\n <Page.Protect permissions={PERMISSIONS.readEmailTemplates}>\n <EmailTemplatesPage />\n </Page.Protect>\n);\nconst EmailTemplatesPage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { notifyStatus } = useNotifyAT();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const [templateToEdit, setTemplateToEdit] = React.useState(null);\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateEmailTemplates });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'email-templates'],\n async () => {\n const { data } = await get('/users-permissions/email-templates');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Email.template.data.loaded'),\n defaultMessage: 'Email templates has been loaded',\n })\n );\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const handleEditClick = (template) => {\n setTemplateToEdit(template);\n handleToggle();\n };\n\n const submitMutation = useMutation(\n (body) => put('/users-permissions/email-templates', { 'email-templates': body }),\n {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'email-templates']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n trackUsage('didEditEmailTemplates');\n\n handleToggle();\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n }\n );\n\n const handleSubmit = (body) => {\n trackUsage('willEditEmailTemplates');\n\n const editedTemplates = { ...data, [templateToEdit]: body };\n submitMutation.mutate(editedTemplates);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={submitMutation.isLoading}>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n }),\n }\n )}\n />\n <HeaderLayout\n title={formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n })}\n />\n <ContentLayout>\n <EmailTable onEditClick={handleEditClick} canUpdate={canUpdate} />\n {isModalOpen && (\n <EmailForm\n template={data[templateToEdit]}\n onToggle={handleToggle}\n onSubmit={handleSubmit}\n />\n )}\n </ContentLayout>\n </Page.Main>\n );\n};\n\nexport { ProtectedEmailTemplatesPage, EmailTemplatesPage };\n"],"names":["data","Helmet"],"mappings":"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"}
1
+ {"version":3,"file":"index-oUZpvYqS.mjs","sources":["../../admin/src/pages/EmailTemplates/utils/schema.js","../../admin/src/pages/EmailTemplates/components/EmailForm.jsx","../../admin/src/pages/EmailTemplates/components/EmailTable.jsx","../../admin/src/pages/EmailTemplates/index.jsx"],"sourcesContent":["import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n options: yup\n .object()\n .shape({\n from: yup\n .object()\n .shape({\n name: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n email: yup.string().email(translatedErrors.email).required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(),\n response_email: yup.string().email(translatedErrors.email),\n object: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n message: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(translatedErrors.required.id),\n});\n\nexport default schema;\n","import React from 'react';\n\nimport {\n Button,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n} from '@strapi/design-system';\nimport { Breadcrumbs, Crumb } from '@strapi/design-system/v2';\nimport { Form, InputRenderer } from '@strapi/strapi/admin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\nimport schema from '../utils/schema';\n\nconst EmailForm = ({ template, onToggle, onSubmit }) => {\n const { formatMessage } = useIntl();\n\n return (\n <ModalLayout\n onClose={onToggle}\n labelledBy={`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}`}\n >\n <ModalHeader>\n <Breadcrumbs\n label={`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${formatMessage({\n id: getTrad(template.display),\n defaultMessage: template.display,\n })}`}\n >\n <Crumb>\n {formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}\n </Crumb>\n <Crumb isCurrent>\n {formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}\n </Crumb>\n </Breadcrumbs>\n </ModalHeader>\n <Form onSubmit={onSubmit} initialValues={template} validationSchema={schema}>\n {({ isSubmitting }) => {\n return (\n <>\n <ModalBody>\n <Grid gap={5}>\n {[\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.name.label'),\n defaultMessage: 'Shipper name',\n }),\n name: 'options.from.name',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.email.label'),\n defaultMessage: 'Shipper email',\n }),\n name: 'options.from.email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.response_email.label'),\n defaultMessage: 'Response email',\n }),\n name: 'options.response_email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.object.label'),\n defaultMessage: 'Subject',\n }),\n name: 'options.object',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.message.label'),\n defaultMessage: 'Message',\n }),\n name: 'options.message',\n size: 12,\n type: 'text',\n },\n ].map(({ size, ...field }) => (\n <GridItem key={field.name} col={size}>\n <InputRenderer {...field} />\n </GridItem>\n ))}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onToggle} variant=\"tertiary\">\n Cancel\n </Button>\n }\n endActions={\n <Button loading={isSubmitting} type=\"submit\">\n Finish\n </Button>\n }\n />\n </>\n );\n }}\n </Form>\n </ModalLayout>\n );\n};\n\nEmailForm.propTypes = {\n template: PropTypes.shape({\n display: PropTypes.string,\n icon: PropTypes.string,\n options: PropTypes.shape({\n from: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string,\n }),\n message: PropTypes.string,\n object: PropTypes.string,\n response_email: PropTypes.string,\n }),\n }).isRequired,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n};\n\nexport default EmailForm;\n","import React from 'react';\n\nimport {\n Icon,\n IconButton,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Check, Pencil, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nconst EmailTable = ({ canUpdate, onEditClick }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Table colCount={3} rowCount={3}>\n <Thead>\n <Tr>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.icon.label'),\n defaultMessage: 'icon',\n })}\n </VisuallyHidden>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Email.template.table.name.label'),\n defaultMessage: 'name',\n })}\n </Typography>\n </Th>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.action.label'),\n defaultMessage: 'action',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr onClick={() => onEditClick('reset_password')}>\n <Td>\n <Icon>\n <Refresh\n aria-label={formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n />\n </Icon>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('reset_password')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n noBorder\n icon={canUpdate && <Pencil />}\n />\n </Td>\n </Tr>\n <Tr onClick={() => onEditClick('email_confirmation')}>\n <Td>\n <Icon>\n <Check\n aria-label={formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n />\n </Icon>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('email_confirmation')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n noBorder\n icon={canUpdate && <Pencil />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n};\n\nEmailTable.propTypes = {\n canUpdate: PropTypes.bool.isRequired,\n onEditClick: PropTypes.func.isRequired,\n};\n\nexport default EmailTable;\n","import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { ContentLayout, HeaderLayout, useNotifyAT } from '@strapi/design-system';\nimport {\n Page,\n useAPIErrorHandler,\n useNotification,\n useFetchClient,\n useRBAC,\n} from '@strapi/strapi/admin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport EmailForm from './components/EmailForm';\nimport EmailTable from './components/EmailTable';\n\nconst ProtectedEmailTemplatesPage = () => (\n <Page.Protect permissions={PERMISSIONS.readEmailTemplates}>\n <EmailTemplatesPage />\n </Page.Protect>\n);\nconst EmailTemplatesPage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { notifyStatus } = useNotifyAT();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const [templateToEdit, setTemplateToEdit] = React.useState(null);\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateEmailTemplates });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'email-templates'],\n async () => {\n const { data } = await get('/users-permissions/email-templates');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Email.template.data.loaded'),\n defaultMessage: 'Email templates has been loaded',\n })\n );\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const handleEditClick = (template) => {\n setTemplateToEdit(template);\n handleToggle();\n };\n\n const submitMutation = useMutation(\n (body) => put('/users-permissions/email-templates', { 'email-templates': body }),\n {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'email-templates']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n trackUsage('didEditEmailTemplates');\n\n handleToggle();\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n }\n );\n\n const handleSubmit = (body) => {\n trackUsage('willEditEmailTemplates');\n\n const editedTemplates = { ...data, [templateToEdit]: body };\n submitMutation.mutate(editedTemplates);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={submitMutation.isLoading}>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n }),\n }\n )}\n />\n <HeaderLayout\n title={formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n })}\n />\n <ContentLayout>\n <EmailTable onEditClick={handleEditClick} canUpdate={canUpdate} />\n {isModalOpen && (\n <EmailForm\n template={data[templateToEdit]}\n onToggle={handleToggle}\n onSubmit={handleSubmit}\n />\n )}\n </ContentLayout>\n </Page.Main>\n );\n};\n\nexport { ProtectedEmailTemplatesPage, EmailTemplatesPage };\n"],"names":["data","Helmet"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const React = require("react");
3
- const indexNzLAHRwx = require("./index-NzLAHRwx-bcHTdv6V.js");
3
+ const index1NFAbkxM = require("./index-1NFAbkxM-c8HdvwSA.js");
4
4
  function _interopNamespace(e) {
5
5
  if (e && e.__esModule)
6
6
  return e;
@@ -22,8 +22,8 @@ function _interopNamespace(e) {
22
22
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
23
23
  const useSyncRbac = (collectionTypeUID, query, containerName = "listView") => {
24
24
  const [isLoading, setIsLoading] = React__namespace.useState(true);
25
- const dispatch = indexNzLAHRwx.useTypedDispatch();
26
- const userPermissions = indexNzLAHRwx.useAuth("useSyncRbac", (state) => state.permissions);
25
+ const dispatch = index1NFAbkxM.useTypedDispatch();
26
+ const userPermissions = index1NFAbkxM.useAuth("useSyncRbac", (state) => state.permissions);
27
27
  const relatedPermissions = React__namespace.useMemo(() => {
28
28
  const contentTypePermissions = userPermissions.filter(
29
29
  (permission) => permission.subject === collectionTypeUID
@@ -37,7 +37,7 @@ const useSyncRbac = (collectionTypeUID, query, containerName = "listView") => {
37
37
  setIsLoading(true);
38
38
  if (relatedPermissions) {
39
39
  dispatch(
40
- indexNzLAHRwx.setPermissions({
40
+ index1NFAbkxM.setPermissions({
41
41
  permissions: relatedPermissions,
42
42
  __meta__: {
43
43
  plugins: query ? query.plugins : void 0,
@@ -48,10 +48,10 @@ const useSyncRbac = (collectionTypeUID, query, containerName = "listView") => {
48
48
  }
49
49
  setIsLoading(false);
50
50
  return () => {
51
- dispatch(indexNzLAHRwx.resetPermissions());
51
+ dispatch(index1NFAbkxM.resetPermissions());
52
52
  };
53
53
  }, [relatedPermissions, dispatch, query, containerName]);
54
- const permissions = indexNzLAHRwx.useTypedSelector((state) => state["content-manager"].rbac.permissions);
54
+ const permissions = index1NFAbkxM.useTypedSelector((state) => state["content-manager"].rbac.permissions);
55
55
  const isPermissionMismatch = permissions && permissions.some((permission) => permission.subject !== collectionTypeUID) ? true : false;
56
56
  return {
57
57
  isLoading,
@@ -60,4 +60,4 @@ const useSyncRbac = (collectionTypeUID, query, containerName = "listView") => {
60
60
  };
61
61
  };
62
62
  exports.useSyncRbac = useSyncRbac;
63
- //# sourceMappingURL=useSyncRbac-Od0wrAnD-mYMbQBry.js.map
63
+ //# sourceMappingURL=useSyncRbac-LNOzRXJ5-5S0qhFuZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSyncRbac-Od0wrAnD-mYMbQBry.js","sources":["../../../../core/admin/dist/admin/useSyncRbac-Od0wrAnD.mjs"],"sourcesContent":["import * as React from 'react';\nimport { Y as useTypedDispatch, $ as useAuth, aG as setPermissions, aH as resetPermissions, h as useTypedSelector } from './reducers-TOuLOGw_.mjs';\n\nconst useSyncRbac = (collectionTypeUID, query, containerName = \"listView\") => {\n const [isLoading, setIsLoading] = React.useState(true);\n const dispatch = useTypedDispatch();\n const userPermissions = useAuth(\"useSyncRbac\", (state) => state.permissions);\n const relatedPermissions = React.useMemo(() => {\n const contentTypePermissions = userPermissions.filter(\n (permission) => permission.subject === collectionTypeUID\n );\n return contentTypePermissions.reduce(\n (acc, permission) => ({ ...acc, [permission.action]: [permission] }),\n {}\n );\n }, [collectionTypeUID, userPermissions]);\n React.useEffect(() => {\n setIsLoading(true);\n if (relatedPermissions) {\n dispatch(\n setPermissions({\n permissions: relatedPermissions,\n __meta__: {\n plugins: query ? query.plugins : void 0,\n containerName\n }\n })\n );\n }\n setIsLoading(false);\n return () => {\n dispatch(resetPermissions());\n };\n }, [relatedPermissions, dispatch, query, containerName]);\n const permissions = useTypedSelector((state) => state[\"content-manager\"].rbac.permissions);\n const isPermissionMismatch = permissions && permissions.some((permission) => permission.subject !== collectionTypeUID) ? true : false;\n return {\n isLoading,\n isError: !isLoading && isPermissionMismatch,\n permissions\n };\n};\n\nexport { useSyncRbac as u };\n//# sourceMappingURL=useSyncRbac-Od0wrAnD.mjs.map\n"],"names":["React","useTypedDispatch","useAuth","setPermissions","resetPermissions","useTypedSelector"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAGK,MAAC,cAAc,CAAC,mBAAmB,OAAO,gBAAgB,eAAe;AAC5E,QAAM,CAAC,WAAW,YAAY,IAAIA,iBAAM,SAAS,IAAI;AACrD,QAAM,WAAWC,cAAAA;AACjB,QAAM,kBAAkBC,cAAAA,QAAQ,eAAe,CAAC,UAAU,MAAM,WAAW;AAC3E,QAAM,qBAAqBF,iBAAM,QAAQ,MAAM;AAC7C,UAAM,yBAAyB,gBAAgB;AAAA,MAC7C,CAAC,eAAe,WAAW,YAAY;AAAA,IAC7C;AACI,WAAO,uBAAuB;AAAA,MAC5B,CAAC,KAAK,gBAAgB,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU;MAChE,CAAE;AAAA,IACR;AAAA,EACA,GAAK,CAAC,mBAAmB,eAAe,CAAC;AACvCA,mBAAM,UAAU,MAAM;AACpB,iBAAa,IAAI;AACjB,QAAI,oBAAoB;AACtB;AAAA,QACEG,6BAAe;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,YACR,SAAS,QAAQ,MAAM,UAAU;AAAA,YACjC;AAAA,UACD;AAAA,QACX,CAAS;AAAA,MACT;AAAA,IACK;AACD,iBAAa,KAAK;AAClB,WAAO,MAAM;AACX,eAASC,cAAgB,iBAAA,CAAE;AAAA,IACjC;AAAA,EACG,GAAE,CAAC,oBAAoB,UAAU,OAAO,aAAa,CAAC;AACvD,QAAM,cAAcC,cAAgB,iBAAC,CAAC,UAAU,MAAM,iBAAiB,EAAE,KAAK,WAAW;AACzF,QAAM,uBAAuB,eAAe,YAAY,KAAK,CAAC,eAAe,WAAW,YAAY,iBAAiB,IAAI,OAAO;AAChI,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,aAAa;AAAA,IACvB;AAAA,EACJ;AACA;;"}
1
+ {"version":3,"file":"useSyncRbac-LNOzRXJ5-5S0qhFuZ.js","sources":["../../../../core/admin/dist/admin/useSyncRbac-LNOzRXJ5.mjs"],"sourcesContent":["import * as React from 'react';\nimport { Y as useTypedDispatch, $ as useAuth, aG as setPermissions, aH as resetPermissions, h as useTypedSelector } from './reducers-IQWvK_9L.mjs';\n\nconst useSyncRbac = (collectionTypeUID, query, containerName = \"listView\") => {\n const [isLoading, setIsLoading] = React.useState(true);\n const dispatch = useTypedDispatch();\n const userPermissions = useAuth(\"useSyncRbac\", (state) => state.permissions);\n const relatedPermissions = React.useMemo(() => {\n const contentTypePermissions = userPermissions.filter(\n (permission) => permission.subject === collectionTypeUID\n );\n return contentTypePermissions.reduce(\n (acc, permission) => ({ ...acc, [permission.action]: [permission] }),\n {}\n );\n }, [collectionTypeUID, userPermissions]);\n React.useEffect(() => {\n setIsLoading(true);\n if (relatedPermissions) {\n dispatch(\n setPermissions({\n permissions: relatedPermissions,\n __meta__: {\n plugins: query ? query.plugins : void 0,\n containerName\n }\n })\n );\n }\n setIsLoading(false);\n return () => {\n dispatch(resetPermissions());\n };\n }, [relatedPermissions, dispatch, query, containerName]);\n const permissions = useTypedSelector((state) => state[\"content-manager\"].rbac.permissions);\n const isPermissionMismatch = permissions && permissions.some((permission) => permission.subject !== collectionTypeUID) ? true : false;\n return {\n isLoading,\n isError: !isLoading && isPermissionMismatch,\n permissions\n };\n};\n\nexport { useSyncRbac as u };\n//# sourceMappingURL=useSyncRbac-LNOzRXJ5.mjs.map\n"],"names":["React","useTypedDispatch","useAuth","setPermissions","resetPermissions","useTypedSelector"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAGK,MAAC,cAAc,CAAC,mBAAmB,OAAO,gBAAgB,eAAe;AAC5E,QAAM,CAAC,WAAW,YAAY,IAAIA,iBAAM,SAAS,IAAI;AACrD,QAAM,WAAWC,cAAAA;AACjB,QAAM,kBAAkBC,cAAAA,QAAQ,eAAe,CAAC,UAAU,MAAM,WAAW;AAC3E,QAAM,qBAAqBF,iBAAM,QAAQ,MAAM;AAC7C,UAAM,yBAAyB,gBAAgB;AAAA,MAC7C,CAAC,eAAe,WAAW,YAAY;AAAA,IAC7C;AACI,WAAO,uBAAuB;AAAA,MAC5B,CAAC,KAAK,gBAAgB,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU;MAChE,CAAE;AAAA,IACR;AAAA,EACA,GAAK,CAAC,mBAAmB,eAAe,CAAC;AACvCA,mBAAM,UAAU,MAAM;AACpB,iBAAa,IAAI;AACjB,QAAI,oBAAoB;AACtB;AAAA,QACEG,6BAAe;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,YACR,SAAS,QAAQ,MAAM,UAAU;AAAA,YACjC;AAAA,UACD;AAAA,QACX,CAAS;AAAA,MACT;AAAA,IACK;AACD,iBAAa,KAAK;AAClB,WAAO,MAAM;AACX,eAASC,cAAgB,iBAAA,CAAE;AAAA,IACjC;AAAA,EACG,GAAE,CAAC,oBAAoB,UAAU,OAAO,aAAa,CAAC;AACvD,QAAM,cAAcC,cAAgB,iBAAC,CAAC,UAAU,MAAM,iBAAiB,EAAE,KAAK,WAAW;AACzF,QAAM,uBAAuB,eAAe,YAAY,KAAK,CAAC,eAAe,WAAW,YAAY,iBAAiB,IAAI,OAAO;AAChI,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,aAAa;AAAA,IACvB;AAAA,EACJ;AACA;;"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { ag as useTypedDispatch, a3 as useAuth, ah as setPermissions, ai as resetPermissions, a9 as useTypedSelector } from "./index-NzLAHRwx-MeSnW6w9.mjs";
2
+ import { ag as useTypedDispatch, a3 as useAuth, ah as setPermissions, ai as resetPermissions, a9 as useTypedSelector } from "./index-1NFAbkxM-Km1zKLTh.mjs";
3
3
  const useSyncRbac = (collectionTypeUID, query, containerName = "listView") => {
4
4
  const [isLoading, setIsLoading] = React.useState(true);
5
5
  const dispatch = useTypedDispatch();
@@ -42,4 +42,4 @@ const useSyncRbac = (collectionTypeUID, query, containerName = "listView") => {
42
42
  export {
43
43
  useSyncRbac as u
44
44
  };
45
- //# sourceMappingURL=useSyncRbac-Od0wrAnD-fP3UP9Sk.mjs.map
45
+ //# sourceMappingURL=useSyncRbac-LNOzRXJ5-PZzFwA1X.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSyncRbac-Od0wrAnD-fP3UP9Sk.mjs","sources":["../../../../core/admin/dist/admin/useSyncRbac-Od0wrAnD.mjs"],"sourcesContent":["import * as React from 'react';\nimport { Y as useTypedDispatch, $ as useAuth, aG as setPermissions, aH as resetPermissions, h as useTypedSelector } from './reducers-TOuLOGw_.mjs';\n\nconst useSyncRbac = (collectionTypeUID, query, containerName = \"listView\") => {\n const [isLoading, setIsLoading] = React.useState(true);\n const dispatch = useTypedDispatch();\n const userPermissions = useAuth(\"useSyncRbac\", (state) => state.permissions);\n const relatedPermissions = React.useMemo(() => {\n const contentTypePermissions = userPermissions.filter(\n (permission) => permission.subject === collectionTypeUID\n );\n return contentTypePermissions.reduce(\n (acc, permission) => ({ ...acc, [permission.action]: [permission] }),\n {}\n );\n }, [collectionTypeUID, userPermissions]);\n React.useEffect(() => {\n setIsLoading(true);\n if (relatedPermissions) {\n dispatch(\n setPermissions({\n permissions: relatedPermissions,\n __meta__: {\n plugins: query ? query.plugins : void 0,\n containerName\n }\n })\n );\n }\n setIsLoading(false);\n return () => {\n dispatch(resetPermissions());\n };\n }, [relatedPermissions, dispatch, query, containerName]);\n const permissions = useTypedSelector((state) => state[\"content-manager\"].rbac.permissions);\n const isPermissionMismatch = permissions && permissions.some((permission) => permission.subject !== collectionTypeUID) ? true : false;\n return {\n isLoading,\n isError: !isLoading && isPermissionMismatch,\n permissions\n };\n};\n\nexport { useSyncRbac as u };\n//# sourceMappingURL=useSyncRbac-Od0wrAnD.mjs.map\n"],"names":[],"mappings":";;AAGK,MAAC,cAAc,CAAC,mBAAmB,OAAO,gBAAgB,eAAe;AAC5E,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,IAAI;AACrD,QAAM,WAAW;AACjB,QAAM,kBAAkB,QAAQ,eAAe,CAAC,UAAU,MAAM,WAAW;AAC3E,QAAM,qBAAqB,MAAM,QAAQ,MAAM;AAC7C,UAAM,yBAAyB,gBAAgB;AAAA,MAC7C,CAAC,eAAe,WAAW,YAAY;AAAA,IAC7C;AACI,WAAO,uBAAuB;AAAA,MAC5B,CAAC,KAAK,gBAAgB,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU;MAChE,CAAE;AAAA,IACR;AAAA,EACA,GAAK,CAAC,mBAAmB,eAAe,CAAC;AACvC,QAAM,UAAU,MAAM;AACpB,iBAAa,IAAI;AACjB,QAAI,oBAAoB;AACtB;AAAA,QACE,eAAe;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,YACR,SAAS,QAAQ,MAAM,UAAU;AAAA,YACjC;AAAA,UACD;AAAA,QACX,CAAS;AAAA,MACT;AAAA,IACK;AACD,iBAAa,KAAK;AAClB,WAAO,MAAM;AACX,eAAS,iBAAgB,CAAE;AAAA,IACjC;AAAA,EACG,GAAE,CAAC,oBAAoB,UAAU,OAAO,aAAa,CAAC;AACvD,QAAM,cAAc,iBAAiB,CAAC,UAAU,MAAM,iBAAiB,EAAE,KAAK,WAAW;AACzF,QAAM,uBAAuB,eAAe,YAAY,KAAK,CAAC,eAAe,WAAW,YAAY,iBAAiB,IAAI,OAAO;AAChI,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,aAAa;AAAA,IACvB;AAAA,EACJ;AACA;"}
1
+ {"version":3,"file":"useSyncRbac-LNOzRXJ5-PZzFwA1X.mjs","sources":["../../../../core/admin/dist/admin/useSyncRbac-LNOzRXJ5.mjs"],"sourcesContent":["import * as React from 'react';\nimport { Y as useTypedDispatch, $ as useAuth, aG as setPermissions, aH as resetPermissions, h as useTypedSelector } from './reducers-IQWvK_9L.mjs';\n\nconst useSyncRbac = (collectionTypeUID, query, containerName = \"listView\") => {\n const [isLoading, setIsLoading] = React.useState(true);\n const dispatch = useTypedDispatch();\n const userPermissions = useAuth(\"useSyncRbac\", (state) => state.permissions);\n const relatedPermissions = React.useMemo(() => {\n const contentTypePermissions = userPermissions.filter(\n (permission) => permission.subject === collectionTypeUID\n );\n return contentTypePermissions.reduce(\n (acc, permission) => ({ ...acc, [permission.action]: [permission] }),\n {}\n );\n }, [collectionTypeUID, userPermissions]);\n React.useEffect(() => {\n setIsLoading(true);\n if (relatedPermissions) {\n dispatch(\n setPermissions({\n permissions: relatedPermissions,\n __meta__: {\n plugins: query ? query.plugins : void 0,\n containerName\n }\n })\n );\n }\n setIsLoading(false);\n return () => {\n dispatch(resetPermissions());\n };\n }, [relatedPermissions, dispatch, query, containerName]);\n const permissions = useTypedSelector((state) => state[\"content-manager\"].rbac.permissions);\n const isPermissionMismatch = permissions && permissions.some((permission) => permission.subject !== collectionTypeUID) ? true : false;\n return {\n isLoading,\n isError: !isLoading && isPermissionMismatch,\n permissions\n };\n};\n\nexport { useSyncRbac as u };\n//# sourceMappingURL=useSyncRbac-LNOzRXJ5.mjs.map\n"],"names":[],"mappings":";;AAGK,MAAC,cAAc,CAAC,mBAAmB,OAAO,gBAAgB,eAAe;AAC5E,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,IAAI;AACrD,QAAM,WAAW;AACjB,QAAM,kBAAkB,QAAQ,eAAe,CAAC,UAAU,MAAM,WAAW;AAC3E,QAAM,qBAAqB,MAAM,QAAQ,MAAM;AAC7C,UAAM,yBAAyB,gBAAgB;AAAA,MAC7C,CAAC,eAAe,WAAW,YAAY;AAAA,IAC7C;AACI,WAAO,uBAAuB;AAAA,MAC5B,CAAC,KAAK,gBAAgB,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU;MAChE,CAAE;AAAA,IACR;AAAA,EACA,GAAK,CAAC,mBAAmB,eAAe,CAAC;AACvC,QAAM,UAAU,MAAM;AACpB,iBAAa,IAAI;AACjB,QAAI,oBAAoB;AACtB;AAAA,QACE,eAAe;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,YACR,SAAS,QAAQ,MAAM,UAAU;AAAA,YACjC;AAAA,UACD;AAAA,QACX,CAAS;AAAA,MACT;AAAA,IACK;AACD,iBAAa,KAAK;AAClB,WAAO,MAAM;AACX,eAAS,iBAAgB,CAAE;AAAA,IACjC;AAAA,EACG,GAAE,CAAC,oBAAoB,UAAU,OAAO,aAAa,CAAC;AACvD,QAAM,cAAc,iBAAiB,CAAC,UAAU,MAAM,iBAAiB,EAAE,KAAK,WAAW;AACzF,QAAM,uBAAuB,eAAe,YAAY,KAAK,CAAC,eAAe,WAAW,YAAY,iBAAiB,IAAI,OAAO;AAChI,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,aAAa;AAAA,IACvB;AAAA,EACJ;AACA;"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const index = require("../_chunks/index-YtsLdO8d.js");
2
+ const index = require("../_chunks/index-JO4fO3Yj.js");
3
3
  module.exports = index.index;
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { i } from "../_chunks/index-VQ3uu7FR.mjs";
1
+ import { i } from "../_chunks/index-PTS42_em.mjs";
2
2
  export {
3
3
  i as default
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/plugin-users-permissions",
3
- "version": "5.0.0-beta.0",
3
+ "version": "5.0.0-beta.1",
4
4
  "description": "Protect your API with a full-authentication process based on JWT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -48,7 +48,7 @@
48
48
  "dependencies": {
49
49
  "@strapi/design-system": "1.16.0",
50
50
  "@strapi/icons": "1.16.0",
51
- "@strapi/utils": "5.0.0-beta.0",
51
+ "@strapi/utils": "5.0.0-beta.1",
52
52
  "bcryptjs": "2.4.3",
53
53
  "formik": "2.4.5",
54
54
  "grant-koa": "5.4.8",
@@ -67,8 +67,8 @@
67
67
  "yup": "0.32.9"
68
68
  },
69
69
  "devDependencies": {
70
- "@strapi/pack-up": "5.0.0-beta.0",
71
- "@strapi/strapi": "5.0.0-beta.0",
70
+ "@strapi/pack-up": "5.0.0-beta.1",
71
+ "@strapi/strapi": "5.0.0-beta.1",
72
72
  "@testing-library/dom": "9.2.0",
73
73
  "@testing-library/react": "14.0.0",
74
74
  "@testing-library/user-event": "14.4.3",
@@ -79,7 +79,7 @@
79
79
  "styled-components": "5.3.11"
80
80
  },
81
81
  "peerDependencies": {
82
- "@strapi/strapi": "^4.0.0",
82
+ "@strapi/strapi": "^5.0.0 || ^5.0.0-beta || ^5.0.0-alpha || ^5.0.0-rc",
83
83
  "react": "^17.0.0 || ^18.0.0",
84
84
  "react-dom": "^17.0.0 || ^18.0.0",
85
85
  "react-router-dom": "^6.0.0",
@@ -96,5 +96,5 @@
96
96
  "required": true,
97
97
  "kind": "plugin"
98
98
  },
99
- "gitHead": "4b2e592f77adbb0eacd7e3f15dd09e5cd3c46c22"
99
+ "gitHead": "ae773621dfcbc67c49dc6fa52ac41ea5de676ecb"
100
100
  }
@@ -22,14 +22,13 @@ const {
22
22
  validateChangePasswordBody,
23
23
  } = require('./validation/auth');
24
24
 
25
- const { sanitize } = utils;
26
25
  const { ApplicationError, ValidationError, ForbiddenError } = utils.errors;
27
26
 
28
27
  const sanitizeUser = (user, ctx) => {
29
28
  const { auth } = ctx.state;
30
29
  const userSchema = strapi.getModel('plugin::users-permissions.user');
31
30
 
32
- return sanitize.contentAPI.output(user, userSchema, { auth });
31
+ return strapi.contentAPI.sanitize.output(user, userSchema, { auth });
33
32
  };
34
33
 
35
34
  module.exports = {
@@ -11,28 +11,27 @@ const utils = require('@strapi/utils');
11
11
  const { getService } = require('../utils');
12
12
  const { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');
13
13
 
14
- const { sanitize, validate } = utils;
15
14
  const { ApplicationError, ValidationError, NotFoundError } = utils.errors;
16
15
 
17
16
  const sanitizeOutput = async (user, ctx) => {
18
17
  const schema = strapi.getModel('plugin::users-permissions.user');
19
18
  const { auth } = ctx.state;
20
19
 
21
- return sanitize.contentAPI.output(user, schema, { auth });
20
+ return strapi.contentAPI.sanitize.output(user, schema, { auth });
22
21
  };
23
22
 
24
23
  const validateQuery = async (query, ctx) => {
25
24
  const schema = strapi.getModel('plugin::users-permissions.user');
26
25
  const { auth } = ctx.state;
27
26
 
28
- return validate.contentAPI.query(query, schema, { auth });
27
+ return strapi.contentAPI.validate.query(query, schema, { auth });
29
28
  };
30
29
 
31
30
  const sanitizeQuery = async (query, ctx) => {
32
31
  const schema = strapi.getModel('plugin::users-permissions.user');
33
32
  const { auth } = ctx.state;
34
33
 
35
- return sanitize.contentAPI.query(query, schema, { auth });
34
+ return strapi.contentAPI.sanitize.query(query, schema, { auth });
36
35
  };
37
36
 
38
37
  module.exports = {
@@ -10,7 +10,7 @@ const crypto = require('crypto');
10
10
  const bcrypt = require('bcryptjs');
11
11
  const urlJoin = require('url-join');
12
12
 
13
- const { sanitize, convertQueryParams } = require('@strapi/utils');
13
+ const { sanitize } = require('@strapi/utils');
14
14
  const { getService } = require('../utils');
15
15
 
16
16
  const USER_MODEL_UID = 'plugin::users-permissions.user';
@@ -62,7 +62,7 @@ module.exports = ({ strapi }) => ({
62
62
  * @return {Promise}
63
63
  */
64
64
  fetch(id, params) {
65
- const query = convertQueryParams.transformParamsToQuery(USER_MODEL_UID, params ?? {});
65
+ const query = strapi.get('query-params').transform(USER_MODEL_UID, params ?? {});
66
66
 
67
67
  return strapi.db.query(USER_MODEL_UID).findOne({
68
68
  ...query,
@@ -85,7 +85,7 @@ module.exports = ({ strapi }) => ({
85
85
  * @return {Promise}
86
86
  */
87
87
  fetchAll(params) {
88
- const query = convertQueryParams.transformParamsToQuery(USER_MODEL_UID, params ?? {});
88
+ const query = strapi.get('query-params').transform(USER_MODEL_UID, params ?? {});
89
89
 
90
90
  return strapi.db.query(USER_MODEL_UID).findMany(query);
91
91
  },
@@ -6,7 +6,11 @@ const { traverseEntity, async } = require('@strapi/utils');
6
6
  const { removeUserRelationFromRoleEntities } = require('./visitors');
7
7
 
8
8
  const sanitizeUserRelationFromRoleEntities = curry((schema, entity) => {
9
- return traverseEntity(removeUserRelationFromRoleEntities, { schema }, entity);
9
+ return traverseEntity(
10
+ removeUserRelationFromRoleEntities,
11
+ { schema, getModel: strapi.getModel.bind(strapi) },
12
+ entity
13
+ );
10
14
  });
11
15
 
12
16
  const defaultSanitizeOutput = curry((schema, entity) => {