@strapi/admin 4.15.4 → 4.15.5-alpha.0
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/_chunks/{AuthenticatedApp-5524c90a.mjs → AuthenticatedApp-cdd2864d.mjs} +22 -22
- package/dist/_chunks/{AuthenticatedApp-5524c90a.mjs.map → AuthenticatedApp-cdd2864d.mjs.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-96716173.js → AuthenticatedApp-f7762ffc.js} +22 -22
- package/dist/_chunks/{AuthenticatedApp-96716173.js.map → AuthenticatedApp-f7762ffc.js.map} +1 -1
- package/dist/_chunks/{HomePage-5a37e9c7.js → HomePage-1d4bec73.js} +4 -4
- package/dist/_chunks/{HomePage-5a37e9c7.js.map → HomePage-1d4bec73.js.map} +1 -1
- package/dist/_chunks/{HomePage-419bfd8c.js → HomePage-71ca4441.js} +4 -4
- package/dist/_chunks/{HomePage-419bfd8c.js.map → HomePage-71ca4441.js.map} +1 -1
- package/dist/_chunks/{HomePage-756a9c8e.mjs → HomePage-b616b5dd.mjs} +4 -4
- package/dist/_chunks/{HomePage-756a9c8e.mjs.map → HomePage-b616b5dd.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-af8ae9d9.mjs → HomePage-b8295a09.mjs} +4 -4
- package/dist/_chunks/{HomePage-af8ae9d9.mjs.map → HomePage-b8295a09.mjs.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-733c83cc.js → InstalledPluginsPage-38e390ab.js} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-733c83cc.js.map → InstalledPluginsPage-38e390ab.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-922ee25b.mjs → InstalledPluginsPage-b5010373.mjs} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-922ee25b.mjs.map → InstalledPluginsPage-b5010373.mjs.map} +1 -1
- package/dist/_chunks/{Login-54110b81.mjs → Login-37c8f863.mjs} +2 -2
- package/dist/_chunks/{Login-54110b81.mjs.map → Login-37c8f863.mjs.map} +1 -1
- package/dist/_chunks/{Login-a9414070.js → Login-6400aa3b.js} +2 -2
- package/dist/_chunks/{Login-a9414070.js.map → Login-6400aa3b.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-7827f842.mjs → MarketplacePage-4c8d674b.mjs} +3 -3
- package/dist/_chunks/{MarketplacePage-7827f842.mjs.map → MarketplacePage-4c8d674b.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-2bb9f6c8.js → MarketplacePage-f01cf836.js} +3 -3
- package/dist/_chunks/{MarketplacePage-2bb9f6c8.js.map → MarketplacePage-f01cf836.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-51b48d52.mjs → ProfilePage-7c3e5ad6.mjs} +3 -3
- package/dist/_chunks/{ProfilePage-51b48d52.mjs.map → ProfilePage-7c3e5ad6.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-034b28a3.js → ProfilePage-a970034d.js} +3 -3
- package/dist/_chunks/{ProfilePage-034b28a3.js.map → ProfilePage-a970034d.js.map} +1 -1
- package/dist/_chunks/{build-b67ecc59.mjs → build-0a74f94d.mjs} +4 -4
- package/dist/_chunks/{build-b67ecc59.mjs.map → build-0a74f94d.mjs.map} +1 -1
- package/dist/_chunks/{build-55ba3e68.js → build-0fb2b1db.js} +4 -4
- package/dist/_chunks/{build-55ba3e68.js.map → build-0fb2b1db.js.map} +1 -1
- package/dist/_chunks/{constants-2d656503.js → constants-643fcaf9.js} +2 -2
- package/dist/_chunks/{constants-2d656503.js.map → constants-643fcaf9.js.map} +1 -1
- package/dist/_chunks/{constants-ea0a3cda.mjs → constants-65707dfb.mjs} +5 -5
- package/dist/_chunks/{constants-ea0a3cda.mjs.map → constants-65707dfb.mjs.map} +1 -1
- package/dist/_chunks/{constants-06e9c997.mjs → constants-8523a9f7.mjs} +3 -3
- package/dist/_chunks/{constants-06e9c997.mjs.map → constants-8523a9f7.mjs.map} +1 -1
- package/dist/_chunks/{constants-3fe806aa.mjs → constants-8b2ba8d0.mjs} +6 -6
- package/dist/_chunks/{constants-3fe806aa.mjs.map → constants-8b2ba8d0.mjs.map} +1 -1
- package/dist/_chunks/{constants-bdccd418.js → constants-91628e1e.js} +6 -6
- package/dist/_chunks/{constants-bdccd418.js.map → constants-91628e1e.js.map} +1 -1
- package/dist/_chunks/{constants-89ae95c6.mjs → constants-a7b1c05e.mjs} +2 -2
- package/dist/_chunks/{constants-89ae95c6.mjs.map → constants-a7b1c05e.mjs.map} +1 -1
- package/dist/_chunks/{constants-b19fe3c9.js → constants-b98f01f7.js} +3 -3
- package/dist/_chunks/{constants-b19fe3c9.js.map → constants-b98f01f7.js.map} +1 -1
- package/dist/_chunks/{constants-45f7751c.js → constants-dfdfded9.js} +5 -5
- package/dist/_chunks/{constants-45f7751c.js.map → constants-dfdfded9.js.map} +1 -1
- package/dist/_chunks/{develop-d97e7494.mjs → develop-5fd15ecf.mjs} +4 -4
- package/dist/_chunks/{develop-d97e7494.mjs.map → develop-5fd15ecf.mjs.map} +1 -1
- package/dist/_chunks/{develop-69e28e61.js → develop-ec19d09d.js} +4 -4
- package/dist/_chunks/{develop-69e28e61.js.map → develop-ec19d09d.js.map} +1 -1
- package/dist/_chunks/{index-e6916e51.js → index-071e584f.js} +5 -5
- package/dist/_chunks/{index-e6916e51.js.map → index-071e584f.js.map} +1 -1
- package/dist/_chunks/{index-171f253e.js → index-0767a707.js} +4 -4
- package/dist/_chunks/{index-171f253e.js.map → index-0767a707.js.map} +1 -1
- package/dist/_chunks/{index-90ed6722.mjs → index-089af133.mjs} +8 -8
- package/dist/_chunks/{index-90ed6722.mjs.map → index-089af133.mjs.map} +1 -1
- package/dist/_chunks/{index-3407e4e6.mjs → index-0b0a40c2.mjs} +6 -6
- package/dist/_chunks/{index-3407e4e6.mjs.map → index-0b0a40c2.mjs.map} +1 -1
- package/dist/_chunks/{index-04538774.js → index-0b745772.js} +3 -3
- package/dist/_chunks/{index-04538774.js.map → index-0b745772.js.map} +1 -1
- package/dist/_chunks/{index-cfb11e7f.mjs → index-0d895d5c.mjs} +4 -4
- package/dist/_chunks/{index-cfb11e7f.mjs.map → index-0d895d5c.mjs.map} +1 -1
- package/dist/_chunks/{index-83e78ac3.js → index-0f8c5c53.js} +6 -6
- package/dist/_chunks/{index-83e78ac3.js.map → index-0f8c5c53.js.map} +1 -1
- package/dist/_chunks/{index-414cde92.js → index-154451f2.js} +4 -4
- package/dist/_chunks/{index-414cde92.js.map → index-154451f2.js.map} +1 -1
- package/dist/_chunks/{index-a985e784.mjs → index-1f3328ca.mjs} +3 -3
- package/dist/_chunks/{index-a985e784.mjs.map → index-1f3328ca.mjs.map} +1 -1
- package/dist/_chunks/{index-8e785228.js → index-22572721.js} +20 -20
- package/dist/_chunks/{index-8e785228.js.map → index-22572721.js.map} +1 -1
- package/dist/_chunks/{index-3a75aa07.mjs → index-2503ccd8.mjs} +5 -5
- package/dist/_chunks/{index-3a75aa07.mjs.map → index-2503ccd8.mjs.map} +1 -1
- package/dist/_chunks/{index-10f599c1.js → index-26633f85.js} +3 -3
- package/dist/_chunks/{index-10f599c1.js.map → index-26633f85.js.map} +1 -1
- package/dist/_chunks/{index-cce8ecb6.js → index-2772208e.js} +77 -43
- package/dist/_chunks/index-2772208e.js.map +1 -0
- package/dist/_chunks/{index-35766285.js → index-30805cdb.js} +4 -4
- package/dist/_chunks/{index-35766285.js.map → index-30805cdb.js.map} +1 -1
- package/dist/_chunks/{index-3bfde142.js → index-330bae16.js} +2 -2
- package/dist/_chunks/{index-3bfde142.js.map → index-330bae16.js.map} +1 -1
- package/dist/_chunks/{index-44c0c7bf.js → index-33bf61b3.js} +3 -3
- package/dist/_chunks/{index-44c0c7bf.js.map → index-33bf61b3.js.map} +1 -1
- package/dist/_chunks/{index-e0bd1ac1.mjs → index-3c50082a.mjs} +20 -20
- package/dist/_chunks/{index-e0bd1ac1.mjs.map → index-3c50082a.mjs.map} +1 -1
- package/dist/_chunks/{index-4fa922cc.mjs → index-3fac3161.mjs} +3 -3
- package/dist/_chunks/{index-4fa922cc.mjs.map → index-3fac3161.mjs.map} +1 -1
- package/dist/_chunks/{index-99e697a0.js → index-43b10023.js} +3 -3
- package/dist/_chunks/{index-99e697a0.js.map → index-43b10023.js.map} +1 -1
- package/dist/_chunks/{index-fa6a1d8a.js → index-47b49cd4.js} +5 -5
- package/dist/_chunks/{index-fa6a1d8a.js.map → index-47b49cd4.js.map} +1 -1
- package/dist/_chunks/{index-6298ffb7.js → index-51c81518.js} +2 -2
- package/dist/_chunks/{index-6298ffb7.js.map → index-51c81518.js.map} +1 -1
- package/dist/_chunks/{index-131e8a0f.js → index-6431bc24.js} +3 -3
- package/dist/_chunks/{index-131e8a0f.js.map → index-6431bc24.js.map} +1 -1
- package/dist/_chunks/{index-dfdb9e58.mjs → index-64c904e2.mjs} +3 -3
- package/dist/_chunks/{index-dfdb9e58.mjs.map → index-64c904e2.mjs.map} +1 -1
- package/dist/_chunks/{index-ceca4bd1.mjs → index-6708aec7.mjs} +3 -3
- package/dist/_chunks/{index-ceca4bd1.mjs.map → index-6708aec7.mjs.map} +1 -1
- package/dist/_chunks/{index-cfe5eadd.js → index-6b9ce159.js} +2 -2
- package/dist/_chunks/{index-cfe5eadd.js.map → index-6b9ce159.js.map} +1 -1
- package/dist/_chunks/{index-fa82ab34.mjs → index-6d864827.mjs} +3 -3
- package/dist/_chunks/{index-fa82ab34.mjs.map → index-6d864827.mjs.map} +1 -1
- package/dist/_chunks/{index-b2883169.mjs → index-73f7ad03.mjs} +5 -5
- package/dist/_chunks/{index-b2883169.mjs.map → index-73f7ad03.mjs.map} +1 -1
- package/dist/_chunks/{index-7182ce8e.mjs → index-7a8208cf.mjs} +4 -4
- package/dist/_chunks/{index-7182ce8e.mjs.map → index-7a8208cf.mjs.map} +1 -1
- package/dist/_chunks/{index-fb6f634d.mjs → index-7f99a8c0.mjs} +3 -3
- package/dist/_chunks/{index-fb6f634d.mjs.map → index-7f99a8c0.mjs.map} +1 -1
- package/dist/_chunks/{index-e412fafd.js → index-83592788.js} +6 -6
- package/dist/_chunks/{index-e412fafd.js.map → index-83592788.js.map} +1 -1
- package/dist/_chunks/{index-c73f17d2.js → index-854f0f9f.js} +5 -5
- package/dist/_chunks/{index-c73f17d2.js.map → index-854f0f9f.js.map} +1 -1
- package/dist/_chunks/{index-15983380.js → index-86fc0c9c.js} +3 -3
- package/dist/_chunks/{index-15983380.js.map → index-86fc0c9c.js.map} +1 -1
- package/dist/_chunks/{index-6eb4b9c5.mjs → index-8a902627.mjs} +3 -3
- package/dist/_chunks/{index-6eb4b9c5.mjs.map → index-8a902627.mjs.map} +1 -1
- package/dist/_chunks/{index-bf66c659.js → index-98907333.js} +4 -4
- package/dist/_chunks/{index-bf66c659.js.map → index-98907333.js.map} +1 -1
- package/dist/_chunks/{index-c7f06c75.js → index-98a58f34.js} +8 -8
- package/dist/_chunks/{index-c7f06c75.js.map → index-98a58f34.js.map} +1 -1
- package/dist/_chunks/{index-a4d005f4.mjs → index-9e6e4c3f.mjs} +3 -3
- package/dist/_chunks/{index-a4d005f4.mjs.map → index-9e6e4c3f.mjs.map} +1 -1
- package/dist/_chunks/{index-37e364d9.js → index-a0f622ec.js} +3 -3
- package/dist/_chunks/{index-37e364d9.js.map → index-a0f622ec.js.map} +1 -1
- package/dist/_chunks/{index-4c3eb885.mjs → index-a2d01aca.mjs} +6 -6
- package/dist/_chunks/{index-4c3eb885.mjs.map → index-a2d01aca.mjs.map} +1 -1
- package/dist/_chunks/{index-7bb8a3f2.mjs → index-a422ec17.mjs} +4 -4
- package/dist/_chunks/{index-7bb8a3f2.mjs.map → index-a422ec17.mjs.map} +1 -1
- package/dist/_chunks/{index-b72c9b09.mjs → index-a5248bde.mjs} +3 -3
- package/dist/_chunks/{index-b72c9b09.mjs.map → index-a5248bde.mjs.map} +1 -1
- package/dist/_chunks/{index-dafa7a27.mjs → index-aa8d6cd9.mjs} +4 -4
- package/dist/_chunks/{index-dafa7a27.mjs.map → index-aa8d6cd9.mjs.map} +1 -1
- package/dist/_chunks/{index-9d6849bf.js → index-c1f8110c.js} +3 -3
- package/dist/_chunks/{index-9d6849bf.js.map → index-c1f8110c.js.map} +1 -1
- package/dist/_chunks/{index-696b3624.mjs → index-c38703f5.mjs} +2 -2
- package/dist/_chunks/{index-696b3624.mjs.map → index-c38703f5.mjs.map} +1 -1
- package/dist/_chunks/{index-a47f4f4e.mjs → index-cdb822dc.mjs} +5 -5
- package/dist/_chunks/{index-a47f4f4e.mjs.map → index-cdb822dc.mjs.map} +1 -1
- package/dist/_chunks/{index-4b209bd2.js → index-ceae3e82.js} +3 -3
- package/dist/_chunks/{index-4b209bd2.js.map → index-ceae3e82.js.map} +1 -1
- package/dist/_chunks/{index-09ae6db3.js → index-cf1f4293.js} +3 -3
- package/dist/_chunks/{index-09ae6db3.js.map → index-cf1f4293.js.map} +1 -1
- package/dist/_chunks/{index-7315d2b7.mjs → index-d02782dc.mjs} +5 -5
- package/dist/_chunks/{index-7315d2b7.mjs.map → index-d02782dc.mjs.map} +1 -1
- package/dist/_chunks/{index-f2acdf04.mjs → index-d05d2739.mjs} +3 -3
- package/dist/_chunks/{index-f2acdf04.mjs.map → index-d05d2739.mjs.map} +1 -1
- package/dist/_chunks/{index-f122bd36.mjs → index-d1583f5b.mjs} +5 -5
- package/dist/_chunks/{index-f122bd36.mjs.map → index-d1583f5b.mjs.map} +1 -1
- package/dist/_chunks/{index-906e4561.js → index-d75d8d15.js} +5 -5
- package/dist/_chunks/{index-906e4561.js.map → index-d75d8d15.js.map} +1 -1
- package/dist/_chunks/{index-fa1850fa.js → index-d9602c22.js} +4 -4
- package/dist/_chunks/{index-fa1850fa.js.map → index-d9602c22.js.map} +1 -1
- package/dist/_chunks/{index-17faf42d.js → index-db4e548d.js} +3 -3
- package/dist/_chunks/{index-17faf42d.js.map → index-db4e548d.js.map} +1 -1
- package/dist/_chunks/{index-8c244057.mjs → index-dd6de307.mjs} +3 -3
- package/dist/_chunks/{index-8c244057.mjs.map → index-dd6de307.mjs.map} +1 -1
- package/dist/_chunks/{index-d0efe393.mjs → index-ddfb8187.mjs} +2 -2
- package/dist/_chunks/{index-d0efe393.mjs.map → index-ddfb8187.mjs.map} +1 -1
- package/dist/_chunks/{index-d45547fd.mjs → index-de552d3f.mjs} +3 -3
- package/dist/_chunks/{index-d45547fd.mjs.map → index-de552d3f.mjs.map} +1 -1
- package/dist/_chunks/{index-1df9f98e.mjs → index-dec0eba6.mjs} +4 -4
- package/dist/_chunks/{index-1df9f98e.mjs.map → index-dec0eba6.mjs.map} +1 -1
- package/dist/_chunks/{index-aa4ede2e.js → index-e1ee4796.js} +4 -4
- package/dist/_chunks/{index-aa4ede2e.js.map → index-e1ee4796.js.map} +1 -1
- package/dist/_chunks/{index-72d81abf.mjs → index-e309a639.mjs} +2 -2
- package/dist/_chunks/{index-72d81abf.mjs.map → index-e309a639.mjs.map} +1 -1
- package/dist/_chunks/{index-2459dded.mjs → index-e364920e.mjs} +4 -4
- package/dist/_chunks/{index-2459dded.mjs.map → index-e364920e.mjs.map} +1 -1
- package/dist/_chunks/{index-b171513f.js → index-e78be262.js} +3 -3
- package/dist/_chunks/{index-b171513f.js.map → index-e78be262.js.map} +1 -1
- package/dist/_chunks/{index-a51a2eb8.mjs → index-e8ddad38.mjs} +3 -3
- package/dist/_chunks/{index-a51a2eb8.mjs.map → index-e8ddad38.mjs.map} +1 -1
- package/dist/_chunks/{index-37f67695.mjs → index-ee0697f5.mjs} +5 -5
- package/dist/_chunks/{index-37f67695.mjs.map → index-ee0697f5.mjs.map} +1 -1
- package/dist/_chunks/{index-44360544.mjs → index-f11d5a06.mjs} +75 -41
- package/dist/_chunks/index-f11d5a06.mjs.map +1 -0
- package/dist/_chunks/{index-1368779e.js → index-f1ace542.js} +3 -3
- package/dist/_chunks/{index-1368779e.js.map → index-f1ace542.js.map} +1 -1
- package/dist/_chunks/{index-a08ce4ed.js → index-f8139fa9.js} +5 -5
- package/dist/_chunks/{index-a08ce4ed.js.map → index-f8139fa9.js.map} +1 -1
- package/dist/_chunks/{index-02f58272.js → index-f90f4c5e.js} +5 -5
- package/dist/_chunks/{index-02f58272.js.map → index-f90f4c5e.js.map} +1 -1
- package/dist/_chunks/{schema-672225f4.js → schema-c67fdb98.js} +2 -2
- package/dist/_chunks/{schema-672225f4.js.map → schema-c67fdb98.js.map} +1 -1
- package/dist/_chunks/{schema-3e2e2e31.mjs → schema-f1cf6f90.mjs} +2 -2
- package/dist/_chunks/{schema-3e2e2e31.mjs.map → schema-f1cf6f90.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-9445bcae.js → validateWorkflow-0ae76680.js} +3 -3
- package/dist/_chunks/{validateWorkflow-9445bcae.js.map → validateWorkflow-0ae76680.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-f5a93683.mjs → validateWorkflow-c7605fca.mjs} +3 -3
- package/dist/_chunks/{validateWorkflow-f5a93683.mjs.map → validateWorkflow-c7605fca.mjs.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/render.d.ts +2 -1
- package/dist/cli.js +3 -3
- package/dist/cli.mjs +3 -3
- package/package.json +13 -13
- package/dist/_chunks/index-44360544.mjs.map +0 -1
- package/dist/_chunks/index-cce8ecb6.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-f122bd36.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport {\n ConfirmDialog,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider } from 'formik';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../../../admin/src/hooks/useInjectReducer';\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\nimport {\n resetWorkflow,\n setIsLoading,\n setWorkflow,\n setContentTypes,\n setRoles,\n setWorkflows,\n} from '../../actions';\nimport * as Layout from '../../components/Layout';\nimport * as LimitsModal from '../../components/LimitsModal';\nimport { Stages } from '../../components/Stages';\nimport { WorkflowAttributes } from '../../components/WorkflowAttributes';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from '../../constants';\nimport { useReviewWorkflows } from '../../hooks/useReviewWorkflows';\nimport { reducer } from '../../reducer';\nimport {\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectHasDeletedServerStages,\n selectIsLoading,\n selectRoles,\n selectServerState,\n} from '../../selectors';\nimport { validateWorkflow } from '../../utils/validateWorkflow';\n\nexport function ReviewWorkflowsEditView() {\n const { workflowId } = useParams();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const { put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const { isLoading: isLoadingWorkflow, meta, workflows, refetch } = useReviewWorkflows();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const serverState = useSelector(selectServerState);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const hasDeletedServerStages = useSelector(selectHasDeletedServerStages);\n const roles = useSelector(selectRoles);\n const isLoading = useSelector(selectIsLoading);\n const {\n allowedActions: { canDelete, canUpdate },\n } = useRBAC(permissions.settings['review-workflows']);\n const [savePrompts, setSavePrompts] = React.useState({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined, {\n retry: false,\n });\n const [showLimitModal, setShowLimitModal] = React.useState(false);\n const [initialErrors, setInitialErrors] = React.useState(null);\n\n const workflow = workflows.find((workflow) => workflow.id === parseInt(workflowId, 10));\n const contentTypesFromOtherWorkflows = workflows\n .filter((workflow) => workflow.id !== parseInt(workflowId, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const { mutateAsync, isLoading: isLoadingMutation } = useMutation(\n async ({ workflow }) => {\n const {\n data: { data },\n } = await put(`/admin/review-workflows/workflows/${workflow.id}`, {\n data: workflow,\n });\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n },\n }\n );\n\n const updateWorkflow = async (workflow) => {\n // reset the error messages\n setInitialErrors(null);\n\n try {\n const res = await mutateAsync({\n workflow: {\n ...workflow,\n\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: workflow.stages.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = serverState.workflow.stages.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permission?.length ||\n !serverStage.permissions.every(\n (serverPermission) =>\n !!stage.permissions.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n };\n }),\n },\n });\n\n return res;\n } catch (error) {\n // TODO: this would benefit from a utility to get a formik error\n // representation from an API error\n if (\n error.response.data?.error?.name === 'ValidationError' &&\n error.response.data?.error?.details?.errors?.length > 0\n ) {\n setInitialErrors(\n error.response.data?.error?.details?.errors.reduce((acc, error) => {\n set(acc, error.path, error.message);\n\n return acc;\n }, {})\n );\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n\n return null;\n }\n };\n\n const submitForm = async () => {\n await updateWorkflow(currentWorkflow);\n await refetch();\n\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows.includes(contentType)\n );\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n const limits = getFeature('review-workflows');\n\n React.useEffect(() => {\n if (!isLoadingWorkflow) {\n dispatch(setWorkflow({ workflow }));\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingWorkflow || isLoadingContentTypes || isLoadingRoles));\n\n // reset the state to the initial state to avoid flashes if a user\n // navigates from an edit-view to a create-view\n return () => {\n dispatch(resetWorkflow());\n };\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingWorkflow,\n isLoadingRoles,\n serverRoles,\n singleTypes,\n workflow,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('workflow');\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow.stages.length,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta?.workflowCount,\n meta.workflowsTotal,\n ]);\n\n React.useEffect(() => {\n if (!isLoading && roles.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n // TODO: redirect back to list-view if workflow is not found?\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n canUpdate && (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Object.keys(savePrompts).length > 0 && isLoadingMutation}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n subtitle={\n !isLoading &&\n formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow.stages.length }\n )\n }\n title={currentWorkflow.name}\n />\n\n <Layout.Root>\n {isLoading ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate}\n stages={formik.values?.stages}\n />\n </Flex>\n )}\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows.filter((contentType) =>\n currentWorkflow.contentTypes.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'stage'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n}\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\n\nimport { ReviewWorkflowsEditView } from './EditView';\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['review-workflows'].main}>\n <ReviewWorkflowsEditView />\n </CheckPagePermissions>\n );\n}\n"],"names":["workflow","serverStage","error","Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root","LimitsModal.Root","LimitsModal.Title","LimitsModal.Body"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-d1583f5b.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport {\n ConfirmDialog,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider } from 'formik';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../../../admin/src/hooks/useInjectReducer';\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\nimport {\n resetWorkflow,\n setIsLoading,\n setWorkflow,\n setContentTypes,\n setRoles,\n setWorkflows,\n} from '../../actions';\nimport * as Layout from '../../components/Layout';\nimport * as LimitsModal from '../../components/LimitsModal';\nimport { Stages } from '../../components/Stages';\nimport { WorkflowAttributes } from '../../components/WorkflowAttributes';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from '../../constants';\nimport { useReviewWorkflows } from '../../hooks/useReviewWorkflows';\nimport { reducer } from '../../reducer';\nimport {\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectHasDeletedServerStages,\n selectIsLoading,\n selectRoles,\n selectServerState,\n} from '../../selectors';\nimport { validateWorkflow } from '../../utils/validateWorkflow';\n\nexport function ReviewWorkflowsEditView() {\n const { workflowId } = useParams();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const { put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const { isLoading: isLoadingWorkflow, meta, workflows, refetch } = useReviewWorkflows();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const serverState = useSelector(selectServerState);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const hasDeletedServerStages = useSelector(selectHasDeletedServerStages);\n const roles = useSelector(selectRoles);\n const isLoading = useSelector(selectIsLoading);\n const {\n allowedActions: { canDelete, canUpdate },\n } = useRBAC(permissions.settings['review-workflows']);\n const [savePrompts, setSavePrompts] = React.useState({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined, {\n retry: false,\n });\n const [showLimitModal, setShowLimitModal] = React.useState(false);\n const [initialErrors, setInitialErrors] = React.useState(null);\n\n const workflow = workflows.find((workflow) => workflow.id === parseInt(workflowId, 10));\n const contentTypesFromOtherWorkflows = workflows\n .filter((workflow) => workflow.id !== parseInt(workflowId, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const { mutateAsync, isLoading: isLoadingMutation } = useMutation(\n async ({ workflow }) => {\n const {\n data: { data },\n } = await put(`/admin/review-workflows/workflows/${workflow.id}`, {\n data: workflow,\n });\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n },\n }\n );\n\n const updateWorkflow = async (workflow) => {\n // reset the error messages\n setInitialErrors(null);\n\n try {\n const res = await mutateAsync({\n workflow: {\n ...workflow,\n\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: workflow.stages.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = serverState.workflow.stages.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permission?.length ||\n !serverStage.permissions.every(\n (serverPermission) =>\n !!stage.permissions.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n };\n }),\n },\n });\n\n return res;\n } catch (error) {\n // TODO: this would benefit from a utility to get a formik error\n // representation from an API error\n if (\n error.response.data?.error?.name === 'ValidationError' &&\n error.response.data?.error?.details?.errors?.length > 0\n ) {\n setInitialErrors(\n error.response.data?.error?.details?.errors.reduce((acc, error) => {\n set(acc, error.path, error.message);\n\n return acc;\n }, {})\n );\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n\n return null;\n }\n };\n\n const submitForm = async () => {\n await updateWorkflow(currentWorkflow);\n await refetch();\n\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows.includes(contentType)\n );\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n const limits = getFeature('review-workflows');\n\n React.useEffect(() => {\n if (!isLoadingWorkflow) {\n dispatch(setWorkflow({ workflow }));\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingWorkflow || isLoadingContentTypes || isLoadingRoles));\n\n // reset the state to the initial state to avoid flashes if a user\n // navigates from an edit-view to a create-view\n return () => {\n dispatch(resetWorkflow());\n };\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingWorkflow,\n isLoadingRoles,\n serverRoles,\n singleTypes,\n workflow,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('workflow');\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow.stages.length,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta?.workflowCount,\n meta.workflowsTotal,\n ]);\n\n React.useEffect(() => {\n if (!isLoading && roles.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n // TODO: redirect back to list-view if workflow is not found?\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n canUpdate && (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Object.keys(savePrompts).length > 0 && isLoadingMutation}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n subtitle={\n !isLoading &&\n formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow.stages.length }\n )\n }\n title={currentWorkflow.name}\n />\n\n <Layout.Root>\n {isLoading ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate}\n stages={formik.values?.stages}\n />\n </Flex>\n )}\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows.filter((contentType) =>\n currentWorkflow.contentTypes.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'stage'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n}\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\n\nimport { ReviewWorkflowsEditView } from './EditView';\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['review-workflows'].main}>\n <ReviewWorkflowsEditView />\n </CheckPagePermissions>\n );\n}\n"],"names":["workflow","serverStage","error","Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root","LimitsModal.Root","LimitsModal.Title","LimitsModal.Body"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDO,SAAS,0BAA0B;AAClC,QAAA,EAAE,eAAe;AACjB,QAAA,cAAc,YAAY,sBAAsB;AAChD,QAAA,EAAE,kBAAkB;AAC1B,QAAM,WAAW;AACX,QAAA,EAAE,QAAQ;AACV,QAAA,EAAE,mBAAmB;AAC3B,QAAM,qBAAqB;AAC3B,QAAM,EAAE,WAAW,mBAAmB,MAAM,WAAW,QAAA,IAAY;AACnE,QAAM,EAAE,iBAAiB,aAAa,WAAW,sBAAA,IAA0B;AACrE,QAAA,cAAc,YAAY,iBAAiB;AAC3C,QAAA,yBAAyB,YAAY,qBAAqB;AAC1D,QAAA,kBAAkB,YAAY,qBAAqB;AACnD,QAAA,yBAAyB,YAAY,4BAA4B;AACjE,QAAA,QAAQ,YAAY,WAAW;AAC/B,QAAA,YAAY,YAAY,eAAe;AACvC,QAAA;AAAA,IACJ,gBAAgB,EAAE,WAAW,UAAU;AAAA,EACrC,IAAA,QAAQ,YAAY,SAAS,kBAAkB,CAAC;AACpD,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,CAAA,CAAE;AACvD,QAAM,EAAE,YAAY,WAAW,qBAAqB,iBAAiB;AACrE,QAAM,EAAE,WAAW,gBAAgB,OAAO,gBAAgB,cAAc,QAAW;AAAA,IACjF,OAAO;AAAA,EAAA,CACR;AACD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAS,KAAK;AAChE,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,IAAI;AAEvD,QAAA,WAAW,UAAU,KAAK,CAACA,cAAaA,UAAS,OAAO,SAAS,YAAY,EAAE,CAAC;AACtF,QAAM,iCAAiC,UACpC,OAAO,CAACA,cAAaA,UAAS,OAAO,SAAS,YAAY,EAAE,CAAC,EAC7D,QAAQ,CAACA,cAAaA,UAAS,YAAY;AAE9C,QAAM,EAAE,aAAa,WAAW,kBAAsB,IAAA;AAAA,IACpD,OAAO,EAAE,UAAAA,gBAAe;AAChB,YAAA;AAAA,QACJ,MAAM,EAAE,KAAK;AAAA,MAAA,IACX,MAAM,IAAI,qCAAqCA,UAAS,EAAE,IAAI;AAAA,QAChE,MAAMA;AAAAA,MAAA,CACP;AAEM,aAAA;AAAA,IACT;AAAA,IACA;AAAA,MACE,YAAY;AACS,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI,8BAA8B,gBAAgB,QAAQ;AAAA,QAAA,CACtE;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,iBAAiB,OAAOA,cAAa;AAEzC,qBAAiB,IAAI;AAEjB,QAAA;AACI,YAAA,MAAM,MAAM,YAAY;AAAA,QAC5B,UAAU;AAAA,UACR,GAAGA;AAAAA;AAAAA;AAAAA;AAAAA,UAKH,QAAQA,UAAS,OAAO,IAAI,CAAC,UAAU;AACrC,gBAAI,wBAAwB;AACtB,kBAAA,cAAc,YAAY,SAAS,OAAO;AAAA,cAC9C,CAACC,iBAAgBA,aAAY,OAAO,OAAO;AAAA,YAAA;AAG7C,gBAAI,aAAa;AAEb,sCAAA,YAAY,aAAa,WAAW,MAAM,YAAY,UACtD,CAAC,YAAY,YAAY;AAAA,gBACvB,CAAC,qBACC,CAAC,CAAC,MAAM,YAAY;AAAA,kBAClB,CAAC,eAAe,WAAW,SAAS,iBAAiB;AAAA,gBACvD;AAAA,cAAA;AAAA,YAER;AAEO,mBAAA;AAAA,cACL,GAAG;AAAA,cACH,aAAa,wBAAwB,MAAM,cAAc;AAAA,YAAA;AAAA,UAC3D,CACD;AAAA,QACH;AAAA,MAAA,CACD;AAEM,aAAA;AAAA,aACA,OAAO;AAGd,UACE,MAAM,SAAS,MAAM,OAAO,SAAS,qBACrC,MAAM,SAAS,MAAM,OAAO,SAAS,QAAQ,SAAS,GACtD;AACA;AAAA,UACE,MAAM,SAAS,MAAM,OAAO,SAAS,OAAO,OAAO,CAAC,KAAKC,WAAU;AACjE,gBAAI,KAAKA,OAAM,MAAMA,OAAM,OAAO;AAE3B,mBAAA;AAAA,UACT,GAAG,EAAE;AAAA,QAAA;AAAA,MAET;AAEmB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAEM,aAAA;AAAA,IACT;AAAA,EAAA;AAGF,QAAM,aAAa,YAAY;AAC7B,UAAM,eAAe,eAAe;AACpC,UAAM,QAAQ;AAEd,mBAAe,CAAE,CAAA;AAAA,EAAA;AAGnB,QAAM,4BAA4B,YAAY;AAC5C,UAAM,WAAW;AAAA,EAAA;AAGnB,QAAM,qBAAqB,MAAM;AAC/B,mBAAe,CAAE,CAAA;AAAA,EAAA;AAGnB,QAAM,SAAS,UAAU;AAAA,IACvB,oBAAoB;AAAA,IACpB;AAAA,IACA,eAAe;AAAA,IACf,MAAM,WAAW;AACT,YAAA,4BAA4B,gBAAgB,aAAa;AAAA,QAAK,CAAC,gBACnE,+BAA+B,SAAS,WAAW;AAAA,MAAA;AAInD,UAAA,SAAS,mCAAmC,KAC5C,MAAM,gBAAgB,SAAS,OAAO,mCAAmC,GAAG,EAAE,GAC9E;AAMA,0BAAkB,UAAU;AAAA,MAQ5B,WAAA,SAAS,8CAA8C,KACvD,gBAAgB,OAAO,SACrB,SAAS,OAAO,8CAA8C,GAAG,EAAE,GACrE;AACA,0BAAkB,OAAO;AAAA,MAAA,WAChB,0BAA0B,2BAA2B;AAC9D,YAAI,wBAAwB;AAC1B,yBAAe,CAAC,UAAU,EAAE,GAAG,MAAM,wBAAwB,KAAO,EAAA;AAAA,QACtE;AAEA,YAAI,2BAA2B;AAC7B,yBAAe,CAAC,UAAU,EAAE,GAAG,MAAM,2BAA2B,KAAO,EAAA;AAAA,QACzE;AAAA,MAAA,OACK;AACM;MACb;AAAA,IACF;AAAA,IACA,SAAS,QAAQ;AACf,aAAO,iBAAiB,EAAE,QAAQ,cAAe,CAAA;AAAA,IACnD;AAAA,EAAA,CACD;AAED,mBAAiB,iBAAiB,OAAO;AAEnC,QAAA,SAAS,WAAW,kBAAkB;AAE5C,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,mBAAmB;AACtB,eAAS,YAAY,EAAE,SAAS,CAAC,CAAC;AAClC,eAAS,aAAa,EAAE,UAAU,CAAC,CAAC;AAAA,IACtC;AAEA,QAAI,CAAC,uBAAuB;AAC1B,eAAS,gBAAgB,EAAE,iBAAiB,YAAA,CAAa,CAAC;AAAA,IAC5D;AAEA,QAAI,CAAC,gBAAgB;AACV,eAAA,SAAS,WAAW,CAAC;AAAA,IAChC;AAEA,aAAS,aAAa,qBAAqB,yBAAyB,cAAc,CAAC;AAInF,WAAO,MAAM;AACX,eAAS,eAAe;AAAA,IAAA;AAAA,EAC1B,GACC;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAeD,QAAM,UAAU,MAAM;AAChB,QAAA,CAAC,qBAAqB,CAAC,kBAAkB;AAEzC,UAAA,SAAS,mCAAmC,KAC5C,MAAM,gBAAgB,SAAS,OAAO,mCAAmC,GAAG,EAAE,GAC9E;AACA,0BAAkB,UAAU;AAAA,MAE5B,WAAA,SAAS,8CAA8C,KACvD,gBAAgB,OAAO,SACrB,SAAS,OAAO,8CAA8C,GAAG,EAAE,GACrE;AACA,0BAAkB,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,EAAA,GACC;AAAA,IACD,gBAAgB,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,KAAK;AAAA,EAAA,CACN;AAED,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,aAAa,MAAM,WAAW,GAAG;AACjB,yBAAA;AAAA,QACjB,iBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IACH;AAAA,KACC,CAAC,eAAe,WAAW,OAAO,kBAAkB,CAAC;AAIxD,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAC,oBAAAC,mBAAA,EAAyB;AAAA,IAE1B,oBAAC,kBAAe,OAAO,QACrB,+BAAC,MAAK,EAAA,UAAU,OAAO,cACrB,UAAA;AAAA,MAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,kBAAmB,oBAAAC,MAAA,EAAY,MAAK,6BAA6B,CAAA;AAAA,UACjE,eACE,aACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,+BAAY,OAAM,EAAA;AAAA,cAClB,MAAK;AAAA,cACL,MAAK;AAAA,cACL,UAAU,CAAC;AAAA,cAGX,SAAS,CAAC,OAAO,KAAK,WAAW,EAAE,SAAS,KAAK;AAAA,cAEhD,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,YAAA;AAAA,UACH;AAAA,UAGJ,UACE,CAAC,aACD;AAAA,YACE;AAAA,cACE,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAClB;AAAA,YACA,EAAE,OAAO,gBAAgB,OAAO,OAAO;AAAA,UACzC;AAAA,UAEF,OAAO,gBAAgB;AAAA,QAAA;AAAA,MACzB;AAAA,MAEA,oBAACC,MAAA,EACE,UAAA,YACE,oBAAA,MAAA,EAAK,gBAAe,UACnB,UAAC,oBAAA,QAAA,EACE,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,EACH,CAAA,EACF,CAAA,IAEA,qBAAC,MAAK,EAAA,YAAW,WAAU,WAAU,UAAS,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,sBAAmB,WAAsB;AAAA,QAC1C;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,QAAQ,OAAO,QAAQ;AAAA,UAAA;AAAA,QACzB;AAAA,MAAA,EAAA,CACF,EAEJ,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IAEA;AAAA,MAAC,cAAc;AAAA,MAAd;AAAA,QACC,wBAAwB;AAAA,QACxB,QAAQ,OAAO,KAAK,WAAW,EAAE,SAAS;AAAA,QAC1C,gBAAgB;AAAA,QAChB,WAAW;AAAA,QAEX,UAAA,oBAAC,cAAc,MAAd,EACC,+BAAC,MAAK,EAAA,WAAU,UAAS,KAAK,GAC3B,UAAA;AAAA,UAAA,YAAY,0BACV,oBAAA,YAAA,EAAW,WAAU,UAAS,SAAQ,SACpC,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBACE;AAAA,UACH,CAAA,GACH;AAAA,UAGD,YAAY,6BACX,oBAAC,cAAW,WAAU,UAAS,SAAQ,SACpC,UAAA;AAAA,YACC;AAAA,cACE,IAAI;AAAA,cACJ,gBACE;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO,+BAA+B;AAAA,gBAAO,CAAC,gBAC5C,gBAAgB,aAAa,SAAS,WAAW;AAAA,cAAA,EACjD;AAAA,YACJ;AAAA,UAAA,GAEJ;AAAA,8BAGD,YAAW,EAAA,WAAU,UAAS,SAAQ,SACpC,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,QAAA,EAAA,CACF,EACF,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,IAEA;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,QAAQ,mBAAmB;AAAA,QAC3B,SAAS,MAAM,kBAAkB,KAAK;AAAA,QAEtC,UAAA;AAAA,UAAC,oBAAAC,OAAA,EACE,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,UAEC,oBAAAC,MAAA,EACE,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IAEA;AAAA,MAACF;AAAAA,MAAA;AAAA,QACC,QAAQ,mBAAmB;AAAA,QAC3B,SAAS,MAAM,kBAAkB,KAAK;AAAA,QAEtC,UAAA;AAAA,UAAC,oBAAAC,OAAA,EACE,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,UAEC,oBAAAC,MAAA,EACE,UAAc,cAAA;AAAA,YACb,IAAI;AAAA,YACJ,gBAAgB;AAAA,UACjB,CAAA,GACH;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ;ACzc2B,SAAA,QAAA;AACnB,QAAA,cAAc,YAAY,sBAAsB;AAGpD,SAAA,oBAAC,sBAAqB,EAAA,aAAa,YAAY,SAAS,kBAAkB,EAAE,MAC1E,UAAC,oBAAA,yBAAA,CAAwB,CAAA,EAC3B,CAAA;AAEJ;"}
|
|
@@ -5,7 +5,7 @@ const React = require("react");
|
|
|
5
5
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
6
6
|
const reactRedux = require("react-redux");
|
|
7
7
|
const reactRouterDom = require("react-router-dom");
|
|
8
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
8
|
+
const AuthenticatedApp = require("./AuthenticatedApp-f7762ffc.js");
|
|
9
9
|
const designSystem = require("@strapi/design-system");
|
|
10
10
|
const Icons = require("@strapi/icons");
|
|
11
11
|
const formik = require("formik");
|
|
@@ -15,9 +15,9 @@ const pick = require("lodash/pick");
|
|
|
15
15
|
const PropTypes = require("prop-types");
|
|
16
16
|
const reactIntl = require("react-intl");
|
|
17
17
|
const useAdminUsers = require("./useAdminUsers-05d6b26a.js");
|
|
18
|
-
const index = require("./index-
|
|
18
|
+
const index = require("./index-0f8c5c53.js");
|
|
19
19
|
const formatAPIErrors = require("./formatAPIErrors-b599cf27.js");
|
|
20
|
-
const index$1 = require("./index-
|
|
20
|
+
const index$1 = require("./index-51c81518.js");
|
|
21
21
|
const edit = require("./edit-29bdf5d6.js");
|
|
22
22
|
require("react-query");
|
|
23
23
|
require("semver/functions/lt");
|
|
@@ -177,7 +177,7 @@ const EditPage = ({ canUpdate }) => {
|
|
|
177
177
|
const { lockApp, unlockApp } = helperPlugin.useOverlayBlocker();
|
|
178
178
|
const MagicLink = index.useEnterprise(
|
|
179
179
|
index$1.MagicLinkCE,
|
|
180
|
-
async () => (await Promise.resolve().then(() => require("./index-
|
|
180
|
+
async () => (await Promise.resolve().then(() => require("./index-0b745772.js"))).MagicLinkEE
|
|
181
181
|
);
|
|
182
182
|
helperPlugin.useFocusWhenNavigate();
|
|
183
183
|
const {
|
|
@@ -415,4 +415,4 @@ const ProtectedEditPage = () => {
|
|
|
415
415
|
return /* @__PURE__ */ jsxRuntime.jsx(EditPage, { canUpdate });
|
|
416
416
|
};
|
|
417
417
|
exports.default = ProtectedEditPage;
|
|
418
|
-
//# sourceMappingURL=index-
|
|
418
|
+
//# sourceMappingURL=index-d75d8d15.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-906e4561.js","sources":["../../admin/src/pages/SettingsPage/pages/Users/EditPage/utils/api.js","../../admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js","../../admin/src/pages/SettingsPage/pages/Users/EditPage/index.js","../../admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js"],"sourcesContent":["import { getFetchClient } from '@strapi/helper-plugin';\n\nconst putUser = async (id, body) => {\n const { put } = getFetchClient();\n\n const { data } = await put(`/admin/users/${id}`, body);\n\n return data.data;\n};\n\nexport { putUser };\n","const layout = [\n [\n {\n intlLabel: {\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n },\n name: 'firstname',\n placeholder: {\n id: 'Auth.form.firstname.placeholder',\n defaultMessage: 'e.g. Kai',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n },\n name: 'lastname',\n placeholder: {\n id: 'Auth.form.lastname.placeholder',\n defaultMessage: 'e.g. Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n },\n name: 'email',\n placeholder: {\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'e.g. kai.doe@strapi.io',\n },\n type: 'email',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n },\n name: 'username',\n placeholder: {\n id: 'Auth.form.username.placeholder',\n defaultMessage: 'e.g. Kai_Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'global.password',\n defaultMessage: 'Password',\n },\n name: 'password',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n {\n intlLabel: {\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Password confirmation',\n },\n name: 'confirmPassword',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.active.label',\n defaultMessage: 'Active',\n },\n name: 'isActive',\n type: 'bool',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n];\n\nexport default layout;\n","import React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n auth,\n Form,\n GenericInput,\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport get from 'lodash/get';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useAdminUsers } from '../../../../../hooks/useAdminUsers';\nimport { useEnterprise } from '../../../../../hooks/useEnterprise';\nimport { formatAPIErrors } from '../../../../../utils/formatAPIErrors';\nimport { getFullName } from '../../../../../utils/getFullName';\nimport { MagicLinkCE } from '../components/MagicLink';\nimport SelectRoles from '../components/SelectRoles';\nimport { editValidation } from '../utils/validations/users';\n\nimport { putUser } from './utils/api';\nimport layout from './utils/layout';\n\nconst fieldsToPick = ['email', 'firstname', 'lastname', 'username', 'isActive', 'roles'];\n\nconst EditPage = ({ canUpdate }) => {\n const { formatMessage } = useIntl();\n const {\n params: { id },\n } = useRouteMatch('/settings/users/:id');\n const { push } = useHistory();\n const { setUserDisplayName } = useAppInfo();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const MagicLink = useEnterprise(\n MagicLinkCE,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLink'\n )\n ).MagicLinkEE\n );\n\n useFocusWhenNavigate();\n\n const {\n users: [user],\n isLoading: isLoadingAdminUsers,\n } = useAdminUsers(\n { id },\n {\n cacheTime: 0,\n\n onError(error) {\n const { status } = error.response;\n\n // Redirect the use to the homepage if is not allowed to read\n if (status === 403) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n\n push('/');\n } else {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n }\n },\n }\n );\n\n const handleSubmit = async (body, actions) => {\n lockApp();\n\n try {\n const data = await putUser(id, omit(body, 'confirmPassword'));\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n const userInfos = auth.getUserInfo();\n\n // The user is updating himself\n if (id.toString() === userInfos.id.toString()) {\n auth.setUserInfo(data);\n\n const userDisplayName = get(body, 'username') || getFullName(body.firstname, body.lastname);\n\n setUserDisplayName(userDisplayName);\n }\n actions.setValues(pick(body, fieldsToPick));\n } catch (err) {\n // FIXME when API errors are ready\n const errors = formatAPIErrors(err.response.data);\n const fieldsErrors = Object.keys(errors).reduce((acc, current) => {\n acc[current] = errors[current].id;\n\n return acc;\n }, {});\n\n actions.setErrors(fieldsErrors);\n toggleNotification({\n type: 'warning',\n message: get(err, 'response.data.error.message', 'notification.error'),\n });\n }\n\n unlockApp();\n };\n\n const isLoading = isLoadingAdminUsers || !MagicLink;\n\n const headerLabel = isLoading\n ? { id: 'app.containers.Users.EditPage.header.label-loading', defaultMessage: 'Edit user' }\n : { id: 'app.containers.Users.EditPage.header.label', defaultMessage: 'Edit {name}' };\n\n const initialData = Object.keys(pick(user, fieldsToPick)).reduce((acc, current) => {\n if (current === 'roles') {\n acc[current] = (user?.roles || []).map(({ id }) => id);\n\n return acc;\n }\n\n acc[current] = user?.[current];\n\n return acc;\n }, {});\n\n const headerLabelName =\n initialData.username || getFullName(initialData.firstname, initialData.lastname);\n\n const title = formatMessage(headerLabel, { name: headerLabelName });\n\n if (isLoading) {\n return (\n <Main aria-busy=\"true\">\n {/* TODO: translate */}\n <SettingsPageTitle name=\"Users\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={title}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/settings/users?pageSize=10&page=1&sort=firstname\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n return (\n <Main>\n <SettingsPageTitle name=\"Users\" />\n <Formik\n onSubmit={handleSubmit}\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={editValidation}\n >\n {({ errors, values, handleChange, isSubmitting, dirty }) => {\n return (\n <Form>\n <HeaderLayout\n primaryAction={\n <Button\n disabled={isSubmitting || !canUpdate ? true : !dirty}\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={title}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n {user?.registrationToken && (\n <Box paddingBottom={6}>\n <MagicLink registrationToken={user.registrationToken} />\n </Box>\n )}\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n {layout.map((row) => {\n return row.map((input) => {\n return (\n <GridItem key={input.name} {...input.size}>\n <GenericInput\n {...input}\n disabled={!canUpdate}\n error={errors[input.name]}\n onChange={handleChange}\n value={values[input.name] || ''}\n />\n </GridItem>\n );\n });\n })}\n </Grid>\n </Flex>\n </Box>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.roles',\n defaultMessage: \"User's role\",\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem col={6} xs={12}>\n <SelectRoles\n disabled={!canUpdate}\n error={errors.roles}\n onChange={handleChange}\n value={values.roles}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\nEditPage.propTypes = {\n canUpdate: PropTypes.bool.isRequired,\n};\n\nexport default EditPage;\n","import React, { useEffect } from 'react';\n\nimport { LoadingIndicatorPage, useNotification, useRBAC } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\nimport { Redirect, useLocation } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditPage from '../EditPage';\n\nconst ProtectedEditPage = () => {\n const toggleNotification = useNotification();\n const permissions = useSelector(selectAdminPermissions);\n\n const memoizedPermissions = React.useMemo(\n () => ({\n read: permissions.settings.users.read,\n update: permissions.settings.users.update,\n }),\n [permissions.settings.users]\n );\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC(memoizedPermissions);\n const { state } = useLocation();\n const from = state?.from ?? '/';\n\n useEffect(() => {\n if (!isLoading) {\n if (!canRead && !canUpdate) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n }\n }\n }, [isLoading, canRead, canUpdate, toggleNotification]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to={from} />;\n }\n\n return <EditPage canUpdate={canUpdate} />;\n};\n\nexport default ProtectedEditPage;\n"],"names":["getFetchClient","useIntl","useRouteMatch","useHistory","useAppInfo","useNotification","useOverlayBlocker","useEnterprise","MagicLinkCE","useFocusWhenNavigate","useAdminUsers","omit","auth","get","getFullName","pick","formatAPIErrors","id","jsxs","Main","jsx","SettingsPageTitle","HeaderLayout","Button","Check","Link","ArrowLeft","ContentLayout","LoadingIndicatorPage","Formik","editValidation","Form","Box","Flex","Typography","Grid","GridItem","GenericInput","SelectRoles","PropTypes","useSelector","selectAdminPermissions","React","useRBAC","useLocation","useEffect","Redirect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-d75d8d15.js","sources":["../../admin/src/pages/SettingsPage/pages/Users/EditPage/utils/api.js","../../admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js","../../admin/src/pages/SettingsPage/pages/Users/EditPage/index.js","../../admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js"],"sourcesContent":["import { getFetchClient } from '@strapi/helper-plugin';\n\nconst putUser = async (id, body) => {\n const { put } = getFetchClient();\n\n const { data } = await put(`/admin/users/${id}`, body);\n\n return data.data;\n};\n\nexport { putUser };\n","const layout = [\n [\n {\n intlLabel: {\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n },\n name: 'firstname',\n placeholder: {\n id: 'Auth.form.firstname.placeholder',\n defaultMessage: 'e.g. Kai',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n },\n name: 'lastname',\n placeholder: {\n id: 'Auth.form.lastname.placeholder',\n defaultMessage: 'e.g. Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n },\n name: 'email',\n placeholder: {\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'e.g. kai.doe@strapi.io',\n },\n type: 'email',\n size: {\n col: 6,\n xs: 12,\n },\n required: true,\n },\n {\n intlLabel: {\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n },\n name: 'username',\n placeholder: {\n id: 'Auth.form.username.placeholder',\n defaultMessage: 'e.g. Kai_Doe',\n },\n type: 'text',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n [\n {\n intlLabel: {\n id: 'global.password',\n defaultMessage: 'Password',\n },\n name: 'password',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n {\n intlLabel: {\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Password confirmation',\n },\n name: 'confirmPassword',\n type: 'password',\n size: {\n col: 6,\n xs: 12,\n },\n autoComplete: 'new-password',\n },\n ],\n [\n {\n intlLabel: {\n id: 'Auth.form.active.label',\n defaultMessage: 'Active',\n },\n name: 'isActive',\n type: 'bool',\n size: {\n col: 6,\n xs: 12,\n },\n },\n ],\n];\n\nexport default layout;\n","import React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n auth,\n Form,\n GenericInput,\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport get from 'lodash/get';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { useAdminUsers } from '../../../../../hooks/useAdminUsers';\nimport { useEnterprise } from '../../../../../hooks/useEnterprise';\nimport { formatAPIErrors } from '../../../../../utils/formatAPIErrors';\nimport { getFullName } from '../../../../../utils/getFullName';\nimport { MagicLinkCE } from '../components/MagicLink';\nimport SelectRoles from '../components/SelectRoles';\nimport { editValidation } from '../utils/validations/users';\n\nimport { putUser } from './utils/api';\nimport layout from './utils/layout';\n\nconst fieldsToPick = ['email', 'firstname', 'lastname', 'username', 'isActive', 'roles'];\n\nconst EditPage = ({ canUpdate }) => {\n const { formatMessage } = useIntl();\n const {\n params: { id },\n } = useRouteMatch('/settings/users/:id');\n const { push } = useHistory();\n const { setUserDisplayName } = useAppInfo();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const MagicLink = useEnterprise(\n MagicLinkCE,\n async () =>\n (\n await import(\n '../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLink'\n )\n ).MagicLinkEE\n );\n\n useFocusWhenNavigate();\n\n const {\n users: [user],\n isLoading: isLoadingAdminUsers,\n } = useAdminUsers(\n { id },\n {\n cacheTime: 0,\n\n onError(error) {\n const { status } = error.response;\n\n // Redirect the use to the homepage if is not allowed to read\n if (status === 403) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n\n push('/');\n } else {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n }\n },\n }\n );\n\n const handleSubmit = async (body, actions) => {\n lockApp();\n\n try {\n const data = await putUser(id, omit(body, 'confirmPassword'));\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n const userInfos = auth.getUserInfo();\n\n // The user is updating himself\n if (id.toString() === userInfos.id.toString()) {\n auth.setUserInfo(data);\n\n const userDisplayName = get(body, 'username') || getFullName(body.firstname, body.lastname);\n\n setUserDisplayName(userDisplayName);\n }\n actions.setValues(pick(body, fieldsToPick));\n } catch (err) {\n // FIXME when API errors are ready\n const errors = formatAPIErrors(err.response.data);\n const fieldsErrors = Object.keys(errors).reduce((acc, current) => {\n acc[current] = errors[current].id;\n\n return acc;\n }, {});\n\n actions.setErrors(fieldsErrors);\n toggleNotification({\n type: 'warning',\n message: get(err, 'response.data.error.message', 'notification.error'),\n });\n }\n\n unlockApp();\n };\n\n const isLoading = isLoadingAdminUsers || !MagicLink;\n\n const headerLabel = isLoading\n ? { id: 'app.containers.Users.EditPage.header.label-loading', defaultMessage: 'Edit user' }\n : { id: 'app.containers.Users.EditPage.header.label', defaultMessage: 'Edit {name}' };\n\n const initialData = Object.keys(pick(user, fieldsToPick)).reduce((acc, current) => {\n if (current === 'roles') {\n acc[current] = (user?.roles || []).map(({ id }) => id);\n\n return acc;\n }\n\n acc[current] = user?.[current];\n\n return acc;\n }, {});\n\n const headerLabelName =\n initialData.username || getFullName(initialData.firstname, initialData.lastname);\n\n const title = formatMessage(headerLabel, { name: headerLabelName });\n\n if (isLoading) {\n return (\n <Main aria-busy=\"true\">\n {/* TODO: translate */}\n <SettingsPageTitle name=\"Users\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={title}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/settings/users?pageSize=10&page=1&sort=firstname\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n return (\n <Main>\n <SettingsPageTitle name=\"Users\" />\n <Formik\n onSubmit={handleSubmit}\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={editValidation}\n >\n {({ errors, values, handleChange, isSubmitting, dirty }) => {\n return (\n <Form>\n <HeaderLayout\n primaryAction={\n <Button\n disabled={isSubmitting || !canUpdate ? true : !dirty}\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={title}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n {user?.registrationToken && (\n <Box paddingBottom={6}>\n <MagicLink registrationToken={user.registrationToken} />\n </Box>\n )}\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n {layout.map((row) => {\n return row.map((input) => {\n return (\n <GridItem key={input.name} {...input.size}>\n <GenericInput\n {...input}\n disabled={!canUpdate}\n error={errors[input.name]}\n onChange={handleChange}\n value={values[input.name] || ''}\n />\n </GridItem>\n );\n });\n })}\n </Grid>\n </Flex>\n </Box>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.roles',\n defaultMessage: \"User's role\",\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem col={6} xs={12}>\n <SelectRoles\n disabled={!canUpdate}\n error={errors.roles}\n onChange={handleChange}\n value={values.roles}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\nEditPage.propTypes = {\n canUpdate: PropTypes.bool.isRequired,\n};\n\nexport default EditPage;\n","import React, { useEffect } from 'react';\n\nimport { LoadingIndicatorPage, useNotification, useRBAC } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\nimport { Redirect, useLocation } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditPage from '../EditPage';\n\nconst ProtectedEditPage = () => {\n const toggleNotification = useNotification();\n const permissions = useSelector(selectAdminPermissions);\n\n const memoizedPermissions = React.useMemo(\n () => ({\n read: permissions.settings.users.read,\n update: permissions.settings.users.update,\n }),\n [permissions.settings.users]\n );\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC(memoizedPermissions);\n const { state } = useLocation();\n const from = state?.from ?? '/';\n\n useEffect(() => {\n if (!isLoading) {\n if (!canRead && !canUpdate) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'notification.permission.not-allowed-read',\n defaultMessage: 'You are not allowed to see this document',\n },\n });\n }\n }\n }, [isLoading, canRead, canUpdate, toggleNotification]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to={from} />;\n }\n\n return <EditPage canUpdate={canUpdate} />;\n};\n\nexport default ProtectedEditPage;\n"],"names":["getFetchClient","useIntl","useRouteMatch","useHistory","useAppInfo","useNotification","useOverlayBlocker","useEnterprise","MagicLinkCE","useFocusWhenNavigate","useAdminUsers","omit","auth","get","getFullName","pick","formatAPIErrors","id","jsxs","Main","jsx","SettingsPageTitle","HeaderLayout","Button","Check","Link","ArrowLeft","ContentLayout","LoadingIndicatorPage","Formik","editValidation","Form","Box","Flex","Typography","Grid","GridItem","GenericInput","SelectRoles","PropTypes","useSelector","selectAdminPermissions","React","useRBAC","useLocation","useEffect","Redirect"],"mappings":"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"}
|
|
@@ -3,13 +3,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
5
5
|
const reactRedux = require("react-redux");
|
|
6
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
7
|
-
const index = require("./index-
|
|
6
|
+
const AuthenticatedApp = require("./AuthenticatedApp-f7762ffc.js");
|
|
7
|
+
const index = require("./index-330bae16.js");
|
|
8
8
|
require("react");
|
|
9
9
|
require("react-query");
|
|
10
10
|
require("semver/functions/lt");
|
|
11
11
|
require("semver/functions/valid");
|
|
12
|
-
require("./index-
|
|
12
|
+
require("./index-0f8c5c53.js");
|
|
13
13
|
require("react-dom/client");
|
|
14
14
|
require("@strapi/design-system");
|
|
15
15
|
require("invariant");
|
|
@@ -52,4 +52,4 @@ const ProtectedApiTokenCreateView = () => {
|
|
|
52
52
|
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings["api-tokens"].create, children: /* @__PURE__ */ jsxRuntime.jsx(index.ApiTokenCreateView, {}) });
|
|
53
53
|
};
|
|
54
54
|
exports.default = ProtectedApiTokenCreateView;
|
|
55
|
-
//# sourceMappingURL=index-
|
|
55
|
+
//# sourceMappingURL=index-d9602c22.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-d9602c22.js","sources":["../../admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js"],"sourcesContent":["import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditView from '../EditView';\n\nconst ProtectedApiTokenCreateView = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['api-tokens'].create}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedApiTokenCreateView;\n"],"names":["useSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditView"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,8BAA8B,MAAM;AAClC,QAAA,cAAcA,uBAAYC,iBAAAA,sBAAsB;AAGpD,SAAAC,2BAAA,IAACC,aAAqB,sBAAA,EAAA,aAAa,YAAY,SAAS,YAAY,EAAE,QACpE,UAACD,2BAAA,IAAAE,MAAA,oBAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;"}
|
|
@@ -12,13 +12,13 @@ const reactIntl = require("react-intl");
|
|
|
12
12
|
const reactRedux = require("react-redux");
|
|
13
13
|
const reactRouterDom = require("react-router-dom");
|
|
14
14
|
const styled = require("styled-components");
|
|
15
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
15
|
+
const AuthenticatedApp = require("./AuthenticatedApp-f7762ffc.js");
|
|
16
16
|
const useAdminRolePermissions = require("./useAdminRolePermissions-cb1a3ee2.js");
|
|
17
17
|
const yup = require("yup");
|
|
18
18
|
require("react-query");
|
|
19
19
|
require("semver/functions/lt");
|
|
20
20
|
require("semver/functions/valid");
|
|
21
|
-
require("./index-
|
|
21
|
+
require("./index-0f8c5c53.js");
|
|
22
22
|
require("react-dom/client");
|
|
23
23
|
require("invariant");
|
|
24
24
|
require("lodash/isFunction");
|
|
@@ -263,4 +263,4 @@ function index() {
|
|
|
263
263
|
}
|
|
264
264
|
exports.CreatePage = CreatePage;
|
|
265
265
|
exports.default = index;
|
|
266
|
-
//# sourceMappingURL=index-
|
|
266
|
+
//# sourceMappingURL=index-db4e548d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-17faf42d.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js","../../admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js"],"sourcesContent":["import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\nexport default schema;\n","import React, { useRef, useState } from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n Form,\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport Permissions from '../EditPage/components/Permissions';\nimport { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';\nimport { useAdminRolePermissions } from '../hooks/useAdminRolePermissions';\n\nimport schema from './utils/schema';\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\nconst CreatePage = () => {\n const route = useRouteMatch('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const [isSubmitting, setIsSubmiting] = useState(false);\n const { replace } = useHistory();\n const permissionsRef = useRef();\n const { trackUsage } = useTracking();\n const { post, put } = useFetchClient();\n\n const { params } = route ?? {};\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useAdminRolePermissionLayout(params?.id, {\n cacheTime: 0,\n });\n\n const { permissions: rolePermissions, isLoading: isLoadingRole } = useAdminRolePermissions(\n { id: params?.id },\n {\n cacheTime: 0,\n\n // only fetch permissions if a role is cloned\n enabled: !!params?.id,\n }\n );\n\n const handleCreateRoleSubmit = (data) => {\n lockApp();\n setIsSubmiting(true);\n\n if (params?.id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n Promise.resolve(post('/admin/roles', data))\n .then(async ({ data: res }) => {\n const { permissionsToSend } = permissionsRef.current.getPermissions();\n\n if (params?.id) {\n trackUsage('didDuplicateRole');\n } else {\n trackUsage('didCreateNewRole');\n }\n\n if (res.data.id && !isEmpty(permissionsToSend)) {\n await put(`/admin/roles/${res.data.id}/permissions`, { permissions: permissionsToSend });\n }\n\n return res;\n })\n .then((res) => {\n setIsSubmiting(false);\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n replace(`/settings/roles/${res.data.id}`);\n })\n .catch((err) => {\n console.error(err);\n setIsSubmiting(false);\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n })\n .finally(() => {\n unlockApp();\n });\n };\n\n const defaultDescription = `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`;\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={{ name: '', description: defaultDescription }}\n onSubmit={handleCreateRoleSubmit}\n validationSchema={schema}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleReset, handleChange }) => (\n <Form noValidate>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button onClick={handleSubmit} loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.create}>\n <CreatePage />\n </CheckPagePermissions>\n );\n}\n\nexport { CreatePage };\n"],"names":["yup","translatedErrors","styled","useRouteMatch","useNotification","useOverlayBlocker","useIntl","useState","useHistory","useRef","useTracking","useFetchClient","useAdminRolePermissionLayout","useAdminRolePermissions","isEmpty","format","Main","jsx","SettingsPageTitle","Formik","Form","jsxs","Fragment","HeaderLayout","Flex","Button","Link","ArrowLeft","ContentLayout","Box","Typography","Grid","GridItem","TextInput","Textarea","Permissions","LoadingIndicatorPage","useSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-db4e548d.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js","../../admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js"],"sourcesContent":["import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\nexport default schema;\n","import React, { useRef, useState } from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n Form,\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport Permissions from '../EditPage/components/Permissions';\nimport { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';\nimport { useAdminRolePermissions } from '../hooks/useAdminRolePermissions';\n\nimport schema from './utils/schema';\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\nconst CreatePage = () => {\n const route = useRouteMatch('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const [isSubmitting, setIsSubmiting] = useState(false);\n const { replace } = useHistory();\n const permissionsRef = useRef();\n const { trackUsage } = useTracking();\n const { post, put } = useFetchClient();\n\n const { params } = route ?? {};\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useAdminRolePermissionLayout(params?.id, {\n cacheTime: 0,\n });\n\n const { permissions: rolePermissions, isLoading: isLoadingRole } = useAdminRolePermissions(\n { id: params?.id },\n {\n cacheTime: 0,\n\n // only fetch permissions if a role is cloned\n enabled: !!params?.id,\n }\n );\n\n const handleCreateRoleSubmit = (data) => {\n lockApp();\n setIsSubmiting(true);\n\n if (params?.id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n Promise.resolve(post('/admin/roles', data))\n .then(async ({ data: res }) => {\n const { permissionsToSend } = permissionsRef.current.getPermissions();\n\n if (params?.id) {\n trackUsage('didDuplicateRole');\n } else {\n trackUsage('didCreateNewRole');\n }\n\n if (res.data.id && !isEmpty(permissionsToSend)) {\n await put(`/admin/roles/${res.data.id}/permissions`, { permissions: permissionsToSend });\n }\n\n return res;\n })\n .then((res) => {\n setIsSubmiting(false);\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n replace(`/settings/roles/${res.data.id}`);\n })\n .catch((err) => {\n console.error(err);\n setIsSubmiting(false);\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n })\n .finally(() => {\n unlockApp();\n });\n };\n\n const defaultDescription = `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`;\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={{ name: '', description: defaultDescription }}\n onSubmit={handleCreateRoleSubmit}\n validationSchema={schema}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleReset, handleChange }) => (\n <Form noValidate>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button onClick={handleSubmit} loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.create}>\n <CreatePage />\n </CheckPagePermissions>\n );\n}\n\nexport { CreatePage };\n"],"names":["yup","translatedErrors","styled","useRouteMatch","useNotification","useOverlayBlocker","useIntl","useState","useHistory","useRef","useTracking","useFetchClient","useAdminRolePermissionLayout","useAdminRolePermissions","isEmpty","format","Main","jsx","SettingsPageTitle","Formik","Form","jsxs","Fragment","HeaderLayout","Flex","Button","Link","ArrowLeft","ContentLayout","Box","Typography","Grid","GridItem","TextInput","Textarea","Permissions","LoadingIndicatorPage","useSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { translatedErrors, useNotification, useFetchClient, useOverlayBlocker, useTracking, useAPIErrorHandler, SettingsPageTitle, Link, LoadingIndicatorPage, useRBAC } from "@strapi/helper-plugin";
|
|
3
3
|
import { useSelector } from "react-redux";
|
|
4
4
|
import { useRouteMatch, Redirect } from "react-router-dom";
|
|
5
|
-
import { s as selectAdminPermissions } from "./AuthenticatedApp-
|
|
5
|
+
import { s as selectAdminPermissions } from "./AuthenticatedApp-cdd2864d.mjs";
|
|
6
6
|
import { useState, useRef } from "react";
|
|
7
7
|
import { Box, Flex, Typography, Button, Grid, GridItem, TextInput, Textarea, Main, HeaderLayout, ContentLayout } from "@strapi/design-system";
|
|
8
8
|
import { ArrowLeft } from "@strapi/icons";
|
|
@@ -15,7 +15,7 @@ import * as yup from "yup";
|
|
|
15
15
|
import "react-query";
|
|
16
16
|
import "semver/functions/lt";
|
|
17
17
|
import "semver/functions/valid";
|
|
18
|
-
import "./index-
|
|
18
|
+
import "./index-a2d01aca.mjs";
|
|
19
19
|
import "react-dom/client";
|
|
20
20
|
import "invariant";
|
|
21
21
|
import "lodash/isFunction";
|
|
@@ -270,4 +270,4 @@ const ProtectedEditPage = () => {
|
|
|
270
270
|
export {
|
|
271
271
|
ProtectedEditPage as default
|
|
272
272
|
};
|
|
273
|
-
//# sourceMappingURL=index-
|
|
273
|
+
//# sourceMappingURL=index-dd6de307.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-8c244057.mjs","sources":["../../admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js"],"sourcesContent":["import React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleForm = ({ disabled, role, values, errors, onChange, onBlur }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {role\n ? role.name\n : formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {role\n ? role.description\n : formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <Button disabled variant=\"secondary\">\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: role.usersCount }\n )}\n </Button>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n disabled={disabled}\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={onChange}\n onBlur={onBlur}\n required\n value={values.name || ''}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n disabled={disabled}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.name && formatMessage({ id: errors.name })}\n onChange={onChange}\n onBlur={onBlur}\n >\n {values.description || ''}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nRoleForm.defaultProps = {\n disabled: false,\n role: null,\n values: { name: '', description: '' },\n};\nRoleForm.propTypes = {\n disabled: PropTypes.bool,\n errors: PropTypes.object.isRequired,\n onBlur: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n role: PropTypes.object,\n values: PropTypes.object,\n};\n\nexport default RoleForm;\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n});\n\nexport default schema;\n","import React, { useRef, useState } from 'react';\n\nimport { Box, Button, ContentLayout, Flex, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useRouteMatch } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';\nimport { useAdminRolePermissions } from '../hooks/useAdminRolePermissions';\n\nimport { Permissions, RoleForm } from './components';\nimport schema from './utils/schema';\n\nconst EditPage = () => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const {\n params: { id },\n } = useRouteMatch('/settings/roles/:id');\n const { put } = useFetchClient();\n const [isSubmitting, setIsSubmiting] = useState(false);\n const permissionsRef = useRef();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { trackUsage } = useTracking();\n const { formatAPIError } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useAdminRolePermissionLayout(id, {\n cacheTime: 0,\n });\n\n const {\n roles: [role = {}],\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n const { permissions, isLoading: isLoadingPermissions } = useAdminRolePermissions(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n // TODO: this should use a react-query mutation\n const handleEditRoleSubmit = async (data) => {\n try {\n lockApp();\n setIsSubmiting(true);\n\n const { permissionsToSend, didUpdateConditions } = permissionsRef.current.getPermissions();\n\n await put(`/admin/roles/${id}`, data);\n\n if (role.code !== 'strapi-super-admin') {\n await put(`/admin/roles/${id}/permissions`, {\n permissions: permissionsToSend,\n });\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved' },\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n } finally {\n setIsSubmiting(false);\n unlockApp();\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n enableReinitialize\n initialValues={{\n name: role.name,\n description: role.description,\n }}\n onSubmit={handleEditRoleSubmit}\n validationSchema={schema}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur }) => (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n disabled={role.code === 'strapi-super-admin'}\n onClick={handleSubmit}\n loading={isSubmitting}\n size=\"L\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n isLoading={isRoleLoading || isLoadingPermissions}\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n {!isLoadingPermissionsLayout && !isRoleLoading && !isLoadingPermissions ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport default EditPage;\n","import React from 'react';\n\nimport { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\nimport { Redirect } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditPage from '../EditPage';\n\nconst ProtectedEditPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC({\n read: permissions.settings.roles.read,\n update: permissions.settings.roles.update,\n });\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to=\"/\" />;\n }\n\n return <EditPage />;\n};\n\nexport default ProtectedEditPage;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-dd6de307.mjs","sources":["../../admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js","../../admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js"],"sourcesContent":["import React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n Grid,\n GridItem,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleForm = ({ disabled, role, values, errors, onChange, onBlur }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {role\n ? role.name\n : formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {role\n ? role.description\n : formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <Button disabled variant=\"secondary\">\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: role.usersCount }\n )}\n </Button>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n disabled={disabled}\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={onChange}\n onBlur={onBlur}\n required\n value={values.name || ''}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n disabled={disabled}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.name && formatMessage({ id: errors.name })}\n onChange={onChange}\n onBlur={onBlur}\n >\n {values.description || ''}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nRoleForm.defaultProps = {\n disabled: false,\n role: null,\n values: { name: '', description: '' },\n};\nRoleForm.propTypes = {\n disabled: PropTypes.bool,\n errors: PropTypes.object.isRequired,\n onBlur: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n role: PropTypes.object,\n values: PropTypes.object,\n};\n\nexport default RoleForm;\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n});\n\nexport default schema;\n","import React, { useRef, useState } from 'react';\n\nimport { Box, Button, ContentLayout, Flex, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n Link,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useRouteMatch } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';\nimport { useAdminRolePermissions } from '../hooks/useAdminRolePermissions';\n\nimport { Permissions, RoleForm } from './components';\nimport schema from './utils/schema';\n\nconst EditPage = () => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const {\n params: { id },\n } = useRouteMatch('/settings/roles/:id');\n const { put } = useFetchClient();\n const [isSubmitting, setIsSubmiting] = useState(false);\n const permissionsRef = useRef();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { trackUsage } = useTracking();\n const { formatAPIError } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useAdminRolePermissionLayout(id, {\n cacheTime: 0,\n });\n\n const {\n roles: [role = {}],\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n const { permissions, isLoading: isLoadingPermissions } = useAdminRolePermissions(\n { id },\n {\n cacheTime: 0,\n }\n );\n\n // TODO: this should use a react-query mutation\n const handleEditRoleSubmit = async (data) => {\n try {\n lockApp();\n setIsSubmiting(true);\n\n const { permissionsToSend, didUpdateConditions } = permissionsRef.current.getPermissions();\n\n await put(`/admin/roles/${id}`, data);\n\n if (role.code !== 'strapi-super-admin') {\n await put(`/admin/roles/${id}/permissions`, {\n permissions: permissionsToSend,\n });\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved' },\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n } finally {\n setIsSubmiting(false);\n unlockApp();\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n enableReinitialize\n initialValues={{\n name: role.name,\n description: role.description,\n }}\n onSubmit={handleEditRoleSubmit}\n validationSchema={schema}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur }) => (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n disabled={role.code === 'strapi-super-admin'}\n onClick={handleSubmit}\n loading={isSubmitting}\n size=\"L\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n isLoading={isRoleLoading || isLoadingPermissions}\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n {!isLoadingPermissionsLayout && !isRoleLoading && !isLoadingPermissions ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport default EditPage;\n","import React from 'react';\n\nimport { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\nimport { Redirect } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditPage from '../EditPage';\n\nconst ProtectedEditPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading,\n allowedActions: { canRead, canUpdate },\n } = useRBAC({\n read: permissions.settings.roles.read,\n update: permissions.settings.roles.update,\n });\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!canRead && !canUpdate) {\n return <Redirect to=\"/\" />;\n }\n\n return <EditPage />;\n};\n\nexport default ProtectedEditPage;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import PropTypes from "prop-types";
|
|
3
3
|
import { useIntl } from "react-intl";
|
|
4
|
-
import { T as getBasename } from "./index-
|
|
4
|
+
import { T as getBasename } from "./index-a2d01aca.mjs";
|
|
5
5
|
import { IconButton, Select, Option } from "@strapi/design-system";
|
|
6
6
|
import { useNotification, useClipboard, ContentBox, getFetchClient } from "@strapi/helper-plugin";
|
|
7
7
|
import { Duplicate, Loader as Loader$1 } from "@strapi/icons";
|
|
@@ -129,4 +129,4 @@ export {
|
|
|
129
129
|
SelectRoles as S,
|
|
130
130
|
MagicLinkWrapper as a
|
|
131
131
|
};
|
|
132
|
-
//# sourceMappingURL=index-
|
|
132
|
+
//# sourceMappingURL=index-ddfb8187.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-ddfb8187.mjs","sources":["../../admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js","../../admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js","../../admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js"],"sourcesContent":["import React from 'react';\n\nimport { IconButton } from '@strapi/design-system';\nimport { ContentBox, useClipboard, useNotification } from '@strapi/helper-plugin';\nimport { Duplicate } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst MagicLinkWrapper = ({ children, target }) => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n\n const copyLabel = formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n });\n\n const handleClick = async () => {\n const didCopy = await copy(target);\n\n if (didCopy) {\n toggleNotification({ type: 'info', message: { id: 'notification.link-copied' } });\n }\n };\n\n return (\n <ContentBox\n endAction={\n <IconButton label={copyLabel} noBorder icon={<Duplicate />} onClick={handleClick} />\n }\n title={target}\n titleEllipsis\n subtitle={children}\n icon={<span style={{ fontSize: 32 }}>✉️</span>}\n iconBackground=\"neutral100\"\n />\n );\n};\n\nMagicLinkWrapper.propTypes = {\n children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]).isRequired,\n target: PropTypes.string.isRequired,\n};\n\nexport default MagicLinkWrapper;\n","import React from 'react';\n\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getBasename } from '../../../../../../core/utils/basename';\n\nimport MagicLinkWrapper from './MagicLinkWrapper';\n\nexport const MagicLinkCE = ({ registrationToken }) => {\n const { formatMessage } = useIntl();\n const target = `${\n window.location.origin\n }${getBasename()}/auth/register?registrationToken=${registrationToken}`;\n\n return (\n <MagicLinkWrapper target={target}>\n {formatMessage({\n id: 'app.components.Users.MagicLink.connect',\n defaultMessage: 'Copy and share this link to give access to this user',\n })}\n </MagicLinkWrapper>\n );\n};\n\nMagicLinkCE.defaultProps = {\n registrationToken: '',\n};\n\nMagicLinkCE.propTypes = {\n registrationToken: PropTypes.string,\n};\n","import React from 'react';\n\nimport { Option, Select } from '@strapi/design-system';\nimport { getFetchClient } from '@strapi/helper-plugin';\nimport { Loader as LoadingIcon } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport styled, { keyframes } from 'styled-components';\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled.div`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst Loader = () => (\n <LoadingWrapper>\n <LoadingIcon />\n </LoadingWrapper>\n);\n\nconst fetchData = async () => {\n const { get } = getFetchClient();\n const { data } = await get('/admin/roles');\n\n return data.data;\n};\n\nconst SelectRoles = ({ disabled, error, onChange, value }) => {\n const { status, data } = useQuery(['roles'], fetchData, {\n staleTime: 50000,\n });\n const { formatMessage } = useIntl();\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const label = formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.roles',\n defaultMessage: \"User's roles\",\n });\n const hint = formatMessage({\n id: 'app.components.Users.ModalCreateBody.block-title.roles.description',\n defaultMessage: 'A user can have one or several roles',\n });\n const placeholder = formatMessage({\n id: 'app.components.Select.placeholder',\n defaultMessage: 'Select',\n });\n const startIcon = status === 'loading' ? <Loader /> : undefined;\n\n return (\n <Select\n id=\"roles\"\n disabled={disabled}\n error={errorMessage}\n hint={hint}\n label={label}\n name=\"roles\"\n onChange={(v) => {\n onChange({ target: { name: 'roles', value: v } });\n }}\n placeholder={placeholder}\n multi\n startIcon={startIcon}\n value={value.map((v) => v.toString())}\n withTags\n required\n >\n {(data || []).map((role) => {\n return (\n <Option key={role.id} value={role.id.toString()}>\n {formatMessage({\n id: `global.${role.code}`,\n defaultMessage: role.name,\n })}\n </Option>\n );\n })}\n </Select>\n );\n};\n\nSelectRoles.defaultProps = {\n disabled: false,\n error: undefined,\n};\n\nSelectRoles.propTypes = {\n disabled: PropTypes.bool,\n error: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.array.isRequired,\n};\n\nexport default SelectRoles;\n"],"names":["LoadingIcon"],"mappings":"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"}
|