@strapi/admin 5.17.0 → 5.18.1
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 +27 -4
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +27 -4
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.js +2 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs +2 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +2 -2
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.js +40 -4
- package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs +21 -4
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
- package/dist/admin/admin/src/components/Providers.js +0 -2
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs +0 -2
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +27 -7
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +28 -8
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js +31 -9
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs +31 -9
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js +306 -0
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +1 -0
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs +304 -0
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +1 -0
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js +73 -27
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +1 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs +75 -30
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +1 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js +316 -28
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs +319 -30
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +52 -0
- package/dist/admin/admin/src/components/Widgets.js.map +1 -0
- package/dist/admin/admin/src/components/Widgets.mjs +50 -0
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -0
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +3 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +3 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +93 -0
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +95 -3
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +8 -3
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +10 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +6 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +6 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +58 -53
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +58 -53
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +38 -2
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +38 -2
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +3 -1
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +3 -1
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +3 -1
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +3 -1
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js +8 -0
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs +8 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +8 -0
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +8 -0
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +25 -21
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +25 -21
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/src/components/UnstableGuidedTour/Context.d.ts +12 -3
- package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +1 -0
- package/dist/admin/src/components/UnstableGuidedTour/Step.d.ts +11 -3
- package/dist/admin/src/components/UnstableGuidedTour/Tours.d.ts +40 -9
- package/dist/admin/src/components/Widgets.d.ts +2 -0
- package/dist/admin/src/core/apis/Widgets.d.ts +1 -1
- package/dist/admin/src/features/Auth.d.ts +1 -1
- package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -0
- package/dist/admin/src/utils/users.d.ts +5 -1
- package/dist/server/server/src/services/guided-tour.js +20 -2
- package/dist/server/server/src/services/guided-tour.js.map +1 -1
- package/dist/server/server/src/services/guided-tour.mjs +20 -2
- package/dist/server/server/src/services/guided-tour.mjs.map +1 -1
- package/dist/server/server/src/strategies/api-token.js +15 -4
- package/dist/server/server/src/strategies/api-token.js.map +1 -1
- package/dist/server/server/src/strategies/api-token.mjs +15 -4
- package/dist/server/server/src/strategies/api-token.mjs.map +1 -1
- package/dist/server/src/services/guided-tour.d.ts.map +1 -1
- package/dist/server/src/strategies/api-token.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
require('react');
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var icons = require('@strapi/icons');
|
|
6
7
|
var invariant = require('invariant');
|
|
7
8
|
var isFunction = require('lodash/isFunction');
|
|
8
9
|
var merge = require('lodash/merge');
|
|
@@ -25,7 +26,7 @@ var languageNativeNames = require('./translations/languageNativeNames.js');
|
|
|
25
26
|
|
|
26
27
|
function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
|
|
27
28
|
|
|
28
|
-
function
|
|
29
|
+
function __variableDynamicImportRuntime2__(path) {
|
|
29
30
|
switch (path) {
|
|
30
31
|
case './translations/ar.json': return Promise.resolve().then(function () { return require('./translations/ar.json.js'); });
|
|
31
32
|
case './translations/ca.json': return Promise.resolve().then(function () { return require('./translations/ca.json.js'); });
|
|
@@ -69,7 +70,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
|
|
72
|
-
function
|
|
73
|
+
function __variableDynamicImportRuntime1__(path) {
|
|
73
74
|
switch (path) {
|
|
74
75
|
case './translations/en-GB.js': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en-GB.js')); });
|
|
75
76
|
default: return new Promise(function(resolve, reject) {
|
|
@@ -107,6 +108,28 @@ class StrapiApp {
|
|
|
107
108
|
}
|
|
108
109
|
}
|
|
109
110
|
async register(customRegister) {
|
|
111
|
+
this.widgets.register([
|
|
112
|
+
{
|
|
113
|
+
icon: icons.User,
|
|
114
|
+
title: {
|
|
115
|
+
id: 'widget.profile.title',
|
|
116
|
+
defaultMessage: 'Profile'
|
|
117
|
+
},
|
|
118
|
+
component: async ()=>{
|
|
119
|
+
const { ProfileWidget } = await Promise.resolve().then(function () { return require('./components/Widgets.js'); });
|
|
120
|
+
return ProfileWidget;
|
|
121
|
+
},
|
|
122
|
+
pluginId: 'admin',
|
|
123
|
+
id: 'profile-info',
|
|
124
|
+
link: {
|
|
125
|
+
label: {
|
|
126
|
+
id: 'global.profile.settings',
|
|
127
|
+
defaultMessage: 'Profile settings'
|
|
128
|
+
},
|
|
129
|
+
href: '/me'
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
]);
|
|
110
133
|
Object.keys(this.appPlugins).forEach((plugin)=>{
|
|
111
134
|
this.appPlugins[plugin].register(this);
|
|
112
135
|
});
|
|
@@ -117,14 +140,14 @@ class StrapiApp {
|
|
|
117
140
|
async loadAdminTrads() {
|
|
118
141
|
const adminLocales = await Promise.all(this.configurations.locales.map(async (locale)=>{
|
|
119
142
|
try {
|
|
120
|
-
const { default: data } = await
|
|
143
|
+
const { default: data } = await __variableDynamicImportRuntime1__(`./translations/${locale}.js`);
|
|
121
144
|
return {
|
|
122
145
|
data,
|
|
123
146
|
locale
|
|
124
147
|
};
|
|
125
148
|
} catch {
|
|
126
149
|
try {
|
|
127
|
-
const { default: data } = await
|
|
150
|
+
const { default: data } = await __variableDynamicImportRuntime2__(`./translations/${locale}.json`);
|
|
128
151
|
return {
|
|
129
152
|
data,
|
|
130
153
|
locale
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrapiApp.js","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","widgets","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","link","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","pluginId","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StrapiApp.js","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { User } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import 'react';
|
|
3
3
|
import { lightTheme, darkTheme } from '@strapi/design-system';
|
|
4
|
+
import { User } from '@strapi/icons';
|
|
4
5
|
import invariant from 'invariant';
|
|
5
6
|
import isFunction from 'lodash/isFunction';
|
|
6
7
|
import merge from 'lodash/merge';
|
|
@@ -21,7 +22,7 @@ import { LANGUAGE_LOCAL_STORAGE_KEY, THEME_LOCAL_STORAGE_KEY, getStoredToken } f
|
|
|
21
22
|
import { getInitialRoutes } from './router.mjs';
|
|
22
23
|
import { languageNativeNames } from './translations/languageNativeNames.mjs';
|
|
23
24
|
|
|
24
|
-
function
|
|
25
|
+
function __variableDynamicImportRuntime2__(path) {
|
|
25
26
|
switch (path) {
|
|
26
27
|
case './translations/ar.json': return import('./translations/ar.json.mjs');
|
|
27
28
|
case './translations/ca.json': return import('./translations/ca.json.mjs');
|
|
@@ -65,7 +66,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
function
|
|
69
|
+
function __variableDynamicImportRuntime1__(path) {
|
|
69
70
|
switch (path) {
|
|
70
71
|
case './translations/en-GB.js': return import('./translations/en-GB.mjs');
|
|
71
72
|
default: return new Promise(function(resolve, reject) {
|
|
@@ -103,6 +104,28 @@ class StrapiApp {
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
async register(customRegister) {
|
|
107
|
+
this.widgets.register([
|
|
108
|
+
{
|
|
109
|
+
icon: User,
|
|
110
|
+
title: {
|
|
111
|
+
id: 'widget.profile.title',
|
|
112
|
+
defaultMessage: 'Profile'
|
|
113
|
+
},
|
|
114
|
+
component: async ()=>{
|
|
115
|
+
const { ProfileWidget } = await import('./components/Widgets.mjs');
|
|
116
|
+
return ProfileWidget;
|
|
117
|
+
},
|
|
118
|
+
pluginId: 'admin',
|
|
119
|
+
id: 'profile-info',
|
|
120
|
+
link: {
|
|
121
|
+
label: {
|
|
122
|
+
id: 'global.profile.settings',
|
|
123
|
+
defaultMessage: 'Profile settings'
|
|
124
|
+
},
|
|
125
|
+
href: '/me'
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
]);
|
|
106
129
|
Object.keys(this.appPlugins).forEach((plugin)=>{
|
|
107
130
|
this.appPlugins[plugin].register(this);
|
|
108
131
|
});
|
|
@@ -113,14 +136,14 @@ class StrapiApp {
|
|
|
113
136
|
async loadAdminTrads() {
|
|
114
137
|
const adminLocales = await Promise.all(this.configurations.locales.map(async (locale)=>{
|
|
115
138
|
try {
|
|
116
|
-
const { default: data } = await
|
|
139
|
+
const { default: data } = await __variableDynamicImportRuntime1__(`./translations/${locale}.js`);
|
|
117
140
|
return {
|
|
118
141
|
data,
|
|
119
142
|
locale
|
|
120
143
|
};
|
|
121
144
|
} catch {
|
|
122
145
|
try {
|
|
123
|
-
const { default: data } = await
|
|
146
|
+
const { default: data } = await __variableDynamicImportRuntime2__(`./translations/${locale}.json`);
|
|
124
147
|
return {
|
|
125
148
|
data,
|
|
126
149
|
locale
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","widgets","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","link","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","pluginId","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { User } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\nimport { DefaultTheme } from 'styled-components';\n\nimport { ADMIN_PERMISSIONS_EE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n head?: { favicon: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n head: { favicon: '' },\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.head?.favicon) {\n this.configurations.head.favicon = customConfig.head.favicon;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","permissions","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","constructor","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","head","favicon","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
@@ -97,7 +97,8 @@ const GuidedTourProvider = ({ children })=>{
|
|
|
97
97
|
setSkipped: setSkipped,
|
|
98
98
|
setStepState: setStepState,
|
|
99
99
|
startSection: startSection,
|
|
100
|
-
|
|
100
|
+
// TODO: remove the future condition when the unstable guided tour will be released
|
|
101
|
+
isGuidedTourVisible: isGuidedTourVisible && !window.strapi.future.isEnabled('unstableGuidedTour'),
|
|
101
102
|
isSkipped: isSkipped,
|
|
102
103
|
children: children
|
|
103
104
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.js","sources":["../../../../../../admin/src/components/GuidedTour/Provider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nconst GUIDED_TOUR_COMPLETED_STEPS = 'GUIDED_TOUR_COMPLETED_STEPS';\nconst GUIDED_TOUR_CURRENT_STEP = 'GUIDED_TOUR_CURRENT_STEP';\nconst GUIDED_TOUR_SKIPPED = 'GUIDED_TOUR_SKIPPED';\n\nconst GUIDED_TOUR_KEYS = {\n GUIDED_TOUR_COMPLETED_STEPS,\n GUIDED_TOUR_CURRENT_STEP,\n GUIDED_TOUR_SKIPPED,\n} as const;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\nimport { createContext } from '../Context';\n\ntype SectionKey = keyof GuidedTourContextValue['guidedTourState'];\ntype StepKey = keyof GuidedTourContextValue['guidedTourState'][SectionKey];\ntype Step = `${SectionKey}.${StepKey}`;\ninterface GuidedTourContextValue {\n currentStep: Step | null;\n guidedTourState: {\n contentTypeBuilder: {\n create: boolean;\n success: boolean;\n };\n contentManager: {\n create: boolean;\n success: boolean;\n };\n apiTokens: {\n create: boolean;\n success: boolean;\n };\n };\n isGuidedTourVisible: boolean;\n isSkipped: boolean;\n setCurrentStep: (step: Step | null) => void | null;\n setGuidedTourVisibility: (isVisible: boolean) => void;\n setSkipped: (isSkipped: boolean) => void;\n setStepState: (step: Step, state: boolean) => void;\n startSection: (section: SectionKey) => void;\n}\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<GuidedTourContextValue>('GuidedTour');\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nconst GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] =\n React.useReducer(reducer, initialState, initialiseState);\n\n const setCurrentStep = (step: SetCurrentStepAction['step']) => {\n // if step is null it is intentional, we need to dispatch it\n if (step !== null) {\n const isStepAlreadyDone = get(guidedTourState, step);\n const [sectionName, stepName] = step.split('.') as [SectionKey, StepKey];\n const sectionArray = Object.entries(guidedTourState[sectionName]);\n\n const currentStepIndex = sectionArray.findIndex(([key]) => key === stepName);\n const previousSteps = sectionArray.slice(0, currentStepIndex);\n\n const isStepToShow = previousSteps.every(([, sectionValue]) => sectionValue);\n\n if (isStepAlreadyDone || isSkipped || !isStepToShow) {\n return null;\n }\n }\n\n window.localStorage.setItem(GUIDED_TOUR_CURRENT_STEP, JSON.stringify(null));\n\n return dispatch({\n type: 'SET_CURRENT_STEP',\n step,\n });\n };\n\n const setGuidedTourVisibility = (value: SetGuidedTourVisibilityAction['value']) => {\n dispatch({\n type: 'SET_GUIDED_TOUR_VISIBILITY',\n value,\n });\n };\n\n const setStepState = (currentStep: Step, value: SetStepStateAction['value']) => {\n addCompletedStep(currentStep);\n\n dispatch({\n type: 'SET_STEP_STATE',\n currentStep,\n value,\n });\n };\n\n const startSection = (sectionName: SectionKey) => {\n const sectionSteps = guidedTourState[sectionName];\n\n if (sectionSteps) {\n const guidedTourArray = Object.entries(guidedTourState);\n\n // Find current section position in the guidedTourArray\n // Get only previous sections based on current section position\n const currentSectionIndex = guidedTourArray.findIndex(([key]) => key === sectionName);\n const previousSections = guidedTourArray.slice(0, currentSectionIndex);\n\n // Check if every steps from previous section are done\n const isSectionToShow = previousSections.every(([, sectionValue]) =>\n Object.values(sectionValue).every(Boolean)\n );\n\n const [firstStep] = Object.keys(sectionSteps) as [StepKey];\n const isFirstStepDone = sectionSteps[firstStep];\n\n if (isSectionToShow && !currentStep && !isFirstStepDone) {\n setCurrentStep(`${sectionName}.${firstStep}`);\n }\n }\n };\n\n const setSkipped = (value: SetSkippedAction['value']) => {\n window.localStorage.setItem(GUIDED_TOUR_SKIPPED, JSON.stringify(value));\n\n dispatch({\n type: 'SET_SKIPPED',\n value,\n });\n };\n\n return (\n <GuidedTourProviderImpl\n guidedTourState={guidedTourState}\n currentStep={currentStep}\n setCurrentStep={setCurrentStep}\n setGuidedTourVisibility={setGuidedTourVisibility}\n setSkipped={setSkipped}\n setStepState={setStepState}\n startSection={startSection}\n isGuidedTourVisible={isGuidedTourVisible}\n isSkipped={isSkipped}\n >\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\ntype State = Pick<\n GuidedTourContextValue,\n 'guidedTourState' | 'currentStep' | 'isGuidedTourVisible' | 'isSkipped'\n>;\n\nconst initialState = {\n currentStep: null,\n guidedTourState: {\n contentTypeBuilder: {\n create: false,\n success: false,\n },\n contentManager: {\n create: false,\n success: false,\n },\n apiTokens: {\n create: false,\n success: false,\n },\n },\n isGuidedTourVisible: false,\n isSkipped: false,\n} satisfies State;\n\ninterface SetCurrentStepAction {\n type: 'SET_CURRENT_STEP';\n step: Step | null;\n}\n\ninterface SetStepStateAction {\n type: 'SET_STEP_STATE';\n currentStep: Step;\n value: boolean;\n}\n\ninterface SetSkippedAction {\n type: 'SET_SKIPPED';\n value: boolean;\n}\n\ninterface SetGuidedTourVisibilityAction {\n type: 'SET_GUIDED_TOUR_VISIBILITY';\n value: boolean;\n}\n\ntype Action =\n | SetCurrentStepAction\n | SetStepStateAction\n | SetSkippedAction\n | SetGuidedTourVisibilityAction;\n\nconst reducer: React.Reducer<State, Action> = (state: State = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CURRENT_STEP': {\n draftState.currentStep = action.step;\n break;\n }\n case 'SET_STEP_STATE': {\n const [section, step] = action.currentStep.split('.') as [SectionKey, StepKey];\n draftState.guidedTourState[section][step] = action.value;\n break;\n }\n case 'SET_SKIPPED': {\n draftState.isSkipped = action.value;\n break;\n }\n case 'SET_GUIDED_TOUR_VISIBILITY': {\n draftState.isGuidedTourVisible = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nconst initialiseState = (initialState: State) => {\n const copyInitialState = { ...initialState };\n const guidedTourLocaleStorage = JSON.parse(\n window.localStorage.getItem(GUIDED_TOUR_COMPLETED_STEPS) ?? '[]'\n );\n const currentStepLocaleStorage = JSON.parse(\n window.localStorage.getItem(GUIDED_TOUR_CURRENT_STEP) ?? 'null'\n );\n const skippedLocaleStorage = JSON.parse(\n window.localStorage.getItem(GUIDED_TOUR_SKIPPED) ?? 'null'\n );\n\n if (Array.isArray(guidedTourLocaleStorage)) {\n guidedTourLocaleStorage.forEach((step) => {\n const [sectionName, stepName] = step.split('.');\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n });\n }\n\n // if current step when initializing mark it as done\n if (currentStepLocaleStorage) {\n const [sectionName, stepName] = currentStepLocaleStorage.split('.') as [SectionKey, StepKey];\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n\n addCompletedStep(currentStepLocaleStorage as Step);\n\n window.localStorage.setItem(GUIDED_TOUR_CURRENT_STEP, JSON.stringify(null));\n }\n\n if (skippedLocaleStorage !== null) {\n set(copyInitialState, 'isSkipped', skippedLocaleStorage);\n }\n\n return copyInitialState;\n};\n\n/**\n * @description Add a completed step to the local storage if it does not already exist.\n */\nconst addCompletedStep = (completedStep: Step) => {\n const currentSteps = JSON.parse(window.localStorage.getItem(GUIDED_TOUR_COMPLETED_STEPS) ?? '[]');\n\n if (!Array.isArray(currentSteps)) {\n return;\n }\n\n const isAlreadyStored = currentSteps.includes(completedStep);\n\n if (isAlreadyStored) {\n return;\n }\n\n window.localStorage.setItem(\n GUIDED_TOUR_COMPLETED_STEPS,\n JSON.stringify([...currentSteps, completedStep])\n );\n};\n\nexport { GuidedTourProvider, useGuidedTour, GuidedTourContextValue, GUIDED_TOUR_KEYS };\n"],"names":["GUIDED_TOUR_COMPLETED_STEPS","GUIDED_TOUR_CURRENT_STEP","GUIDED_TOUR_SKIPPED","GuidedTourProviderImpl","useGuidedTour","createContext","GuidedTourProvider","children","currentStep","guidedTourState","isGuidedTourVisible","isSkipped","dispatch","React","useReducer","reducer","initialState","initialiseState","setCurrentStep","step","isStepAlreadyDone","get","sectionName","stepName","split","sectionArray","Object","entries","currentStepIndex","findIndex","key","previousSteps","slice","isStepToShow","every","sectionValue","window","localStorage","setItem","JSON","stringify","type","setGuidedTourVisibility","value","setStepState","addCompletedStep","startSection","sectionSteps","guidedTourArray","currentSectionIndex","previousSections","isSectionToShow","values","Boolean","firstStep","keys","isFirstStepDone","setSkipped","_jsx","contentTypeBuilder","create","success","contentManager","apiTokens","state","action","produce","draftState","section","copyInitialState","guidedTourLocaleStorage","parse","getItem","currentStepLocaleStorage","skippedLocaleStorage","Array","isArray","forEach","set","completedStep","currentSteps","isAlreadyStored","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Provider.js","sources":["../../../../../../admin/src/components/GuidedTour/Provider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nconst GUIDED_TOUR_COMPLETED_STEPS = 'GUIDED_TOUR_COMPLETED_STEPS';\nconst GUIDED_TOUR_CURRENT_STEP = 'GUIDED_TOUR_CURRENT_STEP';\nconst GUIDED_TOUR_SKIPPED = 'GUIDED_TOUR_SKIPPED';\n\nconst GUIDED_TOUR_KEYS = {\n GUIDED_TOUR_COMPLETED_STEPS,\n GUIDED_TOUR_CURRENT_STEP,\n GUIDED_TOUR_SKIPPED,\n} as const;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\nimport { createContext } from '../Context';\n\ntype SectionKey = keyof GuidedTourContextValue['guidedTourState'];\ntype StepKey = keyof GuidedTourContextValue['guidedTourState'][SectionKey];\ntype Step = `${SectionKey}.${StepKey}`;\ninterface GuidedTourContextValue {\n currentStep: Step | null;\n guidedTourState: {\n contentTypeBuilder: {\n create: boolean;\n success: boolean;\n };\n contentManager: {\n create: boolean;\n success: boolean;\n };\n apiTokens: {\n create: boolean;\n success: boolean;\n };\n };\n isGuidedTourVisible: boolean;\n isSkipped: boolean;\n setCurrentStep: (step: Step | null) => void | null;\n setGuidedTourVisibility: (isVisible: boolean) => void;\n setSkipped: (isSkipped: boolean) => void;\n setStepState: (step: Step, state: boolean) => void;\n startSection: (section: SectionKey) => void;\n}\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<GuidedTourContextValue>('GuidedTour');\n\ninterface GuidedTourProviderProps {\n children: React.ReactNode;\n}\n\nconst GuidedTourProvider = ({ children }: GuidedTourProviderProps) => {\n const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] =\n React.useReducer(reducer, initialState, initialiseState);\n\n const setCurrentStep = (step: SetCurrentStepAction['step']) => {\n // if step is null it is intentional, we need to dispatch it\n if (step !== null) {\n const isStepAlreadyDone = get(guidedTourState, step);\n const [sectionName, stepName] = step.split('.') as [SectionKey, StepKey];\n const sectionArray = Object.entries(guidedTourState[sectionName]);\n\n const currentStepIndex = sectionArray.findIndex(([key]) => key === stepName);\n const previousSteps = sectionArray.slice(0, currentStepIndex);\n\n const isStepToShow = previousSteps.every(([, sectionValue]) => sectionValue);\n\n if (isStepAlreadyDone || isSkipped || !isStepToShow) {\n return null;\n }\n }\n\n window.localStorage.setItem(GUIDED_TOUR_CURRENT_STEP, JSON.stringify(null));\n\n return dispatch({\n type: 'SET_CURRENT_STEP',\n step,\n });\n };\n\n const setGuidedTourVisibility = (value: SetGuidedTourVisibilityAction['value']) => {\n dispatch({\n type: 'SET_GUIDED_TOUR_VISIBILITY',\n value,\n });\n };\n\n const setStepState = (currentStep: Step, value: SetStepStateAction['value']) => {\n addCompletedStep(currentStep);\n\n dispatch({\n type: 'SET_STEP_STATE',\n currentStep,\n value,\n });\n };\n\n const startSection = (sectionName: SectionKey) => {\n const sectionSteps = guidedTourState[sectionName];\n\n if (sectionSteps) {\n const guidedTourArray = Object.entries(guidedTourState);\n\n // Find current section position in the guidedTourArray\n // Get only previous sections based on current section position\n const currentSectionIndex = guidedTourArray.findIndex(([key]) => key === sectionName);\n const previousSections = guidedTourArray.slice(0, currentSectionIndex);\n\n // Check if every steps from previous section are done\n const isSectionToShow = previousSections.every(([, sectionValue]) =>\n Object.values(sectionValue).every(Boolean)\n );\n\n const [firstStep] = Object.keys(sectionSteps) as [StepKey];\n const isFirstStepDone = sectionSteps[firstStep];\n\n if (isSectionToShow && !currentStep && !isFirstStepDone) {\n setCurrentStep(`${sectionName}.${firstStep}`);\n }\n }\n };\n\n const setSkipped = (value: SetSkippedAction['value']) => {\n window.localStorage.setItem(GUIDED_TOUR_SKIPPED, JSON.stringify(value));\n\n dispatch({\n type: 'SET_SKIPPED',\n value,\n });\n };\n\n return (\n <GuidedTourProviderImpl\n guidedTourState={guidedTourState}\n currentStep={currentStep}\n setCurrentStep={setCurrentStep}\n setGuidedTourVisibility={setGuidedTourVisibility}\n setSkipped={setSkipped}\n setStepState={setStepState}\n startSection={startSection}\n // TODO: remove the future condition when the unstable guided tour will be released\n isGuidedTourVisible={\n isGuidedTourVisible && !window.strapi.future.isEnabled('unstableGuidedTour')\n }\n isSkipped={isSkipped}\n >\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\ntype State = Pick<\n GuidedTourContextValue,\n 'guidedTourState' | 'currentStep' | 'isGuidedTourVisible' | 'isSkipped'\n>;\n\nconst initialState = {\n currentStep: null,\n guidedTourState: {\n contentTypeBuilder: {\n create: false,\n success: false,\n },\n contentManager: {\n create: false,\n success: false,\n },\n apiTokens: {\n create: false,\n success: false,\n },\n },\n isGuidedTourVisible: false,\n isSkipped: false,\n} satisfies State;\n\ninterface SetCurrentStepAction {\n type: 'SET_CURRENT_STEP';\n step: Step | null;\n}\n\ninterface SetStepStateAction {\n type: 'SET_STEP_STATE';\n currentStep: Step;\n value: boolean;\n}\n\ninterface SetSkippedAction {\n type: 'SET_SKIPPED';\n value: boolean;\n}\n\ninterface SetGuidedTourVisibilityAction {\n type: 'SET_GUIDED_TOUR_VISIBILITY';\n value: boolean;\n}\n\ntype Action =\n | SetCurrentStepAction\n | SetStepStateAction\n | SetSkippedAction\n | SetGuidedTourVisibilityAction;\n\nconst reducer: React.Reducer<State, Action> = (state: State = initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CURRENT_STEP': {\n draftState.currentStep = action.step;\n break;\n }\n case 'SET_STEP_STATE': {\n const [section, step] = action.currentStep.split('.') as [SectionKey, StepKey];\n draftState.guidedTourState[section][step] = action.value;\n break;\n }\n case 'SET_SKIPPED': {\n draftState.isSkipped = action.value;\n break;\n }\n case 'SET_GUIDED_TOUR_VISIBILITY': {\n draftState.isGuidedTourVisible = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nconst initialiseState = (initialState: State) => {\n const copyInitialState = { ...initialState };\n const guidedTourLocaleStorage = JSON.parse(\n window.localStorage.getItem(GUIDED_TOUR_COMPLETED_STEPS) ?? '[]'\n );\n const currentStepLocaleStorage = JSON.parse(\n window.localStorage.getItem(GUIDED_TOUR_CURRENT_STEP) ?? 'null'\n );\n const skippedLocaleStorage = JSON.parse(\n window.localStorage.getItem(GUIDED_TOUR_SKIPPED) ?? 'null'\n );\n\n if (Array.isArray(guidedTourLocaleStorage)) {\n guidedTourLocaleStorage.forEach((step) => {\n const [sectionName, stepName] = step.split('.');\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n });\n }\n\n // if current step when initializing mark it as done\n if (currentStepLocaleStorage) {\n const [sectionName, stepName] = currentStepLocaleStorage.split('.') as [SectionKey, StepKey];\n set(copyInitialState, ['guidedTourState', sectionName, stepName], true);\n\n addCompletedStep(currentStepLocaleStorage as Step);\n\n window.localStorage.setItem(GUIDED_TOUR_CURRENT_STEP, JSON.stringify(null));\n }\n\n if (skippedLocaleStorage !== null) {\n set(copyInitialState, 'isSkipped', skippedLocaleStorage);\n }\n\n return copyInitialState;\n};\n\n/**\n * @description Add a completed step to the local storage if it does not already exist.\n */\nconst addCompletedStep = (completedStep: Step) => {\n const currentSteps = JSON.parse(window.localStorage.getItem(GUIDED_TOUR_COMPLETED_STEPS) ?? '[]');\n\n if (!Array.isArray(currentSteps)) {\n return;\n }\n\n const isAlreadyStored = currentSteps.includes(completedStep);\n\n if (isAlreadyStored) {\n return;\n }\n\n window.localStorage.setItem(\n GUIDED_TOUR_COMPLETED_STEPS,\n JSON.stringify([...currentSteps, completedStep])\n );\n};\n\nexport { GuidedTourProvider, useGuidedTour, GuidedTourContextValue, GUIDED_TOUR_KEYS };\n"],"names":["GUIDED_TOUR_COMPLETED_STEPS","GUIDED_TOUR_CURRENT_STEP","GUIDED_TOUR_SKIPPED","GuidedTourProviderImpl","useGuidedTour","createContext","GuidedTourProvider","children","currentStep","guidedTourState","isGuidedTourVisible","isSkipped","dispatch","React","useReducer","reducer","initialState","initialiseState","setCurrentStep","step","isStepAlreadyDone","get","sectionName","stepName","split","sectionArray","Object","entries","currentStepIndex","findIndex","key","previousSteps","slice","isStepToShow","every","sectionValue","window","localStorage","setItem","JSON","stringify","type","setGuidedTourVisibility","value","setStepState","addCompletedStep","startSection","sectionSteps","guidedTourArray","currentSectionIndex","previousSections","isSectionToShow","values","Boolean","firstStep","keys","isFirstStepDone","setSkipped","_jsx","strapi","future","isEnabled","contentTypeBuilder","create","success","contentManager","apiTokens","state","action","produce","draftState","section","copyInitialState","guidedTourLocaleStorage","parse","getItem","currentStepLocaleStorage","skippedLocaleStorage","Array","isArray","forEach","set","completedStep","currentSteps","isAlreadyStored","includes"],"mappings":"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"}
|
|
@@ -76,7 +76,8 @@ const GuidedTourProvider = ({ children })=>{
|
|
|
76
76
|
setSkipped: setSkipped,
|
|
77
77
|
setStepState: setStepState,
|
|
78
78
|
startSection: startSection,
|
|
79
|
-
|
|
79
|
+
// TODO: remove the future condition when the unstable guided tour will be released
|
|
80
|
+
isGuidedTourVisible: isGuidedTourVisible && !window.strapi.future.isEnabled('unstableGuidedTour'),
|
|
80
81
|
isSkipped: isSkipped,
|
|
81
82
|
children: children
|
|
82
83
|
});
|