@strapi/admin 5.51.1 → 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 +640 -684
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +640 -684
- 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/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/src/pages/Auth/components/Register.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +3 -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.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +3 -3
- 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 +3 -3
- 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/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/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/package.json +10 -10
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA;;;AAGC,IACD,MAAMA,2BAAAA,GAAsD;IAC1DC,EAAAA,EAAI;AACN,CAAA;AAEA,MAAM,EACJC,sBAAsB,EACtBC,wBAAwB,EACxBC,6BAA6B,EAC7BC,uBAAuB,EACvBC,yBAAyB,EAC1B,GAAGC,KAAAA;AAkDJ,MAAMC,SAAAA,CAAAA;IA8IJ,MAAMC,SAAAA,CAAUC,eAAyB,EAAE;QACzCC,MAAAA,CAAOC,IAAI,CAAC,IAAI,CAACC,UAAU,CAAA,CAAEC,OAAO,CAAC,CAACC,MAAAA,GAAAA;AACpC,YAAA,MAAMN,YAAY,IAAI,CAACI,UAAU,CAACE,MAAAA,CAAO,CAACN,SAAS;AAEnD,YAAA,IAAIA,SAAAA,EAAW;gBACbA,SAAAA,CAAU;oBACRO,eAAAA,EAAiB,IAAI,CAACA,eAAe;oBACrCC,gBAAAA,EAAkB,IAAI,CAACA,gBAAgB;oBACvCC,SAAAA,EAAW,IAAI,CAACA,SAAS;oBACzBC,YAAAA,EAAc,IAAI,CAACA;AACrB,iBAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAA;AAEA,QAAA,IAAIC,WAAWV,eAAAA,CAAAA,EAAkB;YAC/BA,eAAAA,CAAgB;gBACdW,aAAAA,EAAe,IAAI,CAACA,aAAa;gBACjCC,SAAAA,EAAW,IAAI,CAACA,SAAS;gBACzBC,WAAAA,EAAa,IAAI,CAACA,WAAW;gBAC7BC,WAAAA,EAAa,IAAI,CAACA,WAAW;gBAC7BR,eAAAA,EAAiB,IAAI,CAACA,eAAe;gBACrCC,gBAAAA,EAAkB,IAAI,CAACA,gBAAgB;gBACvCC,SAAAA,EAAW,IAAI,CAACA,SAAS;gBACzBC,YAAAA,EAAc,IAAI,CAACA;AACrB,aAAA,CAAA;AACF,QAAA;AACF,IAAA;IAkEA,MAAMM,QAAAA,CAASC,cAAwB,EAAE;AACvC,QAAA,MAAMC,OAAAA,GAAwB;AAC5B,YAAA;gBACEC,IAAAA,EAAMC,IAAAA;gBACNC,KAAAA,EAAO;oBACLC,EAAAA,EAAI,sBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,SAAAA,EAAW,UAAA;AACT,oBAAA,MAAM,EAAEC,aAAa,EAAE,GAAG,MAAM,OAAO,0BAAA,CAAA;oBACvC,OAAOA,aAAAA;AACT,gBAAA,CAAA;gBACAC,QAAAA,EAAU,OAAA;gBACVJ,EAAAA,EAAI,cAAA;gBACJK,IAAAA,EAAM;oBACJC,KAAAA,EAAO;wBACLN,EAAAA,EAAI,yBAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;oBACAM,IAAAA,EAAM;AACR;AACF,aAAA;AACA,YAAA;gBACEV,IAAAA,EAAMW,OAAAA;gBACNT,KAAAA,EAAO;oBACLC,EAAAA,EAAI,6BAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,SAAAA,EAAW,UAAA;AACT,oBAAA,MAAM,EAAEO,mBAAmB,EAAE,GAAG,MAAM,OAAO,0BAAA,CAAA;oBAC7C,OAAOA,mBAAAA;AACT,gBAAA,CAAA;gBACAL,QAAAA,EAAU,OAAA;gBACVJ,EAAAA,EAAI,gBAAA;gBACJU,KAAAA,EAAO;AAAC,oBAAA;AAAqB;AAC/B;AACD,SAAA;AAED,QAAA,IAAI,cAAA,IAAkB,IAAI,CAAC5B,UAAU,EAAE;AACrCc,YAAAA,OAAAA,CAAQe,IAAI,CAAC;gBACXd,IAAAA,EAAMe,KAAAA;gBACNb,KAAAA,EAAO;oBACLC,EAAAA,EAAI,yBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,SAAAA,EAAW,UAAA;AACT,oBAAA,MAAM,EAAEW,eAAe,EAAE,GAAG,MAAM,OAAO,0BAAA,CAAA;oBACzC,OAAOA,eAAAA;AACT,gBAAA,CAAA;gBACAT,QAAAA,EAAU,OAAA;gBACVJ,EAAAA,EAAI;AACN,aAAA,CAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACJ,OAAO,CAACF,QAAQ,CAACE,OAAAA,CAAAA;QAEtBhB,MAAAA,CAAOC,IAAI,CAAC,IAAI,CAACC,UAAU,CAAA,CAAEC,OAAO,CAAC,CAACC,MAAAA,GAAAA;AACpC,YAAA,IAAI,CAACF,UAAU,CAACE,OAAO,CAACU,QAAQ,CAAC,IAAI,CAAA;AACvC,QAAA,CAAA,CAAA;AAEA,QAAA,IAAIL,WAAWM,cAAAA,CAAAA,EAAiB;AAC9BA,YAAAA,cAAAA,CAAe,IAAI,CAAA;AACrB,QAAA;;AAGA,QAAA,IAAImB,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACE,UAAU,CAAA,EAAG;AACvE,YAAA,IAAI,CAACtB,OAAO,CAACF,QAAQ,CAAC;AACpB,gBAAA;oBACEG,IAAAA,EAAMsB,KAAAA;oBACNpB,KAAAA,EAAO;wBACLC,EAAAA,EAAI,4BAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;oBACAC,SAAAA,EAAW,UAAA;AACT,wBAAA,MAAM,EAAEkB,eAAe,EAAE,GAAG,MAAM,OAChC,qDAAA,CAAA;wBAEF,OAAOA,eAAAA;AACT,oBAAA,CAAA;oBACAhB,QAAAA,EAAU,OAAA;oBACVJ,EAAAA,EAAI,YAAA;oBACJK,IAAAA,EAAM;wBACJC,KAAAA,EAAO;4BACLN,EAAAA,EAAI,2BAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;AACAM,wBAAAA,IAAAA,EAAM,CAAC,8BAA8B,EAAEc,4BAAAA,CAA6B,sBAAsB;AAC5F,qBAAA;oBACAC,WAAAA,EAAa;AAAC,wBAAA;4BAAEC,MAAAA,EAAQ;AAAyB;AAAE;AACrD;AACD,aAAA,CAAA;AACH,QAAA;AACF,IAAA;AAEQC,IAAAA,kCAAAA,CAAmCC,gBAA+B,EAAE;AAC1E,QAAA,OAAOA,gBAAAA,CAAiBC,MAAM,CAAsC,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;YACxE,MAAMC,eAAAA,GAAkBC,oBAAAA,CAAqBF,OAAAA,CAAQG,MAAM,CAAA;YAE3DJ,GAAG,CAACE,gBAAgB,GAAG;gBACrB,GAAID,OAAAA,CAAQG,MAAM,KAAKF,eAAAA,GAAkBF,GAAG,CAACE,eAAAA,CAAgB,GAAGD,OAAAA,CAAQI,IAAI;gBAC5E,GAAIJ,OAAAA,CAAQG,MAAM,KAAKF,eAAAA,GAAkBD,QAAQI,IAAI,GAAGL,GAAG,CAACE,eAAAA;AAC9D,aAAA;AAEA,YAAA,IAAID,OAAAA,CAAQG,MAAM,KAAKF,eAAAA,IAAmBjD,MAAAA,CAAOC,IAAI,CAAC+C,OAAAA,CAAQI,IAAI,CAAA,CAAEC,MAAM,GAAG,CAAA,EAAG;AAC9E,gBAAA,MAAMC,iBAAiB,CAAA,EAAGL,eAAAA,CAAgB,CAAC,EAAED,OAAAA,CAAQG,MAAM,CAAA,CAAE;AAE7D,gBAAA,IAAI,CAAC,IAAI,CAACI,uBAAuB,CAACC,GAAG,CAACF,cAAAA,CAAAA,EAAiB;AACrD,oBAAA,IAAI,CAACC,uBAAuB,CAACE,GAAG,CAACH,cAAAA,CAAAA;AACjCI,oBAAAA,OAAAA,CAAQC,IAAI,CACV,CAAC,2BAA2B,EAAEX,OAAAA,CAAQG,MAAM,CAAC,8CAA8C,EAAEF,eAAAA,CAAgB,OAAO,CAAC,CAAA;AAEzH,gBAAA;AACF,YAAA;YAEA,OAAOF,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;AACN,IAAA;AAEA,IAAA,MAAMa,cAAAA,GAAiB;AACrB,QAAA,MAAMC,YAAAA,GAAe,MAAMC,OAAAA,CAAQC,GAAG,CACpC,IAAI,CAACC,cAAc,CAACC,OAAO,CAACC,GAAG,CAAC,OAAOf,MAAAA,GAAAA;YACrC,IAAI;AACF,gBAAA,MAAM,EAAEgB,OAAAA,EAASf,IAAI,EAAE,GAAG,MAAM,iCAAM,CAAC,CAAC,eAAe,EAAED,MAAAA,CAAO,GAAG,CAAC,CAAA;gBAEpE,OAAO;AAAEC,oBAAAA,IAAAA;AAAMD,oBAAAA;AAAO,iBAAA;AACxB,YAAA,CAAA,CAAE,OAAM;gBACN,IAAI;AACF,oBAAA,MAAM,EAAEgB,OAAAA,EAASf,IAAI,EAAE,GAAG,MAAM,iCAAM,CAAC,CAAC,eAAe,EAAED,MAAAA,CAAO,KAAK,CAAC,CAAA;oBACtE,OAAO;AAAEC,wBAAAA,IAAAA;AAAMD,wBAAAA;AAAO,qBAAA;AACxB,gBAAA,CAAA,CAAE,OAAM;oBACN,OAAO;wBAAEC,IAAAA,EAAM,IAAA;AAAMD,wBAAAA;AAAO,qBAAA;AAC9B,gBAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAA,CAAA;AAGF,QAAA,OAAOU,YAAAA,CAAaf,MAAM,CAA+C,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;YAC7E,IAAIA,OAAAA,CAAQI,IAAI,EAAE;AAChBL,gBAAAA,GAAG,CAACC,OAAAA,CAAQG,MAAM,CAAC,GAAGH,QAAQI,IAAI;AACpC,YAAA;YAEA,OAAOL,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;AACN,IAAA;AAEA;;;AAGC,MACD,MAAMqB,SAAAA,CAAUC,kBAAAA,GAA6D,EAAE,EAAE;QAC/E,MAAMC,4BAAAA,GAA+BtE,OAAOC,IAAI,CAACoE,oBAAoBvB,MAAM,CAEzE,CAACC,GAAAA,EAAKwB,GAAAA,GAAAA;AACN,YAAA,MAAMC,gBAAgBtB,oBAAAA,CAAqBqB,GAAAA,CAAAA;YAE3CxB,GAAG,CAACyB,cAAc,GAAG;gBACnB,GAAGzB,GAAG,CAACyB,aAAAA,CAAc;gBACrB,GAAGH,kBAAkB,CAACE,GAAAA;AACxB,aAAA;YAEA,OAAOxB,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;AAEJ,QAAA,MAAM0B,iBAAAA,GAAoB,MAAM,IAAI,CAACb,cAAc,EAAA;QACnD,MAAMc,iBAAAA,GAAoBC,IAAAA,CACxB,IAAI,CAACX,cAAc,CAACC,OAAO,CAACW,OAAO,CAAC,CAACzB,MAAAA,GAAAA;YACnC,MAAM0B,YAAAA,GAAexF,2BAA2B,CAAC8D,MAAAA,CAAO;AAExD,YAAA,OAAO0B,YAAAA,GAAe;AAAC1B,gBAAAA,MAAAA;AAAQ0B,gBAAAA;aAAa,GAAG;AAAC1B,gBAAAA;AAAO,aAAA;AACzD,QAAA,CAAA,CAAA,CAAA;QAGF,MAAM2B,eAAAA,GAAkB9E,MAAAA,CAAOC,IAAI,CAAC,IAAI,CAACC,UAAU,CAAA,CAChDgE,GAAG,CAAC,CAAC9D,MAAAA,GAAAA;AACJ,YAAA,MAAM2E,gBAAgB,IAAI,CAAC7E,UAAU,CAACE,MAAAA,CAAO,CAAC2E,aAAa;AAE3D,YAAA,IAAIA,aAAAA,EAAe;AACjB,gBAAA,OAAOA,aAAAA,CAAc;oBAAEd,OAAAA,EAASS;AAAkB,iBAAA,CAAA;AACpD,YAAA;YAEA,OAAO,IAAA;QACT,CAAA,CAAA,CACCM,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAAA;AAEjB,QAAA,MAAMC,YAAAA,GAAgB,MAAMpB,OAAAA,CAAQC,GAAG,CAACe,eAAAA,CAAAA;AACxC,QAAA,MAAMK,WAAAA,GAAcD,YAAAA,CAAapC,MAAM,CACrC,CAACC,GAAAA,EAAKqC,kBAAAA,GAAAA;AACJ,YAAA,MAAMC,WAAAA,GAAc,IAAI,CAACzC,kCAAkC,CAACwC,kBAAAA,CAAAA;AAE5DpF,YAAAA,MAAAA,CAAOC,IAAI,CAACoF,WAAAA,CAAAA,CAAalF,OAAO,CAAC,CAACgD,MAAAA,GAAAA;gBAChCJ,GAAG,CAACI,OAAO,GAAG;oBAAE,GAAGJ,GAAG,CAACI,MAAAA,CAAO;oBAAE,GAAGkC,WAAW,CAAClC,MAAAA;AAAQ,iBAAA;AACzD,YAAA,CAAA,CAAA;YAEA,OAAOJ,GAAAA;AACT,QAAA,CAAA,EACA,EAAC,CAAA;QAGH,MAAMuC,YAAAA,GAAe,IAAI,CAACtB,cAAc,CAACC,OAAO,CAACnB,MAAM,CAEpD,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;YACPD,GAAG,CAACC,QAAQ,GAAG;gBACb,GAAGyB,iBAAiB,CAACzB,OAAAA,CAAQ;gBAC7B,GAAGmC,WAAW,CAACnC,OAAAA,CAAQ;gBACvB,GAAGsB,4BAA4B,CAACtB,OAAAA;AAClC,aAAA;YAEA,OAAOD,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;AAEJ,QAAA,IAAI,CAACiB,cAAc,CAACsB,YAAY,GAAGA,YAAAA;AAEnC,QAAA,OAAOxB,QAAQyB,OAAO,EAAA;AACxB,IAAA;IAyBAC,MAAAA,GAAS;QACP,MAAMC,WAAAA,GAAcC,KAAKC,mBAAAA,EAAqB,IAAI,CAAC3B,cAAc,CAACC,OAAO,IAAI,EAAE,CAAA;AAC/E,QAAA,MAAM2B,YAAAA,GAAeC,YAAAA,CAAaC,OAAO,CAACC,0BAAAA,CAAAA,IAA+B,IAAA;AACzE,QAAA,MAAM5C,SAASD,oBAAAA,CAAqB0C,YAAAA,CAAAA;QAEpC,IAAI,CAACI,KAAK,GAAGC,kBAAAA,CACX;YACEC,SAAAA,EAAW;gBACTxD,WAAAA,EAAayD,KAAAA,CAAM,EAAC,EAAGC,oBAAAA,EAAsBC,oBAAAA,CAAAA;gBAC7CC,KAAAA,EAAO;AACLC,oBAAAA,eAAAA,EAAiB,EAAE;oBACnBC,YAAAA,EAAeX,YAAAA,CAAaC,OAAO,CAACW,uBAAAA,CAAAA,IAA4B;AAClE,iBAAA;gBACAC,QAAAA,EAAU;AACRvD,oBAAAA,MAAAA,EAAQsC,WAAW,CAACtC,MAAAA,CAAO,GAAGA,MAAAA,GAAS,IAAA;AACvCsC,oBAAAA;AACF,iBAAA;gBACAkB,KAAAA,EAAOC,cAAAA;AACT;AACF,SAAA,EACA,IAAI,CAACC,WAAW,EAChB,IAAI,CAACC,QAAQ,CAAA;QAGf,MAAMC,MAAAA,GAAS,IAAI,CAACA,MAAM,CAACC,YAAY,CAAC,IAAI,EAAE;YAC5CC,QAAAA,EAAUC,WAAAA;AACZ,SAAA,CAAA;AAEA,QAAA,qBAAOC,GAAA,CAACC,cAAAA,EAAAA;YAAeL,MAAAA,EAAQA;;AACjC,IAAA;IAhdA,WAAA,CAAY,EAAEM,MAAM,EAAEnH,UAAU,EAA4B,GAAG,EAAE,CAAE;AAnCnEoH,QAAAA,IAAAA,CAAAA,OAAAA,GAAkC,EAAC;AACnCC,QAAAA,IAAAA,CAAAA,SAAAA,GAA2D,EAAC;AACpDhE,QAAAA,IAAAA,CAAAA,uBAAAA,GAA0B,IAAIiE,GAAAA,EAAAA;aAEtCC,KAAAA,GAAQ;AACNC,YAAAA,cAAAA,EAAgB;AAClB,SAAA;AAEApC,QAAAA,IAAAA,CAAAA,YAAAA,GAA4D,EAAC;aAE7DtB,cAAAA,GAAiB;YACf2D,QAAAA,EAAUC,GAAAA;YACV3D,OAAAA,EAAS;AAAC,gBAAA;AAAK,aAAA;YACf4D,QAAAA,EAAUD,GAAAA;YACVE,aAAAA,EAAe;gBAAEC,QAAAA,EAAU;AAAK,aAAA;YAChCC,MAAAA,EAAQ;gBAAEC,KAAAA,EAAOC,UAAAA;gBAAYC,IAAAA,EAAMC;AAAU,aAAA;AAC7C9C,YAAAA,YAAAA,EAAc,EAAC;YACf+C,SAAAA,EAAW;AACb,SAAA;AAEA;;AAEC,MAAA,IAAA,CACDC,OAAO,IAAIC,IAAAA,EAAAA;aAEXC,OAAAA,GAAmB;AACjBC,YAAAA,UAAAA,EAAY,EAAC;AACbC,YAAAA,MAAAA,EAAQ;AACV,SAAA;AACA7B,QAAAA,IAAAA,CAAAA,WAAAA,GAA0D,EAAE;AAC5DC,QAAAA,IAAAA,CAAAA,QAAAA,GAA8B,EAAC;aAC/Bd,KAAAA,GAAsB,IAAA;AACtB2C,QAAAA,IAAAA,CAAAA,YAAAA,GAAe,IAAIC,YAAAA,EAAAA;AACnB5H,QAAAA,IAAAA,CAAAA,OAAAA,GAAU,IAAI6H,OAAAA,EAAAA;AAgBdnI,QAAAA,IAAAA,CAAAA,aAAAA,GAAgB,CAAC+H,UAAAA,GAAAA;YACf,IAAIK,KAAAA,CAAMC,OAAO,CAACN,UAAAA,CAAAA,EAAa;gBAC7BA,UAAAA,CAAWvE,GAAG,CAAC,CAAC8E,IAAAA,GAAAA;oBACdC,SAAAA,CAAUD,IAAAA,CAAKE,SAAS,EAAE,8BAAA,CAAA;oBAC1BD,SAAAA,CAAUD,IAAAA,CAAKG,IAAI,EAAE,yBAAA,CAAA;oBAErB,IAAI,CAACX,OAAO,CAACC,UAAU,CAACO,KAAKG,IAAI,CAAC,GAAGH,IAAAA,CAAKE,SAAS;AACrD,gBAAA,CAAA,CAAA;YACF,CAAA,MAAO;gBACLD,SAAAA,CAAUR,UAAAA,CAAWS,SAAS,EAAE,8BAAA,CAAA;gBAChCD,SAAAA,CAAUR,UAAAA,CAAWU,IAAI,EAAE,yBAAA,CAAA;gBAE3B,IAAI,CAACX,OAAO,CAACC,UAAU,CAACA,WAAWU,IAAI,CAAC,GAAGV,UAAAA,CAAWS,SAAS;AACjE,YAAA;AACF,QAAA,CAAA;AAEAvI,QAAAA,IAAAA,CAAAA,SAAAA,GAAY,CAAC+H,MAAAA,GAAAA;YACX,IAAII,KAAAA,CAAMC,OAAO,CAACL,MAAAA,CAAAA,EAAS;gBACzBA,MAAAA,CAAOxE,GAAG,CAAC,CAACkF,KAAAA,GAAAA;oBACVH,SAAAA,CAAUG,KAAAA,CAAMF,SAAS,EAAE,8BAAA,CAAA;oBAC3BD,SAAAA,CAAUG,KAAAA,CAAMC,IAAI,EAAE,yBAAA,CAAA;oBAEtB,IAAI,CAACb,OAAO,CAACE,MAAM,CAACU,MAAMC,IAAI,CAAC,GAAGD,KAAAA,CAAMF,SAAS;AACnD,gBAAA,CAAA,CAAA;YACF,CAAA,MAAO;gBACLD,SAAAA,CAAUP,MAAAA,CAAOQ,SAAS,EAAE,8BAAA,CAAA;gBAC5BD,SAAAA,CAAUP,MAAAA,CAAOW,IAAI,EAAE,yBAAA,CAAA;gBAEvB,IAAI,CAACb,OAAO,CAACE,MAAM,CAACA,OAAOW,IAAI,CAAC,GAAGX,MAAAA,CAAOQ,SAAS;AACrD,YAAA;AACF,QAAA,CAAA;AAEAI,QAAAA,IAAAA,CAAAA,cAAAA,GAAiB,CAACzC,WAAAA,GAAAA;YAChBA,WAAAA,CAAY1G,OAAO,CAAC,CAACoJ,UAAAA,GAAAA;AACnB,gBAAA,IAAI,CAAC1C,WAAW,CAAC9E,IAAI,CAACwH,UAAAA,CAAAA;AACxB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AAEAC,QAAAA,IAAAA,CAAAA,iBAAAA,GAAoB,CAACC,CAAAA,GAAAA;YACnB,IAAIX,KAAAA,CAAMC,OAAO,CAACU,CAAAA,CAAAA,EAAI;AACpB,gBAAA,IAAI,CAACnB,IAAI,CAACoB,GAAG,CAACD,CAAAA,CAAAA;YAChB,CAAA,MAAO;AACL,gBAAA,IAAI,CAACnB,IAAI,CAACoB,GAAG,CAACD,CAAAA,CAAAA;AAChB,YAAA;AACF,QAAA,CAAA;AAEA5I,QAAAA,IAAAA,CAAAA,WAAAA,GAAc,CAACiG,QAAAA,GAAAA;AACb;;;QAIA9G,MAAAA,CAAO2J,OAAO,CAAC7C,QAAAA,CAAAA,CAAU3G,OAAO,CAAC,CAAC,CAACgJ,IAAAA,EAAMS,OAAAA,CAAQ,GAAA;AAC/C,gBAAA,IAAI,CAAC9C,QAAQ,CAACqC,IAAAA,CAAK,GAAGS,OAAAA;AACxB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AAEAhJ,QAAAA,IAAAA,CAAAA,WAAAA,GAAc,CAACa,IAAAA,GACb,IAAI,CAACsF,MAAM,CAACnG,WAAW,CAACa,IAAAA,CAAAA;AAE1B;;;MAGC,IAAA,CACDnB,gBAAAA,GAAmB,CAACuJ,SAAAA,EAAmBC,KAAAA,GAAAA;YACrCb,SAAAA,CAAUH,KAAAA,CAAMC,OAAO,CAACe,KAAAA,CAAAA,EAAQ,yCAAA,CAAA;AAEhC,YAAA,IAAI,CAAC/C,MAAM,CAAC1G,eAAe,CAACwJ,SAAAA,EAAWC,KAAAA,CAAAA;AACzC,QAAA,CAAA;AAEA;;;MAGC,IAAA,CACDC,oBAAAA,GAAuB,CACrBC,OAAAA,EACAF,KAAAA,GACG,IAAI,CAAC/C,MAAM,CAAC1G,eAAe,CAAC2J,OAAAA,EAASF,KAAAA,CAAAA;AAE1C;;;;;MAKC,IAAA,CACDzJ,eAAAA,GAAkB,CAChBwJ,SAAAA,EACApI,IAAAA,GAAAA;AAEA,YAAA,IAAI,CAACsF,MAAM,CAAC1G,eAAe,CAACwJ,SAAAA,EAAWpI,IAAAA,CAAAA;AACzC,QAAA,CAAA;AA8BAwI,QAAAA,IAAAA,CAAAA,0BAAAA,GAA6B,CAACC,YAAAA,GAAAA;YAC5B,IAAIA,YAAAA,CAAajG,OAAO,EAAE;AACxB,gBAAA,MAAMkG,YAAAA,GACJD,YAAAA,CAAajG,OAAO,EAChBe,OAAO,CAACoF,GAAAA,GAAQA,GAAAA,KAAQ,IAAA,CAAA,CACzBlG,GAAAA,CAAI,CAACkG,GAAAA,GAAQlH,oBAAAA,CAAqBkH,SAAS,EAAE;AAElD,gBAAA,IAAI,CAACpG,cAAc,CAACC,OAAO,GAAGU,IAAAA,CAAK;AAAC,oBAAA,IAAA;AAASwF,oBAAAA,GAAAA;AAAa,iBAAA,CAAA;AAC5D,YAAA;YAEA,IAAID,YAAAA,CAAaG,IAAI,EAAEC,IAAAA,EAAM;gBAC3B,IAAI,CAACtG,cAAc,CAAC2D,QAAQ,GAAGuC,YAAAA,CAAaG,IAAI,CAACC,IAAI;AACvD,YAAA;YAEA,IAAIJ,YAAAA,CAAaK,IAAI,EAAED,IAAAA,EAAM;gBAC3B,IAAI,CAACtG,cAAc,CAAC6D,QAAQ,GAAGqC,YAAAA,CAAaK,IAAI,CAACD,IAAI;AACvD,YAAA;YAEA,IAAIJ,YAAAA,CAAa5D,KAAK,EAAE;AACtB,gBAAA,MAAM8B,SAAAA,GAAY8B,YAAAA,CAAa5D,KAAK,CAAC6B,IAAI;AACzC,gBAAA,MAAMD,UAAAA,GAAagC,YAAAA,CAAa5D,KAAK,CAAC2B,KAAK;gBAE3C,IAAI,CAACG,SAAAA,IAAa,CAACF,UAAAA,EAAY;AAC7BxE,oBAAAA,OAAAA,CAAQC,IAAI,CACV,CAAC,+RAA+R,CAAC,CAAC6G,IAAI,EAAA,CAAA;oBAExSrE,KAAAA,CAAM,IAAI,CAACnC,cAAc,CAACgE,MAAM,CAACC,KAAK,EAAEiC,YAAAA,CAAa5D,KAAK,CAAA;AAC5D,gBAAA;gBAEA,IAAI4B,UAAAA,EAAY/B,MAAM,IAAI,CAACnC,cAAc,CAACgE,MAAM,CAACC,KAAK,EAAEC,UAAAA,CAAAA;gBAExD,IAAIE,SAAAA,EAAWjC,MAAM,IAAI,CAACnC,cAAc,CAACgE,MAAM,CAACG,IAAI,EAAEC,SAAAA,CAAAA;AACxD,YAAA;AAEA,YAAA,IAAI8B,YAAAA,CAAapC,aAAa,EAAEC,QAAAA,KAAa0C,SAAAA,EAAW;gBACtD,IAAI,CAACzG,cAAc,CAAC8D,aAAa,CAACC,QAAQ,GAAGmC,YAAAA,CAAapC,aAAa,CAACC,QAAQ;AAClF,YAAA;YAEA,IAAImC,YAAAA,CAAa7B,SAAS,KAAKoC,SAAAA,EAAW;AACxC,gBAAA,IAAI,CAACzG,cAAc,CAACqE,SAAS,GAAG6B,aAAa7B,SAAS;AACxD,YAAA;AACF,QAAA,CAAA;AAEAqC,QAAAA,IAAAA,CAAAA,UAAAA,GAAa,CAACvB,IAAAA,GAAAA;AACZ,YAAA,IAAI,CAAC5B,SAAS,CAAC4B,IAAAA,CAAK,GAAGuB,UAAAA,EAAAA;AACzB,QAAA,CAAA;aAEAC,0BAAAA,GAA6B,CAC3BC,YACAC,aAAAA,EACAC,SAAAA,GAAAA;YAEA,IAAI;;AAEF,gBAAA,OAAO,IAAI,CAACrD,KAAK,CAACC,cAAc,CAACkD,UAAAA,CAAW,CAACC,aAAAA,CAAc,CAACC,SAAAA,CAAU,IAAI,EAAE;AAC9E,YAAA,CAAA,CAAE,OAAOC,GAAAA,EAAK;gBACZrH,OAAAA,CAAQsH,KAAK,CAAC,+BAAA,EAAiCD,GAAAA,CAAAA;AAE/C,gBAAA,OAAO,EAAE;AACX,YAAA;AACF,QAAA,CAAA;AAEAxK,QAAAA,IAAAA,CAAAA,SAAAA,GAAY,CAACiB,QAAAA,GAAiC,IAAI,CAAC8F,OAAO,CAAC9F,QAAAA,CAAS;AAyNpEhB,QAAAA,IAAAA,CAAAA,YAAAA,GAAe,CAAC2I,IAAAA,EAAc8B,EAAAA,GAAAA;YAC5BhC,SAAAA,CACE,IAAI,CAAC1B,SAAS,CAAC4B,IAAAA,CAAK,EACpB,CAAC,SAAS,EAAEA,IAAAA,CAAK,0FAA0F,CAAC,CAAA;AAE9G,YAAA,IAAI,CAAC5B,SAAS,CAAC4B,IAAAA,CAAK,CAACrI,QAAQ,CAACmK,EAAAA,CAAAA;AAChC,QAAA,CAAA;AAEAC,QAAAA,IAAAA,CAAAA,cAAAA,GAAiB,CAACC,UAAAA,GAAAA;YAChB,MAAM/K,MAAAA,GAAS,IAAIgL,MAAAA,CAAOD,UAAAA,CAAAA;AAE1B,YAAA,IAAI,CAAC7D,OAAO,CAAClH,MAAAA,CAAOoB,QAAQ,CAAC,GAAGpB,MAAAA;AAClC,QAAA,CAAA;aAEAiL,aAAAA,GAAgB,CAAClC,MAAcmC,YAAAA,GAAe,KAAK,GACjDA,YAAAA,GAAe,IAAI,CAAC/D,SAAS,CAAC4B,KAAK,CAACoC,cAAc,KAAK,IAAI,CAAChE,SAAS,CAAC4B,IAAAA,CAAK,CAACqC,SAAS,EAAA;aAEvFC,gBAAAA,GAAmB,CAAKtC,MAAcuC,YAAAA,EAAiB1F,KAAAA,GAAAA;YACrD,OAAO,IAAI,CAACuB,SAAS,CAAC4B,KAAK,CAACwC,YAAY,CAACD,YAAAA,EAAc1F,KAAAA,CAAAA;AACzD,QAAA,CAAA;aAEA4F,eAAAA,GAAkB,CAACzC,OAAiB,IAAI,CAAC5B,SAAS,CAAC4B,IAAAA,CAAK,CAAC0C,WAAW,EAAA;AAhblE,QAAA,IAAI,CAAC3L,UAAU,GAAGA,UAAAA,IAAc,EAAC;AAEjC,QAAA,IAAI,CAAC+J,0BAA0B,CAAC5C,MAAAA,IAAU,EAAC,CAAA;QAE3C,IAAI,CAACqD,UAAU,CAACnL,sBAAAA,CAAAA;QAChB,IAAI,CAACmL,UAAU,CAAClL,wBAAAA,CAAAA;QAChB,IAAI,CAACkL,UAAU,CAACjL,6BAAAA,CAAAA;QAChB,IAAI,CAACiL,UAAU,CAAC/K,yBAAAA,CAAAA;QAChB,IAAI,CAAC+K,UAAU,CAAChL,uBAAAA,CAAAA;AAEhB,QAAA,IAAI,CAACqH,MAAM,GAAG,IAAI+E,MAAAA,CAAOC,gBAAAA,EAAAA,CAAAA;AAC3B,IAAA;AAqcF;;;;"}
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,YAAAA,GAAeC,uBAAAA,CAAOC,kBAAAA,CAAMC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;aAmB1B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;sBAOxB,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;;;;;WAKlD,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;sBAC9B,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;kBAC3C,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;;AAE3D,CAAC;AAED,MAAMC,MAAAA,GAAS;IACbC,YAAAA,EAAc,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;IAClCC,kBAAAA,EAAoB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;IACxCC,uBAAAA,EAAyB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;AAC7CC,IAAAA,OAAAA,EAAS,KAAK,EAAA,GAAK;AACrB,CAAA;AAEA,MAAMC,WAAAA,GAAc;AAAIC,IAAAA,GAAAA,KAAAA,CAAM,IAAIC,IAAI;AAAG,CAAA;AAEzC,MAAMC,0BAA0B,CAACC,QAAAA,GAAAA;IAC/B,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAEC,kBAAkB,EAAEC,iBAAiB,EAAE,GAAGJ,QAAAA;;;;;;;;;;;;;AAgB7E,IAAA,IAAIK,OAAOC,MAAM,CAACC,KAAK,CAACC,GAAG,KAAK,KAAA,EAAO;QACrC,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIP,YAAY,KAAA,EAAO;QACrB,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIC,gBAAAA,EAAkB;AACpB,QAAA,MAAMO,wBAAwBC,IAAAA,CAAKC,GAAG,KAAK,IAAID,IAAAA,CAAKR,kBAAkBU,OAAO,EAAA;QAE7E,IAAIH,qBAAAA,IAAyBlB,MAAAA,CAAOC,YAAY,EAAE;YAChD,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIY,iBAAAA,EAAmB;AACrB,QAAA,MAAMS,yBAAyBH,IAAAA,CAAKC,GAAG,KAAK,IAAID,IAAAA,CAAKN,mBAAmBQ,OAAO,EAAA;QAE/E,IAAIC,sBAAAA,IAA0BtB,MAAAA,CAAOG,uBAAuB,EAAE;YAC5D,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIS,kBAAAA,EAAoB;AACtB,QAAA,MAAMW,0BAA0BJ,IAAAA,CAAKC,GAAG,KAAK,IAAID,IAAAA,CAAKP,oBAAoBS,OAAO,EAAA;QAEjF,IAAIE,uBAAAA,IAA2BvB,MAAAA,CAAOE,kBAAkB,EAAE;YACxD,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA;;IAGA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMsB,SAAAA,GAAY,IAAA;AAChB,IAAA,MAAMC,QAAAA,GAAWC,yBAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,iBAAiB,EAAEC,oBAAoB,EAAE,GAAGC,oBAAAA,EAAAA;AACpD,IAAA,MAAM,CAACC,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IACnE,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAMC,qBAAqBC,kBAAAA,CAAW,WAAA,EAAa,CAACC,KAAAA,GAAUA,MAAMF,kBAAkB,CAAA;AACtF,IAAA,MAAMG,gBAAgBF,kBAAAA,CAAW,WAAA,EAAa,CAACC,KAAAA,GAAUA,MAAMC,aAAa,CAAA;;AAY5E,IAAA,MAAM,CAACC,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGT,gBAAAA,CAAMC,QAAQ,CACtD3B,uBAAAA,CAAwBqB,iBAAAA,CAAAA,CAAAA;;AAI1B,IAAA,MAAM,CAACe,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGX,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEzDD,IAAAA,gBAAAA,CAAMY,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,cAAcC,UAAAA,CAAW,IAAA;YAC7BH,gBAAAA,CAAiB,IAAA,CAAA;AACnB,QAAA,CAAA,EAAG7C,OAAOI,OAAO,CAAA;QAEjB,OAAO,IAAA;YACL6C,YAAAA,CAAaF,WAAAA,CAAAA;AACf,QAAA,CAAA;AACF,IAAA,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,EAAEG,IAAI,EAAE,GAAGC,YAAAA,CAAQ,WAAA,EAAa,CAACC,IAAAA,GAASA,IAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACR,aAAAA,EAAe;QAClB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,CAACF,aAAAA,EAAe;QAClB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMW,uBAAuB,OAAO,EAClCC,eAAe,EACfC,iBAAiB,EAIlB,GAAA;QACC,IAAI;AACF,YAAA,MAAMC,IAAAA,GAAO;gBACXC,KAAAA,EAAO,OAAOP,SAAS,QAAA,IAAYA,IAAAA,CAAKO,KAAK,GAAGP,IAAAA,CAAKO,KAAK,GAAG,EAAA;gBAC7DC,MAAAA,EAAQJ,eAAAA;gBACRK,OAAAA,EAASJ,iBAAAA;gBACTK,WAAAA,EAAatB,kBAAAA;AACbuB,gBAAAA,OAAAA,EAASpB,aAAAA,IAAiBqB,SAAAA;gBAC1BC,OAAAA,EAASjD,MAAAA,CAAOC,MAAM,CAACiD,WAAW;AAClCC,gBAAAA,qBAAAA,EAAuBC,OAAAA,CAAQC,GAAG,CAACC,cAAc,KAAK;AACxD,aAAA;AACA,YAAA,MAAMC,GAAAA,GAAM,MAAMC,KAAAA,CAChB,CAAA,EAAGJ,OAAAA,CAAQC,GAAG,CAACI,oBAAoB,IAAI,6BAAA,CAA8B,WAAW,CAAC,EACjF;gBACEC,MAAAA,EAAQ,MAAA;gBACRC,OAAAA,EAAS;oBACP,cAAA,EAAgB;AAClB,iBAAA;gBACAjB,IAAAA,EAAMkB,IAAAA,CAAKC,SAAS,CAACnB,IAAAA;AACvB,aAAA,CAAA;YAGF,IAAI,CAACa,GAAAA,CAAIO,EAAE,EAAE;AACX,gBAAA,MAAM,IAAIC,KAAAA,CAAM,6BAAA,CAAA;AAClB,YAAA;YAEA/C,oBAAAA,CAAqB,CAACrB,YAAc;AAClC,oBAAA,GAAGA,QAAQ;oBACXE,gBAAAA,EAAkB,IAAIQ,OAAO2D,QAAQ,EAAA;oBACrClE,kBAAAA,EAAoB,IAAA;oBACpBC,iBAAAA,EAAmB;iBACrB,CAAA,CAAA;YACAoB,qBAAAA,CAAsB,IAAA,CAAA;;YAEtBe,UAAAA,CAAW,IAAA;gBACTL,gBAAAA,CAAiB,KAAA,CAAA;YACnB,CAAA,EAAG,IAAA,CAAA;AACL,QAAA,CAAA,CAAE,OAAOoC,GAAAA,EAAK;YACZ3C,kBAAAA,CAAmB;gBACjB4C,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAAStD,aAAAA,CAAc;oBAAEuD,EAAAA,EAAI,oBAAA;oBAAsBC,cAAAA,EAAgB;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,aAAAA,GAAgB,IAAA;AACpBtD,QAAAA,oBAAAA,CAAqB,CAACrB,QAAAA,GAAAA;AACpB,YAAA,MAAM4E,YAAAA,GAAe;AACnB,gBAAA,GAAG5E,QAAQ;gBACXE,gBAAAA,EAAkB;AACpB,aAAA;YAEA,IAAIF,QAAAA,CAASG,kBAAkB,EAAE;;AAE/ByE,gBAAAA,YAAAA,CAAaxE,iBAAiB,GAAG,IAAIM,IAAAA,EAAAA,CAAO2D,QAAQ,EAAA;YACtD,CAAA,MAAO;;AAELO,gBAAAA,YAAAA,CAAazE,kBAAkB,GAAG,IAAIO,IAAAA,EAAAA,CAAO2D,QAAQ,EAAA;AACvD,YAAA;YAEA,OAAOO,YAAAA;AACT,QAAA,CAAA,CAAA;QAEA1C,gBAAAA,CAAiB,KAAA,CAAA;AACnB,IAAA,CAAA;AAEA,IAAA,qBACE2C,cAAA,CAACC,mBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,cAAA,CAACE,aAAAA,EAAAA;YACCC,aAAAA,EAAe;gBAAElC,iBAAAA,EAAmB,EAAA;gBAAID,eAAAA,EAAiB;AAAK,aAAA;YAC9DoC,QAAAA,EAAUrC,oBAAAA;YACVsC,gBAAAA,EAAkBC,cAAAA,CAAIC,MAAM,CAAC;AAC3BtC,gBAAAA,iBAAAA,EAAmBqC,eAAIE,MAAM,EAAA;gBAC7BxC,eAAAA,EAAiBsC,cAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ;AACxC,aAAA,CAAA;sBAEC,CAAC,EAAEC,MAAM,EAAEC,YAAY,EAAEC,aAAa,EAAEC,YAAY,EAAE,iBACrDd,cAAA,CAACe,WAAAA,EAAAA;oBAAKC,IAAAA,EAAK,eAAA;AACT,oBAAA,QAAA,gBAAAhB,cAAA,CAACiB,gBAAAA,EAAAA;wBACCC,OAAAA,EAAS,CAAA;wBACTC,QAAAA,EAAS,OAAA;wBACTC,MAAAA,EAAQ,CAAA;wBACRC,IAAAA,EAAK,KAAA;wBACLC,SAAAA,EAAU,kBAAA;wBACVC,MAAAA,EAAO,KAAA;wBACPC,QAAAA,EAAU;4BAAEC,OAAAA,EAAS,MAAA;4BAAQC,MAAAA,EAAQ;AAAM,yBAAA;AAE3C,wBAAA,QAAA,gBAAA1B,cAAA,CAAC2B,iBAAAA,EAAAA;4BACCC,SAAS,EAAA,IAAA;4BACTC,SAAAA,EAAU,QAAA;4BACVX,OAAAA,EAAS,CAAA;4BACTY,WAAAA,EAAY,YAAA;4BACZC,UAAAA,EAAW,UAAA;4BACXC,MAAAA,EAAO,aAAA;4BACPC,IAAAA,EAAK,MAAA;AAEJvF,4BAAAA,QAAAA,EAAAA,kBAAAA,iBACCsD,cAAA,CAACkC,uBAAAA,EAAAA;gCAAWC,UAAAA,EAAW,UAAA;0CACpB9F,aAAAA,CAAc;oCACbuD,EAAAA,EAAI,4CAAA;oCACJC,cAAAA,EAAgB;AAClB,iCAAA;+CAGFuC,eAAA,CAACnB,gBAAAA,EAAAA;gCAAIoB,GAAAA,EAAI,UAAA;gCAAWC,KAAAA,EAAM,MAAA;gCAAOC,WAAAA,EAAa,CAAA;;kDAC5CH,eAAA,CAACT,iBAAAA,EAAAA;wCAAKa,cAAAA,EAAe,eAAA;wCAAgBF,KAAAA,EAAM,MAAA;wCAAOG,GAAAA,EAAK,CAAA;;0DACrDzC,cAAA,CAACiB,gBAAAA,EAAAA;gDAAIyB,UAAAA,EAAW,MAAA;gDAAOC,WAAAA,EAAY,MAAA;AACjC,gDAAA,QAAA,gBAAA3C,cAAA,CAACkC,uBAAAA,EAAAA;oDAAWC,UAAAA,EAAW,UAAA;oDAAWE,GAAAA,EAAI,QAAA;8DACnChG,aAAAA,CAAc;wDACbuD,EAAAA,EAAI,uCAAA;wDACJC,cAAAA,EACE;AACJ,qDAAA;;;0DAGJG,cAAA,CAAC4C,uBAAAA,EAAAA;gDACCC,OAAAA,EAAS/C,aAAAA;gDACTgD,WAAAA,EAAa,KAAA;AACbC,gDAAAA,KAAAA,EAAO1G,aAAAA,CAAc;oDACnBuD,EAAAA,EAAI,+CAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA,CAAA;gDACAH,IAAAA,EAAK,QAAA;AAEL,gDAAA,QAAA,gBAAAM,cAAA,CAACgD,WAAAA,EAAAA,EAAAA;;;;AAGJ7G,oCAAAA,QAAAA,iBACC6D,cAAA,CAACiB,gBAAAA,EAAAA;wCAAIgC,SAAAA,EAAW,CAAA;AACd,wCAAA,QAAA,gBAAAjD,cAAA,CAACkD,yBAAAA,EAAAA;AACCC,4CAAAA,WAAAA,EAAa9G,aAAAA,CAAc;gDACzBuD,EAAAA,EAAI,wCAAA;gDACJC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;AACAuD,4CAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTxC,gDAAAA,aAAAA,CAAc,iBAAA,EAAmByC,QAAAA,CAASD,KAAAA,CAAM7D,QAAQ,EAAA,EAAI,EAAA,CAAA,CAAA;AAC9D,4CAAA,CAAA;AACA6D,4CAAAA,KAAAA,EAAO1C,OAAO3C,eAAe;sDAE5BjD,WAAAA,CACEwI,IAAI,CAAC,CAACC,CAAAA,EAAGC,IAAMA,CAAAA,GAAID,CAAAA,CAAAA,CACnBE,GAAG,CAAC,CAACjD,MAAAA,GAAAA;gDACJ,MAAMkD,aAAAA,GACJlD,MAAAA,KAAW,CAAA,GACPpE,aAAAA,CAAc;oDACZuD,EAAAA,EAAI,4CAAA;oDACJC,cAAAA,EAAgB;iDAClB,CAAA,GACAY,MAAAA,KAAW,KACTpE,aAAAA,CAAc;oDACZuD,EAAAA,EAAI,6CAAA;oDACJC,cAAAA,EAAgB;iDAClB,CAAA,GACA,EAAA;AACR,gDAAA,qBACEuC,eAAA,CAACwB,+BAAAA,EAAAA;oDAAgCP,KAAAA,EAAO5C,MAAAA;;AACrCA,wDAAAA,MAAAA;AAAO,wDAAA,GAAA;AAAEkD,wDAAAA,aAAAA,IAAiB,CAAC,CAAC,EAAEA,aAAAA,CAAc,CAAC;;AADvBlD,iDAAAA,EAAAA,MAAAA,CAAAA;AAI7B,4CAAA,CAAA;;uDAIN2B,eAAA,CAACT,iBAAAA,EAAAA;wCAAKc,GAAAA,EAAK,CAAA;wCAAGQ,SAAAA,EAAW,CAAA;wCAAGY,YAAAA,EAAc,CAAA;wCAAGrB,cAAAA,EAAe,QAAA;;0DAC1DxC,cAAA,CAACkC,uBAAAA,EAAAA;gDAAW4B,OAAAA,EAAQ,IAAA;gDAAKC,SAAAA,EAAU,YAAA;0DAChC1H,aAAAA,CAAc;oDACbuD,EAAAA,EAAI,4CAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;4CAED9E,WAAAA,CAAY2I,GAAG,CAAC,CAACjD,MAAAA,GAAAA;AAChB,gDAAA,qBACET,cAAA,CAAC/F,YAAAA,EAAAA;oDAEC+G,IAAAA,EAAK,iBAAA;AACLgD,oDAAAA,SAAAA,EAAWrD,MAAAA,CAAO3C,eAAe,KAAKyC,MAAAA,GAAS,UAAA,GAAajC,SAAAA;oDAC5DoD,SAAS,EAAA,IAAA;oDACTG,UAAAA,EAAW,YAAA;oDACXD,WAAAA,EAAY,YAAA;oDACZmC,KAAAA,EAAM,YAAA;oDACN9C,QAAAA,EAAS,UAAA;oDACT+C,MAAAA,EAAO,SAAA;4EAEP9B,eAAA,CAACjI,mBAAMgK,KAAK,EAAA;;0EACVnE,cAAA,CAACoE,2BAAAA,EAAAA;wFACCpE,cAAA,CAAC7F,mBAAMkK,KAAK,EAAA;oEACV3E,IAAAA,EAAK,OAAA;oEACL4E,OAAAA,EAAS3D,MAAAA,CAAO3C,eAAe,KAAKyC,MAAAA;oEACpC2C,QAAAA,EAAU,CAACmB,IACT1D,aAAAA,CAAc,iBAAA,EAAmByC,SAASiB,CAAAA,CAAEC,MAAM,CAACnB,KAAK,EAAE,EAAA,CAAA,CAAA;oEAE5DA,KAAAA,EAAO5C;;;AAGVA,4DAAAA;;;AArBEA,iDAAAA,EAAAA,MAAAA,CAAAA;AAyBX,4CAAA,CAAA,CAAA;0DACAT,cAAA,CAACkC,uBAAAA,EAAAA;gDAAW4B,OAAAA,EAAQ,IAAA;gDAAKC,SAAAA,EAAU,YAAA;0DAChC1H,aAAAA,CAAc;oDACbuD,EAAAA,EAAI,6CAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;;;oCAILc,MAAAA,CAAO3C,eAAe,KAAK,IAAA,kBAC1BoE,eAAA,CAACT,iBAAAA,EAAAA;wCAAKE,SAAAA,EAAU,QAAA;wCAAS4C,UAAAA,EAAW,SAAA;;0DAClCzE,cAAA,CAACiB,gBAAAA,EAAAA;gDAAIgC,SAAAA,EAAW,CAAA;wEACdjD,cAAA,CAAC7F,mBAAMgK,KAAK,EAAA;oDAAChC,UAAAA,EAAW,UAAA;oDAAWuC,QAAAA,EAAU,CAAA;8DAC1CrI,aAAAA,CAAc;wDACbuD,EAAAA,EAAI,4CAAA;wDACJC,cAAAA,EAAgB;AAClB,qDAAA;;;0DAGJG,cAAA,CAACiB,gBAAAA,EAAAA;gDAAIgC,SAAAA,EAAW,CAAA;gDAAGY,YAAAA,EAAc,CAAA;gDAAGvB,KAAAA,EAAM,MAAA;AACxC,gDAAA,QAAA,gBAAAtC,cAAA,CAAC2E,qBAAAA,EAAAA;oDACC/E,EAAAA,EAAG,mBAAA;oDACH0C,KAAAA,EAAM,MAAA;oDACNc,QAAAA,EAAUxC,YAAAA;AACVyC,oDAAAA,KAAAA,EAAO1C,OAAO1C;;;0DAGlB+B,cAAA,CAACiB,gBAAAA,EAAAA;AACC,gDAAA,QAAA,gBAAAjB,cAAA,CAAC4E,mBAAAA,EAAAA;oDAAOf,YAAAA,EAAc,CAAA;oDAAGnE,IAAAA,EAAK,QAAA;oDAASmF,OAAAA,EAAS/D,YAAAA;8DAC7CzE,aAAAA,CAAc;wDACbuD,EAAAA,EAAI,0CAAA;wDACJC,cAAAA,EAAgB;AAClB,qDAAA;;;;;;;;;;;;AAc5B;AASA;;;AAGC,IACD,SAASpD,oBAAAA,GAAAA;AACP,IAAA,MAAM,CAACF,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGsI,sCAChD,4BAAA,EACA;QACE1J,OAAAA,EAAS,IAAA;QACTC,gBAAAA,EAAkB,IAAA;QAClBC,kBAAAA,EAAoB,IAAA;QACpBC,iBAAAA,EAAmB;AACrB,KAAA,CAAA;AAGF;;AAEC,MACD,OAAO;AAAEgB,QAAAA,iBAAAA;AAAmBC,QAAAA;AAAqB,KAAA;AACnD;;;;;"}
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,YAAAA,GAAeC,uBAAAA,CAAOC,kBAAAA,CAAMC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;aAmB1B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;sBAOxB,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;;;;;WAKlD,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;sBAC9B,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;kBAC3C,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;;AAE3D,CAAC;AAED,MAAMC,MAAAA,GAAS;IACbC,YAAAA,EAAc,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;IAClCC,kBAAAA,EAAoB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;IACxCC,uBAAAA,EAAyB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;AAC7CC,IAAAA,OAAAA,EAAS,KAAK,EAAA,GAAK;AACrB,CAAA;AAEA,MAAMC,WAAAA,GAAc;AAAIC,IAAAA,GAAAA,KAAAA,CAAM,IAAIC,IAAI;AAAG,CAAA;AAEzC,MAAMC,0BAA0B,CAACC,QAAAA,GAAAA;IAC/B,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAEC,kBAAkB,EAAEC,iBAAiB,EAAE,GAAGJ,QAAAA;;;;;;;;;;;;;AAgB7E,IAAA,IAAIK,OAAOC,MAAM,CAACC,KAAK,CAACC,GAAG,KAAK,KAAA,EAAO;QACrC,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIP,YAAY,KAAA,EAAO;QACrB,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIC,gBAAAA,EAAkB;AACpB,QAAA,MAAMO,wBAAwBC,IAAAA,CAAKC,GAAG,KAAK,IAAID,IAAAA,CAAKR,kBAAkBU,OAAO,EAAA;QAE7E,IAAIH,qBAAAA,IAAyBlB,MAAAA,CAAOC,YAAY,EAAE;YAChD,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIY,iBAAAA,EAAmB;AACrB,QAAA,MAAMS,yBAAyBH,IAAAA,CAAKC,GAAG,KAAK,IAAID,IAAAA,CAAKN,mBAAmBQ,OAAO,EAAA;QAE/E,IAAIC,sBAAAA,IAA0BtB,MAAAA,CAAOG,uBAAuB,EAAE;YAC5D,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA;;AAGA,IAAA,IAAIS,kBAAAA,EAAoB;AACtB,QAAA,MAAMW,0BAA0BJ,IAAAA,CAAKC,GAAG,KAAK,IAAID,IAAAA,CAAKP,oBAAoBS,OAAO,EAAA;QAEjF,IAAIE,uBAAAA,IAA2BvB,MAAAA,CAAOE,kBAAkB,EAAE;YACxD,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA;;IAGA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMsB,SAAAA,GAAY,IAAA;AAChB,IAAA,MAAMC,QAAAA,GAAWC,yBAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,iBAAiB,EAAEC,oBAAoB,EAAE,GAAGC,oBAAAA,EAAAA;AACpD,IAAA,MAAM,CAACC,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IACnE,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAMC,qBAAqBC,kBAAAA,CAAW,WAAA,EAAa,CAACC,KAAAA,GAAUA,MAAMF,kBAAkB,CAAA;AACtF,IAAA,MAAMG,gBAAgBF,kBAAAA,CAAW,WAAA,EAAa,CAACC,KAAAA,GAAUA,MAAMC,aAAa,CAAA;;AAY5E,IAAA,MAAM,CAACC,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGT,gBAAAA,CAAMC,QAAQ,CACtD3B,uBAAAA,CAAwBqB,iBAAAA,CAAAA,CAAAA;;AAI1B,IAAA,MAAM,CAACe,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGX,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEzDD,IAAAA,gBAAAA,CAAMY,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,cAAcC,UAAAA,CAAW,IAAA;YAC7BH,gBAAAA,CAAiB,IAAA,CAAA;AACnB,QAAA,CAAA,EAAG7C,OAAOI,OAAO,CAAA;QAEjB,OAAO,IAAA;YACL6C,YAAAA,CAAaF,WAAAA,CAAAA;AACf,QAAA,CAAA;AACF,IAAA,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,EAAEG,IAAI,EAAE,GAAGC,YAAAA,CAAQ,WAAA,EAAa,CAACC,IAAAA,GAASA,IAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACR,aAAAA,EAAe;QAClB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,CAACF,aAAAA,EAAe;QAClB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMW,uBAAuB,OAAO,EAClCC,eAAe,EACfC,iBAAiB,EAIlB,GAAA;QACC,IAAI;AACF,YAAA,MAAMC,IAAAA,GAAO;gBACXC,KAAAA,EAAO,OAAOP,SAAS,QAAA,IAAYA,IAAAA,CAAKO,KAAK,GAAGP,IAAAA,CAAKO,KAAK,GAAG,EAAA;gBAC7DC,MAAAA,EAAQJ,eAAAA;gBACRK,OAAAA,EAASJ,iBAAAA;gBACTK,WAAAA,EAAatB,kBAAAA;AACbuB,gBAAAA,OAAAA,EAASpB,aAAAA,IAAiBqB,SAAAA;gBAC1BC,OAAAA,EAASjD,MAAAA,CAAOC,MAAM,CAACiD,WAAW;AAClCC,gBAAAA,qBAAAA,EAAuBC,OAAAA,CAAQC,GAAG,CAACC,cAAc,KAAK;AACxD,aAAA;AACA,YAAA,MAAMC,GAAAA,GAAM,MAAMC,KAAAA,CAChB,CAAA,EAAGJ,OAAAA,CAAQC,GAAG,CAACI,oBAAoB,IAAI,6BAAA,CAA8B,WAAW,CAAC,EACjF;gBACEC,MAAAA,EAAQ,MAAA;gBACRC,OAAAA,EAAS;oBACP,cAAA,EAAgB;AAClB,iBAAA;gBACAjB,IAAAA,EAAMkB,IAAAA,CAAKC,SAAS,CAACnB,IAAAA;AACvB,aAAA,CAAA;YAGF,IAAI,CAACa,GAAAA,CAAIO,EAAE,EAAE;AACX,gBAAA,MAAM,IAAIC,KAAAA,CAAM,6BAAA,CAAA;AAClB,YAAA;YAEA/C,oBAAAA,CAAqB,CAACrB,YAAc;AAClC,oBAAA,GAAGA,QAAQ;oBACXE,gBAAAA,EAAkB,IAAIQ,OAAO2D,QAAQ,EAAA;oBACrClE,kBAAAA,EAAoB,IAAA;oBACpBC,iBAAAA,EAAmB;iBACrB,CAAA,CAAA;YACAoB,qBAAAA,CAAsB,IAAA,CAAA;;YAEtBe,UAAAA,CAAW,IAAA;gBACTL,gBAAAA,CAAiB,KAAA,CAAA;YACnB,CAAA,EAAG,IAAA,CAAA;AACL,QAAA,CAAA,CAAE,OAAM;YACNP,kBAAAA,CAAmB;gBACjB2C,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASrD,aAAAA,CAAc;oBAAEsD,EAAAA,EAAI,oBAAA;oBAAsBC,cAAAA,EAAgB;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,aAAAA,GAAgB,IAAA;AACpBrD,QAAAA,oBAAAA,CAAqB,CAACrB,QAAAA,GAAAA;AACpB,YAAA,MAAM2E,YAAAA,GAAe;AACnB,gBAAA,GAAG3E,QAAQ;gBACXE,gBAAAA,EAAkB;AACpB,aAAA;YAEA,IAAIF,QAAAA,CAASG,kBAAkB,EAAE;;AAE/BwE,gBAAAA,YAAAA,CAAavE,iBAAiB,GAAG,IAAIM,IAAAA,EAAAA,CAAO2D,QAAQ,EAAA;YACtD,CAAA,MAAO;;AAELM,gBAAAA,YAAAA,CAAaxE,kBAAkB,GAAG,IAAIO,IAAAA,EAAAA,CAAO2D,QAAQ,EAAA;AACvD,YAAA;YAEA,OAAOM,YAAAA;AACT,QAAA,CAAA,CAAA;QAEAzC,gBAAAA,CAAiB,KAAA,CAAA;AACnB,IAAA,CAAA;AAEA,IAAA,qBACE0C,cAAA,CAACC,mBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,cAAA,CAACE,aAAAA,EAAAA;YACCC,aAAAA,EAAe;gBAAEjC,iBAAAA,EAAmB,EAAA;gBAAID,eAAAA,EAAiB;AAAK,aAAA;YAC9DmC,QAAAA,EAAUpC,oBAAAA;YACVqC,gBAAAA,EAAkBC,cAAAA,CAAIC,MAAM,CAAC;AAC3BrC,gBAAAA,iBAAAA,EAAmBoC,eAAIE,MAAM,EAAA;gBAC7BvC,eAAAA,EAAiBqC,cAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ;AACxC,aAAA,CAAA;sBAEC,CAAC,EAAEC,MAAM,EAAEC,YAAY,EAAEC,aAAa,EAAEC,YAAY,EAAE,iBACrDd,cAAA,CAACe,WAAAA,EAAAA;oBAAKC,IAAAA,EAAK,eAAA;AACT,oBAAA,QAAA,gBAAAhB,cAAA,CAACiB,gBAAAA,EAAAA;wBACCC,OAAAA,EAAS,CAAA;wBACTC,QAAAA,EAAS,OAAA;wBACTC,MAAAA,EAAQ,CAAA;wBACRC,IAAAA,EAAK,KAAA;wBACLC,SAAAA,EAAU,kBAAA;wBACVC,MAAAA,EAAO,KAAA;wBACPC,QAAAA,EAAU;4BAAEC,OAAAA,EAAS,MAAA;4BAAQC,MAAAA,EAAQ;AAAM,yBAAA;AAE3C,wBAAA,QAAA,gBAAA1B,cAAA,CAAC2B,iBAAAA,EAAAA;4BACCC,SAAS,EAAA,IAAA;4BACTC,SAAAA,EAAU,QAAA;4BACVX,OAAAA,EAAS,CAAA;4BACTY,WAAAA,EAAY,YAAA;4BACZC,UAAAA,EAAW,UAAA;4BACXC,MAAAA,EAAO,aAAA;4BACPC,IAAAA,EAAK,MAAA;AAEJtF,4BAAAA,QAAAA,EAAAA,kBAAAA,iBACCqD,cAAA,CAACkC,uBAAAA,EAAAA;gCAAWC,UAAAA,EAAW,UAAA;0CACpB7F,aAAAA,CAAc;oCACbsD,EAAAA,EAAI,4CAAA;oCACJC,cAAAA,EAAgB;AAClB,iCAAA;+CAGFuC,eAAA,CAACnB,gBAAAA,EAAAA;gCAAIoB,GAAAA,EAAI,UAAA;gCAAWC,KAAAA,EAAM,MAAA;gCAAOC,WAAAA,EAAa,CAAA;;kDAC5CH,eAAA,CAACT,iBAAAA,EAAAA;wCAAKa,cAAAA,EAAe,eAAA;wCAAgBF,KAAAA,EAAM,MAAA;wCAAOG,GAAAA,EAAK,CAAA;;0DACrDzC,cAAA,CAACiB,gBAAAA,EAAAA;gDAAIyB,UAAAA,EAAW,MAAA;gDAAOC,WAAAA,EAAY,MAAA;AACjC,gDAAA,QAAA,gBAAA3C,cAAA,CAACkC,uBAAAA,EAAAA;oDAAWC,UAAAA,EAAW,UAAA;oDAAWE,GAAAA,EAAI,QAAA;8DACnC/F,aAAAA,CAAc;wDACbsD,EAAAA,EAAI,uCAAA;wDACJC,cAAAA,EACE;AACJ,qDAAA;;;0DAGJG,cAAA,CAAC4C,uBAAAA,EAAAA;gDACCC,OAAAA,EAAS/C,aAAAA;gDACTgD,WAAAA,EAAa,KAAA;AACbC,gDAAAA,KAAAA,EAAOzG,aAAAA,CAAc;oDACnBsD,EAAAA,EAAI,+CAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA,CAAA;gDACAH,IAAAA,EAAK,QAAA;AAEL,gDAAA,QAAA,gBAAAM,cAAA,CAACgD,WAAAA,EAAAA,EAAAA;;;;AAGJ5G,oCAAAA,QAAAA,iBACC4D,cAAA,CAACiB,gBAAAA,EAAAA;wCAAIgC,SAAAA,EAAW,CAAA;AACd,wCAAA,QAAA,gBAAAjD,cAAA,CAACkD,yBAAAA,EAAAA;AACCC,4CAAAA,WAAAA,EAAa7G,aAAAA,CAAc;gDACzBsD,EAAAA,EAAI,wCAAA;gDACJC,cAAAA,EAAgB;AAClB,6CAAA,CAAA;AACAuD,4CAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTxC,gDAAAA,aAAAA,CAAc,iBAAA,EAAmByC,QAAAA,CAASD,KAAAA,CAAM5D,QAAQ,EAAA,EAAI,EAAA,CAAA,CAAA;AAC9D,4CAAA,CAAA;AACA4D,4CAAAA,KAAAA,EAAO1C,OAAO1C,eAAe;sDAE5BjD,WAAAA,CACEuI,IAAI,CAAC,CAACC,CAAAA,EAAGC,IAAMA,CAAAA,GAAID,CAAAA,CAAAA,CACnBE,GAAG,CAAC,CAACjD,MAAAA,GAAAA;gDACJ,MAAMkD,aAAAA,GACJlD,MAAAA,KAAW,CAAA,GACPnE,aAAAA,CAAc;oDACZsD,EAAAA,EAAI,4CAAA;oDACJC,cAAAA,EAAgB;iDAClB,CAAA,GACAY,MAAAA,KAAW,KACTnE,aAAAA,CAAc;oDACZsD,EAAAA,EAAI,6CAAA;oDACJC,cAAAA,EAAgB;iDAClB,CAAA,GACA,EAAA;AACR,gDAAA,qBACEuC,eAAA,CAACwB,+BAAAA,EAAAA;oDAAgCP,KAAAA,EAAO5C,MAAAA;;AACrCA,wDAAAA,MAAAA;AAAO,wDAAA,GAAA;AAAEkD,wDAAAA,aAAAA,IAAiB,CAAC,CAAC,EAAEA,aAAAA,CAAc,CAAC;;AADvBlD,iDAAAA,EAAAA,MAAAA,CAAAA;AAI7B,4CAAA,CAAA;;uDAIN2B,eAAA,CAACT,iBAAAA,EAAAA;wCAAKc,GAAAA,EAAK,CAAA;wCAAGQ,SAAAA,EAAW,CAAA;wCAAGY,YAAAA,EAAc,CAAA;wCAAGrB,cAAAA,EAAe,QAAA;;0DAC1DxC,cAAA,CAACkC,uBAAAA,EAAAA;gDAAW4B,OAAAA,EAAQ,IAAA;gDAAKC,SAAAA,EAAU,YAAA;0DAChCzH,aAAAA,CAAc;oDACbsD,EAAAA,EAAI,4CAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;4CAED7E,WAAAA,CAAY0I,GAAG,CAAC,CAACjD,MAAAA,GAAAA;AAChB,gDAAA,qBACET,cAAA,CAAC9F,YAAAA,EAAAA;oDAEC8G,IAAAA,EAAK,iBAAA;AACLgD,oDAAAA,SAAAA,EAAWrD,MAAAA,CAAO1C,eAAe,KAAKwC,MAAAA,GAAS,UAAA,GAAahC,SAAAA;oDAC5DmD,SAAS,EAAA,IAAA;oDACTG,UAAAA,EAAW,YAAA;oDACXD,WAAAA,EAAY,YAAA;oDACZmC,KAAAA,EAAM,YAAA;oDACN9C,QAAAA,EAAS,UAAA;oDACT+C,MAAAA,EAAO,SAAA;4EAEP9B,eAAA,CAAChI,mBAAM+J,KAAK,EAAA;;0EACVnE,cAAA,CAACoE,2BAAAA,EAAAA;wFACCpE,cAAA,CAAC5F,mBAAMiK,KAAK,EAAA;oEACV3E,IAAAA,EAAK,OAAA;oEACL4E,OAAAA,EAAS3D,MAAAA,CAAO1C,eAAe,KAAKwC,MAAAA;oEACpC2C,QAAAA,EAAU,CAACmB,IACT1D,aAAAA,CAAc,iBAAA,EAAmByC,SAASiB,CAAAA,CAAEC,MAAM,CAACnB,KAAK,EAAE,EAAA,CAAA,CAAA;oEAE5DA,KAAAA,EAAO5C;;;AAGVA,4DAAAA;;;AArBEA,iDAAAA,EAAAA,MAAAA,CAAAA;AAyBX,4CAAA,CAAA,CAAA;0DACAT,cAAA,CAACkC,uBAAAA,EAAAA;gDAAW4B,OAAAA,EAAQ,IAAA;gDAAKC,SAAAA,EAAU,YAAA;0DAChCzH,aAAAA,CAAc;oDACbsD,EAAAA,EAAI,6CAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;;;oCAILc,MAAAA,CAAO1C,eAAe,KAAK,IAAA,kBAC1BmE,eAAA,CAACT,iBAAAA,EAAAA;wCAAKE,SAAAA,EAAU,QAAA;wCAAS4C,UAAAA,EAAW,SAAA;;0DAClCzE,cAAA,CAACiB,gBAAAA,EAAAA;gDAAIgC,SAAAA,EAAW,CAAA;wEACdjD,cAAA,CAAC5F,mBAAM+J,KAAK,EAAA;oDAAChC,UAAAA,EAAW,UAAA;oDAAWuC,QAAAA,EAAU,CAAA;8DAC1CpI,aAAAA,CAAc;wDACbsD,EAAAA,EAAI,4CAAA;wDACJC,cAAAA,EAAgB;AAClB,qDAAA;;;0DAGJG,cAAA,CAACiB,gBAAAA,EAAAA;gDAAIgC,SAAAA,EAAW,CAAA;gDAAGY,YAAAA,EAAc,CAAA;gDAAGvB,KAAAA,EAAM,MAAA;AACxC,gDAAA,QAAA,gBAAAtC,cAAA,CAAC2E,qBAAAA,EAAAA;oDACC/E,EAAAA,EAAG,mBAAA;oDACH0C,KAAAA,EAAM,MAAA;oDACNc,QAAAA,EAAUxC,YAAAA;AACVyC,oDAAAA,KAAAA,EAAO1C,OAAOzC;;;0DAGlB8B,cAAA,CAACiB,gBAAAA,EAAAA;AACC,gDAAA,QAAA,gBAAAjB,cAAA,CAAC4E,mBAAAA,EAAAA;oDAAOf,YAAAA,EAAc,CAAA;oDAAGnE,IAAAA,EAAK,QAAA;oDAASmF,OAAAA,EAAS/D,YAAAA;8DAC7CxE,aAAAA,CAAc;wDACbsD,EAAAA,EAAI,0CAAA;wDACJC,cAAAA,EAAgB;AAClB,qDAAA;;;;;;;;;;;;AAc5B;AASA;;;AAGC,IACD,SAASnD,oBAAAA,GAAAA;AACP,IAAA,MAAM,CAACF,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGqI,sCAChD,4BAAA,EACA;QACEzJ,OAAAA,EAAS,IAAA;QACTC,gBAAAA,EAAkB,IAAA;QAClBC,kBAAAA,EAAoB,IAAA;QACpBC,iBAAAA,EAAmB;AACrB,KAAA,CAAA;AAGF;;AAEC,MACD,OAAO;AAAEgB,QAAAA,iBAAAA;AAAmBC,QAAAA;AAAqB,KAAA;AACnD;;;;;"}
|