@strapi/admin 5.19.0 → 5.21.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/StrapiApp.js +20 -4
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +21 -5
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +10 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +10 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.js +18 -43
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.mjs +17 -42
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.js +10 -6
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.mjs +11 -7
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.js +6 -6
- package/dist/admin/admin/src/components/GuidedTour/Step.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.mjs +7 -7
- package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.js +10 -16
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.mjs +11 -17
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -0
- package/dist/admin/admin/src/components/LeftMenu.js +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/Providers.js +9 -10
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs +9 -10
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +1 -1
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +185 -0
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +186 -2
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.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/layouts/AuthenticatedLayout.js +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +7 -4
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +7 -4
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +6 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +6 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +1 -7
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +2 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -8
- 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 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/services/admin.js +1 -2
- package/dist/admin/admin/src/services/admin.js.map +1 -1
- package/dist/admin/admin/src/services/admin.mjs +1 -2
- package/dist/admin/admin/src/services/admin.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js +4 -1
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs +4 -1
- package/dist/admin/admin/src/services/api.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js +5 -4
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs +5 -4
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/homepage.js +31 -0
- package/dist/admin/admin/src/services/homepage.js.map +1 -0
- package/dist/admin/admin/src/services/homepage.mjs +28 -0
- package/dist/admin/admin/src/services/homepage.mjs.map +1 -0
- package/dist/admin/admin/src/services/users.js +4 -2
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs +4 -2
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/services/webhooks.js +9 -5
- package/dist/admin/admin/src/services/webhooks.js.map +1 -1
- package/dist/admin/admin/src/services/webhooks.mjs +9 -5
- package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +16 -3
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +16 -3
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +9 -0
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +9 -0
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +9 -0
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +9 -0
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +25 -28
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +25 -28
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/index.js +4 -4
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/Filters.d.ts +3 -1
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.d.ts +3 -3
- package/dist/admin/src/components/GuidedTour/Overview.d.ts +1 -0
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.d.ts +1 -1
- package/dist/admin/src/components/Widgets.d.ts +2 -1
- package/dist/admin/src/core/apis/Widgets.d.ts +9 -5
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +2 -2
- package/dist/admin/src/features/Tracking.d.ts +2 -2
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/index.d.ts +3 -3
- package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -2
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +10 -10
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +14 -0
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/tests/utils.d.ts +1 -1
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +10 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +10 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/server/src/controllers/homepage.js +15 -0
- package/dist/server/server/src/controllers/homepage.js.map +1 -0
- package/dist/server/server/src/controllers/homepage.mjs +13 -0
- package/dist/server/server/src/controllers/homepage.mjs.map +1 -0
- package/dist/server/server/src/controllers/index.js +3 -1
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs +3 -1
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/domain/user.js +3 -1
- package/dist/server/server/src/domain/user.js.map +1 -1
- package/dist/server/server/src/domain/user.mjs +3 -1
- package/dist/server/server/src/domain/user.mjs.map +1 -1
- package/dist/server/server/src/routes/homepage.js +17 -0
- package/dist/server/server/src/routes/homepage.js.map +1 -0
- package/dist/server/server/src/routes/homepage.mjs +15 -0
- package/dist/server/server/src/routes/homepage.mjs.map +1 -0
- package/dist/server/server/src/routes/index.js +3 -1
- package/dist/server/server/src/routes/index.js.map +1 -1
- package/dist/server/server/src/routes/index.mjs +3 -1
- package/dist/server/server/src/routes/index.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js +34 -0
- package/dist/server/server/src/services/homepage.js.map +1 -0
- package/dist/server/server/src/services/homepage.mjs +32 -0
- package/dist/server/server/src/services/homepage.mjs.map +1 -0
- package/dist/server/server/src/services/index.js +3 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -1
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +15 -0
- package/dist/server/src/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +13 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/user.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +26 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/homepage.d.ts +10 -0
- package/dist/server/src/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/homepage.d.ts +15 -0
- package/dist/server/src/services/homepage.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +13 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +30 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +8 -9
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js +0 -132
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs +0 -130
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.js +0 -278
- package/dist/admin/admin/src/components/GuidedTour/Modal.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs +0 -276
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js +0 -54
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs +0 -51
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.js +0 -206
- package/dist/admin/admin/src/components/GuidedTour/Provider.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs +0 -184
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.js +0 -167
- package/dist/admin/admin/src/components/GuidedTour/constants.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs +0 -164
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js +0 -19
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs +0 -17
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs.map +0 -1
- package/dist/admin/src/components/GuidedTour/Homepage.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Modal.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Ornaments.d.ts +0 -13
- package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -39
- package/dist/admin/src/components/GuidedTour/constants.d.ts +0 -165
- package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +0 -1
- package/dist/admin/src/pages/Home/components/GuidedTour.d.ts +0 -1
- /package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.d.ts +0 -0
|
@@ -26,7 +26,7 @@ var languageNativeNames = require('./translations/languageNativeNames.js');
|
|
|
26
26
|
|
|
27
27
|
function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
|
|
28
28
|
|
|
29
|
-
function
|
|
29
|
+
function __variableDynamicImportRuntime3__(path) {
|
|
30
30
|
switch (path) {
|
|
31
31
|
case './translations/ar.json': return Promise.resolve().then(function () { return require('./translations/ar.json.js'); });
|
|
32
32
|
case './translations/ca.json': return Promise.resolve().then(function () { return require('./translations/ca.json.js'); });
|
|
@@ -70,7 +70,7 @@ function __variableDynamicImportRuntime2__(path) {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
function
|
|
73
|
+
function __variableDynamicImportRuntime2__(path) {
|
|
74
74
|
switch (path) {
|
|
75
75
|
case './translations/en-GB.js': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en-GB.js')); });
|
|
76
76
|
default: return new Promise(function(resolve, reject) {
|
|
@@ -128,6 +128,22 @@ class StrapiApp {
|
|
|
128
128
|
},
|
|
129
129
|
href: '/me'
|
|
130
130
|
}
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
icon: icons.TrendUp,
|
|
134
|
+
title: {
|
|
135
|
+
id: 'widget.key-statistics.title',
|
|
136
|
+
defaultMessage: 'Project statistics'
|
|
137
|
+
},
|
|
138
|
+
component: async ()=>{
|
|
139
|
+
const { KeyStatisticsWidget } = await Promise.resolve().then(function () { return require('./components/Widgets.js'); });
|
|
140
|
+
return KeyStatisticsWidget;
|
|
141
|
+
},
|
|
142
|
+
pluginId: 'admin',
|
|
143
|
+
id: 'key-statistics',
|
|
144
|
+
roles: [
|
|
145
|
+
'strapi-super-admin'
|
|
146
|
+
]
|
|
131
147
|
}
|
|
132
148
|
]);
|
|
133
149
|
Object.keys(this.appPlugins).forEach((plugin)=>{
|
|
@@ -140,14 +156,14 @@ class StrapiApp {
|
|
|
140
156
|
async loadAdminTrads() {
|
|
141
157
|
const adminLocales = await Promise.all(this.configurations.locales.map(async (locale)=>{
|
|
142
158
|
try {
|
|
143
|
-
const { default: data } = await
|
|
159
|
+
const { default: data } = await __variableDynamicImportRuntime2__(`./translations/${locale}.js`);
|
|
144
160
|
return {
|
|
145
161
|
data,
|
|
146
162
|
locale
|
|
147
163
|
};
|
|
148
164
|
} catch {
|
|
149
165
|
try {
|
|
150
|
-
const { default: data } = await
|
|
166
|
+
const { default: data } = await __variableDynamicImportRuntime3__(`./translations/${locale}.json`);
|
|
151
167
|
return {
|
|
152
168
|
data,
|
|
153
169
|
locale
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrapiApp.js","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { User } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StrapiApp.js","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import 'react';
|
|
3
3
|
import { lightTheme, darkTheme } from '@strapi/design-system';
|
|
4
|
-
import { User } from '@strapi/icons';
|
|
4
|
+
import { User, TrendUp } from '@strapi/icons';
|
|
5
5
|
import invariant from 'invariant';
|
|
6
6
|
import isFunction from 'lodash/isFunction';
|
|
7
7
|
import merge from 'lodash/merge';
|
|
@@ -22,7 +22,7 @@ import { LANGUAGE_LOCAL_STORAGE_KEY, THEME_LOCAL_STORAGE_KEY, getStoredToken } f
|
|
|
22
22
|
import { getInitialRoutes } from './router.mjs';
|
|
23
23
|
import { languageNativeNames } from './translations/languageNativeNames.mjs';
|
|
24
24
|
|
|
25
|
-
function
|
|
25
|
+
function __variableDynamicImportRuntime3__(path) {
|
|
26
26
|
switch (path) {
|
|
27
27
|
case './translations/ar.json': return import('./translations/ar.json.mjs');
|
|
28
28
|
case './translations/ca.json': return import('./translations/ca.json.mjs');
|
|
@@ -66,7 +66,7 @@ function __variableDynamicImportRuntime2__(path) {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
function
|
|
69
|
+
function __variableDynamicImportRuntime2__(path) {
|
|
70
70
|
switch (path) {
|
|
71
71
|
case './translations/en-GB.js': return import('./translations/en-GB.mjs');
|
|
72
72
|
default: return new Promise(function(resolve, reject) {
|
|
@@ -124,6 +124,22 @@ class StrapiApp {
|
|
|
124
124
|
},
|
|
125
125
|
href: '/me'
|
|
126
126
|
}
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
icon: TrendUp,
|
|
130
|
+
title: {
|
|
131
|
+
id: 'widget.key-statistics.title',
|
|
132
|
+
defaultMessage: 'Project statistics'
|
|
133
|
+
},
|
|
134
|
+
component: async ()=>{
|
|
135
|
+
const { KeyStatisticsWidget } = await import('./components/Widgets.mjs');
|
|
136
|
+
return KeyStatisticsWidget;
|
|
137
|
+
},
|
|
138
|
+
pluginId: 'admin',
|
|
139
|
+
id: 'key-statistics',
|
|
140
|
+
roles: [
|
|
141
|
+
'strapi-super-admin'
|
|
142
|
+
]
|
|
127
143
|
}
|
|
128
144
|
]);
|
|
129
145
|
Object.keys(this.appPlugins).forEach((plugin)=>{
|
|
@@ -136,14 +152,14 @@ class StrapiApp {
|
|
|
136
152
|
async loadAdminTrads() {
|
|
137
153
|
const adminLocales = await Promise.all(this.configurations.locales.map(async (locale)=>{
|
|
138
154
|
try {
|
|
139
|
-
const { default: data } = await
|
|
155
|
+
const { default: data } = await __variableDynamicImportRuntime2__(`./translations/${locale}.js`);
|
|
140
156
|
return {
|
|
141
157
|
data,
|
|
142
158
|
locale
|
|
143
159
|
};
|
|
144
160
|
} catch {
|
|
145
161
|
try {
|
|
146
|
-
const { default: data } = await
|
|
162
|
+
const { default: data } = await __variableDynamicImportRuntime3__(`./translations/${locale}.json`);
|
|
147
163
|
return {
|
|
148
164
|
data,
|
|
149
165
|
locale
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { User } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
@@ -77,7 +77,13 @@ const Root = ({ children, disabled = false, onChange, options = [], onOpenChange
|
|
|
77
77
|
});
|
|
78
78
|
/* -------------------------------------------------------------------------------------------------
|
|
79
79
|
* Popover
|
|
80
|
-
* -----------------------------------------------------------------------------------------------*/
|
|
80
|
+
* -----------------------------------------------------------------------------------------------*/ /**
|
|
81
|
+
* The zIndex property is used to override the zIndex of the Portal element of the Popover.
|
|
82
|
+
* This is needed to ensure that the DatePicker is rendered above the Popover when opened.
|
|
83
|
+
* The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.
|
|
84
|
+
* On init, since the DatePicker is rendered before the Popover in the DOM,
|
|
85
|
+
* it's causing the issue of appearing behind the Popover.
|
|
86
|
+
*/ const PopoverImpl = ({ zIndex })=>{
|
|
81
87
|
const [{ query }, setQuery] = useQueryParams.useQueryParams();
|
|
82
88
|
const { formatMessage } = reactIntl.useIntl();
|
|
83
89
|
const options = useFilters('Popover', ({ options })=>options);
|
|
@@ -127,6 +133,9 @@ const Root = ({ children, disabled = false, onChange, options = [], onOpenChange
|
|
|
127
133
|
setOpen(false);
|
|
128
134
|
};
|
|
129
135
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
136
|
+
style: {
|
|
137
|
+
zIndex
|
|
138
|
+
},
|
|
130
139
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
131
140
|
padding: 3,
|
|
132
141
|
children: /*#__PURE__*/ jsxRuntime.jsx(Form.Form, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.js","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\ninterface RootProps extends Partial<FitlersContextValue>, Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nconst PopoverImpl = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter)\n ? 'true'\n : encodeURIComponent(data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterQuery = {\n ...query.filters,\n $and: [\n ...(query.filters?.$and ?? []),\n {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n },\n ],\n };\n\n setQuery({ filters: newFilterQuery, page: 1 });\n setOpen(false);\n };\n\n return (\n <Popover.Content>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={\n {\n name: options[0]?.name,\n filter: BASE_FILTERS[0].value,\n } satisfies FilterFormData\n }\n onSubmit={handleSubmit}\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n formValues.filter !== '$null' &&\n formValues.filter !== '$notNull' ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n const handleClick = (data: FilterFormData) => {\n /**\n * Check the name, operator and value to see if it already exists in the query\n * if it does, remove it.\n */\n const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {\n const [attributeName] = Object.keys(filter);\n if (attributeName !== data.name) {\n return true;\n }\n\n const { type, mainField } = options.find(({ name }) => name === attributeName)!;\n\n if (type === 'relation') {\n const filterObj = filter[attributeName][mainField?.name ?? 'id'];\n\n if (typeof filterObj === 'object') {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n\n return true;\n } else {\n const filterObj = filter[attributeName];\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n });\n\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter) => {\n const [attributeName] = Object.keys(queryFilter);\n const filter = options.find(({ name }) => name === attributeName);\n const filterObj = queryFilter[attributeName];\n\n if (!filter || typeof filterObj !== 'object' || filterObj === null) {\n return null;\n }\n\n if (filter.type === 'relation') {\n const modelFilter = filterObj[filter.mainField?.name ?? 'id'];\n\n if (typeof modelFilter === 'object') {\n const [operator] = Object.keys(modelFilter);\n const value = modelFilter[operator];\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n\n return null;\n } else {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n /**\n * Something has gone wrong here, because the attribute is not a relation\n * but we have a nested filter object.\n */\n if (typeof value === 'object') {\n return null;\n }\n\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n onClick: (data: FilterFormData) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n input,\n label,\n mainField,\n name,\n onClick,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n\n const handleClick = () => {\n onClick({ name, value, filter: operator });\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const content = `${label} ${formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n })} ${operator !== '$null' && operator !== '$notNull' ? formattedValue : ''}`;\n\n return (\n <Tag padding={1} onClick={handleClick} icon={<Cross />}>\n {content}\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","Root","children","disabled","onChange","options","onOpenChange","open","openProp","defaultOpen","restProps","handleChange","data","setOpen","useControllableState","prop","defaultProp","_jsx","Popover","Trigger","React","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","query","setQuery","useQueryParams","length","handleSubmit","value","FILTERS_WITH_NO_VALUE","includes","filter","encodeURIComponent","fieldOptions","find","name","operatorValuePairing","newFilterQuery","filters","$and","type","mainField","page","Content","Box","padding","Form","method","initialValues","BASE_FILTERS","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","style","minWidth","map","placholder","operators","getFilterList","opt","placeholder","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleClick","nextFilters","attributeName","Object","keys","filterObj","operator","_Fragment","queryFilter","modelFilter","AttributeTag","onClick","formatDate","formatTime","formatNumber","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","option","content","Tag","icon","Cross","Filters"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Filters.js","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\ninterface RootProps extends Partial<FitlersContextValue>, Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter)\n ? 'true'\n : encodeURIComponent(data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterQuery = {\n ...query.filters,\n $and: [\n ...(query.filters?.$and ?? []),\n {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n },\n ],\n };\n\n setQuery({ filters: newFilterQuery, page: 1 });\n setOpen(false);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={\n {\n name: options[0]?.name,\n filter: BASE_FILTERS[0].value,\n } satisfies FilterFormData\n }\n onSubmit={handleSubmit}\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n formValues.filter !== '$null' &&\n formValues.filter !== '$notNull' ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n const handleClick = (data: FilterFormData) => {\n /**\n * Check the name, operator and value to see if it already exists in the query\n * if it does, remove it.\n */\n const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {\n const [attributeName] = Object.keys(filter);\n if (attributeName !== data.name) {\n return true;\n }\n\n const { type, mainField } = options.find(({ name }) => name === attributeName)!;\n\n if (type === 'relation') {\n const filterObj = filter[attributeName][mainField?.name ?? 'id'];\n\n if (typeof filterObj === 'object') {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n\n return true;\n } else {\n const filterObj = filter[attributeName];\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n });\n\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter) => {\n const [attributeName] = Object.keys(queryFilter);\n const filter = options.find(({ name }) => name === attributeName);\n const filterObj = queryFilter[attributeName];\n\n if (!filter || typeof filterObj !== 'object' || filterObj === null) {\n return null;\n }\n\n if (filter.type === 'relation') {\n const modelFilter = filterObj[filter.mainField?.name ?? 'id'];\n\n if (typeof modelFilter === 'object') {\n const [operator] = Object.keys(modelFilter);\n const value = modelFilter[operator];\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n\n return null;\n } else {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n /**\n * Something has gone wrong here, because the attribute is not a relation\n * but we have a nested filter object.\n */\n if (typeof value === 'object') {\n return null;\n }\n\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n onClick: (data: FilterFormData) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n input,\n label,\n mainField,\n name,\n onClick,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n\n const handleClick = () => {\n onClick({ name, value, filter: operator });\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const content = `${label} ${formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n })} ${operator !== '$null' && operator !== '$notNull' ? formattedValue : ''}`;\n\n return (\n <Tag padding={1} onClick={handleClick} icon={<Cross />}>\n {content}\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","Root","children","disabled","onChange","options","onOpenChange","open","openProp","defaultOpen","restProps","handleChange","data","setOpen","useControllableState","prop","defaultProp","_jsx","Popover","Trigger","React","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","length","handleSubmit","value","FILTERS_WITH_NO_VALUE","includes","filter","encodeURIComponent","fieldOptions","find","name","operatorValuePairing","newFilterQuery","filters","$and","type","mainField","page","Content","style","Box","padding","Form","method","initialValues","BASE_FILTERS","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","map","placholder","operators","getFilterList","opt","placeholder","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleClick","nextFilters","attributeName","Object","keys","filterObj","operator","_Fragment","queryFilter","modelFilter","AttributeTag","onClick","formatDate","formatTime","formatNumber","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","option","content","Tag","icon","Cross","Filters"],"mappings":"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"}
|