@strapi/admin 5.10.3 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/chunks/{ApplicationInfoPage-DiEcqVEU.mjs → ApplicationInfoPage-BZwUO73O.mjs} +2 -2
- package/dist/admin/chunks/{ApplicationInfoPage-DiEcqVEU.mjs.map → ApplicationInfoPage-BZwUO73O.mjs.map} +1 -1
- package/dist/admin/chunks/{ApplicationInfoPage-CsBvES_c.js → ApplicationInfoPage-DJOazrYK.js} +2 -2
- package/dist/admin/chunks/{ApplicationInfoPage-CsBvES_c.js.map → ApplicationInfoPage-DJOazrYK.js.map} +1 -1
- package/dist/admin/chunks/{AuthenticatedLayout-D_VSoB1l.js → AuthenticatedLayout-Dy75FZrh.js} +7 -6
- package/dist/admin/chunks/AuthenticatedLayout-Dy75FZrh.js.map +1 -0
- package/dist/admin/chunks/{AuthenticatedLayout-C9eZ12Ue.mjs → AuthenticatedLayout-jDyinb04.mjs} +7 -6
- package/dist/admin/chunks/AuthenticatedLayout-jDyinb04.mjs.map +1 -0
- package/dist/admin/chunks/{CreatePage-DQDa78K3.mjs → CreatePage-BO4p8eVo.mjs} +2 -2
- package/dist/admin/chunks/{CreatePage-DQDa78K3.mjs.map → CreatePage-BO4p8eVo.mjs.map} +1 -1
- package/dist/admin/chunks/{CreatePage-DbmpFjHt.js → CreatePage-Bgs19RIr.js} +2 -2
- package/dist/admin/chunks/{CreatePage-DbmpFjHt.js.map → CreatePage-Bgs19RIr.js.map} +1 -1
- package/dist/admin/chunks/{CreatePage-Cb-ETkOn.mjs → CreatePage-CvMkpe3b.mjs} +3 -3
- package/dist/admin/chunks/{CreatePage-Cb-ETkOn.mjs.map → CreatePage-CvMkpe3b.mjs.map} +1 -1
- package/dist/admin/chunks/{CreatePage-DkzHz0zk.js → CreatePage-D0kjwP8s.js} +3 -3
- package/dist/admin/chunks/{CreatePage-DkzHz0zk.js.map → CreatePage-D0kjwP8s.js.map} +1 -1
- package/dist/admin/chunks/{CreateView-CmubtWzn.mjs → CreateView-B5Rq5Uhw.mjs} +4 -4
- package/dist/admin/chunks/{CreateView-CmubtWzn.mjs.map → CreateView-B5Rq5Uhw.mjs.map} +1 -1
- package/dist/admin/chunks/{CreateView-CE4-drK6.js → CreateView-DCsm2KBZ.js} +4 -4
- package/dist/admin/chunks/{CreateView-CE4-drK6.js.map → CreateView-DCsm2KBZ.js.map} +1 -1
- package/dist/admin/chunks/{CreateView-yjsS9KUJ.js → CreateView-DGq7e-Zm.js} +4 -4
- package/dist/admin/chunks/{CreateView-yjsS9KUJ.js.map → CreateView-DGq7e-Zm.js.map} +1 -1
- package/dist/admin/chunks/{CreateView-DZaIevIB.mjs → CreateView-h_bF5XrZ.mjs} +4 -4
- package/dist/admin/chunks/{CreateView-DZaIevIB.mjs.map → CreateView-h_bF5XrZ.mjs.map} +1 -1
- package/dist/admin/chunks/{EditPage-CNaAuT5C.js → EditPage-85v6bKcJ.js} +3 -3
- package/dist/admin/chunks/{EditPage-CNaAuT5C.js.map → EditPage-85v6bKcJ.js.map} +1 -1
- package/dist/admin/chunks/{EditPage-C44OaxjN.mjs → EditPage-CBrPs4kH.mjs} +3 -3
- package/dist/admin/chunks/{EditPage-C44OaxjN.mjs.map → EditPage-CBrPs4kH.mjs.map} +1 -1
- package/dist/admin/chunks/{EditPage-Bjr4f1Bs.mjs → EditPage-CFSx_zaS.mjs} +3 -3
- package/dist/admin/chunks/{EditPage-Bjr4f1Bs.mjs.map → EditPage-CFSx_zaS.mjs.map} +1 -1
- package/dist/admin/chunks/{EditPage-CycQlsFL.js → EditPage-CK8pIRKZ.js} +3 -3
- package/dist/admin/chunks/{EditPage-CycQlsFL.js.map → EditPage-CK8pIRKZ.js.map} +1 -1
- package/dist/admin/chunks/{EditPage-BrMhV8aB.js → EditPage-DHtr1mq1.js} +6 -6
- package/dist/admin/chunks/{EditPage-BrMhV8aB.js.map → EditPage-DHtr1mq1.js.map} +1 -1
- package/dist/admin/chunks/{EditPage-MmQQ4hWc.mjs → EditPage-DrT9bgfE.mjs} +6 -6
- package/dist/admin/chunks/{EditPage-MmQQ4hWc.mjs.map → EditPage-DrT9bgfE.mjs.map} +1 -1
- package/dist/admin/chunks/{EditView-C9cKaoY1.js → EditView-CfJxHMkF.js} +3 -3
- package/dist/admin/chunks/{EditView-C9cKaoY1.js.map → EditView-CfJxHMkF.js.map} +1 -1
- package/dist/admin/chunks/{EditView-CFIkvFrt.mjs → EditView-XfGT5Bj1.mjs} +3 -3
- package/dist/admin/chunks/{EditView-CFIkvFrt.mjs.map → EditView-XfGT5Bj1.mjs.map} +1 -1
- package/dist/admin/chunks/{EditViewPage-CwdhHAuX.mjs → EditViewPage-BLftPAqX.mjs} +3 -3
- package/dist/admin/chunks/{EditViewPage-CwdhHAuX.mjs.map → EditViewPage-BLftPAqX.mjs.map} +1 -1
- package/dist/admin/chunks/{EditViewPage-DBga-70A.js → EditViewPage-Dvm8m28e.js} +3 -3
- package/dist/admin/chunks/{EditViewPage-DBga-70A.js.map → EditViewPage-Dvm8m28e.js.map} +1 -1
- package/dist/admin/chunks/{EventsTable-fkWvAMuL.js → EventsTable-C1FNa1mh.js} +3 -3
- package/dist/admin/chunks/{EventsTable-fkWvAMuL.js.map → EventsTable-C1FNa1mh.js.map} +1 -1
- package/dist/admin/chunks/{EventsTable-CeqMb1jP.mjs → EventsTable-aDYIp-4O.mjs} +3 -3
- package/dist/admin/chunks/{EventsTable-CeqMb1jP.mjs.map → EventsTable-aDYIp-4O.mjs.map} +1 -1
- package/dist/admin/chunks/{HomePage-CVc0RfvD.js → HomePage-8CeDS3qO.js} +3 -3
- package/dist/admin/chunks/{HomePage-CVc0RfvD.js.map → HomePage-8CeDS3qO.js.map} +1 -1
- package/dist/admin/chunks/{HomePage-B2skN1xt.js → HomePage-BKwoMagC.js} +3 -3
- package/dist/admin/chunks/{HomePage-B2skN1xt.js.map → HomePage-BKwoMagC.js.map} +1 -1
- package/dist/admin/chunks/{HomePage-DGTeFboL.mjs → HomePage-BRggBAHf.mjs} +3 -3
- package/dist/admin/chunks/{HomePage-DGTeFboL.mjs.map → HomePage-BRggBAHf.mjs.map} +1 -1
- package/dist/admin/chunks/{HomePage-MfOqcIag.mjs → HomePage-DuRHJoC7.mjs} +3 -3
- package/dist/admin/chunks/{HomePage-MfOqcIag.mjs.map → HomePage-DuRHJoC7.mjs.map} +1 -1
- package/dist/admin/chunks/{InstalledPlugins-5j7xjDqh.mjs → InstalledPlugins-23tOdYYB.mjs} +2 -2
- package/dist/admin/chunks/{InstalledPlugins-5j7xjDqh.mjs.map → InstalledPlugins-23tOdYYB.mjs.map} +1 -1
- package/dist/admin/chunks/{InstalledPlugins-BXM3i3xr.js → InstalledPlugins-z8ODfbJj.js} +2 -2
- package/dist/admin/chunks/{InstalledPlugins-BXM3i3xr.js.map → InstalledPlugins-z8ODfbJj.js.map} +1 -1
- package/dist/admin/chunks/{Layout-DST1PxaO.js → Layout-BZgwh-LZ.js} +3 -3
- package/dist/admin/chunks/{Layout-DST1PxaO.js.map → Layout-BZgwh-LZ.js.map} +1 -1
- package/dist/admin/chunks/{Layout-DYjtK6iP.mjs → Layout-CmzbGRtV.mjs} +3 -3
- package/dist/admin/chunks/{Layout-DYjtK6iP.mjs.map → Layout-CmzbGRtV.mjs.map} +1 -1
- package/dist/admin/chunks/{ListPage-BhGt3EBQ.mjs → ListPage-BE3aimOU.mjs} +2 -2
- package/dist/admin/chunks/{ListPage-BhGt3EBQ.mjs.map → ListPage-BE3aimOU.mjs.map} +1 -1
- package/dist/admin/chunks/{ListPage-CWINpwfS.js → ListPage-BRVhZryp.js} +6 -6
- package/dist/admin/chunks/{ListPage-CWINpwfS.js.map → ListPage-BRVhZryp.js.map} +1 -1
- package/dist/admin/chunks/{ListPage-srJutHdv.mjs → ListPage-BuFQNHRU.mjs} +3 -3
- package/dist/admin/chunks/{ListPage-srJutHdv.mjs.map → ListPage-BuFQNHRU.mjs.map} +1 -1
- package/dist/admin/chunks/{ListPage-CLXy5r60.js → ListPage-C46MNvAQ.js} +3 -3
- package/dist/admin/chunks/{ListPage-CLXy5r60.js.map → ListPage-C46MNvAQ.js.map} +1 -1
- package/dist/admin/chunks/{ListPage-BVI0O8bq.mjs → ListPage-CTxfjKUP.mjs} +2 -2
- package/dist/admin/chunks/{ListPage-BVI0O8bq.mjs.map → ListPage-CTxfjKUP.mjs.map} +1 -1
- package/dist/admin/chunks/{ListPage-B5Hb8BA-.mjs → ListPage-CovdXetq.mjs} +6 -6
- package/dist/admin/chunks/{ListPage-B5Hb8BA-.mjs.map → ListPage-CovdXetq.mjs.map} +1 -1
- package/dist/admin/chunks/{ListPage-BgyypnOM.js → ListPage-D7fIXyTM.js} +5 -5
- package/dist/admin/chunks/{ListPage-BgyypnOM.js.map → ListPage-D7fIXyTM.js.map} +1 -1
- package/dist/admin/chunks/{ListPage-PwzVjSsA.mjs → ListPage-DoR-NV6v.mjs} +5 -5
- package/dist/admin/chunks/{ListPage-PwzVjSsA.mjs.map → ListPage-DoR-NV6v.mjs.map} +1 -1
- package/dist/admin/chunks/{ListPage-D21yUih2.js → ListPage-SVEmrFSg.js} +2 -2
- package/dist/admin/chunks/{ListPage-D21yUih2.js.map → ListPage-SVEmrFSg.js.map} +1 -1
- package/dist/admin/chunks/{ListPage-DbfL2rpi.js → ListPage-fOcHewxm.js} +2 -2
- package/dist/admin/chunks/{ListPage-DbfL2rpi.js.map → ListPage-fOcHewxm.js.map} +1 -1
- package/dist/admin/chunks/{ListView--KzJiQiO.mjs → ListView-BUbdI3-z.mjs} +3 -3
- package/dist/admin/chunks/{ListView--KzJiQiO.mjs.map → ListView-BUbdI3-z.mjs.map} +1 -1
- package/dist/admin/chunks/{ListView-DzwvQ8nW.js → ListView-CGHuleNQ.js} +3 -3
- package/dist/admin/chunks/{ListView-DzwvQ8nW.js.map → ListView-CGHuleNQ.js.map} +1 -1
- package/dist/admin/chunks/{ListView-CoGoDDiF.mjs → ListView-DxPGNDw_.mjs} +3 -3
- package/dist/admin/chunks/{ListView-CoGoDDiF.mjs.map → ListView-DxPGNDw_.mjs.map} +1 -1
- package/dist/admin/chunks/{ListView-DGfxO89i.js → ListView-HZFAPppY.js} +3 -3
- package/dist/admin/chunks/{ListView-DGfxO89i.js.map → ListView-HZFAPppY.js.map} +1 -1
- package/dist/admin/chunks/{Login-Dtkhd0GV.mjs → Login-B_Z4SJVp.mjs} +2 -2
- package/dist/admin/chunks/{Login-Dtkhd0GV.mjs.map → Login-B_Z4SJVp.mjs.map} +1 -1
- package/dist/admin/chunks/{Login-Iw84AH9L.js → Login-CjRacmoJ.js} +2 -2
- package/dist/admin/chunks/{Login-Iw84AH9L.js.map → Login-CjRacmoJ.js.map} +1 -1
- package/dist/admin/chunks/{MagicLinkEE-C5K8p8Rk.js → MagicLinkEE-DZLJwQiC.js} +4 -4
- package/dist/admin/chunks/{MagicLinkEE-C5K8p8Rk.js.map → MagicLinkEE-DZLJwQiC.js.map} +1 -1
- package/dist/admin/chunks/{MagicLinkEE-EcyHC46Y.mjs → MagicLinkEE-Oh6er0ux.mjs} +4 -4
- package/dist/admin/chunks/{MagicLinkEE-EcyHC46Y.mjs.map → MagicLinkEE-Oh6er0ux.mjs.map} +1 -1
- package/dist/admin/chunks/{MarketplacePage-CcAYozK2.mjs → MarketplacePage-BUksRtFV.mjs} +2 -2
- package/dist/admin/chunks/{MarketplacePage-CcAYozK2.mjs.map → MarketplacePage-BUksRtFV.mjs.map} +1 -1
- package/dist/admin/chunks/{MarketplacePage-BmqfuAvB.js → MarketplacePage-D-PvEBXN.js} +2 -2
- package/dist/admin/chunks/{MarketplacePage-BmqfuAvB.js.map → MarketplacePage-D-PvEBXN.js.map} +1 -1
- package/dist/admin/chunks/{ProfilePage-CN8SAQ9w.mjs → ProfilePage-D0cczhuo.mjs} +3 -3
- package/dist/admin/chunks/{ProfilePage-CN8SAQ9w.mjs.map → ProfilePage-D0cczhuo.mjs.map} +1 -1
- package/dist/admin/chunks/{ProfilePage-DiGV7o6c.js → ProfilePage-DghUK7p_.js} +3 -3
- package/dist/admin/chunks/{ProfilePage-DiGV7o6c.js.map → ProfilePage-DghUK7p_.js.map} +1 -1
- package/dist/admin/chunks/{PurchaseAuditLogs-DnWVbru3.js → PurchaseAuditLogs-BIBa5E6F.js} +2 -2
- package/dist/admin/chunks/{PurchaseAuditLogs-DnWVbru3.js.map → PurchaseAuditLogs-BIBa5E6F.js.map} +1 -1
- package/dist/admin/chunks/{PurchaseAuditLogs-BI41XTBD.mjs → PurchaseAuditLogs-BOqpGLyP.mjs} +2 -2
- package/dist/admin/chunks/{PurchaseAuditLogs-BI41XTBD.mjs.map → PurchaseAuditLogs-BOqpGLyP.mjs.map} +1 -1
- package/dist/admin/chunks/{PurchaseContentHistory-BzC2C4Pv.mjs → PurchaseContentHistory-DqyUHK_8.mjs} +2 -2
- package/dist/admin/chunks/{PurchaseContentHistory-BzC2C4Pv.mjs.map → PurchaseContentHistory-DqyUHK_8.mjs.map} +1 -1
- package/dist/admin/chunks/{PurchaseContentHistory-DUk7otrp.js → PurchaseContentHistory-y25nmJsq.js} +2 -2
- package/dist/admin/chunks/{PurchaseContentHistory-DUk7otrp.js.map → PurchaseContentHistory-y25nmJsq.js.map} +1 -1
- package/dist/admin/chunks/{PurchaseSingleSignOn-Bq0YHAHt.js → PurchaseSingleSignOn-DloQ-NfU.js} +2 -2
- package/dist/admin/chunks/{PurchaseSingleSignOn-Bq0YHAHt.js.map → PurchaseSingleSignOn-DloQ-NfU.js.map} +1 -1
- package/dist/admin/chunks/{PurchaseSingleSignOn-G1TKPP15.mjs → PurchaseSingleSignOn-L8wgCpHG.mjs} +2 -2
- package/dist/admin/chunks/{PurchaseSingleSignOn-G1TKPP15.mjs.map → PurchaseSingleSignOn-L8wgCpHG.mjs.map} +1 -1
- package/dist/admin/chunks/{SelectRoles-CKInlnSd.js → SelectRoles-ChZyGpDA.js} +3 -3
- package/dist/admin/chunks/{SelectRoles-CKInlnSd.js.map → SelectRoles-ChZyGpDA.js.map} +1 -1
- package/dist/admin/chunks/{SelectRoles-DR4KBZkw.mjs → SelectRoles-hAMu1PFv.mjs} +3 -3
- package/dist/admin/chunks/{SelectRoles-DR4KBZkw.mjs.map → SelectRoles-hAMu1PFv.mjs.map} +1 -1
- package/dist/admin/chunks/{SingleSignOnPage-CRzrEUGp.mjs → SingleSignOnPage-B-NIM66a.mjs} +3 -3
- package/dist/admin/chunks/{SingleSignOnPage-CRzrEUGp.mjs.map → SingleSignOnPage-B-NIM66a.mjs.map} +1 -1
- package/dist/admin/chunks/{SingleSignOnPage-DtRVlrGP.js → SingleSignOnPage-D-JNyyk2.js} +3 -3
- package/dist/admin/chunks/{SingleSignOnPage-DtRVlrGP.js.map → SingleSignOnPage-D-JNyyk2.js.map} +1 -1
- package/dist/admin/chunks/{Table-CBZnqMuN.js → Table-U6zMuKE5.js} +2 -2
- package/dist/admin/chunks/{Table-CBZnqMuN.js.map → Table-U6zMuKE5.js.map} +1 -1
- package/dist/admin/chunks/{Table-BohVeu0r.mjs → Table-b4wXHsis.mjs} +2 -2
- package/dist/admin/chunks/{Table-BohVeu0r.mjs.map → Table-b4wXHsis.mjs.map} +1 -1
- package/dist/admin/chunks/{TokenTypeSelect-CpEAVZ_b.mjs → TokenTypeSelect-BUFFAUgx.mjs} +2 -2
- package/dist/admin/chunks/{TokenTypeSelect-CpEAVZ_b.mjs.map → TokenTypeSelect-BUFFAUgx.mjs.map} +1 -1
- package/dist/admin/chunks/{TokenTypeSelect-BV_ZNiY_.js → TokenTypeSelect-DCa4dg3r.js} +2 -2
- package/dist/admin/chunks/{TokenTypeSelect-BV_ZNiY_.js.map → TokenTypeSelect-DCa4dg3r.js.map} +1 -1
- package/dist/admin/chunks/{UseCasePage-Bro5fyP3.mjs → UseCasePage-BlHgNz7W.mjs} +2 -2
- package/dist/admin/chunks/{UseCasePage-Bro5fyP3.mjs.map → UseCasePage-BlHgNz7W.mjs.map} +1 -1
- package/dist/admin/chunks/{UseCasePage-CipG2GC4.js → UseCasePage-CYCPZztF.js} +2 -2
- package/dist/admin/chunks/{UseCasePage-CipG2GC4.js.map → UseCasePage-CYCPZztF.js.map} +1 -1
- package/dist/admin/chunks/{constants-BddeukI7.mjs → constants-BY_PZgf3.mjs} +2 -2
- package/dist/admin/chunks/{constants-BddeukI7.mjs.map → constants-BY_PZgf3.mjs.map} +1 -1
- package/dist/admin/chunks/{constants-CaerHoe3.js → constants-D3gM8ElF.js} +2 -2
- package/dist/admin/chunks/{constants-CaerHoe3.js.map → constants-D3gM8ElF.js.map} +1 -1
- package/dist/admin/chunks/{index-HGaughzt.js → index-BdqtLS-k.js} +32 -32
- package/dist/admin/chunks/{index-HGaughzt.js.map → index-BdqtLS-k.js.map} +1 -1
- package/dist/admin/chunks/{index-BM8-DG5K.mjs → index-C3BO0YZa.mjs} +32 -32
- package/dist/admin/chunks/{index-BM8-DG5K.mjs.map → index-C3BO0YZa.mjs.map} +1 -1
- package/dist/admin/chunks/uk-D7QEPfXn.mjs +788 -0
- package/dist/admin/chunks/uk-D7QEPfXn.mjs.map +1 -0
- package/dist/admin/chunks/uk-WdcESeZB.js +807 -0
- package/dist/admin/chunks/uk-WdcESeZB.js.map +1 -0
- package/dist/admin/chunks/{useAdminRoles-C6Es4UUq.mjs → useAdminRoles-D68i2BI_.mjs} +2 -2
- package/dist/admin/chunks/{useAdminRoles-C6Es4UUq.mjs.map → useAdminRoles-D68i2BI_.mjs.map} +1 -1
- package/dist/admin/chunks/{useAdminRoles-_4HKisJz.js → useAdminRoles-Dy5KXk0R.js} +2 -2
- package/dist/admin/chunks/{useAdminRoles-_4HKisJz.js.map → useAdminRoles-Dy5KXk0R.js.map} +1 -1
- package/dist/admin/chunks/{validation-Dmvl0gZQ.mjs → validation-XFv2h8gD.mjs} +2 -2
- package/dist/admin/chunks/{validation-Dmvl0gZQ.mjs.map → validation-XFv2h8gD.mjs.map} +1 -1
- package/dist/admin/chunks/{validation-dPl3P7dv.js → validation-sucpUItn.js} +2 -2
- package/dist/admin/chunks/{validation-dPl3P7dv.js.map → validation-sucpUItn.js.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +0 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +0 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/authenticated-user.d.ts.map +1 -1
- package/package.json +11 -11
- package/dist/admin/chunks/AuthenticatedLayout-C9eZ12Ue.mjs.map +0 -1
- package/dist/admin/chunks/AuthenticatedLayout-D_VSoB1l.js.map +0 -1
- package/dist/admin/chunks/uk-Cb6a0PAZ.mjs +0 -201
- package/dist/admin/chunks/uk-Cb6a0PAZ.mjs.map +0 -1
- package/dist/admin/chunks/uk-gz16FlMw.js +0 -212
- package/dist/admin/chunks/uk-gz16FlMw.js.map +0 -1
package/dist/admin/chunks/{MarketplacePage-BmqfuAvB.js.map → MarketplacePage-D-PvEBXN.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplacePage-BmqfuAvB.js","sources":["../../../admin/src/hooks/useDebounce.ts","../../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const { formatMessage } = useIntl();\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />}>\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </Flex>\n </Popover.Content>\n\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n aria-label={message}\n placeholder={message}\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import {\n Box,\n Flex,\n Tooltip,\n Typography,\n Divider,\n Button,\n LinkButton,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { CheckCircle, ExternalLink, Download, Star, Check, Duplicate } from '@strapi/icons';\nimport { GitHub } from '@strapi/icons/symbols';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport { styled } from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled<TypographyComponent<'p'>>(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n const versionRange = semver.validRange(attributes.strapiVersion);\n\n const isCompatible = versionRange\n ? semver.satisfies(strapiAppVersion ?? '', versionRange)\n : false;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n tag=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography tag=\"h3\" variant=\"delta\">\n <Flex\n alignItems=\"center\"\n gap={attributes.validated && !attributes.madeByStrapi ? 2 : 1}\n >\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <CheckCircle fill=\"success600\" />\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Box\n tag=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n width={6}\n height=\"auto\"\n />\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText tag=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n isCompatible={isCompatible}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n isCompatible?: boolean;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n isCompatible,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Flex gap={2} paddingLeft={4}>\n <Check width=\"1.2rem\" height=\"1.2rem\" color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Flex>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode && isCompatible !== false) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )}\n >\n <span>\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </span>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <GitHub height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <Star height=\"1.2rem\" width=\"1.2rem\" fill=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider />\n </>\n )}\n <Download height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: 1.2rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, BoxComponent, Flex, Grid, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { Page } from '../../../components/PageHelpers';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <Layouts.Grid size=\"M\">\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </Layouts.Grid>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <EmptyDocuments width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" tag=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {npmPackages.map((npmPackage) => (\n <Grid.Item\n col={4}\n s={6}\n xs={12}\n style={{ height: '100%' }}\n key={npmPackage.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n\nconst EmptyPluginCard = styled<BoxComponent>(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { LinkButton } from '@strapi/design-system';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <Layouts.Header\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layouts.Root>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={`12rem`}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layouts.Root>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect, BoxComponent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n size=\"S\"\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { useNotification } from '../../../features/Notifications';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n strapiVersion?: string | null;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n strapiVersion,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Searchbar, Tabs } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { GlassesSquare } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useNotification } from '../../features/Notifications';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { useQueryParams } from '../../hooks/useQueryParams';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst PLUGIN = 'plugin';\nconst PROVIDER = 'provider';\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const {\n autoReload: isInDevelopmentMode,\n dependencies,\n useYarn,\n strapiVersion,\n } = useAppInfo('MarketplacePage', (state) => state);\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || PLUGIN;\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === PLUGIN ? { ...query } : {},\n provider: npmPackageType === PROVIDER ? { ...query } : {},\n });\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n }),\n });\n }\n }, [toggleNotification, isInDevelopmentMode, formatMessage]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (tab: string) => {\n const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;\n\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Page.Title>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.head',\n defaultMessage: 'Marketplace - Plugins',\n })}\n </Page.Title>\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <Layouts.Content>\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={npmPackageType}>\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n >\n <Tabs.Trigger value={PLUGIN}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n <Tabs.Trigger value={PROVIDER}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n </Tabs.List>\n\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n <Tabs.Content value={PLUGIN}>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Tabs.Content value={PROVIDER}>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Pagination.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <ExternalLink\n fill=\"neutral600\"\n width=\"1.2rem\"\n height=\"1.2rem\"\n style={{ marginLeft: '0.8rem' }}\n />\n }\n />\n </a>\n </Box>\n </Tabs.Root>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","React","useState","useEffect","handler","setTimeout","clearTimeout","NpmPackagesFilters","handleSelectClear","handleSelectChange","npmPackageType","possibleCategories","possibleCollections","query","formatMessage","useIntl","handleTagRemove","tagToRemove","filterType","update","filter","previousTag","_jsxs","Popover","Root","_jsx","Trigger","Button","variant","startIcon","Filter","id","defaultMessage","Content","sideOffset","Flex","padding","direction","alignItems","gap","FilterSelect","message","collections","onChange","newCollections","onClear","possibleFilters","customizeContent","values","count","length","categories","newCategories","map","collection","Box","Tag","icon","Cross","onClick","category","MultiSelect","data-testid","aria-label","placeholder","Object","entries","filterName","MultiSelectOption","EllipsisText","styled","Typography","NpmPackageCard","npmPackage","isInstalled","useYarn","isInDevelopmentMode","strapiAppVersion","attributes","trackUsage","useTracking","commandToCopy","npmPackageName","madeByStrapiMessage","npmPackageHref","pluralize","plural","slug","versionRange","semver","validRange","strapiVersion","isCompatible","satisfies","justifyContent","paddingTop","paddingRight","paddingBottom","paddingLeft","hasRadius","background","shadow","height","tag","src","logo","url","alt","name","width","PackageStats","githubStars","npmDownloads","validated","madeByStrapi","Tooltip","description","CheckCircle","fill","StrapiLogo","textColor","style","alignSelf","LinkButton","size","href","isExternal","endIcon","ExternalLink","pluginName","InstallPluginButton","strapiPeerDepVersion","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","Check","color","fontWeight","CardButton","installMessage","label","span","Duplicate","disabled","_Fragment","GitHub","aria-hidden","Star","p","starsCount","package","VerticalDivider","Download","downloadsCount","Divider","NpmPackagesGrid","status","npmPackages","installedPackageNames","debouncedSearch","Page","Error","Loading","emptySearchMessage","target","position","Layouts","Grid","Array","_","idx","EmptyPluginCard","top","EmptyDocuments","Item","col","s","xs","includes","theme","colors","neutral150","PageHeader","isOnline","tracking","Header","title","subtitle","primaryAction","Upload","OfflineLayout","Main","svg","viewBox","xmlns","rect","x","y","rx","path","d","stroke","SORT_TYPES","selected","option","SortSelect","sortQuery","SelectWrapper","SingleSelect","sortName","sort","messages","SingleSelectOption","fontWeights","semiBold","fontSizes","MARKETPLACE_API_URL","useMarketplaceData","tabQuery","notifyStatus","useNotifyAT","marketplaceTitle","notifyMarketplaceLoad","paginationParams","page","pageSize","pluginParams","plugin","pagination","search","version","data","pluginsResponse","pluginsStatus","useQuery","queryString","qs","stringify","res","fetch","ok","json","error","onSuccess","onError","providerParams","provider","providersResponse","providersStatus","npmPackageTypeResponse","meta","useNavigatorOnline","onlineStatus","navigator","onLine","setIsOnline","setOnline","setOffline","window","addEventListener","removeEventListener","PLUGIN","PROVIDER","MarketplacePage","setQuery","useQueryParams","autoReload","dependencies","useAppInfo","state","setTabQuery","handleTabChange","tab","selectedTab","hasTabQuery","keys","prev","undefined","handleSortSelectChange","Title","Tabs","onValueChange","List","total","Searchbar","e","clearLabel","Pagination","defaultPageSize","PageSize","options","Links","a","rel","textDecoration","ContentBox","GlassesSquare","iconBackground","endAction","marginLeft","ProtectedMarketplacePage","permissions","useTypedSelector","admin_app","marketplace","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketplacePage-D-PvEBXN.js","sources":["../../../admin/src/hooks/useDebounce.ts","../../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport function useDebounce<TValue>(value: TValue, delay: number): TValue {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const { formatMessage } = useIntl();\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />}>\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </Flex>\n </Popover.Content>\n\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n aria-label={message}\n placeholder={message}\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import {\n Box,\n Flex,\n Tooltip,\n Typography,\n Divider,\n Button,\n LinkButton,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { CheckCircle, ExternalLink, Download, Star, Check, Duplicate } from '@strapi/icons';\nimport { GitHub } from '@strapi/icons/symbols';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport { styled } from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled<TypographyComponent<'p'>>(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n const versionRange = semver.validRange(attributes.strapiVersion);\n\n const isCompatible = versionRange\n ? semver.satisfies(strapiAppVersion ?? '', versionRange)\n : false;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n tag=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography tag=\"h3\" variant=\"delta\">\n <Flex\n alignItems=\"center\"\n gap={attributes.validated && !attributes.madeByStrapi ? 2 : 1}\n >\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <CheckCircle fill=\"success600\" />\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Box\n tag=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n width={6}\n height=\"auto\"\n />\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText tag=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n isCompatible={isCompatible}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n isCompatible?: boolean;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n isCompatible,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Flex gap={2} paddingLeft={4}>\n <Check width=\"1.2rem\" height=\"1.2rem\" color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Flex>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode && isCompatible !== false) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )}\n >\n <span>\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </span>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <GitHub height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <Star height=\"1.2rem\" width=\"1.2rem\" fill=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider />\n </>\n )}\n <Download height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: 1.2rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import { Box, BoxComponent, Flex, Grid, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { Page } from '../../../components/PageHelpers';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return <Page.Error />;\n }\n\n if (status === 'loading') {\n return <Page.Loading />;\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <Layouts.Grid size=\"M\">\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </Layouts.Grid>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <EmptyDocuments width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" tag=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {npmPackages.map((npmPackage) => (\n <Grid.Item\n col={4}\n s={6}\n xs={12}\n style={{ height: '100%' }}\n key={npmPackage.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n\nconst EmptyPluginCard = styled<BoxComponent>(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { LinkButton } from '@strapi/design-system';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\nimport { useTracking } from '../../../features/Tracking';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <Layouts.Header\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Main, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Layouts } from '../../../components/Layouts/Layout';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layouts.Root>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={`12rem`}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layouts.Root>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect, BoxComponent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n size=\"S\"\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { useNotification } from '../../../features/Notifications';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n strapiVersion?: string | null;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n strapiVersion,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n version: strapiVersion,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Searchbar, Tabs } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { GlassesSquare } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { ContentBox } from '../../components/ContentBox';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { Pagination } from '../../components/Pagination';\nimport { useTypedSelector } from '../../core/store/hooks';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useNotification } from '../../features/Notifications';\nimport { useTracking } from '../../features/Tracking';\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { useQueryParams } from '../../hooks/useQueryParams';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst PLUGIN = 'plugin';\nconst PROVIDER = 'provider';\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const {\n autoReload: isInDevelopmentMode,\n dependencies,\n useYarn,\n strapiVersion,\n } = useAppInfo('MarketplacePage', (state) => state);\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || PLUGIN;\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === PLUGIN ? { ...query } : {},\n provider: npmPackageType === PROVIDER ? { ...query } : {},\n });\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n }),\n });\n }\n }, [toggleNotification, isInDevelopmentMode, formatMessage]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (tab: string) => {\n const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;\n\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Page.Title>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.head',\n defaultMessage: 'Marketplace - Plugins',\n })}\n </Page.Title>\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <Layouts.Content>\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={npmPackageType}>\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n >\n <Tabs.Trigger value={PLUGIN}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n <Tabs.Trigger value={PROVIDER}>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tabs.Trigger>\n </Tabs.List>\n\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n <Tabs.Content value={PLUGIN}>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Tabs.Content value={PROVIDER}>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </Tabs.Content>\n <Pagination.Root {...pagination} defaultPageSize={24}>\n <Pagination.PageSize options={['12', '24', '50', '100']} />\n <Pagination.Links />\n </Pagination.Root>\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <ExternalLink\n fill=\"neutral600\"\n width=\"1.2rem\"\n height=\"1.2rem\"\n style={{ marginLeft: '0.8rem' }}\n />\n }\n />\n </a>\n </Box>\n </Tabs.Root>\n </Layouts.Content>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.marketplace?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <MarketplacePage />\n </Page.Protect>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","React","useState","useEffect","handler","setTimeout","clearTimeout","NpmPackagesFilters","handleSelectClear","handleSelectChange","npmPackageType","possibleCategories","possibleCollections","query","formatMessage","useIntl","handleTagRemove","tagToRemove","filterType","update","filter","previousTag","_jsxs","Popover","Root","_jsx","Trigger","Button","variant","startIcon","Filter","id","defaultMessage","Content","sideOffset","Flex","padding","direction","alignItems","gap","FilterSelect","message","collections","onChange","newCollections","onClear","possibleFilters","customizeContent","values","count","length","categories","newCategories","map","collection","Box","Tag","icon","Cross","onClick","category","MultiSelect","data-testid","aria-label","placeholder","Object","entries","filterName","MultiSelectOption","EllipsisText","styled","Typography","NpmPackageCard","npmPackage","isInstalled","useYarn","isInDevelopmentMode","strapiAppVersion","attributes","trackUsage","useTracking","commandToCopy","npmPackageName","madeByStrapiMessage","npmPackageHref","pluralize","plural","slug","versionRange","semver","validRange","strapiVersion","isCompatible","satisfies","justifyContent","paddingTop","paddingRight","paddingBottom","paddingLeft","hasRadius","background","shadow","height","tag","src","logo","url","alt","name","width","PackageStats","githubStars","npmDownloads","validated","madeByStrapi","Tooltip","description","CheckCircle","fill","StrapiLogo","textColor","style","alignSelf","LinkButton","size","href","isExternal","endIcon","ExternalLink","pluginName","InstallPluginButton","strapiPeerDepVersion","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","Check","color","fontWeight","CardButton","installMessage","label","span","Duplicate","disabled","_Fragment","GitHub","aria-hidden","Star","p","starsCount","package","VerticalDivider","Download","downloadsCount","Divider","NpmPackagesGrid","status","npmPackages","installedPackageNames","debouncedSearch","Page","Error","Loading","emptySearchMessage","target","position","Layouts","Grid","Array","_","idx","EmptyPluginCard","top","EmptyDocuments","Item","col","s","xs","includes","theme","colors","neutral150","PageHeader","isOnline","tracking","Header","title","subtitle","primaryAction","Upload","OfflineLayout","Main","svg","viewBox","xmlns","rect","x","y","rx","path","d","stroke","SORT_TYPES","selected","option","SortSelect","sortQuery","SelectWrapper","SingleSelect","sortName","sort","messages","SingleSelectOption","fontWeights","semiBold","fontSizes","MARKETPLACE_API_URL","useMarketplaceData","tabQuery","notifyStatus","useNotifyAT","marketplaceTitle","notifyMarketplaceLoad","paginationParams","page","pageSize","pluginParams","plugin","pagination","search","version","data","pluginsResponse","pluginsStatus","useQuery","queryString","qs","stringify","res","fetch","ok","json","error","onSuccess","onError","providerParams","provider","providersResponse","providersStatus","npmPackageTypeResponse","meta","useNavigatorOnline","onlineStatus","navigator","onLine","setIsOnline","setOnline","setOffline","window","addEventListener","removeEventListener","PLUGIN","PROVIDER","MarketplacePage","setQuery","useQueryParams","autoReload","dependencies","useAppInfo","state","setTabQuery","handleTabChange","tab","selectedTab","hasTabQuery","keys","prev","undefined","handleSortSelectChange","Title","Tabs","onValueChange","List","total","Searchbar","e","clearLabel","Pagination","defaultPageSize","PageSize","options","Links","a","rel","textDecoration","ContentBox","GlassesSquare","iconBackground","endAction","marginLeft","ProtectedMarketplacePage","permissions","useTypedSelector","admin_app","marketplace","main","Protect"],"mappings":"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"}
|
|
@@ -5,11 +5,11 @@ import { Check } from '@strapi/icons';
|
|
|
5
5
|
import upperFirst from 'lodash/upperFirst';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
7
|
import * as yup from 'yup';
|
|
8
|
-
import { e as errorsTrads, F as Form, b as Layouts, M as MemoizedInputRenderer } from './index-
|
|
8
|
+
import { e as errorsTrads, F as Form, b as Layouts, M as MemoizedInputRenderer } from './index-C3BO0YZa.mjs';
|
|
9
9
|
import { b as useTypedSelector, c as useTracking, a as useNotification, d as useTypedDispatch, e as useAPIErrorHandler, u as useAuth, f as useUpdateMeMutation, g as useIsSSOLockedQuery, P as Page, s as setAppTheme } from './Theme-C3oHrQcy.mjs';
|
|
10
10
|
import { i as isBaseQueryError } from './admin-BBS7sDVu.mjs';
|
|
11
11
|
import { g as getDisplayName } from './users-B3iOAYG-.mjs';
|
|
12
|
-
import { C as COMMON_USER_SCHEMA } from './validation-
|
|
12
|
+
import { C as COMMON_USER_SCHEMA } from './validation-XFv2h8gD.mjs';
|
|
13
13
|
import 'react-dom/client';
|
|
14
14
|
import 'invariant';
|
|
15
15
|
import 'lodash/isFunction';
|
|
@@ -495,4 +495,4 @@ const PreferencesSection = ({ localeNames })=>{
|
|
|
495
495
|
};
|
|
496
496
|
|
|
497
497
|
export { ProfilePage };
|
|
498
|
-
//# sourceMappingURL=ProfilePage-
|
|
498
|
+
//# sourceMappingURL=ProfilePage-D0cczhuo.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfilePage-CN8SAQ9w.mjs","sources":["../../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, useNotifyAT, Grid, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, FormHelpers } from '../components/Form';\nimport { InputRenderer } from '../components/FormInputs/Renderer';\nimport { Layouts } from '../components/Layouts/Layout';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useTracking } from '../features/Tracking';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { translatedErrors } from '../utils/translatedErrors';\nimport { getDisplayName } from '../utils/users';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProfilePage = () => {\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'Settings.permissions.users.sso.provider.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormHelpers<UpdateUsersMeBody>\n ) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n }\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'danger',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email: email ?? '',\n firstname: firstname ?? '',\n lastname: lastname ?? '',\n username: username ?? '',\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage({\n id: 'Settings.profile.form.section.head.title',\n defaultMessage: 'User profile',\n })}\n </Page.Title>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n initialValues={initialData}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n >\n {({ isSubmitting, modified }) => (\n <>\n <Layouts.Header\n title={getDisplayName(user)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified}\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={10}>\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection />\n {!hasLockedRole && <PasswordSection />}\n <PreferencesSection localeNames={localeNames} />\n </Flex>\n </Layouts.Content>\n </Box>\n </>\n )}\n </Form>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst PasswordSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n {[\n [\n {\n label: formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n }),\n name: 'currentPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n [\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n size: 6,\n type: 'password' as const,\n },\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n ].map((row, index) => (\n <Grid.Root key={index} gap={5}>\n {row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps {\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n tag=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid.Root gap={5}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n }),\n name: 'preferedLanguage',\n options: Object.entries(localeNames).map(([value, label]) => ({\n label,\n value,\n })),\n placeholder: formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n }),\n name: 'currentTheme',\n options: [\n {\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n }),\n value: 'system',\n },\n ...themesToDisplay.map((theme) => ({\n label: formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n ),\n value: theme,\n })),\n ],\n placeholder: formatMessage({\n id: 'components.Select.placeholder',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst UserInfoSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 6,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }),\n name: 'username',\n size: 6,\n type: 'string' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nexport { ProfilePage };\n"],"names":["PROFILE_VALIDTION_SCHEMA","yup","object","shape","COMMON_USER_SCHEMA","currentPassword","string","when","password","confirmPassword","passSchema","required","id","translatedErrors","defaultMessage","nullable","preferedLanguage","ProfilePage","localeNames","useTypedSelector","state","admin_app","language","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","notifyStatus","useNotifyAT","currentTheme","theme","dispatch","useTypedDispatch","_unstableFormatValidationErrors","formatValidationErrors","_unstableFormatAPIError","formatApiError","useAPIErrorHandler","user","useAuth","React","useEffect","type","message","updateMe","isLoading","isSubmittingForm","useUpdateMeMutation","data","dataSSO","error","useIsSSOLockedQuery","undefined","skip","window","strapi","isEE","features","isEnabled","handleSubmit","body","setErrors","_confirmPassword","bodyRest","dataToSend","_password","_currentPassword","passwordRequestBodyRest","res","setAppTheme","newMode","isBaseQueryError","name","_jsx","Page","Loading","hasLockedRole","isSSOLocked","email","firstname","lastname","username","initialData","_jsxs","Main","aria-busy","Title","Form","method","onSubmit","initialValues","validationSchema","isSubmitting","modified","_Fragment","Layouts","Header","title","getDisplayName","primaryAction","Button","startIcon","Check","loading","disabled","Box","paddingBottom","Content","Flex","direction","alignItems","gap","UserInfoSection","PasswordSection","PreferencesSection","background","hasRadius","shadow","paddingTop","paddingLeft","paddingRight","Typography","variant","tag","label","size","autoComplete","map","row","index","Grid","Root","field","Item","col","InputRenderer","themesToDisplay","availableThemes","here","color","target","rel","href","hint","options","Object","entries","value","placeholder","upperFirst"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProfilePage-D0cczhuo.mjs","sources":["../../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, useNotifyAT, Grid, Typography } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, FormHelpers } from '../components/Form';\nimport { InputRenderer } from '../components/FormInputs/Renderer';\nimport { Layouts } from '../components/Layouts/Layout';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useTracking } from '../features/Tracking';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { translatedErrors } from '../utils/translatedErrors';\nimport { getDisplayName } from '../utils/users';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProfilePage = () => {\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'Settings.permissions.users.sso.provider.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormHelpers<UpdateUsersMeBody>\n ) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n }\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'danger',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email: email ?? '',\n firstname: firstname ?? '',\n lastname: lastname ?? '',\n username: username ?? '',\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage({\n id: 'Settings.profile.form.section.head.title',\n defaultMessage: 'User profile',\n })}\n </Page.Title>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n initialValues={initialData}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n >\n {({ isSubmitting, modified }) => (\n <>\n <Layouts.Header\n title={getDisplayName(user)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified}\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={10}>\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection />\n {!hasLockedRole && <PasswordSection />}\n <PreferencesSection localeNames={localeNames} />\n </Flex>\n </Layouts.Content>\n </Box>\n </>\n )}\n </Form>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst PasswordSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n {[\n [\n {\n label: formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n }),\n name: 'currentPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n [\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n size: 6,\n type: 'password' as const,\n },\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n ].map((row, index) => (\n <Grid.Root key={index} gap={5}>\n {row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps {\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n tag=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid.Root gap={5}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n }),\n name: 'preferedLanguage',\n options: Object.entries(localeNames).map(([value, label]) => ({\n label,\n value,\n })),\n placeholder: formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n }),\n name: 'currentTheme',\n options: [\n {\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n }),\n value: 'system',\n },\n ...themesToDisplay.map((theme) => ({\n label: formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n ),\n value: theme,\n })),\n ],\n placeholder: formatMessage({\n id: 'components.Select.placeholder',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst UserInfoSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 6,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }),\n name: 'username',\n size: 6,\n type: 'string' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nexport { ProfilePage };\n"],"names":["PROFILE_VALIDTION_SCHEMA","yup","object","shape","COMMON_USER_SCHEMA","currentPassword","string","when","password","confirmPassword","passSchema","required","id","translatedErrors","defaultMessage","nullable","preferedLanguage","ProfilePage","localeNames","useTypedSelector","state","admin_app","language","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","notifyStatus","useNotifyAT","currentTheme","theme","dispatch","useTypedDispatch","_unstableFormatValidationErrors","formatValidationErrors","_unstableFormatAPIError","formatApiError","useAPIErrorHandler","user","useAuth","React","useEffect","type","message","updateMe","isLoading","isSubmittingForm","useUpdateMeMutation","data","dataSSO","error","useIsSSOLockedQuery","undefined","skip","window","strapi","isEE","features","isEnabled","handleSubmit","body","setErrors","_confirmPassword","bodyRest","dataToSend","_password","_currentPassword","passwordRequestBodyRest","res","setAppTheme","newMode","isBaseQueryError","name","_jsx","Page","Loading","hasLockedRole","isSSOLocked","email","firstname","lastname","username","initialData","_jsxs","Main","aria-busy","Title","Form","method","onSubmit","initialValues","validationSchema","isSubmitting","modified","_Fragment","Layouts","Header","title","getDisplayName","primaryAction","Button","startIcon","Check","loading","disabled","Box","paddingBottom","Content","Flex","direction","alignItems","gap","UserInfoSection","PasswordSection","PreferencesSection","background","hasRadius","shadow","paddingTop","paddingLeft","paddingRight","Typography","variant","tag","label","size","autoComplete","map","row","index","Grid","Root","field","Item","col","InputRenderer","themesToDisplay","availableThemes","here","color","target","rel","href","hint","options","Object","entries","value","placeholder","upperFirst"],"mappings":"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"}
|