@strapi/admin 5.7.0 → 5.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/{ApplicationInfoPage-BlX64-1T.mjs → ApplicationInfoPage-BNFbKMod.mjs} +2 -2
- package/dist/admin/{ApplicationInfoPage-BlX64-1T.mjs.map → ApplicationInfoPage-BNFbKMod.mjs.map} +1 -1
- package/dist/admin/{ApplicationInfoPage-Cx9Z4tfk.js → ApplicationInfoPage-CxsCNlz3.js} +2 -2
- package/dist/admin/{ApplicationInfoPage-Cx9Z4tfk.js.map → ApplicationInfoPage-CxsCNlz3.js.map} +1 -1
- package/dist/admin/{AuthenticatedLayout-Br8Ujef5.mjs → AuthenticatedLayout-BQ6zs92s.mjs} +11 -18
- package/dist/admin/AuthenticatedLayout-BQ6zs92s.mjs.map +1 -0
- package/dist/admin/{AuthenticatedLayout-CCwt0AgG.js → AuthenticatedLayout-Bibgqyfz.js} +11 -18
- package/dist/admin/AuthenticatedLayout-Bibgqyfz.js.map +1 -0
- package/dist/admin/{CreatePage-Je194jpQ.js → CreatePage-BmRTDEX3.js} +2 -2
- package/dist/admin/{CreatePage-Je194jpQ.js.map → CreatePage-BmRTDEX3.js.map} +1 -1
- package/dist/admin/{CreatePage-CaMDsF7E.mjs → CreatePage-C-0H2K5g.mjs} +2 -2
- package/dist/admin/{CreatePage-CaMDsF7E.mjs.map → CreatePage-C-0H2K5g.mjs.map} +1 -1
- package/dist/admin/{CreatePage-cPI93IzV.mjs → CreatePage-CfCPPYGr.mjs} +2 -2
- package/dist/admin/{CreatePage-cPI93IzV.mjs.map → CreatePage-CfCPPYGr.mjs.map} +1 -1
- package/dist/admin/{CreatePage-DtK2k2xj.js → CreatePage-DpKhGTvR.js} +2 -2
- package/dist/admin/{CreatePage-DtK2k2xj.js.map → CreatePage-DpKhGTvR.js.map} +1 -1
- package/dist/admin/{CreateView-CKHDAAe9.js → CreateView-BdFf17_R.js} +2 -2
- package/dist/admin/{CreateView-CKHDAAe9.js.map → CreateView-BdFf17_R.js.map} +1 -1
- package/dist/admin/{CreateView-CYk_dMMs.mjs → CreateView-Bi-6vB0h.mjs} +2 -2
- package/dist/admin/{CreateView-CYk_dMMs.mjs.map → CreateView-Bi-6vB0h.mjs.map} +1 -1
- package/dist/admin/{CreateView-CV1T_FkK.js → CreateView-Dz-lQ9gG.js} +2 -2
- package/dist/admin/{CreateView-CV1T_FkK.js.map → CreateView-Dz-lQ9gG.js.map} +1 -1
- package/dist/admin/{CreateView-CYhJZ4SU.mjs → CreateView-w-hcufyx.mjs} +2 -2
- package/dist/admin/{CreateView-CYhJZ4SU.mjs.map → CreateView-w-hcufyx.mjs.map} +1 -1
- package/dist/admin/{EditPage-e1MbaksH.js → EditPage-9xmFGD2A.js} +3 -3
- package/dist/admin/{EditPage-e1MbaksH.js.map → EditPage-9xmFGD2A.js.map} +1 -1
- package/dist/admin/{EditPage-DPnF8khi.js → EditPage-BBYkM2hO.js} +3 -3
- package/dist/admin/{EditPage-DPnF8khi.js.map → EditPage-BBYkM2hO.js.map} +1 -1
- package/dist/admin/{EditPage-f8LeUPW3.js → EditPage-BRQERWrj.js} +5 -5
- package/dist/admin/{EditPage-f8LeUPW3.js.map → EditPage-BRQERWrj.js.map} +1 -1
- package/dist/admin/{EditPage-DTaqqKhx.mjs → EditPage-CtSQnW_9.mjs} +5 -5
- package/dist/admin/{EditPage-DTaqqKhx.mjs.map → EditPage-CtSQnW_9.mjs.map} +1 -1
- package/dist/admin/{EditPage-CZPAEYlB.mjs → EditPage-DxEBBqUH.mjs} +3 -3
- package/dist/admin/{EditPage-CZPAEYlB.mjs.map → EditPage-DxEBBqUH.mjs.map} +1 -1
- package/dist/admin/{EditPage-qRfveoLn.mjs → EditPage-oamip13J.mjs} +3 -3
- package/dist/admin/{EditPage-qRfveoLn.mjs.map → EditPage-oamip13J.mjs.map} +1 -1
- package/dist/admin/{EditView-IrrSxD_e.js → EditView-BFkOmHoK.js} +3 -3
- package/dist/admin/{EditView-IrrSxD_e.js.map → EditView-BFkOmHoK.js.map} +1 -1
- package/dist/admin/{EditView-Df6PVPAd.mjs → EditView-Bgq7xkna.mjs} +3 -3
- package/dist/admin/{EditView-Df6PVPAd.mjs.map → EditView-Bgq7xkna.mjs.map} +1 -1
- package/dist/admin/{EditViewPage-BNzM51al.js → EditViewPage-Ct7_0esK.js} +3 -3
- package/dist/admin/{EditViewPage-BNzM51al.js.map → EditViewPage-Ct7_0esK.js.map} +1 -1
- package/dist/admin/{EditViewPage-BKnY-1Sj.mjs → EditViewPage-DwfsUz5e.mjs} +3 -3
- package/dist/admin/{EditViewPage-BKnY-1Sj.mjs.map → EditViewPage-DwfsUz5e.mjs.map} +1 -1
- package/dist/admin/{EventsTable-DUz7EZyi.mjs → EventsTable-CFc2X7Gu.mjs} +2 -2
- package/dist/admin/{EventsTable-DUz7EZyi.mjs.map → EventsTable-CFc2X7Gu.mjs.map} +1 -1
- package/dist/admin/{EventsTable-fqzWSspG.js → EventsTable-Oc3pUQpI.js} +2 -2
- package/dist/admin/{EventsTable-fqzWSspG.js.map → EventsTable-Oc3pUQpI.js.map} +1 -1
- package/dist/admin/{HomePage-NPjXohKj.mjs → HomePage-BWGS-AVh.mjs} +4 -3
- package/dist/admin/HomePage-BWGS-AVh.mjs.map +1 -0
- package/dist/admin/{HomePage-HuAhOTRQ.mjs → HomePage-ClG3SLWJ.mjs} +2 -2
- package/dist/admin/{HomePage-HuAhOTRQ.mjs.map → HomePage-ClG3SLWJ.mjs.map} +1 -1
- package/dist/admin/{HomePage-DAKopsM1.js → HomePage-CzT2bcqG.js} +2 -2
- package/dist/admin/{HomePage-DAKopsM1.js.map → HomePage-CzT2bcqG.js.map} +1 -1
- package/dist/admin/{HomePage-BcZ8G5Zk.js → HomePage-DDJaUkQv.js} +4 -3
- package/dist/admin/HomePage-DDJaUkQv.js.map +1 -0
- package/dist/admin/{InstalledPlugins-BDBDHjp1.mjs → InstalledPlugins-1a_nfRNU.mjs} +2 -2
- package/dist/admin/{InstalledPlugins-BDBDHjp1.mjs.map → InstalledPlugins-1a_nfRNU.mjs.map} +1 -1
- package/dist/admin/{InstalledPlugins-OsZRe2Mj.js → InstalledPlugins-CEeH8nCT.js} +2 -2
- package/dist/admin/{InstalledPlugins-OsZRe2Mj.js.map → InstalledPlugins-CEeH8nCT.js.map} +1 -1
- package/dist/admin/{Layout-ZnQ6qK04.mjs → Layout-BkiVSoVM.mjs} +3 -3
- package/dist/admin/{Layout-ZnQ6qK04.mjs.map → Layout-BkiVSoVM.mjs.map} +1 -1
- package/dist/admin/{Layout-BmPlcHQy.js → Layout-Cz4fM6uC.js} +3 -3
- package/dist/admin/{Layout-BmPlcHQy.js.map → Layout-Cz4fM6uC.js.map} +1 -1
- package/dist/admin/{ListPage-Bu63qBzy.mjs → ListPage-B4XxPT7g.mjs} +2 -2
- package/dist/admin/{ListPage-Bu63qBzy.mjs.map → ListPage-B4XxPT7g.mjs.map} +1 -1
- package/dist/admin/{ListPage-BoJnuSeZ.js → ListPage-B5HILqUc.js} +2 -2
- package/dist/admin/{ListPage-BoJnuSeZ.js.map → ListPage-B5HILqUc.js.map} +1 -1
- package/dist/admin/{ListPage-YvkZI4Dz.mjs → ListPage-BG9wGseD.mjs} +2 -2
- package/dist/admin/{ListPage-YvkZI4Dz.mjs.map → ListPage-BG9wGseD.mjs.map} +1 -1
- package/dist/admin/{ListPage-CtOOlqCn.js → ListPage-BuiNhhwD.js} +5 -5
- package/dist/admin/{ListPage-CtOOlqCn.js.map → ListPage-BuiNhhwD.js.map} +1 -1
- package/dist/admin/{ListPage-B_XyFDAF.mjs → ListPage-CLwCdNQh.mjs} +3 -3
- package/dist/admin/{ListPage-B_XyFDAF.mjs.map → ListPage-CLwCdNQh.mjs.map} +1 -1
- package/dist/admin/{ListPage-BVk9Y9nA.js → ListPage-CWZ3JRp0.js} +2 -2
- package/dist/admin/{ListPage-BVk9Y9nA.js.map → ListPage-CWZ3JRp0.js.map} +1 -1
- package/dist/admin/{ListPage-xSonCT19.js → ListPage-DpdV081q.js} +3 -3
- package/dist/admin/{ListPage-xSonCT19.js.map → ListPage-DpdV081q.js.map} +1 -1
- package/dist/admin/{ListPage-6TiKw8tv.js → ListPage-DwouFFiM.js} +2 -2
- package/dist/admin/{ListPage-6TiKw8tv.js.map → ListPage-DwouFFiM.js.map} +1 -1
- package/dist/admin/{ListPage-Da_2kaB7.mjs → ListPage-jlU2BRvA.mjs} +5 -5
- package/dist/admin/{ListPage-Da_2kaB7.mjs.map → ListPage-jlU2BRvA.mjs.map} +1 -1
- package/dist/admin/{ListPage-C0iLSqYo.mjs → ListPage-mHBjjWxk.mjs} +2 -2
- package/dist/admin/{ListPage-C0iLSqYo.mjs.map → ListPage-mHBjjWxk.mjs.map} +1 -1
- package/dist/admin/{ListView-Cr_P57s2.js → ListView-B1Q51h0h.js} +3 -3
- package/dist/admin/{ListView-Cr_P57s2.js.map → ListView-B1Q51h0h.js.map} +1 -1
- package/dist/admin/{ListView-CMiSzy7H.mjs → ListView-BDpX6eAQ.mjs} +3 -3
- package/dist/admin/{ListView-CMiSzy7H.mjs.map → ListView-BDpX6eAQ.mjs.map} +1 -1
- package/dist/admin/{ListView-DhZFpqcJ.mjs → ListView-BeQRnj-r.mjs} +3 -3
- package/dist/admin/{ListView-DhZFpqcJ.mjs.map → ListView-BeQRnj-r.mjs.map} +1 -1
- package/dist/admin/{ListView-CeE2Qlyi.js → ListView-OzgfbUQV.js} +3 -3
- package/dist/admin/{ListView-CeE2Qlyi.js.map → ListView-OzgfbUQV.js.map} +1 -1
- package/dist/admin/{Login-CKEdHx7A.mjs → Login-BCv1wfvK.mjs} +2 -2
- package/dist/admin/{Login-CKEdHx7A.mjs.map → Login-BCv1wfvK.mjs.map} +1 -1
- package/dist/admin/{Login-B-e6bger.js → Login-DhUOi3iK.js} +2 -2
- package/dist/admin/{Login-B-e6bger.js.map → Login-DhUOi3iK.js.map} +1 -1
- package/dist/admin/{MagicLinkEE-DCazf_P2.mjs → MagicLinkEE-CDJs-_17.mjs} +3 -3
- package/dist/admin/{MagicLinkEE-DCazf_P2.mjs.map → MagicLinkEE-CDJs-_17.mjs.map} +1 -1
- package/dist/admin/{MagicLinkEE-DYCH6Jl2.js → MagicLinkEE-hIIxgUj5.js} +3 -3
- package/dist/admin/{MagicLinkEE-DYCH6Jl2.js.map → MagicLinkEE-hIIxgUj5.js.map} +1 -1
- package/dist/admin/{MarketplacePage-CTbE4SlU.mjs → MarketplacePage-Bu43TEkO.mjs} +2 -2
- package/dist/admin/{MarketplacePage-CTbE4SlU.mjs.map → MarketplacePage-Bu43TEkO.mjs.map} +1 -1
- package/dist/admin/{MarketplacePage-DeH9a207.js → MarketplacePage-DCOmTT67.js} +2 -2
- package/dist/admin/{MarketplacePage-DeH9a207.js.map → MarketplacePage-DCOmTT67.js.map} +1 -1
- package/dist/admin/{ProfilePage-CD0uiMaE.js → ProfilePage-XSJU4odV.js} +3 -3
- package/dist/admin/{ProfilePage-CD0uiMaE.js.map → ProfilePage-XSJU4odV.js.map} +1 -1
- package/dist/admin/{ProfilePage-Bcb_ayAW.mjs → ProfilePage-YEeSFVCM.mjs} +3 -3
- package/dist/admin/{ProfilePage-Bcb_ayAW.mjs.map → ProfilePage-YEeSFVCM.mjs.map} +1 -1
- package/dist/admin/{PurchaseAuditLogs-D9V7WucM.mjs → PurchaseAuditLogs-C9ATpq0U.mjs} +2 -2
- package/dist/admin/{PurchaseAuditLogs-D9V7WucM.mjs.map → PurchaseAuditLogs-C9ATpq0U.mjs.map} +1 -1
- package/dist/admin/{PurchaseAuditLogs-CHKqdqrY.js → PurchaseAuditLogs-DwJextQY.js} +2 -2
- package/dist/admin/{PurchaseAuditLogs-CHKqdqrY.js.map → PurchaseAuditLogs-DwJextQY.js.map} +1 -1
- package/dist/admin/{PurchaseContentHistory-eOg1pQvg.js → PurchaseContentHistory-Bo4cNL6e.js} +2 -2
- package/dist/admin/{PurchaseContentHistory-eOg1pQvg.js.map → PurchaseContentHistory-Bo4cNL6e.js.map} +1 -1
- package/dist/admin/{PurchaseContentHistory-CtiF0HJP.mjs → PurchaseContentHistory-CSlvXfkJ.mjs} +2 -2
- package/dist/admin/{PurchaseContentHistory-CtiF0HJP.mjs.map → PurchaseContentHistory-CSlvXfkJ.mjs.map} +1 -1
- package/dist/admin/{PurchaseSingleSignOn-C4Mthjnp.js → PurchaseSingleSignOn-CGpWKCKR.js} +2 -2
- package/dist/admin/{PurchaseSingleSignOn-C4Mthjnp.js.map → PurchaseSingleSignOn-CGpWKCKR.js.map} +1 -1
- package/dist/admin/{PurchaseSingleSignOn-Dfg-RTXq.mjs → PurchaseSingleSignOn-ouZ_j9iQ.mjs} +2 -2
- package/dist/admin/{PurchaseSingleSignOn-Dfg-RTXq.mjs.map → PurchaseSingleSignOn-ouZ_j9iQ.mjs.map} +1 -1
- package/dist/admin/{SelectRoles-DIyUH00-.js → SelectRoles-CZmFcyVa.js} +3 -3
- package/dist/admin/{SelectRoles-DIyUH00-.js.map → SelectRoles-CZmFcyVa.js.map} +1 -1
- package/dist/admin/{SelectRoles-D1xPS-qt.mjs → SelectRoles-CzMLJs9Y.mjs} +3 -3
- package/dist/admin/{SelectRoles-D1xPS-qt.mjs.map → SelectRoles-CzMLJs9Y.mjs.map} +1 -1
- package/dist/admin/{SingleSignOnPage-BNuYGkeX.js → SingleSignOnPage-B3uoGuv6.js} +3 -3
- package/dist/admin/{SingleSignOnPage-BNuYGkeX.js.map → SingleSignOnPage-B3uoGuv6.js.map} +1 -1
- package/dist/admin/{SingleSignOnPage-BC2aTKy7.mjs → SingleSignOnPage-B9mLzjRi.mjs} +3 -3
- package/dist/admin/{SingleSignOnPage-BC2aTKy7.mjs.map → SingleSignOnPage-B9mLzjRi.mjs.map} +1 -1
- package/dist/admin/{Table-DQnLoM7I.mjs → Table-BaOtQA2D.mjs} +2 -2
- package/dist/admin/{Table-DQnLoM7I.mjs.map → Table-BaOtQA2D.mjs.map} +1 -1
- package/dist/admin/{Table-7pe1j4im.js → Table-DSGT_hBu.js} +2 -2
- package/dist/admin/{Table-7pe1j4im.js.map → Table-DSGT_hBu.js.map} +1 -1
- package/dist/admin/{TokenTypeSelect-ZzXED7rf.js → TokenTypeSelect-C3tCUMnJ.js} +2 -2
- package/dist/admin/{TokenTypeSelect-ZzXED7rf.js.map → TokenTypeSelect-C3tCUMnJ.js.map} +1 -1
- package/dist/admin/{TokenTypeSelect-CTdltdS8.mjs → TokenTypeSelect-Yo2iuaB4.mjs} +2 -2
- package/dist/admin/{TokenTypeSelect-CTdltdS8.mjs.map → TokenTypeSelect-Yo2iuaB4.mjs.map} +1 -1
- package/dist/admin/{UseCasePage-iNVoVcCb.js → UseCasePage-CLhPiLE6.js} +2 -2
- package/dist/admin/{UseCasePage-iNVoVcCb.js.map → UseCasePage-CLhPiLE6.js.map} +1 -1
- package/dist/admin/{UseCasePage-BqAoX3j-.mjs → UseCasePage-eBhY0DSo.mjs} +2 -2
- package/dist/admin/{UseCasePage-BqAoX3j-.mjs.map → UseCasePage-eBhY0DSo.mjs.map} +1 -1
- package/dist/admin/{constants-BtdWKFzN.js → constants-D--w8C9k.js} +2 -2
- package/dist/admin/{constants-BtdWKFzN.js.map → constants-D--w8C9k.js.map} +1 -1
- package/dist/admin/{constants-TZNepYft.mjs → constants-DU7oNawe.mjs} +2 -2
- package/dist/admin/{constants-TZNepYft.mjs.map → constants-DU7oNawe.mjs.map} +1 -1
- package/dist/admin/{index-DxMAHgtc.js → index-DLbx6g-v.js} +38 -35
- package/dist/admin/index-DLbx6g-v.js.map +1 -0
- package/dist/admin/{index-CMdgTmC0.mjs → index-DoNaXvrg.mjs} +38 -35
- package/dist/admin/index-DoNaXvrg.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/{useAdminRoles-BVwapBge.mjs → useAdminRoles-DWhky7Ix.mjs} +2 -2
- package/dist/admin/{useAdminRoles-BVwapBge.mjs.map → useAdminRoles-DWhky7Ix.mjs.map} +1 -1
- package/dist/admin/{useAdminRoles-DVnFvP_o.js → useAdminRoles-rz3j-u2R.js} +2 -2
- package/dist/admin/{useAdminRoles-DVnFvP_o.js.map → useAdminRoles-rz3j-u2R.js.map} +1 -1
- package/dist/admin/{validation-CV2jBW7t.js → validation-ABNr-9R6.js} +2 -2
- package/dist/admin/{validation-CV2jBW7t.js.map → validation-ABNr-9R6.js.map} +1 -1
- package/dist/admin/{validation-D36pWUQH.mjs → validation-Zw14C1gy.mjs} +2 -2
- package/dist/admin/{validation-D36pWUQH.mjs.map → validation-Zw14C1gy.mjs.map} +1 -1
- package/dist/package.json.d.ts +7 -7
- package/package.json +7 -7
- package/dist/admin/AuthenticatedLayout-Br8Ujef5.mjs.map +0 -1
- package/dist/admin/AuthenticatedLayout-CCwt0AgG.js.map +0 -1
- package/dist/admin/HomePage-BcZ8G5Zk.js.map +0 -1
- package/dist/admin/HomePage-NPjXohKj.mjs.map +0 -1
- package/dist/admin/index-CMdgTmC0.mjs.map +0 -1
- package/dist/admin/index-DxMAHgtc.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HomePage-DDJaUkQv.js","sources":["../../admin/src/services/homepage.ts","../../admin/src/pages/Home/components/Widget.tsx","../../admin/src/pages/Home/components/ContentManagerWidgets.tsx","../../admin/src/components/GuidedTour/Homepage.tsx","../../admin/src/pages/Home/components/GuidedTour.tsx","../../admin/src/pages/Home/HomePage.tsx"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n // TODO: remove when the CM widgets are moved to the CM package, the type already exists there\n addTagTypes: ['RecentDocumentList'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getRecentDocuments: builder.query<\n Homepage.GetRecentDocuments.Response['data'],\n Homepage.GetRecentDocuments.Request['query']\n >({\n query: (params) => `/admin/homepage/recent-documents?action=${params.action}`,\n transformResponse: (response: Homepage.GetRecentDocuments.Response) => response.data,\n providesTags: (res, _err, { action }) => [\n { type: 'RecentDocumentList' as const, id: action },\n ],\n }),\n }),\n });\n\nconst { useGetRecentDocumentsQuery } = homepageService;\n\nexport { useGetRecentDocumentsQuery };\n","import * as React from 'react';\n\nimport { Box, Flex, type FlexProps, Loader, Typography } from '@strapi/design-system';\nimport { PuzzlePiece, WarningCircle } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\ninterface RootProps {\n title: MessageDescriptor;\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n children: React.ReactNode;\n}\n\nconst Root = ({ title, icon = PuzzlePiece, children }: RootProps) => {\n const { formatMessage } = useIntl();\n const id = React.useId();\n const Icon = icon;\n\n return (\n <Flex\n width=\"100%\"\n hasRadius\n direction=\"column\"\n alignItems=\"flex-start\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n shadow=\"tableShadow\"\n tag=\"section\"\n gap={4}\n padding={6}\n aria-labelledby={id}\n >\n <Flex direction=\"row\" alignItems=\"center\" gap={2} tag=\"header\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\" id={id}>\n {formatMessage(title)}\n </Typography>\n </Flex>\n <Box width=\"100%\" height=\"261px\" overflow=\"auto\" tag=\"main\">\n {children}\n </Box>\n </Flex>\n );\n};\n\ninterface LoadingProps {\n children?: string;\n}\n\nconst Loading = ({ children }: LoadingProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex height=\"100%\" justifyContent=\"center\" alignItems=\"center\">\n <Loader>\n {children ??\n formatMessage({\n id: 'HomePage.widget.loading',\n defaultMessage: 'Loading widget content',\n })}\n </Loader>\n </Flex>\n );\n};\n\ninterface ErrorProps {\n children?: string;\n}\n\nconst Error = ({ children }: ErrorProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex height=\"100%\" direction=\"column\" justifyContent=\"center\" alignItems=\"center\" gap={2}>\n <WarningCircle width=\"3.2rem\" height=\"3.2rem\" fill=\"danger600\" />\n <Typography variant=\"delta\">\n {formatMessage({\n id: 'global.error',\n defaultMessage: 'Something went wrong',\n })}\n </Typography>\n <Typography textColor=\"neutral600\">\n {children ??\n formatMessage({\n id: 'HomePage.widget.error',\n defaultMessage: \"Couldn't load widget content.\",\n })}\n </Typography>\n </Flex>\n );\n};\n\ninterface NoDataProps {\n children?: string;\n}\n\nconst NoData = ({ children }: NoDataProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex height=\"100%\" direction=\"column\" justifyContent=\"center\" alignItems=\"center\" gap={6}>\n <EmptyDocuments width=\"16rem\" height=\"8.8rem\" />\n <Typography textColor=\"neutral600\">\n {children ??\n formatMessage({\n id: 'HomePage.widget.no-data',\n defaultMessage: 'No content found.',\n })}\n </Typography>\n </Flex>\n );\n};\n\nconst Widget = {\n Root,\n Loading,\n Error,\n NoData,\n};\n\nexport { Widget };\n","import { Box, IconButton, Status, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { CheckCircle, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime } from '../../../components/RelativeTime';\nimport { useTracking } from '../../../features/Tracking';\nimport { useGetRecentDocumentsQuery } from '../../../services/homepage';\nimport { capitalise } from '../../../utils/strings';\n\nimport { Widget } from './Widget';\n\nimport type { RecentDocument } from '../../../../../shared/contracts/homepage';\n\nconst CellTypography = styled(Typography).attrs({ maxWidth: '14.4rem', display: 'block' })`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\ninterface DocumentStatusProps {\n status: RecentDocument['status'];\n}\n\nconst DocumentStatus = ({ status = 'draft' }: DocumentStatusProps) => {\n const statusVariant =\n status === 'draft' ? 'secondary' : status === 'published' ? 'success' : 'alternative';\n\n const { formatMessage } = useIntl();\n\n return (\n <Status variant={statusVariant} size=\"XS\">\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: `content-manager.containers.List.${status}`,\n defaultMessage: capitalise(status),\n })}\n </Typography>\n </Status>\n );\n};\n\nconst RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n // TODO: import the constants for this once the code is moved to the CM package\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome');\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography title={document.title} variant=\"omega\" textColor=\"neutral800\">\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\">\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome')}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidgetContent = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\nconst LastEditedWidget = () => {\n return (\n <Widget.Root\n title={{\n id: 'content-manager.widget.last-edited.title',\n defaultMessage: 'Last edited entries',\n }}\n icon={Pencil}\n >\n <LastEditedWidgetContent />\n </Widget.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidgetContent = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\nconst LastPublishedWidget = () => {\n return (\n <Widget.Root\n title={{\n id: 'content-manager.widget.last-published.title',\n defaultMessage: 'Last published entries',\n }}\n icon={CheckCircle}\n >\n <LastPublishedWidgetContent />\n </Widget.Root>\n );\n};\n\nexport { LastEditedWidget, LastPublishedWidget };\n","import { Box, Button, Flex, Typography, LinkButton } from '@strapi/design-system';\nimport { ArrowRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useTracking } from '../../features/Tracking';\n\nimport { LAYOUT_DATA, States, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\nimport { GuidedTourContextValue, useGuidedTour } from './Provider';\n\ntype SectionName = keyof GuidedTourContextValue['guidedTourState'];\n\nconst GuidedTourHomepage = () => {\n const guidedTourState = useGuidedTour('GuidedTourHomepage', (state) => state.guidedTourState);\n const setSkipped = useGuidedTour('GuidedTourHomepage', (state) => state.setSkipped);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const sections = Object.entries(LAYOUT_DATA).map(([key, val]) => ({\n key: key,\n title: val.home.title,\n content: (\n <LinkButton\n onClick={() => trackUsage(val.home.trackingEvent)}\n tag={NavLink}\n to={val.home.cta.target}\n endIcon={<ArrowRight />}\n >\n {formatMessage(val.home.cta.title)}\n </LinkButton>\n ),\n isDone: Object.values(guidedTourState[key as SectionName]).every((value) => value === true),\n }));\n\n const activeSectionIndex = sections.findIndex((section) => !section.isDone);\n\n const handleSkip = () => {\n setSkipped(true);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Box\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={7}\n paddingRight={4}\n paddingLeft={7}\n paddingBottom={4}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Typography variant=\"beta\" tag=\"h2\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n <Box>\n {sections.map((section, index) => {\n const state = getState(activeSectionIndex, index);\n\n return (\n <Box key={section.key}>\n <Flex>\n <Box minWidth={`3rem`} marginRight={5}>\n <Number state={state}>{index + 1}</Number>\n </Box>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.title)}\n </Typography>\n </Flex>\n <Flex alignItems=\"flex-start\">\n <Flex\n justifyContent=\"center\"\n minWidth={`3rem`}\n marginBottom={3}\n marginTop={3}\n marginRight={5}\n >\n {index === sections.length - 1 ? null : <VerticalDivider state={state} />}\n </Flex>\n <Box marginTop={2}>{state === STATES.IS_ACTIVE ? section.content : null}</Box>\n </Flex>\n </Box>\n );\n })}\n </Box>\n </Flex>\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({ id: 'app.components.GuidedTour.skip', defaultMessage: 'Skip the tour' })}\n </Button>\n </Flex>\n </Box>\n );\n};\n\nconst getState = (activeSectionIndex: number, index: number): States => {\n if (activeSectionIndex === -1) {\n return STATES.IS_DONE;\n }\n if (index < activeSectionIndex) {\n return STATES.IS_DONE;\n }\n if (index > activeSectionIndex) {\n return STATES.IS_NOT_DONE;\n }\n return STATES.IS_ACTIVE;\n};\n\nexport { GuidedTourHomepage };\n","import { GuidedTourHomepage } from '../../../components/GuidedTour/Homepage';\nimport { useGuidedTour } from '../../../components/GuidedTour/Provider';\n\nexport const GuidedTour = () => {\n const guidedTourState = useGuidedTour('HomePage', (state) => state.guidedTourState);\n const isGuidedTourVisible = useGuidedTour('HomePage', (state) => state.isGuidedTourVisible);\n const isSkipped = useGuidedTour('HomePage', (state) => state.isSkipped);\n const showGuidedTour =\n !Object.values(guidedTourState).every((section) =>\n Object.values(section).every((step) => step)\n ) &&\n isGuidedTourVisible &&\n !isSkipped;\n\n if (!showGuidedTour) {\n return null;\n }\n\n return <GuidedTourHomepage />;\n};\n","import * as React from 'react';\n\nimport { Flex, Grid, Main } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useEnterprise } from '../../ee';\nimport { useAuth } from '../../features/Auth';\n\nimport { LastEditedWidget, LastPublishedWidget } from './components/ContentManagerWidgets';\nimport { GuidedTour } from './components/GuidedTour';\n\n/* -------------------------------------------------------------------------------------------------\n * HomePageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePageCE = () => {\n const { formatMessage } = useIntl();\n const user = useAuth('HomePageCE', (state) => state.user);\n const displayName = user?.firstname ?? user?.username ?? user?.email;\n\n return (\n <Main>\n <Page.Title>\n {formatMessage({ id: 'HomePage.head.title', defaultMessage: 'Homepage' })}\n </Page.Title>\n <Layouts.Header\n title={formatMessage(\n { id: 'HomePage.header.title', defaultMessage: 'Hello {name}' },\n { name: displayName }\n )}\n subtitle={formatMessage({\n id: 'HomePage.header.subtitle',\n defaultMessage: 'Welcome to your administration panel',\n })}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8} paddingBottom={10}>\n <GuidedTour />\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12}>\n <LastEditedWidget />\n </Grid.Item>\n <Grid.Item col={6} s={12}>\n <LastPublishedWidget />\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Layouts.Content>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePage = () => {\n const Page = useEnterprise(\n HomePageCE,\n // eslint-disable-next-line import/no-cycle\n async () => (await import('../../../../ee/admin/src/pages/HomePage')).HomePageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!Page) {\n return null;\n }\n\n return <Page />;\n};\n\nexport { HomePage, HomePageCE };\n"],"names":["adminApi","PuzzlePiece","useIntl","React","jsxs","Flex","jsx","Typography","Box","Loader","WarningCircle","EmptyDocuments","styled","Status","capitalise","useTracking","useNavigate","Table","Tbody","Tr","Td","RelativeTime","IconButton","Link","Pencil","CheckCircle","useGuidedTour","LAYOUT_DATA","LinkButton","NavLink","ArrowRight","Number","VerticalDivider","STATES","Button","useAuth","Main","Page","Layouts","Grid","useEnterprise"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useNotifyAT, Table, Thead, Tr, Th, Typography, Tbody, Td } from '@strapi/design-system';
|
|
4
4
|
import { useIntl } from 'react-intl';
|
|
5
|
-
import { b as Layouts } from './index-
|
|
5
|
+
import { b as Layouts } from './index-DoNaXvrg.mjs';
|
|
6
6
|
import { b as useTypedSelector, P as Page, a as useNotification, e as useAPIErrorHandler } from './Theme-CTMU9Z8I.mjs';
|
|
7
7
|
import { b as useGetPluginsQuery } from './admin-DOzK8yjX.mjs';
|
|
8
8
|
|
|
@@ -92,4 +92,4 @@ const ProtectedInstalledPlugins = () => {
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
export { InstalledPlugins, ProtectedInstalledPlugins };
|
|
95
|
-
//# sourceMappingURL=InstalledPlugins-
|
|
95
|
+
//# sourceMappingURL=InstalledPlugins-1a_nfRNU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstalledPlugins-
|
|
1
|
+
{"version":3,"file":"InstalledPlugins-1a_nfRNU.mjs","sources":["../../admin/src/pages/Settings/pages/InstalledPlugins.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Table, Tbody, Td, Th, Thead, Tr, Typography, useNotifyAT } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { Page } from '../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { useGetPluginsQuery } from '../../../services/admin';\n\nconst InstalledPlugins = () => {\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { isLoading, data, error } = useGetPluginsQuery();\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n {\n target: formatMessage({\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n }),\n }\n )\n );\n }\n\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [data, error, formatAPIError, formatMessage, notifyStatus, toggleNotification]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n })}\n subtitle={formatMessage({\n id: 'app.components.ListPluginsPage.description',\n defaultMessage: 'List of the installed plugins in the project.',\n })}\n />\n <Layouts.Content>\n <Table colCount={2} rowCount={data?.plugins?.length ?? 0 + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'description',\n })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {data?.plugins.map(({ name, displayName, description }) => {\n return (\n <Tr key={name}>\n <Td>\n <Typography textColor=\"neutral800\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: `global.plugins.${name}`,\n defaultMessage: displayName,\n })}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {formatMessage({\n id: `global.plugins.${name}.description`,\n defaultMessage: description,\n })}\n </Typography>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedInstalledPlugins = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n\n return (\n <Page.Protect permissions={permissions.marketplace?.main}>\n <Page.Title>\n {formatMessage({\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n })}\n </Page.Title>\n <InstalledPlugins />\n </Page.Protect>\n );\n};\n\nexport { ProtectedInstalledPlugins, InstalledPlugins };\n"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const designSystem = require('@strapi/design-system');
|
|
8
8
|
const reactIntl = require('react-intl');
|
|
9
|
-
const index = require('./index-
|
|
9
|
+
const index = require('./index-DLbx6g-v.js');
|
|
10
10
|
const Theme = require('./Theme-DWGZX5tv.js');
|
|
11
11
|
const admin = require('./admin-DRnq5SAg.js');
|
|
12
12
|
|
|
@@ -117,4 +117,4 @@ const ProtectedInstalledPlugins = () => {
|
|
|
117
117
|
|
|
118
118
|
exports.InstalledPlugins = InstalledPlugins;
|
|
119
119
|
exports.ProtectedInstalledPlugins = ProtectedInstalledPlugins;
|
|
120
|
-
//# sourceMappingURL=InstalledPlugins-
|
|
120
|
+
//# sourceMappingURL=InstalledPlugins-CEeH8nCT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstalledPlugins-
|
|
1
|
+
{"version":3,"file":"InstalledPlugins-CEeH8nCT.js","sources":["../../admin/src/pages/Settings/pages/InstalledPlugins.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Table, Tbody, Td, Th, Thead, Tr, Typography, useNotifyAT } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { Page } from '../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { useGetPluginsQuery } from '../../../services/admin';\n\nconst InstalledPlugins = () => {\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { isLoading, data, error } = useGetPluginsQuery();\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n {\n target: formatMessage({\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n }),\n }\n )\n );\n }\n\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [data, error, formatAPIError, formatMessage, notifyStatus, toggleNotification]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n })}\n subtitle={formatMessage({\n id: 'app.components.ListPluginsPage.description',\n defaultMessage: 'List of the installed plugins in the project.',\n })}\n />\n <Layouts.Content>\n <Table colCount={2} rowCount={data?.plugins?.length ?? 0 + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'description',\n })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {data?.plugins.map(({ name, displayName, description }) => {\n return (\n <Tr key={name}>\n <Td>\n <Typography textColor=\"neutral800\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: `global.plugins.${name}`,\n defaultMessage: displayName,\n })}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {formatMessage({\n id: `global.plugins.${name}.description`,\n defaultMessage: description,\n })}\n </Typography>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedInstalledPlugins = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n\n return (\n <Page.Protect permissions={permissions.marketplace?.main}>\n <Page.Title>\n {formatMessage({\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n })}\n </Page.Title>\n <InstalledPlugins />\n </Page.Protect>\n );\n};\n\nexport { ProtectedInstalledPlugins, InstalledPlugins };\n"],"names":["useIntl","useNotifyAT","useNotification","useAPIErrorHandler","useGetPluginsQuery","React","jsx","Page","Layouts","jsxs","Table","Thead","Tr","Th","Typography","Tbody","Td","useTypedSelector"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import { useLocation, NavLink, useMatch, Navigate, Outlet } from 'react-router-dom';
|
|
4
|
-
import { p as SETTINGS_LINKS_CE, b as Layouts } from './index-
|
|
4
|
+
import { p as SETTINGS_LINKS_CE, b as Layouts } from './index-DoNaXvrg.mjs';
|
|
5
5
|
import { u as useAuth, p as useAppInfo, q as useStrapiApp, c as useTracking, P as Page } from './Theme-CTMU9Z8I.mjs';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import sortBy from 'lodash/sortBy';
|
|
@@ -34,7 +34,7 @@ const useSettingsMenu = () => {
|
|
|
34
34
|
const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);
|
|
35
35
|
const { admin: adminLinks, global: globalLinks } = useEnterprise(
|
|
36
36
|
ceLinks,
|
|
37
|
-
async () => (await import('./index-
|
|
37
|
+
async () => (await import('./index-DoNaXvrg.mjs').then(n => n.K)).SETTINGS_LINKS_EE(),
|
|
38
38
|
{
|
|
39
39
|
combine(ceLinks2, eeLinks) {
|
|
40
40
|
return {
|
|
@@ -212,4 +212,4 @@ const Layout = () => {
|
|
|
212
212
|
};
|
|
213
213
|
|
|
214
214
|
export { Layout };
|
|
215
|
-
//# sourceMappingURL=Layout-
|
|
215
|
+
//# sourceMappingURL=Layout-BkiVSoVM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout-ZnQ6qK04.mjs","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/Layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nimport type {\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n} from '../core/apis/router';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n licenseOnly?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const checkUserHasPermission = useAuth(\n 'useSettingsMenu',\n (state) => state.checkUserHasPermissions\n );\n const shouldUpdateStrapi = useAppInfo('useSettingsMenu', (state) => state.shouldUpdateStrapi);\n const settings = useStrapiApp('useSettingsMenu', (state) => state.settings);\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: (await checkUserHasPermission(link.permissions)).length > 0,\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [\n adminLinks,\n globalLinks,\n settings,\n shouldUpdateStrapi,\n addPermissions,\n checkUserHasPermission,\n ]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\nconst CustomIcon = styled(Lightning)`\n right: 15px;\n position: absolute;\n bottom: 50%;\n transform: translateY(50%);\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\nconst Link = styled(SubNavLink)`\n &.active ${CustomIcon} {\n right: 13px;\n }\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <Link\n tag={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n position=\"relative\"\n >\n {formatMessage(link.intlLabel)}\n {link?.licenseOnly && <CustomIcon width=\"1.5rem\" height=\"1.5rem\" />}\n </Link>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useMatch } from 'react-router-dom';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\n\nimport { SettingsNav } from './components/SettingsNav';\n\nconst Layout = () => {\n /**\n * This ensures we're capturing the settingId from the URL\n * but also lets any nesting after that pass.\n */\n const match = useMatch('/settings/:settingId/*');\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (!match?.params.settingId) {\n return <Navigate to=\"application-infos\" />;\n }\n\n return (\n <Layouts.Root sideNav={<SettingsNav menu={menu} />}>\n <Page.Title>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Page.Title>\n <Outlet />\n </Layouts.Root>\n );\n};\n\nexport { Layout };\n"],"names":["ceLinks","sections","permission"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Layout-BkiVSoVM.mjs","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/Layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nimport type {\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n} from '../core/apis/router';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n licenseOnly?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const checkUserHasPermission = useAuth(\n 'useSettingsMenu',\n (state) => state.checkUserHasPermissions\n );\n const shouldUpdateStrapi = useAppInfo('useSettingsMenu', (state) => state.shouldUpdateStrapi);\n const settings = useStrapiApp('useSettingsMenu', (state) => state.settings);\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: (await checkUserHasPermission(link.permissions)).length > 0,\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [\n adminLinks,\n globalLinks,\n settings,\n shouldUpdateStrapi,\n addPermissions,\n checkUserHasPermission,\n ]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\nconst CustomIcon = styled(Lightning)`\n right: 15px;\n position: absolute;\n bottom: 50%;\n transform: translateY(50%);\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\nconst Link = styled(SubNavLink)`\n &.active ${CustomIcon} {\n right: 13px;\n }\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <Link\n tag={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n position=\"relative\"\n >\n {formatMessage(link.intlLabel)}\n {link?.licenseOnly && <CustomIcon width=\"1.5rem\" height=\"1.5rem\" />}\n </Link>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useMatch } from 'react-router-dom';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\n\nimport { SettingsNav } from './components/SettingsNav';\n\nconst Layout = () => {\n /**\n * This ensures we're capturing the settingId from the URL\n * but also lets any nesting after that pass.\n */\n const match = useMatch('/settings/:settingId/*');\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (!match?.params.settingId) {\n return <Navigate to=\"application-infos\" />;\n }\n\n return (\n <Layouts.Root sideNav={<SettingsNav menu={menu} />}>\n <Page.Title>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Page.Title>\n <Outlet />\n </Layouts.Root>\n );\n};\n\nexport { Layout };\n"],"names":["ceLinks","sections","permission"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const reactIntl = require('react-intl');
|
|
7
7
|
const reactRouterDom = require('react-router-dom');
|
|
8
|
-
const index = require('./index-
|
|
8
|
+
const index = require('./index-DLbx6g-v.js');
|
|
9
9
|
const Theme = require('./Theme-DWGZX5tv.js');
|
|
10
10
|
const React = require('react');
|
|
11
11
|
const sortBy = require('lodash/sortBy');
|
|
@@ -61,7 +61,7 @@ const useSettingsMenu = () => {
|
|
|
61
61
|
const ceLinks = React__namespace.useMemo(() => index.SETTINGS_LINKS_CE(), []);
|
|
62
62
|
const { admin: adminLinks, global: globalLinks } = useEnterprise.useEnterprise(
|
|
63
63
|
ceLinks,
|
|
64
|
-
async () => (await Promise.resolve().then(() => require('./index-
|
|
64
|
+
async () => (await Promise.resolve().then(() => require('./index-DLbx6g-v.js')).then(n => n.constants)).SETTINGS_LINKS_EE(),
|
|
65
65
|
{
|
|
66
66
|
combine(ceLinks2, eeLinks) {
|
|
67
67
|
return {
|
|
@@ -239,4 +239,4 @@ const Layout = () => {
|
|
|
239
239
|
};
|
|
240
240
|
|
|
241
241
|
exports.Layout = Layout;
|
|
242
|
-
//# sourceMappingURL=Layout-
|
|
242
|
+
//# sourceMappingURL=Layout-Cz4fM6uC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout-BmPlcHQy.js","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/Layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nimport type {\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n} from '../core/apis/router';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n licenseOnly?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const checkUserHasPermission = useAuth(\n 'useSettingsMenu',\n (state) => state.checkUserHasPermissions\n );\n const shouldUpdateStrapi = useAppInfo('useSettingsMenu', (state) => state.shouldUpdateStrapi);\n const settings = useStrapiApp('useSettingsMenu', (state) => state.settings);\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: (await checkUserHasPermission(link.permissions)).length > 0,\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [\n adminLinks,\n globalLinks,\n settings,\n shouldUpdateStrapi,\n addPermissions,\n checkUserHasPermission,\n ]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\nconst CustomIcon = styled(Lightning)`\n right: 15px;\n position: absolute;\n bottom: 50%;\n transform: translateY(50%);\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\nconst Link = styled(SubNavLink)`\n &.active ${CustomIcon} {\n right: 13px;\n }\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <Link\n tag={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n position=\"relative\"\n >\n {formatMessage(link.intlLabel)}\n {link?.licenseOnly && <CustomIcon width=\"1.5rem\" height=\"1.5rem\" />}\n </Link>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useMatch } from 'react-router-dom';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\n\nimport { SettingsNav } from './components/SettingsNav';\n\nconst Layout = () => {\n /**\n * This ensures we're capturing the settingId from the URL\n * but also lets any nesting after that pass.\n */\n const match = useMatch('/settings/:settingId/*');\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (!match?.params.settingId) {\n return <Navigate to=\"application-infos\" />;\n }\n\n return (\n <Layouts.Root sideNav={<SettingsNav menu={menu} />}>\n <Page.Title>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Page.Title>\n <Outlet />\n </Layouts.Root>\n );\n};\n\nexport { Layout };\n"],"names":["React","useAuth","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","permission","sortBy","styled","Lightning","SubNavLink","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","NavLink","useMatch","Page","Navigate","Layouts","Outlet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Layout-Cz4fM6uC.js","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/Layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nimport type {\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n} from '../core/apis/router';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n licenseOnly?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const checkUserHasPermission = useAuth(\n 'useSettingsMenu',\n (state) => state.checkUserHasPermissions\n );\n const shouldUpdateStrapi = useAppInfo('useSettingsMenu', (state) => state.shouldUpdateStrapi);\n const settings = useStrapiApp('useSettingsMenu', (state) => state.settings);\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: (await checkUserHasPermission(link.permissions)).length > 0,\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [\n adminLinks,\n globalLinks,\n settings,\n shouldUpdateStrapi,\n addPermissions,\n checkUserHasPermission,\n ]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\nconst CustomIcon = styled(Lightning)`\n right: 15px;\n position: absolute;\n bottom: 50%;\n transform: translateY(50%);\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\nconst Link = styled(SubNavLink)`\n &.active ${CustomIcon} {\n right: 13px;\n }\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <Link\n tag={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n position=\"relative\"\n >\n {formatMessage(link.intlLabel)}\n {link?.licenseOnly && <CustomIcon width=\"1.5rem\" height=\"1.5rem\" />}\n </Link>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useMatch } from 'react-router-dom';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\n\nimport { SettingsNav } from './components/SettingsNav';\n\nconst Layout = () => {\n /**\n * This ensures we're capturing the settingId from the URL\n * but also lets any nesting after that pass.\n */\n const match = useMatch('/settings/:settingId/*');\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (!match?.params.settingId) {\n return <Navigate to=\"application-infos\" />;\n }\n\n return (\n <Layouts.Root sideNav={<SettingsNav menu={menu} />}>\n <Page.Title>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Page.Title>\n <Outlet />\n </Layouts.Root>\n );\n};\n\nexport { Layout };\n"],"names":["React","useAuth","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","permission","sortBy","styled","Lightning","SubNavLink","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","NavLink","useMatch","Page","Navigate","Layouts","Outlet"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,cAAc,CAAC,IAAA,KACnB,IAAK,CAAA,GAAA,CAAI,CAAC,WAAgB,KAAA;AACxB,EAAA,MAAM,cAAiB,GAAA,WAAA,CAAY,KAAM,CAAA,GAAA,CAAI,CAAC,IAAU,MAAA;AAAA,IACtD,GAAG,IAAA;AAAA,IACH,WAAa,EAAA;AAAA,GACb,CAAA,CAAA;AAEF,EAAA,OAAO,EAAE,GAAG,WAAa,EAAA,KAAA,EAAO,cAAe,EAAA;AACjD,CAAC,CAAA;AA8BH,MAAM,kBAAkB,MAGnB;AACH,EAAM,MAAA,CAAC,EAAE,SAAW,EAAA,IAAA,IAAQ,OAAO,CAAA,GAAIA,iBAAM,QAG1C,CAAA;AAAA,IACD,SAAW,EAAA,IAAA;AAAA,IACX,MAAM;AAAC,GACR,CAAA;AACD,EAAA,MAAM,sBAAyB,GAAAC,aAAA;AAAA,IAC7B,iBAAA;AAAA,IACA,CAAC,UAAU,KAAM,CAAA;AAAA,GACnB;AACA,EAAA,MAAM,qBAAqBC,gBAAW,CAAA,iBAAA,EAAmB,CAAC,KAAA,KAAU,MAAM,kBAAkB,CAAA;AAC5F,EAAA,MAAM,WAAWC,kBAAa,CAAA,iBAAA,EAAmB,CAAC,KAAA,KAAU,MAAM,QAAQ,CAAA;AAC1E,EAAM,MAAA,WAAA,GAAcC,uBAAYC,gCAAsB,CAAA;AAMtD,EAAA,MAAM,UAAUL,gBAAM,CAAA,OAAA,CAAQ,MAAMM,uBAAkB,EAAA,EAAG,EAAE,CAAA;AAE3D,EAAA,MAAM,EAAE,KAAA,EAAO,UAAY,EAAA,MAAA,EAAQ,aAAgB,GAAAC,2BAAA;AAAA,IACjD,OAAA;AAAA,IACA,YAAa,CAAA,MAAM,qCAAO,qBAAiC,2BAAG,iBAAkB,EAAA;AAAA,IAChF;AAAA,MACE,OAAA,CAAQC,UAAS,OAAS,EAAA;AACxB,QAAO,OAAA;AAAA,UACL,OAAO,CAAC,GAAG,QAAQ,KAAO,EAAA,GAAGA,SAAQ,KAAK,CAAA;AAAA,UAC1C,QAAQ,CAAC,GAAGA,SAAQ,MAAQ,EAAA,GAAG,QAAQ,MAAM;AAAA,SAC/C;AAAA,OACF;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,OAAO,EAAC;AAAA,QACR,QAAQ;AAAC;AACX;AACF,GACF;AAEA,EAAA,MAAM,iBAAiBR,gBAAM,CAAA,WAAA;AAAA,IAC3B,CAAC,IAA2B,KAAA;AAC1B,MAAI,IAAA,CAAC,KAAK,EAAI,EAAA;AACZ,QAAM,MAAA,IAAI,MAAM,mDAAmD,CAAA;AAAA;AAGrE,MAAO,OAAA;AAAA,QACL,GAAG,IAAA;AAAA,QACH,aAAa,WAAY,CAAA,QAAA,GAAW,KAAK,EAAqC,CAAA,EAAG,QAAQ;AAAC,OAC5F;AAAA,KACF;AAAA,IACA,CAAC,YAAY,QAAQ;AAAA,GACvB;AAEA,EAAAA,gBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,UAAU,YAAY;AAO1B,MAAM,MAAA,oBAAA,GAAuB,CAACS,SAAAA,KAC5B,OAAQ,CAAA,GAAA;AAAA,QACNA,SAAS,CAAA,MAAA,CAAsC,CAAC,GAAA,EAAK,SAAS,YAAiB,KAAA;AAC7E,UAAA,MAAM,uBAAuB,OAAQ,CAAA,KAAA,CAAM,GAAI,CAAA,OAAO,MAAM,SAAe,MAAA;AAAA,YACzE,gBAAgB,MAAM,sBAAA,CAAuB,IAAK,CAAA,WAAW,GAAG,MAAS,GAAA,CAAA;AAAA,YACzE,YAAA;AAAA,YACA;AAAA,WACA,CAAA,CAAA;AAEF,UAAA,OAAO,CAAC,GAAG,GAAK,EAAA,GAAG,oBAAoB,CAAA;AAAA,SACzC,EAAG,EAAE;AAAA,OACP;AAEF,MAAM,MAAA,eAAA,GAAkB,MAAM,oBAAA,CAAqB,QAAQ,CAAA;AAE3D,MAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAChB,QAAO,OAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,SAAW,EAAA,KAAA;AAAA,UACX,IAAM,EAAA,QAAA,CAAS,GAAI,CAAA,CAAC,SAAS,YAAkB,MAAA;AAAA,YAC7C,GAAG,OAAA;AAAA,YACH,OAAO,OAAQ,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,SAAc,KAAA;AAC5C,cAAA,MAAM,aAAa,eAAgB,CAAA,IAAA;AAAA,gBACjC,CAACC,WACCA,KAAAA,WAAAA,CAAW,YAAiB,KAAA,YAAA,IAAgBA,YAAW,SAAc,KAAA;AAAA,eACzE;AAEA,cAAO,OAAA;AAAA,gBACL,GAAG,IAAA;AAAA,gBACH,WAAA,EAAa,OAAQ,CAAA,UAAA,EAAY,aAAa;AAAA,eAChD;AAAA,aACD;AAAA,WACD,CAAA;AAAA,SACJ;AAAA,OACD,CAAA;AAAA,KACH;AAEA,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,aAAA,EAAkB,GAAA,QAAA;AACrC,IAAA,MAAM,WAAW,WAAY,CAAA;AAAA,MAC3B;AAAA,QACE,GAAG,MAAA;AAAA,QACH,OAAOC,uBAAO,CAAA,CAAC,GAAG,MAAA,CAAO,OAAO,GAAG,WAAA,CAAY,GAAI,CAAA,cAAc,CAAC,CAAG,EAAA,CAAC,IAAS,KAAA,IAAA,CAAK,EAAE,CAAE,CAAA,GAAA;AAAA,UACtF,CAAC,IAAU,MAAA;AAAA,YACT,GAAG,IAAA;AAAA,YACH,eAAA,EAAiB,IAAK,CAAA,EAAA,KAAO,uBAA2B,IAAA;AAAA,WAC1D;AAAA;AACF,OACF;AAAA,MACA;AAAA,QACE,EAAI,EAAA,aAAA;AAAA,QACJ,SAAW,EAAA,EAAE,EAAI,EAAA,sBAAA,EAAwB,gBAAgB,sBAAuB,EAAA;AAAA,QAChF,KAAA,EAAO,UAAW,CAAA,GAAA,CAAI,cAAc;AAAA,OACtC;AAAA,MACA,GAAG,MAAO,CAAA,MAAA,CAAO,aAAa;AAAA,KAC/B,CAAA;AAED,IAAQ,OAAA,EAAA;AAAA,GACP,EAAA;AAAA,IACD,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,IAAM,EAAA,IAAA,CAAK,GAAI,CAAA,CAAC,QAAc,MAAA;AAAA,MAC5B,GAAG,QAAA;AAAA,MACH,OAAO,QAAS,CAAA,KAAA,CAAM,OAAO,CAAC,IAAA,KAAS,KAAK,WAAW;AAAA,KACvD,CAAA;AAAA,GACJ;AACF,CAAA;;ACnLA,MAAM,UAAA,GAAaC,wBAAOC,eAAS,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,UAAA,EAOvB,CAAC,EAAE,KAAA,EAAY,KAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AAAA;AAAA,CAAA;AAIlD,MAAM,IAAA,GAAOD,wBAAOE,uBAAU,CAAA;AAAA,WAAA,EACjB,UAAU,CAAA;AAAA;AAAA;AAAA,CAAA;AASvB,MAAM,WAAc,GAAA,CAAC,EAAE,IAAA,EAA6B,KAAA;AAClD,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIC,iBAAQ,EAAA;AAClC,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,iBAAY,EAAA;AACnC,EAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,0BAAY,EAAA;AAEjC,EAAA,MAAM,eAAe,IAAK,CAAA,MAAA;AAAA,IACxB,CAAC,OAAY,KAAA,CAAC,OAAQ,CAAA,KAAA,CAAM,MAAM,CAAC,IAAA,KAAS,IAAK,CAAA,WAAA,KAAgB,KAAK;AAAA,GACxE;AAEA,EAAA,MAAM,QAAW,GAAA,YAAA,CAAa,GAAI,CAAA,CAAC,OAAY,KAAA;AAC7C,IAAO,OAAA;AAAA,MACL,GAAG,OAAA;AAAA,MACH,OAAO,OAAQ,CAAA,SAAA;AAAA,MACf,KAAO,EAAA,OAAA,CAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AACjC,QAAO,OAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,OAAO,IAAK,CAAA,SAAA;AAAA,UACZ,MAAM,IAAK,CAAA;AAAA,SACb;AAAA,OACD;AAAA,KACH;AAAA,GACD,CAAA;AAED,EAAA,MAAM,QAAQ,aAAc,CAAA;AAAA,IAC1B,EAAI,EAAA,iBAAA;AAAA,IACJ,cAAgB,EAAA;AAAA,GACjB,CAAA;AAED,EAAM,MAAA,iBAAA,GAAoB,CAAC,WAAA,KAAwB,MAAM;AACvD,IAAA,UAAA,CAAW,gBAAgB,EAAE,IAAA,EAAM,QAAU,EAAA,EAAA,EAAI,aAAa,CAAA;AAAA,GAChE;AAEA,EACE,uBAAAC,eAAA,CAACC,mBAAO,EAAA,EAAA,YAAA,EAAY,KAClB,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,6BAAa,KAAc,EAAA,CAAA;AAAA,mCAC3BC,2BACE,EAAA,EAAA,QAAA,EAAA,QAAA,CAAS,GAAI,CAAA,CAAC,4BACZF,cAAA,CAAAG,0BAAA,EAAA,EAA+B,KAAO,EAAA,aAAA,CAAc,QAAQ,SAAS,CAAA,EACnE,kBAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AAC3B,MACE,uBAAAL,eAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,GAAK,EAAAM,sBAAA;AAAA,UACL,YAAY,IAAK,CAAA,eAAA;AAAA,UACjB,IAAI,IAAK,CAAA,EAAA;AAAA,UACT,OAAA,EAAS,iBAAkB,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,UAElC,QAAS,EAAA,UAAA;AAAA,UAER,QAAA,EAAA;AAAA,YAAA,aAAA,CAAc,KAAK,SAAS,CAAA;AAAA,YAC5B,MAAM,WAAe,oBAAAJ,cAAA,CAAC,cAAW,KAAM,EAAA,QAAA,EAAS,QAAO,QAAS,EAAA;AAAA;AAAA,SAAA;AAAA,QAJ5D,IAAK,CAAA;AAAA,OAKZ;AAAA,KAEH,CAAA,EAAA,EAfiB,OAAQ,CAAA,EAgB5B,CACD,CACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;;ACrFA,MAAM,SAAS,MAAM;AAKnB,EAAM,MAAA,KAAA,GAAQK,wBAAS,wBAAwB,CAAA;AAC/C,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIV,iBAAQ,EAAA;AAClC,EAAA,MAAM,EAAE,SAAA,EAAW,IAAK,EAAA,GAAI,eAAgB,EAAA;AAI5C,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAAK,cAAA,CAACM,UAAK,CAAA,OAAA,EAAL,EAAa,CAAA;AAAA;AAGvB,EAAI,IAAA,CAAC,KAAO,EAAA,MAAA,CAAO,SAAW,EAAA;AAC5B,IAAO,uBAAAN,cAAA,CAACO,uBAAS,EAAA,EAAA,EAAA,EAAG,mBAAoB,EAAA,CAAA;AAAA;AAG1C,EACE,uBAAAT,eAAA,CAACU,cAAQ,IAAR,EAAA,EAAa,yBAAUR,cAAA,CAAA,WAAA,EAAA,EAAY,MAAY,CAC9C,EAAA,QAAA,EAAA;AAAA,oBAACA,cAAA,CAAAM,UAAA,CAAK,KAAL,EAAA,EACE,QAAc,EAAA,aAAA,CAAA;AAAA,MACb,EAAI,EAAA,iBAAA;AAAA,MACJ,cAAgB,EAAA;AAAA,KACjB,CACH,EAAA,CAAA;AAAA,mCACCG,qBAAO,EAAA,EAAA;AAAA,GACV,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -5,7 +5,7 @@ import { Plus, Trash, Pencil } from '@strapi/icons';
|
|
|
5
5
|
import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
7
|
import { useNavigate, NavLink } from 'react-router-dom';
|
|
8
|
-
import { b as Layouts, C as ConfirmDialog } from './index-
|
|
8
|
+
import { b as Layouts, C as ConfirmDialog } from './index-DoNaXvrg.mjs';
|
|
9
9
|
import { b as useTypedSelector, P as Page, e as useAPIErrorHandler, a as useNotification, k as useRBAC } from './Theme-CTMU9Z8I.mjs';
|
|
10
10
|
import { u as useWebhooks } from './useWebhooks-PMmtSF2F.mjs';
|
|
11
11
|
|
|
@@ -352,4 +352,4 @@ const ProtectedListPage = () => {
|
|
|
352
352
|
};
|
|
353
353
|
|
|
354
354
|
export { ListPage, ProtectedListPage };
|
|
355
|
-
//# sourceMappingURL=ListPage-
|
|
355
|
+
//# sourceMappingURL=ListPage-B4XxPT7g.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage-Bu63qBzy.mjs","sources":["../../admin/src/pages/Settings/pages/Webhooks/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotifyAT,\n Checkbox,\n Button,\n EmptyStateLayout,\n Flex,\n IconButton,\n Switch,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\n\nimport { UpdateWebhook } from '../../../../../../shared/contracts/webhooks';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../hooks/useRBAC';\n\nimport { useWebhooks } from './hooks/useWebhooks';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPage = () => {\n const [showModal, setShowModal] = React.useState(false);\n const [webhooksToDelete, setWebhooksToDelete] = React.useState<string[]>([]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.webhooks);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n\n const {\n isLoading: isRBACLoading,\n allowedActions: { canCreate, canUpdate, canDelete },\n } = useRBAC(permissions);\n const { notifyStatus } = useNotifyAT();\n\n const {\n isLoading: isWebhooksLoading,\n webhooks,\n error: webhooksError,\n updateWebhook,\n deleteManyWebhooks,\n } = useWebhooks();\n\n React.useEffect(() => {\n if (webhooksError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(webhooksError),\n });\n\n return;\n }\n if (webhooks) {\n notifyStatus(\n formatMessage({\n id: 'Settings.webhooks.list.loading.success',\n defaultMessage: 'Webhooks have been loaded',\n })\n );\n }\n }, [webhooks, webhooksError, toggleNotification, formatMessage, notifyStatus, formatAPIError]);\n\n const enableWebhook = async (body: UpdateWebhook.Request['body'] & UpdateWebhook.Params) => {\n try {\n const res = await updateWebhook(body);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const deleteWebhook = async (id: string) => {\n try {\n const res = await deleteManyWebhooks({\n ids: [id],\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const confirmBulkDelete = async () => {\n try {\n const res = await deleteManyWebhooks({\n ids: webhooksToDelete,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete([]);\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n } finally {\n setShowModal(false);\n }\n };\n\n const selectAllCheckbox = (selected: boolean) =>\n selected\n ? setWebhooksToDelete(webhooks?.map((webhook) => webhook.id) ?? [])\n : setWebhooksToDelete([]);\n\n const selectOneCheckbox = (selected: boolean, id: string) =>\n selected\n ? setWebhooksToDelete((prev) => [...prev, id])\n : setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n\n const isLoading = isRBACLoading || isWebhooksLoading;\n const numberOfWebhooks = webhooks?.length ?? 0;\n const webhooksToDeleteLength = webhooksToDelete.length;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Webhooks',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isLoading}>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' })}\n subtitle={formatMessage({\n id: 'Settings.webhooks.list.description',\n defaultMessage: 'Get POST changes notifications',\n })}\n primaryAction={\n canCreate &&\n !isLoading && (\n <LinkButton tag={NavLink} startIcon={<Plus />} variant=\"default\" to=\"create\" size=\"S\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n )\n }\n />\n {webhooksToDeleteLength > 0 && canDelete && (\n <Layouts.Action\n startActions={\n <>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.webhooks.to.delete',\n defaultMessage:\n '{webhooksToDeleteLength, plural, one {# webhook} other {# webhooks}} selected',\n },\n { webhooksToDeleteLength }\n )}\n </Typography>\n <Button\n onClick={() => setShowModal(true)}\n startIcon={<Trash />}\n size=\"L\"\n variant=\"danger-light\"\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n </>\n }\n />\n )}\n <Layouts.Content>\n {numberOfWebhooks > 0 ? (\n <Table\n colCount={5}\n rowCount={numberOfWebhooks + 1}\n footer={\n <TFooter\n onClick={() => {\n if (canCreate) {\n navigate('create');\n }\n }}\n icon={<Plus />}\n >\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </TFooter>\n }\n >\n <Thead>\n <Tr>\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n checked={\n webhooksToDeleteLength > 0 && webhooksToDeleteLength < numberOfWebhooks\n ? 'indeterminate'\n : webhooksToDeleteLength === numberOfWebhooks\n }\n onCheckedChange={selectAllCheckbox}\n />\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th width=\"60%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.form.url',\n defaultMessage: 'URL',\n })}\n </Typography>\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.webhooks.list.th.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {webhooks?.map((webhook) => (\n <Tr\n key={webhook.id}\n onClick={() => {\n if (canUpdate) {\n navigate(webhook.id);\n }\n }}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={`${formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })} ${webhook.name}`}\n checked={webhooksToDelete?.includes(webhook.id)}\n onCheckedChange={(selected) => selectOneCheckbox(!!selected, webhook.id)}\n name=\"select\"\n />\n </Td>\n <Td>\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\">\n {webhook.name}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{webhook.url}</Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Flex>\n <Switch\n onLabel={formatMessage({\n id: 'global.enabled',\n defaultMessage: 'Enabled',\n })}\n offLabel={formatMessage({\n id: 'global.disabled',\n defaultMessage: 'Disabled',\n })}\n aria-label={`${webhook.name} ${formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}`}\n checked={webhook.isEnabled}\n onCheckedChange={(enabled) => {\n enableWebhook({\n ...webhook,\n isEnabled: enabled,\n });\n }}\n visibleLabels\n />\n </Flex>\n </Td>\n <Td>\n <Flex gap={1}>\n {canUpdate && (\n <IconButton\n label={formatMessage({\n id: 'Settings.webhooks.events.update',\n defaultMessage: 'Update',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n )}\n {canDelete && (\n <DeleteActionButton\n onDelete={() => {\n deleteWebhook(webhook.id);\n }}\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n ) : (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"160px\" />}\n content={formatMessage({\n id: 'Settings.webhooks.list.empty.description',\n defaultMessage: 'No webhooks found',\n })}\n action={\n canCreate ? (\n <LinkButton variant=\"secondary\" startIcon={<Plus />} tag={NavLink} to=\"create\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n ) : null\n }\n />\n )}\n </Layouts.Content>\n </Page.Main>\n <Dialog.Root open={showModal} onOpenChange={setShowModal}>\n <ConfirmDialog onConfirm={confirmBulkDelete} />\n </Dialog.Root>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ntype DeleteActionButtonProps = {\n onDelete: () => void;\n};\n\nconst DeleteActionButton = ({ onDelete }: DeleteActionButtonProps) => {\n const [showModal, setShowModal] = React.useState(false);\n const { formatMessage } = useIntl();\n\n return (\n <>\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n setShowModal(true);\n }}\n label={formatMessage({\n id: 'Settings.webhooks.events.delete',\n defaultMessage: 'Delete webhook',\n })}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n\n <Dialog.Root open={showModal} onOpenChange={setShowModal}>\n <ConfirmDialog\n onConfirm={(e) => {\n e?.stopPropagation();\n onDelete();\n }}\n />\n </Dialog.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.webhooks.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage-B4XxPT7g.mjs","sources":["../../admin/src/pages/Settings/pages/Webhooks/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotifyAT,\n Checkbox,\n Button,\n EmptyStateLayout,\n Flex,\n IconButton,\n Switch,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\n\nimport { UpdateWebhook } from '../../../../../../shared/contracts/webhooks';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../hooks/useRBAC';\n\nimport { useWebhooks } from './hooks/useWebhooks';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPage = () => {\n const [showModal, setShowModal] = React.useState(false);\n const [webhooksToDelete, setWebhooksToDelete] = React.useState<string[]>([]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.webhooks);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n\n const {\n isLoading: isRBACLoading,\n allowedActions: { canCreate, canUpdate, canDelete },\n } = useRBAC(permissions);\n const { notifyStatus } = useNotifyAT();\n\n const {\n isLoading: isWebhooksLoading,\n webhooks,\n error: webhooksError,\n updateWebhook,\n deleteManyWebhooks,\n } = useWebhooks();\n\n React.useEffect(() => {\n if (webhooksError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(webhooksError),\n });\n\n return;\n }\n if (webhooks) {\n notifyStatus(\n formatMessage({\n id: 'Settings.webhooks.list.loading.success',\n defaultMessage: 'Webhooks have been loaded',\n })\n );\n }\n }, [webhooks, webhooksError, toggleNotification, formatMessage, notifyStatus, formatAPIError]);\n\n const enableWebhook = async (body: UpdateWebhook.Request['body'] & UpdateWebhook.Params) => {\n try {\n const res = await updateWebhook(body);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const deleteWebhook = async (id: string) => {\n try {\n const res = await deleteManyWebhooks({\n ids: [id],\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const confirmBulkDelete = async () => {\n try {\n const res = await deleteManyWebhooks({\n ids: webhooksToDelete,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete([]);\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n } finally {\n setShowModal(false);\n }\n };\n\n const selectAllCheckbox = (selected: boolean) =>\n selected\n ? setWebhooksToDelete(webhooks?.map((webhook) => webhook.id) ?? [])\n : setWebhooksToDelete([]);\n\n const selectOneCheckbox = (selected: boolean, id: string) =>\n selected\n ? setWebhooksToDelete((prev) => [...prev, id])\n : setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n\n const isLoading = isRBACLoading || isWebhooksLoading;\n const numberOfWebhooks = webhooks?.length ?? 0;\n const webhooksToDeleteLength = webhooksToDelete.length;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Webhooks',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isLoading}>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' })}\n subtitle={formatMessage({\n id: 'Settings.webhooks.list.description',\n defaultMessage: 'Get POST changes notifications',\n })}\n primaryAction={\n canCreate &&\n !isLoading && (\n <LinkButton tag={NavLink} startIcon={<Plus />} variant=\"default\" to=\"create\" size=\"S\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n )\n }\n />\n {webhooksToDeleteLength > 0 && canDelete && (\n <Layouts.Action\n startActions={\n <>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.webhooks.to.delete',\n defaultMessage:\n '{webhooksToDeleteLength, plural, one {# webhook} other {# webhooks}} selected',\n },\n { webhooksToDeleteLength }\n )}\n </Typography>\n <Button\n onClick={() => setShowModal(true)}\n startIcon={<Trash />}\n size=\"L\"\n variant=\"danger-light\"\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n </>\n }\n />\n )}\n <Layouts.Content>\n {numberOfWebhooks > 0 ? (\n <Table\n colCount={5}\n rowCount={numberOfWebhooks + 1}\n footer={\n <TFooter\n onClick={() => {\n if (canCreate) {\n navigate('create');\n }\n }}\n icon={<Plus />}\n >\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </TFooter>\n }\n >\n <Thead>\n <Tr>\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n checked={\n webhooksToDeleteLength > 0 && webhooksToDeleteLength < numberOfWebhooks\n ? 'indeterminate'\n : webhooksToDeleteLength === numberOfWebhooks\n }\n onCheckedChange={selectAllCheckbox}\n />\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th width=\"60%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.form.url',\n defaultMessage: 'URL',\n })}\n </Typography>\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.webhooks.list.th.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {webhooks?.map((webhook) => (\n <Tr\n key={webhook.id}\n onClick={() => {\n if (canUpdate) {\n navigate(webhook.id);\n }\n }}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={`${formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })} ${webhook.name}`}\n checked={webhooksToDelete?.includes(webhook.id)}\n onCheckedChange={(selected) => selectOneCheckbox(!!selected, webhook.id)}\n name=\"select\"\n />\n </Td>\n <Td>\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\">\n {webhook.name}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{webhook.url}</Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Flex>\n <Switch\n onLabel={formatMessage({\n id: 'global.enabled',\n defaultMessage: 'Enabled',\n })}\n offLabel={formatMessage({\n id: 'global.disabled',\n defaultMessage: 'Disabled',\n })}\n aria-label={`${webhook.name} ${formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}`}\n checked={webhook.isEnabled}\n onCheckedChange={(enabled) => {\n enableWebhook({\n ...webhook,\n isEnabled: enabled,\n });\n }}\n visibleLabels\n />\n </Flex>\n </Td>\n <Td>\n <Flex gap={1}>\n {canUpdate && (\n <IconButton\n label={formatMessage({\n id: 'Settings.webhooks.events.update',\n defaultMessage: 'Update',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n )}\n {canDelete && (\n <DeleteActionButton\n onDelete={() => {\n deleteWebhook(webhook.id);\n }}\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n ) : (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"160px\" />}\n content={formatMessage({\n id: 'Settings.webhooks.list.empty.description',\n defaultMessage: 'No webhooks found',\n })}\n action={\n canCreate ? (\n <LinkButton variant=\"secondary\" startIcon={<Plus />} tag={NavLink} to=\"create\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n ) : null\n }\n />\n )}\n </Layouts.Content>\n </Page.Main>\n <Dialog.Root open={showModal} onOpenChange={setShowModal}>\n <ConfirmDialog onConfirm={confirmBulkDelete} />\n </Dialog.Root>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ntype DeleteActionButtonProps = {\n onDelete: () => void;\n};\n\nconst DeleteActionButton = ({ onDelete }: DeleteActionButtonProps) => {\n const [showModal, setShowModal] = React.useState(false);\n const { formatMessage } = useIntl();\n\n return (\n <>\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n setShowModal(true);\n }}\n label={formatMessage({\n id: 'Settings.webhooks.events.delete',\n defaultMessage: 'Delete webhook',\n })}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n\n <Dialog.Root open={showModal} onOpenChange={setShowModal}>\n <ConfirmDialog\n onConfirm={(e) => {\n e?.stopPropagation();\n onDelete();\n }}\n />\n </Dialog.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.webhooks.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ const icons = require('@strapi/icons');
|
|
|
9
9
|
const symbols = require('@strapi/icons/symbols');
|
|
10
10
|
const reactIntl = require('react-intl');
|
|
11
11
|
const reactRouterDom = require('react-router-dom');
|
|
12
|
-
const index = require('./index-
|
|
12
|
+
const index = require('./index-DLbx6g-v.js');
|
|
13
13
|
const Theme = require('./Theme-DWGZX5tv.js');
|
|
14
14
|
const useWebhooks = require('./useWebhooks-oYy_qRlY.js');
|
|
15
15
|
|
|
@@ -377,4 +377,4 @@ const ProtectedListPage = () => {
|
|
|
377
377
|
|
|
378
378
|
exports.ListPage = ListPage;
|
|
379
379
|
exports.ProtectedListPage = ProtectedListPage;
|
|
380
|
-
//# sourceMappingURL=ListPage-
|
|
380
|
+
//# sourceMappingURL=ListPage-B5HILqUc.js.map
|