@strapi/admin 5.33.4 → 5.34.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/admin/src/components/GradientBadge.js +18 -2
- package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
- package/dist/admin/admin/src/components/GradientBadge.mjs +19 -3
- package/dist/admin/admin/src/components/GradientBadge.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js +8 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs +8 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ContentLayout.js +4 -0
- package/dist/admin/admin/src/components/Layouts/ContentLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs +4 -0
- package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +80 -49
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +81 -50
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +1 -0
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +1 -0
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.js +37 -6
- package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs +38 -7
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +39 -18
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +39 -18
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.js +2 -1
- package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.mjs +2 -1
- package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +2 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +2 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +1 -0
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -0
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +1 -0
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +1 -0
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +7 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +7 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +44 -26
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +45 -27
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +3 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +3 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -11
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +10 -12
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +3 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +3 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/router.js +0 -9
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs +0 -9
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ar.json.js +0 -42
- package/dist/admin/admin/src/translations/ar.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ar.json.mjs +0 -42
- package/dist/admin/admin/src/translations/ar.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ca.json.js +0 -21
- package/dist/admin/admin/src/translations/ca.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ca.json.mjs +0 -21
- package/dist/admin/admin/src/translations/ca.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/de.json.js +422 -66
- package/dist/admin/admin/src/translations/de.json.js.map +1 -1
- package/dist/admin/admin/src/translations/de.json.mjs +419 -67
- package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/dk.json.js +0 -6
- package/dist/admin/admin/src/translations/dk.json.js.map +1 -1
- package/dist/admin/admin/src/translations/dk.json.mjs +0 -6
- package/dist/admin/admin/src/translations/dk.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +0 -44
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +0 -44
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +0 -25
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +0 -25
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/eu.json.js +0 -43
- package/dist/admin/admin/src/translations/eu.json.js.map +1 -1
- package/dist/admin/admin/src/translations/eu.json.mjs +0 -43
- package/dist/admin/admin/src/translations/eu.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +0 -6
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +0 -6
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/gu.json.js +0 -21
- package/dist/admin/admin/src/translations/gu.json.js.map +1 -1
- package/dist/admin/admin/src/translations/gu.json.mjs +0 -21
- package/dist/admin/admin/src/translations/gu.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/hi.json.js +0 -21
- package/dist/admin/admin/src/translations/hi.json.js.map +1 -1
- package/dist/admin/admin/src/translations/hi.json.mjs +0 -21
- package/dist/admin/admin/src/translations/hi.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/hu.json.js +0 -43
- package/dist/admin/admin/src/translations/hu.json.js.map +1 -1
- package/dist/admin/admin/src/translations/hu.json.mjs +0 -43
- package/dist/admin/admin/src/translations/hu.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/it.json.js +613 -3
- package/dist/admin/admin/src/translations/it.json.js.map +1 -1
- package/dist/admin/admin/src/translations/it.json.mjs +605 -4
- package/dist/admin/admin/src/translations/it.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.js +0 -6
- package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.mjs +0 -6
- package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ko.json.js +0 -6
- package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ko.json.mjs +0 -6
- package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ml.json.js +0 -21
- package/dist/admin/admin/src/translations/ml.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ml.json.mjs +0 -21
- package/dist/admin/admin/src/translations/ml.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/nl.json.js +0 -39
- package/dist/admin/admin/src/translations/nl.json.js.map +1 -1
- package/dist/admin/admin/src/translations/nl.json.mjs +0 -39
- package/dist/admin/admin/src/translations/nl.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/pl.json.js +0 -21
- package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
- package/dist/admin/admin/src/translations/pl.json.mjs +0 -21
- package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/pt-BR.json.js +0 -25
- package/dist/admin/admin/src/translations/pt-BR.json.js.map +1 -1
- package/dist/admin/admin/src/translations/pt-BR.json.mjs +0 -25
- package/dist/admin/admin/src/translations/pt-BR.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.js +0 -44
- package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.mjs +0 -44
- package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/sa.json.js +0 -21
- package/dist/admin/admin/src/translations/sa.json.js.map +1 -1
- package/dist/admin/admin/src/translations/sa.json.mjs +0 -21
- package/dist/admin/admin/src/translations/sa.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/sv.json.js +0 -39
- package/dist/admin/admin/src/translations/sv.json.js.map +1 -1
- package/dist/admin/admin/src/translations/sv.json.mjs +0 -39
- package/dist/admin/admin/src/translations/sv.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/tr.json.js +0 -39
- package/dist/admin/admin/src/translations/tr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/tr.json.mjs +0 -39
- package/dist/admin/admin/src/translations/tr.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/uk.json.js +0 -44
- package/dist/admin/admin/src/translations/uk.json.js.map +1 -1
- package/dist/admin/admin/src/translations/uk.json.mjs +0 -44
- package/dist/admin/admin/src/translations/uk.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/vi.json.js +0 -44
- package/dist/admin/admin/src/translations/vi.json.js.map +1 -1
- package/dist/admin/admin/src/translations/vi.json.mjs +0 -44
- package/dist/admin/admin/src/translations/vi.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.js +0 -44
- package/dist/admin/admin/src/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.mjs +0 -44
- package/dist/admin/admin/src/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/zh.json.js +0 -39
- package/dist/admin/admin/src/translations/zh.json.js.map +1 -1
- package/dist/admin/admin/src/translations/zh.json.mjs +0 -39
- package/dist/admin/admin/src/translations/zh.json.mjs.map +1 -1
- package/dist/admin/admin/tests/mockData.js +0 -1413
- package/dist/admin/admin/tests/mockData.js.map +1 -1
- package/dist/admin/admin/tests/mockData.mjs +0 -1413
- package/dist/admin/admin/tests/mockData.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +0 -99
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +0 -80
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs.map +1 -1
- package/dist/admin/src/components/MainNav/NavLink.d.ts +2 -2
- package/dist/admin/src/core/apis/router.d.ts +1 -0
- package/dist/admin/src/features/Tracking.d.ts +1 -1
- package/dist/admin/src/hooks/useMenu.d.ts +1 -0
- package/dist/admin/tests/mockData.d.ts +0 -972
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +53 -0
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -0
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +51 -0
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -0
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +7 -8
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +10 -11
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.js +7 -8
- package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +10 -11
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts +21 -0
- package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -0
- package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +0 -339
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +0 -317
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js +0 -329
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs +0 -308
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js +0 -121
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs +0 -119
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.js +0 -93
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs +0 -91
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.js +0 -81
- package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs +0 -79
- package/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js +0 -38
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs +0 -36
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.js +0 -85
- package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs +0 -83
- package/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js +0 -134
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs +0 -113
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.js +0 -44
- package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.js.map +0 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs +0 -23
- package/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs.map +0 -1
- package/dist/admin/src/pages/Marketplace/MarketplacePage.d.ts +0 -19
- package/dist/admin/src/pages/Marketplace/components/NpmPackageCard.d.ts +0 -13
- package/dist/admin/src/pages/Marketplace/components/NpmPackagesFilters.d.ts +0 -13
- package/dist/admin/src/pages/Marketplace/components/NpmPackagesGrid.d.ts +0 -13
- package/dist/admin/src/pages/Marketplace/components/OfflineLayout.d.ts +0 -2
- package/dist/admin/src/pages/Marketplace/components/PageHeader.d.ts +0 -8
- package/dist/admin/src/pages/Marketplace/components/SortSelect.d.ts +0 -51
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +0 -93
- package/dist/admin/src/pages/Marketplace/hooks/useNavigatorOnline.d.ts +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.mjs","sources":["../../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"sourcesContent":["import { subject as asSubject, detectSubjectType } from '@casl/ability';\nimport { permittedFieldsOf } from '@casl/ability/extra';\nimport {\n defaults,\n omit,\n isArray,\n isEmpty,\n isNil,\n flatMap,\n some,\n prop,\n uniq,\n intersection,\n getOr,\n isObject,\n} from 'lodash/fp';\n\nimport { contentTypes, traverseEntity, traverse, validate, async, errors } from '@strapi/utils';\nimport { ADMIN_USER_ALLOWED_FIELDS } from '../../../domain/user';\n\nconst { ValidationError } = errors;\nconst { throwPassword, throwDisallowedFields } = validate.visitors;\n\nconst { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } =\n contentTypes;\nconst {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = constants;\n\nconst COMPONENT_FIELDS = ['__component'];\n\nconst STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n\nconst throwInvalidKey = ({ key, path }: { key: string; path?: string | null }) => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg);\n};\n\nexport default ({ action, ability, model }: any) => {\n const schema = strapi.getModel(model);\n\n const ctx = {\n schema,\n getModel: strapi.getModel.bind(strapi),\n };\n\n const createValidateQuery = (options = {} as any) => {\n const { fields } = options;\n\n // TODO: validate relations to admin users in all validators\n const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);\n\n const validateFilters = async.pipe(\n traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryFilters(throwPassword, ctx),\n traverse.traverseQueryFilters(({ key, value, path }) => {\n if (isObject(value) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateSort = async.pipe(\n traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQuerySort(throwPassword, ctx),\n traverse.traverseQuerySort(({ key, attribute, value, path }) => {\n if (!isScalarAttribute(attribute) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateFields = async.pipe(\n traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFields(throwPassword, ctx)\n );\n\n const validatePopulate = async.pipe(\n traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryPopulate(throwHiddenFields, ctx),\n traverse.traverseQueryPopulate(throwPassword, ctx)\n );\n\n return async (query: any) => {\n if (query.filters) {\n await validateFilters(query.filters);\n }\n\n if (query.sort) {\n await validateSort(query.sort);\n }\n\n if (query.fields) {\n await validateFields(query.fields);\n }\n\n // a wildcard is always valid; its conversion will be handled by the entity service and can be optimized with sanitizer\n if (query.populate && query.populate !== '*') {\n await validatePopulate(query.populate);\n }\n\n return true;\n };\n };\n\n const createValidateInput = (options = {} as any) => {\n const { fields } = options;\n\n const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);\n\n return async.pipe(\n // Remove fields hidden from the admin\n traverseEntity(throwHiddenFields, ctx),\n // Remove not allowed fields (RBAC)\n traverseEntity(throwDisallowedFields(permittedFields), ctx),\n // Remove roles from createdBy & updatedBy fields\n omitCreatorRoles\n );\n };\n\n const wrapValidate = (createValidateFunction: any) => {\n // TODO\n // @ts-expect-error define the correct return type\n const wrappedValidate = async (data, options = {}): Promise<unknown> => {\n if (isArray(data)) {\n return Promise.all(data.map((entity: unknown) => wrappedValidate(entity, options)));\n }\n\n const { subject, action: actionOverride } = getDefaultOptions(data, options);\n\n const permittedFields = permittedFieldsOf(ability, actionOverride, subject, {\n fieldsFrom: (rule) => rule.fields || [],\n });\n\n const hasAtLeastOneRegistered = some(\n (fields) => !isNil(fields),\n flatMap(prop('fields'), ability.rulesFor(actionOverride, detectSubjectType(subject)))\n );\n const shouldIncludeAllFields = isEmpty(permittedFields) && !hasAtLeastOneRegistered;\n\n const validateOptions = {\n ...options,\n fields: {\n shouldIncludeAll: shouldIncludeAllFields,\n permitted: permittedFields,\n hasAtLeastOneRegistered,\n },\n };\n\n const validateFunction = createValidateFunction(validateOptions);\n\n return validateFunction(data);\n };\n\n return wrappedValidate;\n };\n\n const getDefaultOptions = (data: any, options: unknown) => {\n return defaults({ subject: asSubject(model, data), action }, options);\n };\n\n /**\n * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses\n */\n const omitCreatorRoles = omit([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);\n\n /**\n * Visitor used to remove hidden fields from the admin API responses\n */\n const throwHiddenFields = ({ key, schema, path }: any) => {\n const isHidden = getOr(false, ['config', 'attributes', key, 'hidden'], schema);\n\n if (isHidden) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n /**\n * Visitor used to omit disallowed fields from the admin users entities & avoid leaking sensitive information\n */\n const throwDisallowedAdminUserFields = ({ key, attribute, schema, path }: any) => {\n if (schema.uid === 'admin::user' && attribute && !ADMIN_USER_ALLOWED_FIELDS.includes(key)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n const getInputFields = (fields = []) => {\n const nonVisibleAttributes = getNonVisibleAttributes(schema);\n const writableAttributes = getWritableAttributes(schema);\n\n const nonVisibleWritableAttributes = intersection(nonVisibleAttributes, writableAttributes);\n\n return uniq([...fields, ...COMPONENT_FIELDS, ...nonVisibleWritableAttributes]);\n };\n\n const getQueryFields = (fields = []) => {\n return uniq([\n ...fields,\n ...STATIC_FIELDS,\n ...COMPONENT_FIELDS,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ]);\n };\n\n return {\n validateQuery: wrapValidate(createValidateQuery),\n validateInput: wrapValidate(createValidateInput),\n };\n};\n"],"names":["ValidationError","errors","throwPassword","throwDisallowedFields","validate","visitors","constants","isScalarAttribute","getNonVisibleAttributes","getWritableAttributes","contentTypes","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","COMPONENT_FIELDS","STATIC_FIELDS","throwInvalidKey","key","path","msg","action","ability","model","schema","strapi","getModel","ctx","bind","createValidateQuery","options","fields","permittedFields","shouldIncludeAll","getQueryFields","permitted","validateFilters","async","pipe","traverse","traverseQueryFilters","throwDisallowedAdminUserFields","value","isObject","isEmpty","attribute","validateSort","traverseQuerySort","validateFields","traverseQueryFields","validatePopulate","traverseQueryPopulate","throwHiddenFields","query","filters","sort","populate","createValidateInput","getInputFields","traverseEntity","omitCreatorRoles","wrapValidate","createValidateFunction","wrappedValidate","data","isArray","Promise","all","map","entity","subject","actionOverride","getDefaultOptions","permittedFieldsOf","fieldsFrom","rule","hasAtLeastOneRegistered","some","isNil","flatMap","prop","rulesFor","detectSubjectType","shouldIncludeAllFields","validateOptions","validateFunction","defaults","asSubject","omit","isHidden","getOr","uid","ADMIN_USER_ALLOWED_FIELDS","includes","nonVisibleAttributes","writableAttributes","nonVisibleWritableAttributes","intersection","uniq","validateQuery","validateInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.mjs","sources":["../../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"sourcesContent":["import { subject as asSubject } from '@casl/ability';\nimport { defaults, omit, isArray, isEmpty, uniq, intersection, getOr, isObject } from 'lodash/fp';\n\nimport {\n contentTypes,\n traverseEntity,\n traverse,\n validate,\n async,\n errors,\n createModelCache,\n} from '@strapi/utils';\nimport { createPermissionFieldsCache } from './permission-fields';\n\nimport { ADMIN_USER_ALLOWED_FIELDS } from '../../../domain/user';\n\nconst { ValidationError } = errors;\nconst { throwPassword, throwDisallowedFields } = validate.visitors;\n\nconst { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } =\n contentTypes;\nconst {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n} = constants;\n\nconst COMPONENT_FIELDS = ['__component'];\n\nconst STATIC_FIELDS = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n\nconst throwInvalidKey = ({ key, path }: { key: string; path?: string | null }) => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg);\n};\n\nexport default ({ action, ability, model }: any) => {\n const schema = strapi.getModel(model);\n\n // Create request-scoped model cache to avoid redundant getModel() calls\n const modelCache = createModelCache(strapi.getModel.bind(strapi));\n\n const ctx = {\n schema,\n getModel: modelCache.getModel,\n };\n\n const createValidateQuery = (options = {} as any) => {\n const { fields } = options;\n\n // TODO: validate relations to admin users in all validators\n const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);\n\n const validateFilters = async.pipe(\n traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFilters(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryFilters(throwPassword, ctx),\n traverse.traverseQueryFilters(({ key, value, path }) => {\n if (isObject(value) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateSort = async.pipe(\n traverse.traverseQuerySort(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQuerySort(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQuerySort(throwPassword, ctx),\n traverse.traverseQuerySort(({ key, attribute, value, path }) => {\n if (!isScalarAttribute(attribute) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n\n const validateFields = async.pipe(\n traverse.traverseQueryFields(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryFields(throwPassword, ctx)\n );\n\n const validatePopulate = async.pipe(\n traverse.traverseQueryPopulate(throwDisallowedFields(permittedFields), ctx),\n traverse.traverseQueryPopulate(throwDisallowedAdminUserFields, ctx),\n traverse.traverseQueryPopulate(throwHiddenFields, ctx),\n traverse.traverseQueryPopulate(throwPassword, ctx)\n );\n\n return async (query: any) => {\n if (query.filters) {\n await validateFilters(query.filters);\n }\n\n if (query.sort) {\n await validateSort(query.sort);\n }\n\n if (query.fields) {\n await validateFields(query.fields);\n }\n\n // a wildcard is always valid; its conversion will be handled by the entity service and can be optimized with sanitizer\n if (query.populate && query.populate !== '*') {\n await validatePopulate(query.populate);\n }\n\n return true;\n };\n };\n\n const createValidateInput = (options = {} as any) => {\n const { fields } = options;\n\n const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);\n\n return async.pipe(\n // Remove fields hidden from the admin\n traverseEntity(throwHiddenFields, ctx),\n // Remove not allowed fields (RBAC)\n traverseEntity(throwDisallowedFields(permittedFields), ctx),\n // Remove roles from createdBy & updatedBy fields\n omitCreatorRoles\n );\n };\n\n const wrapValidate = (createValidateFunction: any) => {\n const { getPermissionFields } = createPermissionFieldsCache(ability);\n\n // TODO\n // @ts-expect-error define the correct return type\n const wrappedValidate = async (data, options = {}): Promise<unknown> => {\n if (isArray(data)) {\n return Promise.all(data.map((entity: unknown) => wrappedValidate(entity, options)));\n }\n\n const { subject, action: actionOverride } = getDefaultOptions(data, options);\n\n const { permittedFields, hasAtLeastOneRegistered, shouldIncludeAll } = getPermissionFields(\n actionOverride,\n subject\n );\n\n const validateOptions = {\n ...options,\n fields: {\n shouldIncludeAll,\n permitted: permittedFields,\n hasAtLeastOneRegistered,\n },\n };\n\n const validateFunction = createValidateFunction(validateOptions);\n\n return validateFunction(data);\n };\n\n return wrappedValidate;\n };\n\n const getDefaultOptions = (data: any, options: unknown) => {\n return defaults({ subject: asSubject(model, data), action }, options);\n };\n\n /**\n * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses\n */\n const omitCreatorRoles = omit([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);\n\n /**\n * Visitor used to remove hidden fields from the admin API responses\n */\n const throwHiddenFields = ({ key, schema, path }: any) => {\n const isHidden = getOr(false, ['config', 'attributes', key, 'hidden'], schema);\n\n if (isHidden) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n /**\n * Visitor used to omit disallowed fields from the admin users entities & avoid leaking sensitive information\n */\n const throwDisallowedAdminUserFields = ({ key, attribute, schema, path }: any) => {\n if (schema.uid === 'admin::user' && attribute && !ADMIN_USER_ALLOWED_FIELDS.includes(key)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n };\n\n const getInputFields = (fields = []) => {\n const nonVisibleAttributes = getNonVisibleAttributes(schema);\n const writableAttributes = getWritableAttributes(schema);\n\n const nonVisibleWritableAttributes = intersection(nonVisibleAttributes, writableAttributes);\n\n return uniq([...fields, ...COMPONENT_FIELDS, ...nonVisibleWritableAttributes]);\n };\n\n const getQueryFields = (fields = []) => {\n return uniq([\n ...fields,\n ...STATIC_FIELDS,\n ...COMPONENT_FIELDS,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ]);\n };\n\n return {\n validateQuery: wrapValidate(createValidateQuery),\n validateInput: wrapValidate(createValidateInput),\n };\n};\n"],"names":["ValidationError","errors","throwPassword","throwDisallowedFields","validate","visitors","constants","isScalarAttribute","getNonVisibleAttributes","getWritableAttributes","contentTypes","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","COMPONENT_FIELDS","STATIC_FIELDS","throwInvalidKey","key","path","msg","action","ability","model","schema","strapi","getModel","modelCache","createModelCache","bind","ctx","createValidateQuery","options","fields","permittedFields","shouldIncludeAll","getQueryFields","permitted","validateFilters","async","pipe","traverse","traverseQueryFilters","throwDisallowedAdminUserFields","value","isObject","isEmpty","attribute","validateSort","traverseQuerySort","validateFields","traverseQueryFields","validatePopulate","traverseQueryPopulate","throwHiddenFields","query","filters","sort","populate","createValidateInput","getInputFields","traverseEntity","omitCreatorRoles","wrapValidate","createValidateFunction","getPermissionFields","createPermissionFieldsCache","wrappedValidate","data","isArray","Promise","all","map","entity","subject","actionOverride","getDefaultOptions","hasAtLeastOneRegistered","validateOptions","validateFunction","defaults","asSubject","omit","isHidden","getOr","uid","ADMIN_USER_ALLOWED_FIELDS","includes","nonVisibleAttributes","writableAttributes","nonVisibleWritableAttributes","intersection","uniq","validateQuery","validateInput"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Ability } from '@casl/ability';
|
|
2
|
+
export interface PermissionFieldsResult {
|
|
3
|
+
permittedFields: string[];
|
|
4
|
+
hasAtLeastOneRegistered: boolean;
|
|
5
|
+
shouldIncludeAll: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Creates a cached permission fields calculator for a given CASL ability.
|
|
9
|
+
*
|
|
10
|
+
* The cache stores permission field calculations per action+subjectType combination.
|
|
11
|
+
* Results are only cached when rules have no entity-specific conditions, as those
|
|
12
|
+
* must be computed per entity.
|
|
13
|
+
*
|
|
14
|
+
* @param ability - The CASL ability instance to use for permission checks
|
|
15
|
+
* @returns Object with getPermissionFields function and cache
|
|
16
|
+
*/
|
|
17
|
+
export declare const createPermissionFieldsCache: (ability: Ability) => {
|
|
18
|
+
getPermissionFields: (actionOverride: string, subject: any) => PermissionFieldsResult;
|
|
19
|
+
clearCache: () => void;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=permission-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-fields.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/permission-fields.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uBAAuB,EAAE,OAAO,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,YAAa,OAAO;0CAGb,MAAM,WAAW,GAAG,KAAG,sBAAsB;;CA6C3F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/sanitize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/sanitize.ts"],"names":[],"mappings":"qDAmD4C,GAAG;2BA0HN,OAAO;0BAAP,OAAO;0BAAP,OAAO;;AA1HhD,wBAsPE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/permissions-manager/validate.ts"],"names":[],"mappings":"qDAyC4C,GAAG;gDA6FS,QAAQ,OAAO,CAAC;gDAAhB,QAAQ,OAAO,CAAC;;AA7FxE,wBA+KE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.34.0",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -86,10 +86,10 @@
|
|
|
86
86
|
"@reduxjs/toolkit": "1.9.7",
|
|
87
87
|
"@strapi/design-system": "2.1.2",
|
|
88
88
|
"@strapi/icons": "2.1.2",
|
|
89
|
-
"@strapi/permissions": "5.
|
|
90
|
-
"@strapi/types": "5.
|
|
91
|
-
"@strapi/typescript-utils": "5.
|
|
92
|
-
"@strapi/utils": "5.
|
|
89
|
+
"@strapi/permissions": "5.34.0",
|
|
90
|
+
"@strapi/types": "5.34.0",
|
|
91
|
+
"@strapi/typescript-utils": "5.34.0",
|
|
92
|
+
"@strapi/utils": "5.34.0",
|
|
93
93
|
"@testing-library/dom": "10.4.1",
|
|
94
94
|
"@testing-library/react": "16.3.0",
|
|
95
95
|
"@testing-library/user-event": "14.6.1",
|
|
@@ -145,8 +145,8 @@
|
|
|
145
145
|
"zod": "3.25.67"
|
|
146
146
|
},
|
|
147
147
|
"devDependencies": {
|
|
148
|
-
"@strapi/admin-test-utils": "5.
|
|
149
|
-
"@strapi/data-transfer": "5.
|
|
148
|
+
"@strapi/admin-test-utils": "5.34.0",
|
|
149
|
+
"@strapi/data-transfer": "5.34.0",
|
|
150
150
|
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
|
|
151
151
|
"@types/fs-extra": "11.0.4",
|
|
152
152
|
"@types/invariant": "2.2.36",
|
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var React = require('react');
|
|
5
|
-
var designSystem = require('@strapi/design-system');
|
|
6
|
-
var icons = require('@strapi/icons');
|
|
7
|
-
var symbols = require('@strapi/icons/symbols');
|
|
8
|
-
var reactIntl = require('react-intl');
|
|
9
|
-
var ContentBox = require('../../components/ContentBox.js');
|
|
10
|
-
var Layout = require('../../components/Layouts/Layout.js');
|
|
11
|
-
var PageHelpers = require('../../components/PageHelpers.js');
|
|
12
|
-
var Pagination = require('../../components/Pagination.js');
|
|
13
|
-
var hooks = require('../../core/store/hooks.js');
|
|
14
|
-
var AppInfo = require('../../features/AppInfo.js');
|
|
15
|
-
var Notifications = require('../../features/Notifications.js');
|
|
16
|
-
var Tracking = require('../../features/Tracking.js');
|
|
17
|
-
var useDebounce = require('../../hooks/useDebounce.js');
|
|
18
|
-
var useQueryParams = require('../../hooks/useQueryParams.js');
|
|
19
|
-
var NpmPackagesFilters = require('./components/NpmPackagesFilters.js');
|
|
20
|
-
var NpmPackagesGrid = require('./components/NpmPackagesGrid.js');
|
|
21
|
-
var OfflineLayout = require('./components/OfflineLayout.js');
|
|
22
|
-
var PageHeader = require('./components/PageHeader.js');
|
|
23
|
-
var SortSelect = require('./components/SortSelect.js');
|
|
24
|
-
var useMarketplaceData = require('./hooks/useMarketplaceData.js');
|
|
25
|
-
var useNavigatorOnline = require('./hooks/useNavigatorOnline.js');
|
|
26
|
-
|
|
27
|
-
function _interopNamespaceDefault(e) {
|
|
28
|
-
var n = Object.create(null);
|
|
29
|
-
if (e) {
|
|
30
|
-
Object.keys(e).forEach(function (k) {
|
|
31
|
-
if (k !== 'default') {
|
|
32
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
33
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
get: function () { return e[k]; }
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
n.default = e;
|
|
41
|
-
return Object.freeze(n);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
45
|
-
|
|
46
|
-
const PLUGIN = 'plugin';
|
|
47
|
-
const PROVIDER = 'provider';
|
|
48
|
-
const MarketplacePage = ()=>{
|
|
49
|
-
const { formatMessage } = reactIntl.useIntl();
|
|
50
|
-
const { trackUsage } = Tracking.useTracking();
|
|
51
|
-
const { toggleNotification } = Notifications.useNotification();
|
|
52
|
-
const [{ query }, setQuery] = useQueryParams.useQueryParams();
|
|
53
|
-
const debouncedSearch = useDebounce.useDebounce(query?.search, 500) || '';
|
|
54
|
-
const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = AppInfo.useAppInfo('MarketplacePage', (state)=>state);
|
|
55
|
-
const isOnline = useNavigatorOnline.useNavigatorOnline();
|
|
56
|
-
const npmPackageType = query?.npmPackageType || PLUGIN;
|
|
57
|
-
const [tabQuery, setTabQuery] = React__namespace.useState({
|
|
58
|
-
plugin: npmPackageType === PLUGIN ? {
|
|
59
|
-
...query
|
|
60
|
-
} : {},
|
|
61
|
-
provider: npmPackageType === PROVIDER ? {
|
|
62
|
-
...query
|
|
63
|
-
} : {}
|
|
64
|
-
});
|
|
65
|
-
React__namespace.useEffect(()=>{
|
|
66
|
-
trackUsage('didGoToMarketplace');
|
|
67
|
-
}, [
|
|
68
|
-
trackUsage
|
|
69
|
-
]);
|
|
70
|
-
React__namespace.useEffect(()=>{
|
|
71
|
-
if (!isInDevelopmentMode) {
|
|
72
|
-
toggleNotification({
|
|
73
|
-
type: 'info',
|
|
74
|
-
message: formatMessage({
|
|
75
|
-
id: 'admin.pages.MarketPlacePage.production',
|
|
76
|
-
defaultMessage: 'Manage plugins from the development environment'
|
|
77
|
-
})
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}, [
|
|
81
|
-
toggleNotification,
|
|
82
|
-
isInDevelopmentMode,
|
|
83
|
-
formatMessage
|
|
84
|
-
]);
|
|
85
|
-
const { pluginsResponse, providersResponse, pluginsStatus, providersStatus, possibleCollections, possibleCategories, pagination } = useMarketplaceData.useMarketplaceData({
|
|
86
|
-
npmPackageType,
|
|
87
|
-
debouncedSearch,
|
|
88
|
-
query,
|
|
89
|
-
tabQuery,
|
|
90
|
-
strapiVersion
|
|
91
|
-
});
|
|
92
|
-
if (!isOnline) {
|
|
93
|
-
return /*#__PURE__*/ jsxRuntime.jsx(OfflineLayout.OfflineLayout, {});
|
|
94
|
-
}
|
|
95
|
-
const handleTabChange = (tab)=>{
|
|
96
|
-
const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN;
|
|
97
|
-
const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;
|
|
98
|
-
if (hasTabQuery) {
|
|
99
|
-
setQuery({
|
|
100
|
-
// Keep filters and search
|
|
101
|
-
...tabQuery[selectedTab],
|
|
102
|
-
search: query?.search || '',
|
|
103
|
-
// Set tab and reset page
|
|
104
|
-
npmPackageType: selectedTab,
|
|
105
|
-
page: 1
|
|
106
|
-
}, 'push', true);
|
|
107
|
-
} else {
|
|
108
|
-
setQuery({
|
|
109
|
-
// Set tab
|
|
110
|
-
npmPackageType: selectedTab,
|
|
111
|
-
// Clear filters
|
|
112
|
-
collections: [],
|
|
113
|
-
categories: [],
|
|
114
|
-
sort: 'name:asc',
|
|
115
|
-
page: 1,
|
|
116
|
-
// Keep search
|
|
117
|
-
search: query?.search || ''
|
|
118
|
-
}, 'push', true);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
const handleSelectChange = (update)=>{
|
|
122
|
-
setQuery({
|
|
123
|
-
...update,
|
|
124
|
-
page: 1
|
|
125
|
-
});
|
|
126
|
-
setTabQuery((prev)=>({
|
|
127
|
-
...prev,
|
|
128
|
-
[npmPackageType]: {
|
|
129
|
-
...prev[npmPackageType],
|
|
130
|
-
...update
|
|
131
|
-
}
|
|
132
|
-
}));
|
|
133
|
-
};
|
|
134
|
-
const handleSelectClear = (filterType)=>{
|
|
135
|
-
setQuery({
|
|
136
|
-
[filterType]: [],
|
|
137
|
-
page: undefined
|
|
138
|
-
}, 'remove');
|
|
139
|
-
setTabQuery((prev)=>({
|
|
140
|
-
...prev,
|
|
141
|
-
[npmPackageType]: {}
|
|
142
|
-
}));
|
|
143
|
-
};
|
|
144
|
-
const handleSortSelectChange = ({ sort })=>// @ts-expect-error - this is a narrowing issue.
|
|
145
|
-
handleSelectChange({
|
|
146
|
-
sort
|
|
147
|
-
});
|
|
148
|
-
// Check if plugins and providers are installed already
|
|
149
|
-
const installedPackageNames = Object.keys(dependencies ?? {});
|
|
150
|
-
return /*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Root, {
|
|
151
|
-
children: /*#__PURE__*/ jsxRuntime.jsxs(PageHelpers.Page.Main, {
|
|
152
|
-
children: [
|
|
153
|
-
/*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Title, {
|
|
154
|
-
children: formatMessage({
|
|
155
|
-
id: 'admin.pages.MarketPlacePage.head',
|
|
156
|
-
defaultMessage: 'Marketplace - Plugins'
|
|
157
|
-
})
|
|
158
|
-
}),
|
|
159
|
-
/*#__PURE__*/ jsxRuntime.jsx(PageHeader.PageHeader, {
|
|
160
|
-
isOnline: isOnline,
|
|
161
|
-
npmPackageType: npmPackageType
|
|
162
|
-
}),
|
|
163
|
-
/*#__PURE__*/ jsxRuntime.jsx(Layout.Layouts.Content, {
|
|
164
|
-
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
|
|
165
|
-
variant: "simple",
|
|
166
|
-
onValueChange: handleTabChange,
|
|
167
|
-
value: npmPackageType,
|
|
168
|
-
children: [
|
|
169
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
170
|
-
justifyContent: "space-between",
|
|
171
|
-
paddingBottom: 4,
|
|
172
|
-
children: [
|
|
173
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
|
|
174
|
-
"aria-label": formatMessage({
|
|
175
|
-
id: 'admin.pages.MarketPlacePage.tab-group.label',
|
|
176
|
-
defaultMessage: 'Plugins and Providers for Strapi'
|
|
177
|
-
}),
|
|
178
|
-
children: [
|
|
179
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Trigger, {
|
|
180
|
-
value: PLUGIN,
|
|
181
|
-
children: [
|
|
182
|
-
formatMessage({
|
|
183
|
-
id: 'admin.pages.MarketPlacePage.plugins',
|
|
184
|
-
defaultMessage: 'Plugins'
|
|
185
|
-
}),
|
|
186
|
-
' ',
|
|
187
|
-
pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'
|
|
188
|
-
]
|
|
189
|
-
}),
|
|
190
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Trigger, {
|
|
191
|
-
value: PROVIDER,
|
|
192
|
-
children: [
|
|
193
|
-
formatMessage({
|
|
194
|
-
id: 'admin.pages.MarketPlacePage.providers',
|
|
195
|
-
defaultMessage: 'Providers'
|
|
196
|
-
}),
|
|
197
|
-
' ',
|
|
198
|
-
providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'
|
|
199
|
-
]
|
|
200
|
-
})
|
|
201
|
-
]
|
|
202
|
-
}),
|
|
203
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
204
|
-
width: "25%",
|
|
205
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Searchbar, {
|
|
206
|
-
name: "searchbar",
|
|
207
|
-
onClear: ()=>setQuery({
|
|
208
|
-
search: '',
|
|
209
|
-
page: 1
|
|
210
|
-
}),
|
|
211
|
-
value: query?.search,
|
|
212
|
-
onChange: (e)=>setQuery({
|
|
213
|
-
search: e.target.value,
|
|
214
|
-
page: 1
|
|
215
|
-
}),
|
|
216
|
-
clearLabel: formatMessage({
|
|
217
|
-
id: 'admin.pages.MarketPlacePage.search.clear',
|
|
218
|
-
defaultMessage: 'Clear the search'
|
|
219
|
-
}),
|
|
220
|
-
placeholder: formatMessage({
|
|
221
|
-
id: 'admin.pages.MarketPlacePage.search.placeholder',
|
|
222
|
-
defaultMessage: 'Search'
|
|
223
|
-
}),
|
|
224
|
-
children: formatMessage({
|
|
225
|
-
id: 'admin.pages.MarketPlacePage.search.placeholder',
|
|
226
|
-
defaultMessage: 'Search'
|
|
227
|
-
})
|
|
228
|
-
})
|
|
229
|
-
})
|
|
230
|
-
]
|
|
231
|
-
}),
|
|
232
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
233
|
-
paddingBottom: 4,
|
|
234
|
-
gap: 2,
|
|
235
|
-
children: [
|
|
236
|
-
/*#__PURE__*/ jsxRuntime.jsx(SortSelect.SortSelect, {
|
|
237
|
-
sortQuery: query?.sort || 'name:asc',
|
|
238
|
-
handleSelectChange: handleSortSelectChange
|
|
239
|
-
}),
|
|
240
|
-
/*#__PURE__*/ jsxRuntime.jsx(NpmPackagesFilters.NpmPackagesFilters, {
|
|
241
|
-
npmPackageType: npmPackageType,
|
|
242
|
-
possibleCollections: possibleCollections,
|
|
243
|
-
possibleCategories: possibleCategories,
|
|
244
|
-
query: query || {},
|
|
245
|
-
handleSelectChange: handleSelectChange,
|
|
246
|
-
handleSelectClear: handleSelectClear
|
|
247
|
-
})
|
|
248
|
-
]
|
|
249
|
-
}),
|
|
250
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
|
|
251
|
-
value: PLUGIN,
|
|
252
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(NpmPackagesGrid.NpmPackagesGrid, {
|
|
253
|
-
npmPackages: pluginsResponse?.data,
|
|
254
|
-
status: pluginsStatus,
|
|
255
|
-
installedPackageNames: installedPackageNames,
|
|
256
|
-
useYarn: useYarn,
|
|
257
|
-
isInDevelopmentMode: isInDevelopmentMode,
|
|
258
|
-
npmPackageType: "plugin",
|
|
259
|
-
strapiAppVersion: strapiVersion,
|
|
260
|
-
debouncedSearch: debouncedSearch
|
|
261
|
-
})
|
|
262
|
-
}),
|
|
263
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
|
|
264
|
-
value: PROVIDER,
|
|
265
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(NpmPackagesGrid.NpmPackagesGrid, {
|
|
266
|
-
npmPackages: providersResponse?.data,
|
|
267
|
-
status: providersStatus,
|
|
268
|
-
installedPackageNames: installedPackageNames,
|
|
269
|
-
useYarn: useYarn,
|
|
270
|
-
isInDevelopmentMode: isInDevelopmentMode,
|
|
271
|
-
npmPackageType: "provider",
|
|
272
|
-
debouncedSearch: debouncedSearch
|
|
273
|
-
})
|
|
274
|
-
}),
|
|
275
|
-
/*#__PURE__*/ jsxRuntime.jsxs(Pagination.Pagination.Root, {
|
|
276
|
-
...pagination,
|
|
277
|
-
defaultPageSize: 24,
|
|
278
|
-
children: [
|
|
279
|
-
/*#__PURE__*/ jsxRuntime.jsx(Pagination.Pagination.PageSize, {
|
|
280
|
-
options: [
|
|
281
|
-
'12',
|
|
282
|
-
'24',
|
|
283
|
-
'50',
|
|
284
|
-
'100'
|
|
285
|
-
]
|
|
286
|
-
}),
|
|
287
|
-
/*#__PURE__*/ jsxRuntime.jsx(Pagination.Pagination.Links, {})
|
|
288
|
-
]
|
|
289
|
-
}),
|
|
290
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
291
|
-
paddingTop: 8,
|
|
292
|
-
children: /*#__PURE__*/ jsxRuntime.jsx("a", {
|
|
293
|
-
href: "https://strapi.canny.io/plugin-requests",
|
|
294
|
-
target: "_blank",
|
|
295
|
-
rel: "noopener noreferrer nofollow",
|
|
296
|
-
style: {
|
|
297
|
-
textDecoration: 'none'
|
|
298
|
-
},
|
|
299
|
-
onClick: ()=>trackUsage('didMissMarketplacePlugin'),
|
|
300
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(ContentBox.ContentBox, {
|
|
301
|
-
title: formatMessage({
|
|
302
|
-
id: 'admin.pages.MarketPlacePage.missingPlugin.title',
|
|
303
|
-
defaultMessage: 'Documentation'
|
|
304
|
-
}),
|
|
305
|
-
subtitle: formatMessage({
|
|
306
|
-
id: 'admin.pages.MarketPlacePage.missingPlugin.description',
|
|
307
|
-
defaultMessage: "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!"
|
|
308
|
-
}),
|
|
309
|
-
icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.GlassesSquare, {}),
|
|
310
|
-
iconBackground: "alternative100",
|
|
311
|
-
endAction: /*#__PURE__*/ jsxRuntime.jsx(icons.ExternalLink, {
|
|
312
|
-
fill: "neutral600",
|
|
313
|
-
width: "1.2rem",
|
|
314
|
-
height: "1.2rem",
|
|
315
|
-
style: {
|
|
316
|
-
marginLeft: '0.8rem'
|
|
317
|
-
}
|
|
318
|
-
})
|
|
319
|
-
})
|
|
320
|
-
})
|
|
321
|
-
})
|
|
322
|
-
]
|
|
323
|
-
})
|
|
324
|
-
})
|
|
325
|
-
]
|
|
326
|
-
})
|
|
327
|
-
});
|
|
328
|
-
};
|
|
329
|
-
const ProtectedMarketplacePage = ()=>{
|
|
330
|
-
const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.marketplace?.main);
|
|
331
|
-
return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Protect, {
|
|
332
|
-
permissions: permissions,
|
|
333
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(MarketplacePage, {})
|
|
334
|
-
});
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
exports.MarketplacePage = MarketplacePage;
|
|
338
|
-
exports.ProtectedMarketplacePage = ProtectedMarketplacePage;
|
|
339
|
-
//# sourceMappingURL=MarketplacePage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplacePage.js","sources":["../../../../../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["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 {\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 'push',\n true\n );\n } else {\n setQuery(\n {\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 'push',\n true\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":["PLUGIN","PROVIDER","MarketplacePage","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","setQuery","useQueryParams","debouncedSearch","useDebounce","search","autoReload","isInDevelopmentMode","dependencies","useYarn","strapiVersion","useAppInfo","state","isOnline","useNavigatorOnline","npmPackageType","tabQuery","setTabQuery","React","useState","plugin","provider","useEffect","type","message","id","defaultMessage","pluginsResponse","providersResponse","pluginsStatus","providersStatus","possibleCollections","possibleCategories","pagination","useMarketplaceData","_jsx","OfflineLayout","handleTabChange","tab","selectedTab","hasTabQuery","Object","keys","length","page","collections","categories","sort","handleSelectChange","update","prev","handleSelectClear","filterType","undefined","handleSortSelectChange","installedPackageNames","Layouts","Root","_jsxs","Page","Main","Title","PageHeader","Content","Tabs","variant","onValueChange","value","Flex","justifyContent","paddingBottom","List","aria-label","Trigger","meta","total","Box","width","Searchbar","name","onClear","onChange","e","target","clearLabel","placeholder","gap","SortSelect","sortQuery","NpmPackagesFilters","NpmPackagesGrid","npmPackages","data","status","strapiAppVersion","Pagination","defaultPageSize","PageSize","options","Links","paddingTop","a","href","rel","style","textDecoration","onClick","ContentBox","title","subtitle","icon","GlassesSquare","iconBackground","endAction","ExternalLink","fill","height","marginLeft","ProtectedMarketplacePage","permissions","useTypedSelector","admin_app","marketplace","main","Protect"],"mappings":"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"}
|