@strapi/admin 5.51.0 → 5.51.2
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 +3 -3
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +3 -3
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +35 -26
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +35 -27
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -1
- 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 +1 -1
- 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 +1 -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 +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +3 -2
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +3 -2
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +642 -664
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +642 -664
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +22 -26
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +22 -26
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +38 -7
- 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 +18 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js +4 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs +4 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +17 -6
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs +18 -7
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js +23 -26
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs +23 -26
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js +10 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs +10 -2
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-domain.js +1 -0
- package/dist/admin/shared/utils/auth-cookie-domain.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-domain.mjs +1 -0
- package/dist/admin/shared/utils/auth-cookie-domain.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +1 -0
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +1 -0
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/admin/src/pages/Auth/components/Register.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.d.ts +6 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.d.ts +5 -3
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +8 -4
- package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +3 -1
- package/dist/ee/admin/src/services/auditLogs.d.ts +5 -2
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +1 -0
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +16 -0
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/destroy.d.ts +1 -4
- package/dist/ee/server/src/destroy.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js +10 -0
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs +11 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js +24 -32
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs +24 -32
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +36 -4
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +36 -4
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
- 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 +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +8 -0
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs +8 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +1 -1
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/destroy.js +1 -1
- package/dist/server/ee/server/src/destroy.js.map +1 -1
- package/dist/server/ee/server/src/destroy.mjs +1 -1
- package/dist/server/ee/server/src/destroy.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +1 -3
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +1 -3
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/index.js.map +1 -1
- package/dist/server/ee/server/src/services/index.mjs +2 -2
- package/dist/server/ee/server/src/services/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +2 -2
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +4 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.js +2 -2
- package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.mjs +2 -2
- package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +1 -2
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +2 -2
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -8
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +5 -5
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js +1 -5
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.mjs +2 -2
- package/dist/server/server/src/services/transfer/permission.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +1 -1
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-domain.js +1 -0
- package/dist/server/shared/utils/auth-cookie-domain.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-domain.mjs +1 -0
- package/dist/server/shared/utils/auth-cookie-domain.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +1 -0
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +1 -0
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/transfer/permission.d.ts +2 -2
- package/dist/server/src/services/transfer/permission.d.ts.map +1 -1
- package/dist/shared/contracts/api-token.d.ts +2 -2
- package/dist/shared/contracts/api-token.d.ts.map +1 -1
- package/dist/shared/contracts/audit-logs.d.ts +19 -1
- package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
- package/dist/shared/contracts/authentication.d.ts +1 -1
- package/dist/shared/contracts/authentication.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +2 -2
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/dist/shared/contracts/user.d.ts +1 -1
- package/dist/shared/contracts/user.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-domain.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- package/package.json +12 -12
|
@@ -270,7 +270,7 @@ class StrapiApp {
|
|
|
270
270
|
const normalizedCustomTranslations = Object.keys(customTranslations).reduce((acc, key)=>{
|
|
271
271
|
const normalizedKey = normalizeAdminLocale.normalizeAdminLocale(key);
|
|
272
272
|
acc[normalizedKey] = {
|
|
273
|
-
...acc[normalizedKey]
|
|
273
|
+
...acc[normalizedKey],
|
|
274
274
|
...customTranslations[key]
|
|
275
275
|
};
|
|
276
276
|
return acc;
|
|
@@ -308,8 +308,8 @@ class StrapiApp {
|
|
|
308
308
|
const translations = this.configurations.locales.reduce((acc, current)=>{
|
|
309
309
|
acc[current] = {
|
|
310
310
|
...adminTranslations[current],
|
|
311
|
-
...mergedTrads[current]
|
|
312
|
-
...normalizedCustomTranslations[current]
|
|
311
|
+
...mergedTrads[current],
|
|
312
|
+
...normalizedCustomTranslations[current]
|
|
313
313
|
};
|
|
314
314
|
return acc;
|
|
315
315
|
}, {});
|
|
@@ -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 { Cloud, Clock, 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 uniq from 'lodash/uniq';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } 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, type WidgetArgs } 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';\nimport { normalizeAdminLocale } from './translations/normalizeAdminLocale';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\nimport type { DefaultTheme } from 'styled-components';\n\n/**\n * Canonical admin locale codes mapped to legacy translation file names still\n * shipped by some plugins.\n */\nconst ADMIN_LOCALE_LEGACY_ALIASES: Record<string, string> = {\n da: 'dk',\n};\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n INJECT_LIST_VIEW_FILTERS,\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 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 private warnedLegacyLocalePairs = new Set<string>();\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\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(INJECT_LIST_VIEW_FILTERS);\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 /**\n * Register one or more settings links under an existing or new section.\n *\n * @param sectionId - Section id string, or section metadata to create a new section\n * @param link - A single link or an array of links to register\n */\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink | UnloadedSettingsLink[]\n ): void => {\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 const extraLocales =\n customConfig.locales\n ?.filter((loc) => loc !== 'en')\n .map((loc) => normalizeAdminLocale(loc)) || [];\n\n this.configurations.locales = uniq(['en', ...extraLocales]);\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.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 const widgets: WidgetArgs[] = [\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 if ('strapi-cloud' in this.appPlugins) {\n widgets.push({\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n });\n }\n\n this.widgets.register(widgets);\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 // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n private mergePluginTranslationsByCanonical(pluginTradsBatch: Translation[]) {\n return pluginTradsBatch.reduce<Record<string, Translation['data']>>((acc, current) => {\n const canonicalLocale = normalizeAdminLocale(current.locale);\n\n acc[canonicalLocale] = {\n ...(current.locale === canonicalLocale ? acc[canonicalLocale] : current.data),\n ...(current.locale === canonicalLocale ? current.data : acc[canonicalLocale]),\n };\n\n if (current.locale !== canonicalLocale && Object.keys(current.data).length > 0) {\n const deprecationKey = `${canonicalLocale}:${current.locale}`;\n\n if (!this.warnedLegacyLocalePairs.has(deprecationKey)) {\n this.warnedLegacyLocalePairs.add(deprecationKey);\n console.warn(\n `[deprecated] Admin locale \"${current.locale}\" is deprecated. Rename translation files to \"${canonicalLocale}.json\".`\n );\n }\n }\n\n return acc;\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 normalizedCustomTranslations = Object.keys(customTranslations).reduce<\n Record<string, Record<string, string>>\n >((acc, key) => {\n const normalizedKey = normalizeAdminLocale(key);\n\n acc[normalizedKey] = {\n ...(acc[normalizedKey] || {}),\n ...customTranslations[key],\n };\n\n return acc;\n }, {});\n\n const adminTranslations = await this.loadAdminTrads();\n const localesForPlugins = uniq(\n this.configurations.locales.flatMap((locale) => {\n const legacyLocale = ADMIN_LOCALE_LEGACY_ALIASES[locale];\n\n return legacyLocale ? [locale, legacyLocale] : [locale];\n })\n );\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: localesForPlugins });\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 = this.mergePluginTranslationsByCanonical(currentPluginTrads);\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 ...(normalizedCustomTranslations[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 storedLocale = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n const locale = normalizeAdminLocale(storedLocale) 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":["ADMIN_LOCALE_LEGACY_ALIASES","da","INJECT_COLUMN_IN_TABLE","INJECT_LIST_VIEW_FILTERS","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","push","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","mergePluginTranslationsByCanonical","pluginTradsBatch","reduce","acc","current","canonicalLocale","normalizeAdminLocale","locale","data","length","deprecationKey","warnedLegacyLocalePairs","has","add","console","warn","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","default","loadTrads","customTranslations","normalizedCustomTranslations","key","normalizedKey","adminTranslations","localesForPlugins","uniq","flatMap","legacyLocale","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","translations","resolve","render","localeNames","pick","languageNativeNames","storedLocale","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","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","config","plugins","hooksDict","Set","admin","injectionZones","authLogo","Logo","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","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","extraLocales","loc","auth","logo","menu","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 { Cloud, Clock, 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 uniq from 'lodash/uniq';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } 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, type WidgetArgs } 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';\nimport { normalizeAdminLocale } from './translations/normalizeAdminLocale';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\nimport type { DefaultTheme } from 'styled-components';\n\n/**\n * Canonical admin locale codes mapped to legacy translation file names still\n * shipped by some plugins.\n */\nconst ADMIN_LOCALE_LEGACY_ALIASES: Record<string, string> = {\n da: 'dk',\n};\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n INJECT_LIST_VIEW_FILTERS,\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 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 private warnedLegacyLocalePairs = new Set<string>();\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\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(INJECT_LIST_VIEW_FILTERS);\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 /**\n * Register one or more settings links under an existing or new section.\n *\n * @param sectionId - Section id string, or section metadata to create a new section\n * @param link - A single link or an array of links to register\n */\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink | UnloadedSettingsLink[]\n ): void => {\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 const extraLocales =\n customConfig.locales\n ?.filter((loc) => loc !== 'en')\n .map((loc) => normalizeAdminLocale(loc)) || [];\n\n this.configurations.locales = uniq(['en', ...extraLocales]);\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.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 const widgets: WidgetArgs[] = [\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 if ('strapi-cloud' in this.appPlugins) {\n widgets.push({\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n });\n }\n\n this.widgets.register(widgets);\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 // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n private mergePluginTranslationsByCanonical(pluginTradsBatch: Translation[]) {\n return pluginTradsBatch.reduce<Record<string, Translation['data']>>((acc, current) => {\n const canonicalLocale = normalizeAdminLocale(current.locale);\n\n acc[canonicalLocale] = {\n ...(current.locale === canonicalLocale ? acc[canonicalLocale] : current.data),\n ...(current.locale === canonicalLocale ? current.data : acc[canonicalLocale]),\n };\n\n if (current.locale !== canonicalLocale && Object.keys(current.data).length > 0) {\n const deprecationKey = `${canonicalLocale}:${current.locale}`;\n\n if (!this.warnedLegacyLocalePairs.has(deprecationKey)) {\n this.warnedLegacyLocalePairs.add(deprecationKey);\n console.warn(\n `[deprecated] Admin locale \"${current.locale}\" is deprecated. Rename translation files to \"${canonicalLocale}.json\".`\n );\n }\n }\n\n return acc;\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 normalizedCustomTranslations = Object.keys(customTranslations).reduce<\n Record<string, Record<string, string>>\n >((acc, key) => {\n const normalizedKey = normalizeAdminLocale(key);\n\n acc[normalizedKey] = {\n ...acc[normalizedKey],\n ...customTranslations[key],\n };\n\n return acc;\n }, {});\n\n const adminTranslations = await this.loadAdminTrads();\n const localesForPlugins = uniq(\n this.configurations.locales.flatMap((locale) => {\n const legacyLocale = ADMIN_LOCALE_LEGACY_ALIASES[locale];\n\n return legacyLocale ? [locale, legacyLocale] : [locale];\n })\n );\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: localesForPlugins });\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 = this.mergePluginTranslationsByCanonical(currentPluginTrads);\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 ...normalizedCustomTranslations[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 storedLocale = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n const locale = normalizeAdminLocale(storedLocale) 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":["ADMIN_LOCALE_LEGACY_ALIASES","da","INJECT_COLUMN_IN_TABLE","INJECT_LIST_VIEW_FILTERS","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","push","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","mergePluginTranslationsByCanonical","pluginTradsBatch","reduce","acc","current","canonicalLocale","normalizeAdminLocale","locale","data","length","deprecationKey","warnedLegacyLocalePairs","has","add","console","warn","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","default","loadTrads","customTranslations","normalizedCustomTranslations","key","normalizedKey","adminTranslations","localesForPlugins","uniq","flatMap","legacyLocale","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","translations","resolve","render","localeNames","pick","languageNativeNames","storedLocale","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","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","config","plugins","hooksDict","Set","admin","injectionZones","authLogo","Logo","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","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","extraLocales","loc","auth","logo","menu","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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"}
|
|
@@ -258,7 +258,7 @@ class StrapiApp {
|
|
|
258
258
|
const normalizedCustomTranslations = Object.keys(customTranslations).reduce((acc, key)=>{
|
|
259
259
|
const normalizedKey = normalizeAdminLocale(key);
|
|
260
260
|
acc[normalizedKey] = {
|
|
261
|
-
...acc[normalizedKey]
|
|
261
|
+
...acc[normalizedKey],
|
|
262
262
|
...customTranslations[key]
|
|
263
263
|
};
|
|
264
264
|
return acc;
|
|
@@ -296,8 +296,8 @@ class StrapiApp {
|
|
|
296
296
|
const translations = this.configurations.locales.reduce((acc, current)=>{
|
|
297
297
|
acc[current] = {
|
|
298
298
|
...adminTranslations[current],
|
|
299
|
-
...mergedTrads[current]
|
|
300
|
-
...normalizedCustomTranslations[current]
|
|
299
|
+
...mergedTrads[current],
|
|
300
|
+
...normalizedCustomTranslations[current]
|
|
301
301
|
};
|
|
302
302
|
return acc;
|
|
303
303
|
}, {});
|
|
@@ -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 { Cloud, Clock, 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 uniq from 'lodash/uniq';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } 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, type WidgetArgs } 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';\nimport { normalizeAdminLocale } from './translations/normalizeAdminLocale';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\nimport type { DefaultTheme } from 'styled-components';\n\n/**\n * Canonical admin locale codes mapped to legacy translation file names still\n * shipped by some plugins.\n */\nconst ADMIN_LOCALE_LEGACY_ALIASES: Record<string, string> = {\n da: 'dk',\n};\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n INJECT_LIST_VIEW_FILTERS,\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 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 private warnedLegacyLocalePairs = new Set<string>();\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\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(INJECT_LIST_VIEW_FILTERS);\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 /**\n * Register one or more settings links under an existing or new section.\n *\n * @param sectionId - Section id string, or section metadata to create a new section\n * @param link - A single link or an array of links to register\n */\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink | UnloadedSettingsLink[]\n ): void => {\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 const extraLocales =\n customConfig.locales\n ?.filter((loc) => loc !== 'en')\n .map((loc) => normalizeAdminLocale(loc)) || [];\n\n this.configurations.locales = uniq(['en', ...extraLocales]);\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.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 const widgets: WidgetArgs[] = [\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 if ('strapi-cloud' in this.appPlugins) {\n widgets.push({\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n });\n }\n\n this.widgets.register(widgets);\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 // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n private mergePluginTranslationsByCanonical(pluginTradsBatch: Translation[]) {\n return pluginTradsBatch.reduce<Record<string, Translation['data']>>((acc, current) => {\n const canonicalLocale = normalizeAdminLocale(current.locale);\n\n acc[canonicalLocale] = {\n ...(current.locale === canonicalLocale ? acc[canonicalLocale] : current.data),\n ...(current.locale === canonicalLocale ? current.data : acc[canonicalLocale]),\n };\n\n if (current.locale !== canonicalLocale && Object.keys(current.data).length > 0) {\n const deprecationKey = `${canonicalLocale}:${current.locale}`;\n\n if (!this.warnedLegacyLocalePairs.has(deprecationKey)) {\n this.warnedLegacyLocalePairs.add(deprecationKey);\n console.warn(\n `[deprecated] Admin locale \"${current.locale}\" is deprecated. Rename translation files to \"${canonicalLocale}.json\".`\n );\n }\n }\n\n return acc;\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 normalizedCustomTranslations = Object.keys(customTranslations).reduce<\n Record<string, Record<string, string>>\n >((acc, key) => {\n const normalizedKey = normalizeAdminLocale(key);\n\n acc[normalizedKey] = {\n ...(acc[normalizedKey] || {}),\n ...customTranslations[key],\n };\n\n return acc;\n }, {});\n\n const adminTranslations = await this.loadAdminTrads();\n const localesForPlugins = uniq(\n this.configurations.locales.flatMap((locale) => {\n const legacyLocale = ADMIN_LOCALE_LEGACY_ALIASES[locale];\n\n return legacyLocale ? [locale, legacyLocale] : [locale];\n })\n );\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: localesForPlugins });\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 = this.mergePluginTranslationsByCanonical(currentPluginTrads);\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 ...(normalizedCustomTranslations[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 storedLocale = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n const locale = normalizeAdminLocale(storedLocale) 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":["ADMIN_LOCALE_LEGACY_ALIASES","da","INJECT_COLUMN_IN_TABLE","INJECT_LIST_VIEW_FILTERS","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","push","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","mergePluginTranslationsByCanonical","pluginTradsBatch","reduce","acc","current","canonicalLocale","normalizeAdminLocale","locale","data","length","deprecationKey","warnedLegacyLocalePairs","has","add","console","warn","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","default","loadTrads","customTranslations","normalizedCustomTranslations","key","normalizedKey","adminTranslations","localesForPlugins","uniq","flatMap","legacyLocale","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","translations","resolve","render","localeNames","pick","languageNativeNames","storedLocale","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","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","config","plugins","hooksDict","Set","admin","injectionZones","authLogo","Logo","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","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","extraLocales","loc","auth","logo","menu","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 { Cloud, Clock, 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 uniq from 'lodash/uniq';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } 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, type WidgetArgs } 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';\nimport { normalizeAdminLocale } from './translations/normalizeAdminLocale';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\nimport type { DefaultTheme } from 'styled-components';\n\n/**\n * Canonical admin locale codes mapped to legacy translation file names still\n * shipped by some plugins.\n */\nconst ADMIN_LOCALE_LEGACY_ALIASES: Record<string, string> = {\n da: 'dk',\n};\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n INJECT_LIST_VIEW_FILTERS,\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 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 private warnedLegacyLocalePairs = new Set<string>();\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\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(INJECT_LIST_VIEW_FILTERS);\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 /**\n * Register one or more settings links under an existing or new section.\n *\n * @param sectionId - Section id string, or section metadata to create a new section\n * @param link - A single link or an array of links to register\n */\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink | UnloadedSettingsLink[]\n ): void => {\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 const extraLocales =\n customConfig.locales\n ?.filter((loc) => loc !== 'en')\n .map((loc) => normalizeAdminLocale(loc)) || [];\n\n this.configurations.locales = uniq(['en', ...extraLocales]);\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.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 const widgets: WidgetArgs[] = [\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 if ('strapi-cloud' in this.appPlugins) {\n widgets.push({\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n });\n }\n\n this.widgets.register(widgets);\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 // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n private mergePluginTranslationsByCanonical(pluginTradsBatch: Translation[]) {\n return pluginTradsBatch.reduce<Record<string, Translation['data']>>((acc, current) => {\n const canonicalLocale = normalizeAdminLocale(current.locale);\n\n acc[canonicalLocale] = {\n ...(current.locale === canonicalLocale ? acc[canonicalLocale] : current.data),\n ...(current.locale === canonicalLocale ? current.data : acc[canonicalLocale]),\n };\n\n if (current.locale !== canonicalLocale && Object.keys(current.data).length > 0) {\n const deprecationKey = `${canonicalLocale}:${current.locale}`;\n\n if (!this.warnedLegacyLocalePairs.has(deprecationKey)) {\n this.warnedLegacyLocalePairs.add(deprecationKey);\n console.warn(\n `[deprecated] Admin locale \"${current.locale}\" is deprecated. Rename translation files to \"${canonicalLocale}.json\".`\n );\n }\n }\n\n return acc;\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 normalizedCustomTranslations = Object.keys(customTranslations).reduce<\n Record<string, Record<string, string>>\n >((acc, key) => {\n const normalizedKey = normalizeAdminLocale(key);\n\n acc[normalizedKey] = {\n ...acc[normalizedKey],\n ...customTranslations[key],\n };\n\n return acc;\n }, {});\n\n const adminTranslations = await this.loadAdminTrads();\n const localesForPlugins = uniq(\n this.configurations.locales.flatMap((locale) => {\n const legacyLocale = ADMIN_LOCALE_LEGACY_ALIASES[locale];\n\n return legacyLocale ? [locale, legacyLocale] : [locale];\n })\n );\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: localesForPlugins });\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 = this.mergePluginTranslationsByCanonical(currentPluginTrads);\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 ...normalizedCustomTranslations[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 storedLocale = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n const locale = normalizeAdminLocale(storedLocale) 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":["ADMIN_LOCALE_LEGACY_ALIASES","da","INJECT_COLUMN_IN_TABLE","INJECT_LIST_VIEW_FILTERS","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","push","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","mergePluginTranslationsByCanonical","pluginTradsBatch","reduce","acc","current","canonicalLocale","normalizeAdminLocale","locale","data","length","deprecationKey","warnedLegacyLocalePairs","has","add","console","warn","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","default","loadTrads","customTranslations","normalizedCustomTranslations","key","normalizedKey","adminTranslations","localesForPlugins","uniq","flatMap","legacyLocale","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","translations","resolve","render","localeNames","pick","languageNativeNames","storedLocale","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","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","config","plugins","hooksDict","Set","admin","injectionZones","authLogo","Logo","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","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","extraLocales","loc","auth","logo","menu","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpsSurvey.js","sources":["../../../../../admin/src/components/NpsSurvey.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n VisuallyHidden,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { usePersistentState } from '../hooks/usePersistentState';\n\nconst FieldWrapper = styled(Field.Root)`\n height: 3.2rem;\n width: 3.2rem;\n align-items: center;\n justify-content: center;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 14 * 24 * 60 * 60 * 1000, // 14 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 30 * 60 * 1000, // 30 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const { toggleNotification } = useNotification();\n const currentEnvironment = useAppInfo('NpsSurvey', (state) => state.currentEnvironment);\n const strapiVersion = useAppInfo('NpsSurvey', (state) => state.strapiVersion);\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Growth' | 'Community';\n }\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n const { user } = useAuth('NpsSurvey', (auth) => auth);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = async ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n try {\n const body = {\n email: typeof user === 'object' && user.email ? user.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n };\n const res = await fetch(\n `${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/submit-nps`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n }\n );\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue, isSubmitting }) => (\n <Form name=\"npsSurveyForm\">\n <Box\n padding={4}\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex=\"200\"\n minWidth={{ initial: '100%', medium: '50%' }}\n >\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n wrap=\"wrap\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box tag=\"fieldset\" width=\"100%\" borderWidth={0}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={2}>\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" tag=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n withTooltip={false}\n label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n type=\"button\"\n >\n <Cross />\n </IconButton>\n </Flex>\n {isMobile ? (\n <Box marginTop={2}>\n <SingleSelect\n placeholder={formatMessage({\n id: 'app.components.NpsSurvey.select-rating',\n defaultMessage: 'Select rating',\n })}\n onChange={(value) => {\n setFieldValue('npsSurveyRating', parseInt(value.toString(), 10));\n }}\n value={values.npsSurveyRating}\n >\n {ratingArray\n .sort((a, b) => b - a)\n .map((number) => {\n const suffixMessage =\n number === 0\n ? formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })\n : number === 10\n ? formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })\n : '';\n return (\n <SingleSelectOption key={number} value={number}>\n {number} {suffixMessage && `(${suffixMessage})`}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n ) : (\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n name=\"npsSurveyRating\"\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <Field.Label>\n <VisuallyHidden>\n <Field.Input\n type=\"radio\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </Field.Label>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n )}\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\" alignItems=\"stretch\">\n <Box marginTop={2}>\n <Field.Label fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </Field.Label>\n </Box>\n <Box marginTop={3} marginBottom={4} width=\"100%\">\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n value={values.npsSurveyFeedback}\n />\n </Box>\n <Box>\n <Button marginBottom={2} type=\"submit\" loading={isSubmitting}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Box>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Box>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n"],"names":["FieldWrapper","styled","Field","Root","theme","spaces","colors","neutral0","primary700","delays","postResponse","postFirstDismissal","postSubsequentDismissal","display","ratingArray","Array","keys","checkIfShouldShowSurvey","settings","enabled","lastResponseDate","firstDismissalDate","lastDismissalDate","window","strapi","flags","nps","timeSinceLastResponse","Date","now","getTime","timeSinceLastDismissal","timeSinceFirstDismissal","NpsSurvey","isMobile","useIsMobile","formatMessage","useIntl","npsSurveySettings","setNpsSurveySettings","useNpsSurveySettings","isFeedbackResponse","setIsFeedbackResponse","React","useState","toggleNotification","useNotification","currentEnvironment","useAppInfo","state","strapiVersion","surveyIsShown","setSurveyIsShown","displaySurvey","setDisplaySurvey","useEffect","displayTime","setTimeout","clearTimeout","user","useAuth","auth","handleSubmitResponse","npsSurveyRating","npsSurveyFeedback","body","email","rating","comment","environment","version","undefined","license","projectType","isHostedOnStrapiCloud","process","env","STRAPI_HOSTING","res","fetch","STRAPI_ANALYTICS_URL","method","headers","JSON","stringify","ok","Error","toString","err","type","message","id","defaultMessage","handleDismiss","nextSettings","_jsx","Portal","Formik","initialValues","onSubmit","validationSchema","yup","object","string","number","required","values","handleChange","setFieldValue","isSubmitting","Form","name","Box","padding","position","bottom","left","transform","zIndex","minWidth","initial","medium","Flex","hasRadius","direction","borderColor","background","shadow","wrap","Typography","fontWeight","_jsxs","tag","width","borderWidth","justifyContent","gap","marginLeft","marginRight","IconButton","onClick","withTooltip","label","Cross","marginTop","SingleSelect","placeholder","onChange","value","parseInt","sort","a","b","map","suffixMessage","SingleSelectOption","marginBottom","variant","textColor","className","color","cursor","Label","VisuallyHidden","Input","checked","e","target","alignItems","fontSize","Textarea","Button","loading","usePersistentState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NpsSurvey.js","sources":["../../../../../admin/src/components/NpsSurvey.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n VisuallyHidden,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { usePersistentState } from '../hooks/usePersistentState';\n\nconst FieldWrapper = styled(Field.Root)`\n height: 3.2rem;\n width: 3.2rem;\n align-items: center;\n justify-content: center;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 14 * 24 * 60 * 60 * 1000, // 14 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 30 * 60 * 1000, // 30 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const { toggleNotification } = useNotification();\n const currentEnvironment = useAppInfo('NpsSurvey', (state) => state.currentEnvironment);\n const strapiVersion = useAppInfo('NpsSurvey', (state) => state.strapiVersion);\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Growth' | 'Community';\n }\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n const { user } = useAuth('NpsSurvey', (auth) => auth);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = async ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n try {\n const body = {\n email: typeof user === 'object' && user.email ? user.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n };\n const res = await fetch(\n `${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/submit-nps`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n }\n );\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue, isSubmitting }) => (\n <Form name=\"npsSurveyForm\">\n <Box\n padding={4}\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex=\"200\"\n minWidth={{ initial: '100%', medium: '50%' }}\n >\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n wrap=\"wrap\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box tag=\"fieldset\" width=\"100%\" borderWidth={0}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={2}>\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" tag=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n withTooltip={false}\n label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n type=\"button\"\n >\n <Cross />\n </IconButton>\n </Flex>\n {isMobile ? (\n <Box marginTop={2}>\n <SingleSelect\n placeholder={formatMessage({\n id: 'app.components.NpsSurvey.select-rating',\n defaultMessage: 'Select rating',\n })}\n onChange={(value) => {\n setFieldValue('npsSurveyRating', parseInt(value.toString(), 10));\n }}\n value={values.npsSurveyRating}\n >\n {ratingArray\n .sort((a, b) => b - a)\n .map((number) => {\n const suffixMessage =\n number === 0\n ? formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })\n : number === 10\n ? formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })\n : '';\n return (\n <SingleSelectOption key={number} value={number}>\n {number} {suffixMessage && `(${suffixMessage})`}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n ) : (\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n name=\"npsSurveyRating\"\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <Field.Label>\n <VisuallyHidden>\n <Field.Input\n type=\"radio\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </Field.Label>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n )}\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\" alignItems=\"stretch\">\n <Box marginTop={2}>\n <Field.Label fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </Field.Label>\n </Box>\n <Box marginTop={3} marginBottom={4} width=\"100%\">\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n value={values.npsSurveyFeedback}\n />\n </Box>\n <Box>\n <Button marginBottom={2} type=\"submit\" loading={isSubmitting}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Box>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Box>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n"],"names":["FieldWrapper","styled","Field","Root","theme","spaces","colors","neutral0","primary700","delays","postResponse","postFirstDismissal","postSubsequentDismissal","display","ratingArray","Array","keys","checkIfShouldShowSurvey","settings","enabled","lastResponseDate","firstDismissalDate","lastDismissalDate","window","strapi","flags","nps","timeSinceLastResponse","Date","now","getTime","timeSinceLastDismissal","timeSinceFirstDismissal","NpsSurvey","isMobile","useIsMobile","formatMessage","useIntl","npsSurveySettings","setNpsSurveySettings","useNpsSurveySettings","isFeedbackResponse","setIsFeedbackResponse","React","useState","toggleNotification","useNotification","currentEnvironment","useAppInfo","state","strapiVersion","surveyIsShown","setSurveyIsShown","displaySurvey","setDisplaySurvey","useEffect","displayTime","setTimeout","clearTimeout","user","useAuth","auth","handleSubmitResponse","npsSurveyRating","npsSurveyFeedback","body","email","rating","comment","environment","version","undefined","license","projectType","isHostedOnStrapiCloud","process","env","STRAPI_HOSTING","res","fetch","STRAPI_ANALYTICS_URL","method","headers","JSON","stringify","ok","Error","toString","type","message","id","defaultMessage","handleDismiss","nextSettings","_jsx","Portal","Formik","initialValues","onSubmit","validationSchema","yup","object","string","number","required","values","handleChange","setFieldValue","isSubmitting","Form","name","Box","padding","position","bottom","left","transform","zIndex","minWidth","initial","medium","Flex","hasRadius","direction","borderColor","background","shadow","wrap","Typography","fontWeight","_jsxs","tag","width","borderWidth","justifyContent","gap","marginLeft","marginRight","IconButton","onClick","withTooltip","label","Cross","marginTop","SingleSelect","placeholder","onChange","value","parseInt","sort","a","b","map","suffixMessage","SingleSelectOption","marginBottom","variant","textColor","className","color","cursor","Label","VisuallyHidden","Input","checked","e","target","alignItems","fontSize","Textarea","Button","loading","usePersistentState"],"mappings":"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"}
|