@strapi/admin 5.42.1 → 5.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +17 -4
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +18 -5
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Form.js +29 -18
  6. package/dist/admin/admin/src/components/Form.js.map +1 -1
  7. package/dist/admin/admin/src/components/Form.mjs +29 -18
  8. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/FormInputs/Date.js +2 -2
  10. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  11. package/dist/admin/admin/src/components/FormInputs/Date.mjs +2 -2
  12. package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
  14. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  15. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +3 -2
  16. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/Layouts/Layout.js +1 -0
  18. package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
  19. package/dist/admin/admin/src/components/Layouts/Layout.mjs +1 -0
  20. package/dist/admin/admin/src/components/Layouts/Layout.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/PageHelpers.js +1 -1
  22. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  23. package/dist/admin/admin/src/components/PageHelpers.mjs +1 -1
  24. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/Table.js +28 -15
  26. package/dist/admin/admin/src/components/Table.js.map +1 -1
  27. package/dist/admin/admin/src/components/Table.mjs +29 -16
  28. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/Widgets.js +52 -0
  30. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  31. package/dist/admin/admin/src/components/Widgets.mjs +54 -3
  32. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  33. package/dist/admin/admin/src/core/store/configure.js +3 -1
  34. package/dist/admin/admin/src/core/store/configure.js.map +1 -1
  35. package/dist/admin/admin/src/core/store/configure.mjs +3 -1
  36. package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
  37. package/dist/admin/admin/src/hooks/usePersistentState.js +9 -4
  38. package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
  39. package/dist/admin/admin/src/hooks/usePersistentState.mjs +10 -6
  40. package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
  41. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +4 -1
  42. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs +4 -1
  44. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  45. package/dist/admin/admin/src/render.js +2 -0
  46. package/dist/admin/admin/src/render.js.map +1 -1
  47. package/dist/admin/admin/src/render.mjs +2 -0
  48. package/dist/admin/admin/src/render.mjs.map +1 -1
  49. package/dist/admin/admin/src/services/api.js +2 -2
  50. package/dist/admin/admin/src/services/api.js.map +1 -1
  51. package/dist/admin/admin/src/services/api.mjs +2 -2
  52. package/dist/admin/admin/src/services/api.mjs.map +1 -1
  53. package/dist/admin/admin/src/translations/ar.json.js +4 -1
  54. package/dist/admin/admin/src/translations/ar.json.js.map +1 -1
  55. package/dist/admin/admin/src/translations/ar.json.mjs +4 -1
  56. package/dist/admin/admin/src/translations/ar.json.mjs.map +1 -1
  57. package/dist/admin/admin/src/translations/cs.json.js +736 -13
  58. package/dist/admin/admin/src/translations/cs.json.js.map +1 -1
  59. package/dist/admin/admin/src/translations/cs.json.mjs +728 -14
  60. package/dist/admin/admin/src/translations/cs.json.mjs.map +1 -1
  61. package/dist/admin/admin/src/translations/de.json.js +4 -1
  62. package/dist/admin/admin/src/translations/de.json.js.map +1 -1
  63. package/dist/admin/admin/src/translations/de.json.mjs +4 -1
  64. package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
  65. package/dist/admin/admin/src/translations/en.json.js +4 -1
  66. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  67. package/dist/admin/admin/src/translations/en.json.mjs +4 -1
  68. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  69. package/dist/admin/admin/src/translations/es.json.js +4 -1
  70. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  71. package/dist/admin/admin/src/translations/es.json.mjs +4 -1
  72. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  73. package/dist/admin/admin/src/translations/fr.json.js +4 -1
  74. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  75. package/dist/admin/admin/src/translations/fr.json.mjs +4 -1
  76. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  77. package/dist/admin/admin/src/translations/it.json.js +4 -1
  78. package/dist/admin/admin/src/translations/it.json.js.map +1 -1
  79. package/dist/admin/admin/src/translations/it.json.mjs +4 -1
  80. package/dist/admin/admin/src/translations/it.json.mjs.map +1 -1
  81. package/dist/admin/admin/src/translations/nl.json.js +394 -89
  82. package/dist/admin/admin/src/translations/nl.json.js.map +1 -1
  83. package/dist/admin/admin/src/translations/nl.json.mjs +393 -90
  84. package/dist/admin/admin/src/translations/nl.json.mjs.map +1 -1
  85. package/dist/admin/admin/src/translations/ru.json.js +32 -19
  86. package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
  87. package/dist/admin/admin/src/translations/ru.json.mjs +32 -19
  88. package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
  89. package/dist/admin/admin/src/translations/zh-Hans.json.js +4 -1
  90. package/dist/admin/admin/src/translations/zh-Hans.json.js.map +1 -1
  91. package/dist/admin/admin/src/translations/zh-Hans.json.mjs +4 -1
  92. package/dist/admin/admin/src/translations/zh-Hans.json.mjs.map +1 -1
  93. package/dist/admin/admin/src/utils/getFetchClient.js +29 -3
  94. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  95. package/dist/admin/admin/src/utils/getFetchClient.mjs +29 -3
  96. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  97. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +1 -1
  98. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -1
  99. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +2 -2
  100. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -1
  101. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +1 -1
  102. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  103. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +2 -2
  104. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  105. package/dist/admin/ee/admin/src/services/ai.js +7 -7
  106. package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
  107. package/dist/admin/ee/admin/src/services/ai.mjs +6 -6
  108. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
  109. package/dist/admin/ee.js +2 -2
  110. package/dist/admin/ee.mjs +1 -1
  111. package/dist/admin/index.js +1 -0
  112. package/dist/admin/index.js.map +1 -1
  113. package/dist/admin/index.mjs +1 -1
  114. package/dist/admin/src/components/Widgets.d.ts +2 -1
  115. package/dist/admin/src/core/store/configure.d.ts +2 -2
  116. package/dist/admin/src/core/store/hooks.d.ts +2 -2
  117. package/dist/admin/src/ee.d.ts +1 -1
  118. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  119. package/dist/admin/src/hooks/usePersistentState.d.ts +2 -1
  120. package/dist/admin/src/index.d.ts +1 -1
  121. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  122. package/dist/admin/src/selectors.d.ts +2 -2
  123. package/dist/admin/src/services/admin.d.ts +6 -6
  124. package/dist/admin/src/services/api.d.ts +1 -1
  125. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  126. package/dist/admin/src/services/auth.d.ts +11 -11
  127. package/dist/admin/src/services/contentApi.d.ts +1 -1
  128. package/dist/admin/src/services/contentManager.d.ts +1 -1
  129. package/dist/admin/src/services/homepage.d.ts +3 -3
  130. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  131. package/dist/admin/src/services/users.d.ts +8 -8
  132. package/dist/admin/src/services/webhooks.d.ts +2 -2
  133. package/dist/admin/src/utils/getFetchClient.d.ts +14 -1
  134. package/dist/admin/tests/utils.d.ts +1 -1
  135. package/dist/ee/admin/src/services/ai.d.ts +6 -6
  136. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  137. package/dist/ee/server/src/index.d.ts +0 -16
  138. package/dist/ee/server/src/index.d.ts.map +1 -1
  139. package/dist/server/ee/server/src/index.js +0 -16
  140. package/dist/server/ee/server/src/index.js.map +1 -1
  141. package/dist/server/ee/server/src/index.mjs +0 -16
  142. package/dist/server/ee/server/src/index.mjs.map +1 -1
  143. package/dist/server/server/src/ai/controllers/ai.js +52 -0
  144. package/dist/server/server/src/ai/controllers/ai.js.map +1 -0
  145. package/dist/server/server/src/ai/controllers/ai.mjs +50 -0
  146. package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -0
  147. package/dist/server/{ee/server → server}/src/ai/routes/ai.js +1 -2
  148. package/dist/server/server/src/ai/routes/ai.js.map +1 -0
  149. package/dist/server/{ee/server → server}/src/ai/routes/ai.mjs +1 -2
  150. package/dist/server/server/src/ai/routes/ai.mjs.map +1 -0
  151. package/dist/server/{ee/server/src/ai/containers → server/src/ai/services}/ai.js +107 -32
  152. package/dist/server/server/src/ai/services/ai.js.map +1 -0
  153. package/dist/server/{ee/server/src/ai/containers → server/src/ai/services}/ai.mjs +107 -32
  154. package/dist/server/server/src/ai/services/ai.mjs.map +1 -0
  155. package/dist/server/server/src/controllers/index.js +3 -1
  156. package/dist/server/server/src/controllers/index.js.map +1 -1
  157. package/dist/server/server/src/controllers/index.mjs +3 -1
  158. package/dist/server/server/src/controllers/index.mjs.map +1 -1
  159. package/dist/server/server/src/register.js +4 -0
  160. package/dist/server/server/src/register.js.map +1 -1
  161. package/dist/server/server/src/register.mjs +4 -0
  162. package/dist/server/server/src/register.mjs.map +1 -1
  163. package/dist/server/server/src/routes/index.js +3 -1
  164. package/dist/server/server/src/routes/index.js.map +1 -1
  165. package/dist/server/server/src/routes/index.mjs +3 -1
  166. package/dist/server/server/src/routes/index.mjs.map +1 -1
  167. package/dist/{ee/server → server}/src/ai/controllers/ai.d.ts +1 -1
  168. package/dist/server/src/ai/controllers/ai.d.ts.map +1 -0
  169. package/dist/server/src/ai/routes/ai.d.ts.map +1 -0
  170. package/dist/server/src/ai/services/ai.d.ts +30 -0
  171. package/dist/server/src/ai/services/ai.d.ts.map +1 -0
  172. package/dist/server/src/controllers/index.d.ts +5 -0
  173. package/dist/server/src/controllers/index.d.ts.map +1 -1
  174. package/dist/server/src/index.d.ts +5 -0
  175. package/dist/server/src/index.d.ts.map +1 -1
  176. package/dist/server/src/register.d.ts.map +1 -1
  177. package/dist/server/src/routes/index.d.ts.map +1 -1
  178. package/dist/shared/contracts/ai.d.ts +3 -3
  179. package/package.json +11 -11
  180. package/dist/ee/server/src/ai/containers/ai.d.ts +0 -15
  181. package/dist/ee/server/src/ai/containers/ai.d.ts.map +0 -1
  182. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +0 -1
  183. package/dist/ee/server/src/ai/routes/ai.d.ts.map +0 -1
  184. package/dist/server/ee/server/src/ai/containers/ai.js.map +0 -1
  185. package/dist/server/ee/server/src/ai/containers/ai.mjs.map +0 -1
  186. package/dist/server/ee/server/src/ai/controllers/ai.js +0 -121
  187. package/dist/server/ee/server/src/ai/controllers/ai.js.map +0 -1
  188. package/dist/server/ee/server/src/ai/controllers/ai.mjs +0 -119
  189. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +0 -1
  190. package/dist/server/ee/server/src/ai/routes/ai.js.map +0 -1
  191. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +0 -1
  192. /package/dist/{ee/server → server}/src/ai/routes/ai.d.ts +0 -0
@@ -26,7 +26,7 @@ var languageNativeNames = require('./translations/languageNativeNames.js');
26
26
 
27
27
  function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
28
28
 
29
- function __variableDynamicImportRuntime4__(path) {
29
+ function __variableDynamicImportRuntime5__(path) {
30
30
  switch (path) {
31
31
  case './translations/ar.json': return Promise.resolve().then(function () { return require('./translations/ar.json.js'); });
32
32
  case './translations/ca.json': return Promise.resolve().then(function () { return require('./translations/ca.json.js'); });
@@ -71,7 +71,7 @@ function __variableDynamicImportRuntime4__(path) {
71
71
  }
72
72
  }
73
73
 
74
- function __variableDynamicImportRuntime3__(path) {
74
+ function __variableDynamicImportRuntime4__(path) {
75
75
  switch (path) {
76
76
  case './translations/en-GB.js': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en-GB.js')); });
77
77
  default: return new Promise(function(resolve, reject) {
@@ -145,6 +145,19 @@ class StrapiApp {
145
145
  roles: [
146
146
  'strapi-super-admin'
147
147
  ]
148
+ },
149
+ {
150
+ icon: icons.Cloud,
151
+ title: {
152
+ id: 'widget.deploy-now.title',
153
+ defaultMessage: 'Deploy'
154
+ },
155
+ component: async ()=>{
156
+ const { DeployNowWidget } = await Promise.resolve().then(function () { return require('./components/Widgets.js'); });
157
+ return DeployNowWidget;
158
+ },
159
+ pluginId: 'admin',
160
+ id: 'deploy-now'
148
161
  }
149
162
  ]);
150
163
  Object.keys(this.appPlugins).forEach((plugin)=>{
@@ -187,14 +200,14 @@ class StrapiApp {
187
200
  async loadAdminTrads() {
188
201
  const adminLocales = await Promise.all(this.configurations.locales.map(async (locale)=>{
189
202
  try {
190
- const { default: data } = await __variableDynamicImportRuntime3__(`./translations/${locale}.js`);
203
+ const { default: data } = await __variableDynamicImportRuntime4__(`./translations/${locale}.js`);
191
204
  return {
192
205
  data,
193
206
  locale
194
207
  };
195
208
  } catch {
196
209
  try {
197
- const { default: data } = await __variableDynamicImportRuntime4__(`./translations/${locale}.json`);
210
+ const { default: data } = await __variableDynamicImportRuntime5__(`./translations/${locale}.json`);
198
211
  return {
199
212
  data,
200
213
  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 { Clock, User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } 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';\nimport type { DefaultTheme } from 'styled-components';\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 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 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.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n\n // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","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","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
1
+ {"version":3,"file":"StrapiApp.js","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { Cloud, Clock, User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } 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';\nimport type { DefaultTheme } from 'styled-components';\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 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 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.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n {\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n\n // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","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","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import 'react';
3
3
  import { darkTheme, lightTheme } from '@strapi/design-system';
4
- import { User, TrendUp, Clock } from '@strapi/icons';
4
+ import { User, TrendUp, Cloud, Clock } from '@strapi/icons';
5
5
  import invariant from 'invariant';
6
6
  import isFunction from 'lodash/isFunction';
7
7
  import merge from 'lodash/merge';
@@ -22,7 +22,7 @@ import { LANGUAGE_LOCAL_STORAGE_KEY, getStoredToken, THEME_LOCAL_STORAGE_KEY } f
22
22
  import { getInitialRoutes } from './router.mjs';
23
23
  import { languageNativeNames } from './translations/languageNativeNames.mjs';
24
24
 
25
- function __variableDynamicImportRuntime4__(path) {
25
+ function __variableDynamicImportRuntime5__(path) {
26
26
  switch (path) {
27
27
  case './translations/ar.json': return import('./translations/ar.json.mjs');
28
28
  case './translations/ca.json': return import('./translations/ca.json.mjs');
@@ -67,7 +67,7 @@ function __variableDynamicImportRuntime4__(path) {
67
67
  }
68
68
  }
69
69
 
70
- function __variableDynamicImportRuntime3__(path) {
70
+ function __variableDynamicImportRuntime4__(path) {
71
71
  switch (path) {
72
72
  case './translations/en-GB.js': return import('./translations/en-GB.mjs');
73
73
  default: return new Promise(function(resolve, reject) {
@@ -141,6 +141,19 @@ class StrapiApp {
141
141
  roles: [
142
142
  'strapi-super-admin'
143
143
  ]
144
+ },
145
+ {
146
+ icon: Cloud,
147
+ title: {
148
+ id: 'widget.deploy-now.title',
149
+ defaultMessage: 'Deploy'
150
+ },
151
+ component: async ()=>{
152
+ const { DeployNowWidget } = await import('./components/Widgets.mjs');
153
+ return DeployNowWidget;
154
+ },
155
+ pluginId: 'admin',
156
+ id: 'deploy-now'
144
157
  }
145
158
  ]);
146
159
  Object.keys(this.appPlugins).forEach((plugin)=>{
@@ -183,14 +196,14 @@ class StrapiApp {
183
196
  async loadAdminTrads() {
184
197
  const adminLocales = await Promise.all(this.configurations.locales.map(async (locale)=>{
185
198
  try {
186
- const { default: data } = await __variableDynamicImportRuntime3__(`./translations/${locale}.js`);
199
+ const { default: data } = await __variableDynamicImportRuntime4__(`./translations/${locale}.js`);
187
200
  return {
188
201
  data,
189
202
  locale
190
203
  };
191
204
  } catch {
192
205
  try {
193
- const { default: data } = await __variableDynamicImportRuntime4__(`./translations/${locale}.json`);
206
+ const { default: data } = await __variableDynamicImportRuntime5__(`./translations/${locale}.json`);
194
207
  return {
195
208
  data,
196
209
  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 { Clock, User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } 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';\nimport type { DefaultTheme } from 'styled-components';\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 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 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.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n\n // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","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","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
1
+ {"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { Cloud, Clock, User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } 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';\nimport type { DefaultTheme } from 'styled-components';\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 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 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.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n {\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n\n // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","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","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","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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"}
@@ -93,11 +93,12 @@ const [FormProvider, useForm] = Context.createContext('Form', {
93
93
  // We expose `getValues` as a stable callback so consumers (e.g. conditional/rules logic)
94
94
  // can call it without causing extra rerenders from changing function references.
95
95
  const valuesRef = React__namespace.useRef(state.values);
96
- React__namespace.useEffect(()=>{
97
- valuesRef.current = state.values;
98
- }, [
99
- state.values
100
- ]);
96
+ /**
97
+ * Keep the ref aligned with `state.values` during render (not only in an effect) so
98
+ * `getValues()` / `validate()` always see the latest committed values. Effects run too late
99
+ * for back-to-back user actions (e.g. fast e2e) where the next handler runs before the
100
+ * effect has fired.
101
+ */ valuesRef.current = state.values;
101
102
  const getValues = React__namespace.useCallback(()=>valuesRef.current, []);
102
103
  React__namespace.useEffect(()=>{
103
104
  /**
@@ -147,19 +148,20 @@ const [FormProvider, useForm] = Context.createContext('Form', {
147
148
  * Uses the provided validation schema
148
149
  */ const validate = React__namespace.useCallback(async (shouldSetErrors = true, options = {})=>{
149
150
  setErrors({});
151
+ const valuesToValidate = valuesRef.current;
150
152
  if (!props.validationSchema && !props.validate) {
151
153
  return {
152
- data: state.values
154
+ data: valuesToValidate
153
155
  };
154
156
  }
155
157
  try {
156
158
  let data;
157
159
  if (props.validationSchema) {
158
- data = await props.validationSchema.validate(state.values, {
160
+ data = await props.validationSchema.validate(valuesToValidate, {
159
161
  abortEarly: false
160
162
  });
161
163
  } else if (props.validate) {
162
- data = await props.validate(state.values, options);
164
+ data = await props.validate(valuesToValidate, options);
163
165
  } else {
164
166
  throw new Error('No validation schema or validate function provided');
165
167
  }
@@ -185,8 +187,7 @@ const [FormProvider, useForm] = Context.createContext('Form', {
185
187
  }
186
188
  }, [
187
189
  props,
188
- setErrors,
189
- state.values
190
+ setErrors
190
191
  ]);
191
192
  const handleSubmit = async (e)=>{
192
193
  e.stopPropagation();
@@ -414,7 +415,21 @@ const reducer = (state, action)=>immer.produce(state, (draft)=>{
414
415
  } else if (position < 0) {
415
416
  position = 0;
416
417
  }
417
- const [key] = fractionalIndexing.generateNKeysBetween(position > 0 ? currentField.at(position - 1)?.__temp_key__ : null, currentField.at(position)?.__temp_key__, 1);
418
+ // Collect all existing keys to ensure uniqueness.
419
+ // Keys may be out of order after drag-and-drop moves, so we can't rely
420
+ // on fractional indexing alone to avoid collisions.
421
+ const existingKeys = new Set(currentField.map((item)=>item.__temp_key__).filter(Boolean));
422
+ // Generate a unique key, retrying if there's a collision
423
+ let key;
424
+ let lowerBound = existingKeys.size > 0 ? Array.from(existingKeys).sort().pop() : null;
425
+ do {
426
+ [key] = fractionalIndexing.generateNKeysBetween(lowerBound, null, 1);
427
+ // If collision, advance the lower bound so the next iteration
428
+ // generates a key strictly after this one.
429
+ if (existingKeys.has(key)) {
430
+ lowerBound = key;
431
+ }
432
+ }while (existingKeys.has(key))
418
433
  draft.values = objects.setIn(state.values, action.payload.field, currentField.toSpliced(position, 0, {
419
434
  ...action.payload.value,
420
435
  __temp_key__: key
@@ -430,14 +445,10 @@ const reducer = (state, action)=>immer.produce(state, (draft)=>{
430
445
  ...objects.getIn(state.values, field, [])
431
446
  ];
432
447
  const currentRow = currentField[fromIndex];
433
- const startKey = fromIndex > toIndex ? currentField[toIndex - 1]?.__temp_key__ : currentField[toIndex]?.__temp_key__;
434
- const endKey = fromIndex > toIndex ? currentField[toIndex]?.__temp_key__ : currentField[toIndex + 1]?.__temp_key__;
435
- const [newKey] = fractionalIndexing.generateNKeysBetween(startKey, endKey, 1);
448
+ // Preserve the original __temp_key__ to maintain stable identity during drag-and-drop.
449
+ // The array order determines display order, so fractional key ordering isn't needed.
436
450
  currentField.splice(fromIndex, 1);
437
- currentField.splice(toIndex, 0, {
438
- ...currentRow,
439
- __temp_key__: newKey
440
- });
451
+ currentField.splice(toIndex, 0, currentRow);
441
452
  draft.values = objects.setIn(state.values, field, currentField);
442
453
  break;
443
454
  }