@strapi/admin 5.58.0 → 5.59.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 (249) hide show
  1. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  2. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  3. package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
  4. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
  6. package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +57 -12
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +57 -12
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +3 -1
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +3 -1
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
  16. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
  18. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/LeftMenu.js +5 -1
  20. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  21. package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
  22. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/PageHelpers.js +2 -1
  24. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  25. package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
  26. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  27. package/dist/admin/admin/src/components/Pagination.js +7 -6
  28. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  29. package/dist/admin/admin/src/components/Pagination.mjs +7 -6
  30. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/RelativeTime.js +2 -1
  32. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  33. package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
  34. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/SubNav.js +6 -12
  36. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  37. package/dist/admin/admin/src/components/SubNav.mjs +7 -13
  38. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/Table.js +3 -1
  40. package/dist/admin/admin/src/components/Table.js.map +1 -1
  41. package/dist/admin/admin/src/components/Table.mjs +3 -1
  42. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  43. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  44. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  46. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  47. package/dist/admin/admin/src/constants.js.map +1 -1
  48. package/dist/admin/admin/src/constants.mjs.map +1 -1
  49. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  50. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  51. package/dist/admin/admin/src/features/Auth.js +2 -1
  52. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  53. package/dist/admin/admin/src/features/Auth.mjs +2 -1
  54. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  55. package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
  56. package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
  57. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  58. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  60. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
  62. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
  64. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  66. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
  68. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
  70. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
  72. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
  74. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
  76. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
  78. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
  80. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
  82. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
  84. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
  86. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
  88. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
  90. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -2
  92. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -2
  94. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -1
  98. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -1
  99. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
  100. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  101. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
  102. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
  104. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  105. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
  106. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
  108. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  109. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
  110. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  111. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
  112. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
  114. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  115. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
  116. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  117. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
  118. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  119. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
  120. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  121. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
  122. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
  126. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
  128. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  132. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
  136. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
  138. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
  140. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
  142. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  145. package/dist/admin/admin/src/router.js.map +1 -1
  146. package/dist/admin/admin/src/router.mjs.map +1 -1
  147. package/dist/admin/admin/src/services/users.js.map +1 -1
  148. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  149. package/dist/admin/admin/src/translations/eu.json.js +1 -1
  150. package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
  151. package/dist/admin/admin/src/utils/cookies.js +7 -6
  152. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  153. package/dist/admin/admin/src/utils/cookies.mjs +7 -6
  154. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  155. package/dist/admin/admin/tests/utils.js +2 -1
  156. package/dist/admin/admin/tests/utils.js.map +1 -1
  157. package/dist/admin/admin/tests/utils.mjs +2 -1
  158. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  159. package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
  160. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
  161. package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
  162. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
  163. package/dist/admin/shared/utils/get-project-type.js +3 -3
  164. package/dist/admin/shared/utils/get-project-type.js.map +1 -1
  165. package/dist/admin/shared/utils/get-project-type.mjs +3 -3
  166. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -1
  167. package/dist/admin/src/components/Filters.d.ts +1 -1
  168. package/dist/admin/src/components/Form.d.ts +1 -1
  169. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
  170. package/dist/admin/src/utils/cookies.d.ts +7 -6
  171. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  172. package/dist/ee/server/src/validation/role.d.ts.map +1 -1
  173. package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
  174. package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
  175. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
  176. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
  177. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  178. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  179. package/dist/server/ee/server/src/validation/role.js +4 -2
  180. package/dist/server/ee/server/src/validation/role.js.map +1 -1
  181. package/dist/server/ee/server/src/validation/role.mjs +4 -2
  182. package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
  183. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  184. package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
  185. package/dist/server/server/src/controllers/admin.js +11 -12
  186. package/dist/server/server/src/controllers/admin.js.map +1 -1
  187. package/dist/server/server/src/controllers/admin.mjs +11 -12
  188. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  189. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  190. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  191. package/dist/server/server/src/services/api-token.js +4 -8
  192. package/dist/server/server/src/services/api-token.js.map +1 -1
  193. package/dist/server/server/src/services/api-token.mjs +4 -8
  194. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  195. package/dist/server/server/src/services/constants.js +4 -0
  196. package/dist/server/server/src/services/constants.js.map +1 -1
  197. package/dist/server/server/src/services/constants.mjs +4 -0
  198. package/dist/server/server/src/services/constants.mjs.map +1 -1
  199. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
  200. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
  201. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  202. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  203. package/dist/server/server/src/services/role.js +8 -5
  204. package/dist/server/server/src/services/role.js.map +1 -1
  205. package/dist/server/server/src/services/role.mjs +8 -5
  206. package/dist/server/server/src/services/role.mjs.map +1 -1
  207. package/dist/server/server/src/validation/admin-tokens.js +4 -4
  208. package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
  209. package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
  210. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
  211. package/dist/server/server/src/validation/api-tokens.js +4 -4
  212. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  213. package/dist/server/server/src/validation/api-tokens.mjs +4 -4
  214. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  215. package/dist/server/server/src/validation/role.js +6 -4
  216. package/dist/server/server/src/validation/role.js.map +1 -1
  217. package/dist/server/server/src/validation/role.mjs +6 -4
  218. package/dist/server/server/src/validation/role.mjs.map +1 -1
  219. package/dist/server/server/src/validation/transfer/token.js +4 -4
  220. package/dist/server/server/src/validation/transfer/token.js.map +1 -1
  221. package/dist/server/server/src/validation/transfer/token.mjs +4 -4
  222. package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
  223. package/dist/server/shared/utils/auth-cookie-path.js +13 -10
  224. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
  225. package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
  226. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
  227. package/dist/server/shared/utils/get-project-type.js +3 -3
  228. package/dist/server/shared/utils/get-project-type.js.map +1 -1
  229. package/dist/server/shared/utils/get-project-type.mjs +3 -3
  230. package/dist/server/shared/utils/get-project-type.mjs.map +1 -1
  231. package/dist/server/shared/utils/session-auth.js +70 -3
  232. package/dist/server/shared/utils/session-auth.js.map +1 -1
  233. package/dist/server/shared/utils/session-auth.mjs +70 -4
  234. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  235. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  236. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  237. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  238. package/dist/server/src/services/constants.d.ts +2 -0
  239. package/dist/server/src/services/constants.d.ts.map +1 -1
  240. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
  241. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  242. package/dist/server/src/services/role.d.ts.map +1 -1
  243. package/dist/server/src/validation/role.d.ts.map +1 -1
  244. package/dist/shared/contracts/transfer.d.ts.map +1 -1
  245. package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
  246. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
  247. package/dist/shared/utils/session-auth.d.ts +16 -0
  248. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  249. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Tracking.mjs","sources":["../../../../../admin/src/features/Tracking.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport axios, { AxiosResponse } from 'axios';\n\nimport { Tours } from '../components/GuidedTour/Tours';\nimport { useDeviceType } from '../hooks/useDeviceType';\nimport { useInformationQuery, useInitQuery, useTelemetryPropertiesQuery } from '../services/admin';\n\nimport { useAppInfo } from './AppInfo';\nimport { useAuth } from './Auth';\nimport { useStrapiApp } from './StrapiApp';\n\nexport interface TelemetryProperties {\n useTypescriptOnServer?: boolean;\n useTypescriptOnAdmin?: boolean;\n isHostedOnStrapiCloud?: boolean;\n numberOfAllContentTypes?: number;\n numberOfComponents?: number;\n numberOfDynamicZones?: number;\n numberOfContentTypeFolders?: number;\n}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n strapiVersion?: string | null;\n /**\n * True once the version that `trackUsage` will attach is known, or the\n * information request has failed. Callers that must send a single event\n * wait for this so a later version update does not send the event again.\n */\n isStrapiVersionReady: boolean;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: false,\n isStrapiVersionReady: false,\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface TrackingProviderProps {\n children: React.ReactNode;\n}\n\nconst TrackingProvider = ({ children }: TrackingProviderProps) => {\n const token = useAuth('App', (state) => state.token);\n const { data: initData } = useInitQuery();\n const { uuid } = initData ?? {};\n const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);\n\n const { data } = useTelemetryPropertiesQuery(undefined, {\n skip: !initData?.uuid || !token,\n });\n const versionQueryEnabled = Boolean(initData?.uuid && token);\n const {\n data: appInfo,\n isLoading: isLoadingAppInfo,\n isError: isInformationError,\n } = useInformationQuery(undefined, {\n skip: !versionQueryEnabled,\n });\n const strapiVersion = appInfo?.strapiVersion;\n const isStrapiVersionReady =\n Boolean(strapiVersion) || (versionQueryEnabled && isInformationError);\n React.useEffect(() => {\n if (uuid && data && !isLoadingAppInfo) {\n const event = 'didInitializeAdministration';\n try {\n fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/api/v2/track`, {\n method: 'POST',\n body: JSON.stringify({\n // This event is anonymous\n event,\n userId: '',\n eventPropeties: {},\n groupProperties: {\n ...data,\n projectId: uuid,\n registeredWidgets: getAllWidgets().map((widget) => widget.uid),\n version: strapiVersion,\n },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch {\n // silence is golden\n }\n }\n }, [data, uuid, getAllWidgets, isLoadingAppInfo, strapiVersion]);\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n strapiVersion,\n isStrapiVersionReady,\n }),\n [uuid, data, strapiVersion, isStrapiVersionReady]\n );\n\n return <TrackingContext.Provider value={value}>{children}</TrackingContext.Provider>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Hook\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * We can group these events together because none have properties so there's no benefit\n * to having them as separate types.\n *\n * Meanwhile those with properties have different property shapes corresponding to the specific\n * event so understanding which properties go with which event is very helpful.\n */\nexport interface EventWithoutProperties {\n name:\n | 'changeComponentsOrder'\n | 'didAddComponentToDynamicZone'\n | 'didBulkDeleteEntries'\n | 'didNotBulkDeleteEntries'\n | 'didChangeDisplayedFields'\n | 'didCheckDraftRelations'\n | 'didClickGuidedTourHomepageApiTokens'\n | 'didClickGuidedTourHomepageContentManager'\n | 'didClickGuidedTourHomepageContentTypeBuilder'\n | 'didClickGuidedTourStep1CollectionType'\n | 'didClickGuidedTourStep2ContentManager'\n | 'didClickGuidedTourStep3ApiTokens'\n | 'didClickonBlogSection'\n | 'didClickonCodeExampleSection'\n | 'didClickonReadTheDocumentationSection'\n | 'didClickOnTryStrapiCloudSection'\n | 'didClickonTutorialSection'\n | 'didCreateGuidedTourCollectionType'\n | 'didCreateGuidedTourEntry'\n | 'didCreateNewRole'\n | 'didCreateRole'\n | 'didDeleteToken'\n | 'didDuplicateRole'\n | 'didEditEditSettings'\n | 'didEditEmailTemplates'\n | 'didEditFieldNameOnContentType'\n | 'didEditListSettings'\n | 'didEditMediaLibraryConfig'\n | 'didEditNameOfContentType'\n | 'didGenerateGuidedTourApiTokens'\n | 'didLaunchGuidedtour'\n | 'didNotCreateFirstAdmin'\n | 'didNotSaveComponent'\n | 'didPluginLearnMore'\n | 'didBulkPublishEntries'\n | 'didNotBulkPublishEntries'\n | 'didUnpublishEntry'\n | 'didBulkUnpublishEntries'\n | 'didNotBulkUnpublishEntries'\n | 'didSaveComponent'\n | 'didSaveContentType'\n | 'didSearch'\n | 'didSkipGuidedtour'\n | 'didSubmitPlugin'\n | 'didSubmitProvider'\n | 'didUpdateConditions'\n | 'didSelectAllMediaLibraryElements'\n | 'didSelectContentTypeFieldSettings'\n | 'didSelectContentTypeSettings'\n | 'didEditAuthenticationProvider'\n | 'didRestoreHistoryVersion'\n | 'hasClickedCTBAddFieldBanner'\n | 'removeComponentFromDynamicZone'\n | 'willAddMoreFieldToContentType'\n | 'willBulkDeleteEntries'\n | 'willBulkPublishEntries'\n | 'willBulkUnpublishEntries'\n | 'willChangeNumberOfEntriesPerPage'\n | 'willCheckDraftRelations'\n | 'willCreateComponent'\n | 'willCreateComponentFromAttributesModal'\n | 'willCreateContentType'\n | 'willCreateFirstAdmin'\n | 'willCreateNewRole'\n | 'willCreateRole'\n | 'willCreateSingleType'\n | 'willCreateStage'\n | 'willCreateWorkflow'\n | 'willDeleteEntryFromList'\n | 'willDeleteFieldOfContentType'\n | 'willDuplicateRole'\n | 'willEditEditLayout'\n | 'willEditEmailTemplates'\n | 'willEditEntryFromButton'\n | 'willEditEntryFromList'\n | 'willEditReleaseFromHome'\n | 'willEditFieldOfContentType'\n | 'willEditMediaLibraryConfig'\n | 'willEditNameOfContentType'\n | 'willEditNameOfSingleType'\n | 'willEditAuthenticationProvider'\n | 'willEditFieldNameOnContentType'\n | 'willEditStage'\n | 'willFilterEntries'\n | 'willInstallPlugin'\n | 'willOpenAuditLogDetailsFromHome'\n | 'willUnpublishEntry'\n | 'willSaveComponent'\n | 'willSaveContentType'\n | 'willSaveContentTypeLayout'\n | 'didEditFieldNameOnContentType'\n | 'didCreateRelease'\n | 'didStartNewChat'\n | 'didLaunchGuidedtour'\n | 'didEditAICaption'\n | 'didEditAIAlternativeText'\n | 'didGenerateMetadataRetroactively'\n | 'didActOnFolders';\n\n properties?: never;\n}\n\ninterface DidAccessAuthenticatedAdministrationEvent {\n name: 'didAccessAuthenticatedAdministration';\n properties: {\n registeredWidgets: string[];\n projectId: string;\n };\n}\n\ninterface DidFilterMediaLibraryElementsEvent {\n name: 'didFilterMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n filter: string;\n };\n}\n\ninterface DidSortMediaLibraryElementsEvent {\n name: 'didSortMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n sort: string;\n };\n}\n\ninterface DidCropFileEvent {\n name: 'didCropFile';\n properties: MediaEvents['properties'] & {\n duplicatedFile: null | boolean;\n };\n}\n\ninterface DidSelectFile {\n name: 'didSelectFile';\n properties: MediaEvents['properties'] & {\n source: 'url' | 'computer';\n };\n}\n\ninterface DidEditMediaLibraryElementsEvent {\n name: 'didEditMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n type: string;\n changeLocation: string | boolean;\n };\n}\n\ninterface MediaEvents {\n name:\n | 'didSearchMediaLibraryElements'\n | 'didReplaceMedia'\n | 'didAddMediaLibraryFolders'\n | 'willAddMediaLibraryAssets';\n properties: {\n location: string;\n };\n}\n\ninterface DidSelectContentTypeFieldTypeEvent {\n name: 'didSelectContentTypeFieldType';\n properties: {\n type?: string;\n };\n}\n\ninterface DidChangeModeEvent {\n name: 'didChangeMode';\n properties: {\n newMode: string;\n };\n}\ninterface DidSubmitWithErrorsFirstAdminEvent {\n name: 'didSubmitWithErrorsFirstAdmin';\n properties: {\n count: string;\n };\n}\n\ninterface WillNavigateEvent {\n name: 'willNavigate';\n properties: {\n from: string;\n to: string;\n };\n}\n\ninterface DidClickOnDocLink {\n name: 'didClickOnDocLink';\n properties: {\n from: string;\n to: string;\n };\n}\n\ninterface DidAccessTokenListEvent {\n name: 'didAccessTokenList';\n properties: {\n tokenType: TokenEvents['properties']['tokenType'];\n number: number;\n };\n}\ninterface LogoEvent {\n name: 'didChangeLogo' | 'didClickResetLogo';\n properties: {\n logo: 'menu' | 'auth';\n };\n}\n\ninterface TokenEvents {\n name:\n | 'didCopyTokenKey'\n | 'didAddTokenFromList'\n | 'didEditTokenFromList'\n | 'willAccessTokenList'\n | 'willAddTokenFromList'\n | 'willCreateToken'\n | 'willDeleteToken'\n | 'willEditToken'\n | 'willEditTokenFromList';\n properties: {\n tokenType: 'api-token' | 'transfer-token';\n };\n}\n\ninterface WillModifyTokenEvent {\n name: 'didCreateToken' | 'didEditToken';\n properties: {\n tokenType: TokenEvents['properties']['tokenType'];\n kind?: 'admin' | 'content-api';\n type?: 'custom' | 'full-access' | 'read-only' | Array<'push' | 'pull' | 'push-pull'>;\n };\n}\n\ninterface DeleteEntryEvents {\n name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry';\n properties: {\n status?: string;\n error?: unknown;\n };\n}\n\ninterface CreateEntryEvents {\n name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry';\n properties: {\n documentId?: string;\n status?: string;\n error?: unknown;\n fromPreview?: boolean;\n fromRelationModal?: boolean;\n };\n}\n\ninterface PublishEntryEvents {\n name: 'willPublishEntry' | 'didPublishEntry';\n properties: {\n documentId?: string;\n fromPreview?: boolean;\n fromRelationModal?: boolean;\n };\n}\n\ninterface UpdateEntryEvents {\n name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry';\n properties: {\n documentId?: string;\n status?: string;\n error?: unknown;\n fromPreview?: boolean;\n fromRelationModal?: boolean;\n };\n}\n\ninterface DidFilterEntriesEvent {\n name: 'didFilterEntries';\n properties: {\n useRelation: boolean;\n };\n}\n\ninterface DidPublishRelease {\n name: 'didPublishRelease';\n properties: {\n totalEntries: number;\n totalPublishedEntries: number;\n totalUnpublishedEntries: number;\n };\n}\n\ninterface DidUsePresetPromptEvent {\n name: 'didUsePresetPrompt';\n properties: {\n promptType:\n | 'generate-product-schema'\n | 'tell-me-about-the-content-type-builder'\n | 'tell-me-about-strapi';\n };\n}\n\ninterface DidAnswerMessageEvent {\n name: 'didAnswerMessage';\n properties: {\n successful: boolean;\n };\n}\n\ninterface DidVoteAnswerEvent {\n name: 'didVoteAnswer';\n properties: {\n value: 'positive' | 'negative';\n };\n}\n\ninterface DidUpdateCTBSchema {\n name: 'didUpdateCTBSchema';\n properties: {\n success: boolean;\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n };\n}\n\ninterface DidSkipGuidedTour {\n name: 'didSkipGuidedTour';\n properties: {\n name: keyof Tours | 'all';\n };\n}\n\ninterface DidCompleteGuidedTour {\n name: 'didCompleteGuidedTour';\n properties: {\n name: keyof Tours | 'all';\n };\n}\n\ninterface DidStartGuidedTour {\n name: 'didStartGuidedTour';\n properties: {\n name: keyof Tours;\n fromHomepage?: boolean;\n };\n}\n\ninterface WillEditEntryFromHome {\n name: 'willEditEntryFromHome';\n properties: {\n entryType: 'edited' | 'published' | 'assigned';\n };\n}\n\ninterface DidOpenHomeWidgetLink {\n name: 'didOpenHomeWidgetLink';\n properties: {\n widgetUID: string;\n };\n}\n\ninterface DidOpenKeyStatisticsWidgetLink {\n name: 'didOpenKeyStatisticsWidgetLink';\n properties: {\n itemKey: string;\n };\n}\n\ntype EventsWithProperties =\n | CreateEntryEvents\n | PublishEntryEvents\n | DidAccessAuthenticatedAdministrationEvent\n | DidAccessTokenListEvent\n | DidChangeModeEvent\n | DidCropFileEvent\n | DeleteEntryEvents\n | DidEditMediaLibraryElementsEvent\n | DidFilterMediaLibraryElementsEvent\n | DidFilterEntriesEvent\n | DidSelectContentTypeFieldTypeEvent\n | DidSelectFile\n | DidSortMediaLibraryElementsEvent\n | DidSubmitWithErrorsFirstAdminEvent\n | DidUsePresetPromptEvent\n | DidAnswerMessageEvent\n | DidVoteAnswerEvent\n | LogoEvent\n | TokenEvents\n | UpdateEntryEvents\n | WillModifyTokenEvent\n | WillNavigateEvent\n | DidClickOnDocLink\n | DidPublishRelease\n | MediaEvents\n | DidUpdateCTBSchema\n | DidSkipGuidedTour\n | DidCompleteGuidedTour\n | DidStartGuidedTour\n | DidOpenHomeWidgetLink\n | DidOpenKeyStatisticsWidgetLink\n | WillEditEntryFromHome;\n\nexport type TrackingEvent = EventWithoutProperties | EventsWithProperties;\nexport interface UseTrackingReturn {\n /**\n * This type helps show all the available event names before you start typing,\n * however autocomplete isn't great.\n */\n trackUsage<TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties: TEvent['properties']\n ): Promise<null | AxiosResponse<string>>;\n trackUsage<TEvent extends Extract<TrackingEvent, { properties?: never }>>(\n event: TEvent['name'],\n properties?: never\n ): Promise<null | AxiosResponse<string>>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n trackUsage<TEvent extends Extract<TrackingEvent, { properties: object }>>(\n event: TEvent['name'],\n properties: TEvent['properties']\n ): Promise<null | AxiosResponse<string>>;\n}\n\n/**\n * @description Used to send amplitude events to the Strapi Tracking hub.\n *\n * @example\n * ```tsx\n * import { useTracking } from '@strapi/strapi/admin';\n *\n * const MyComponent = () => {\n * const { trackUsage } = useTracking();\n *\n * const handleClick = () => {\n * trackUsage('my-event', { myProperty: 'myValue' });\n * }\n *\n * return <button onClick={handleClick}>Send Event</button>\n * }\n * ```\n */\nconst useTracking = (): UseTrackingReturn => {\n const deviceType = useDeviceType();\n const deviceTypeRef = React.useRef(deviceType);\n deviceTypeRef.current = deviceType;\n const { uuid, telemetryProperties, strapiVersion } = React.useContext(TrackingContext);\n const userId = useAppInfo('useTracking', (state) => state.userId);\n const trackUsage = React.useCallback(\n async <TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties?: TEvent['properties']\n ) => {\n try {\n if (uuid && !window.strapi.telemetryDisabled) {\n const res = await axios.post<string>(\n `${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/api/v2/track`,\n {\n event,\n userId,\n eventProperties: { ...properties },\n userProperties: {\n deviceType: deviceTypeRef.current,\n },\n groupProperties: {\n ...telemetryProperties,\n projectId: uuid,\n projectType: window.strapi.projectType,\n version: strapiVersion,\n },\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }\n );\n\n return res;\n }\n } catch {\n // Silence is golden\n }\n\n return null;\n },\n [strapiVersion, telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\n/**\n * Internal readiness signal for events that must wait for the provider's version.\n */\nconst useStrapiVersionReady = () => React.useContext(TrackingContext).isStrapiVersionReady;\n\nexport { TrackingProvider, useTracking, useStrapiVersionReady };\n"],"names":["TrackingContext","React","createContext","uuid","isStrapiVersionReady","TrackingProvider","children","token","useAuth","state","data","initData","useInitQuery","getAllWidgets","useStrapiApp","widgets","getAll","useTelemetryPropertiesQuery","undefined","skip","versionQueryEnabled","Boolean","appInfo","isLoading","isLoadingAppInfo","isError","isInformationError","useInformationQuery","strapiVersion","useEffect","event","fetch","process","env","STRAPI_ANALYTICS_URL","method","body","JSON","stringify","userId","eventPropeties","groupProperties","projectId","registeredWidgets","map","widget","uid","version","headers","value","useMemo","telemetryProperties","_jsx","Provider","useTracking","deviceType","useDeviceType","deviceTypeRef","useRef","current","useContext","useAppInfo","trackUsage","useCallback","properties","window","strapi","telemetryDisabled","res","axios","post","eventProperties","userProperties","projectType","useStrapiVersionReady"],"mappings":"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"}
1
+ {"version":3,"file":"Tracking.mjs","sources":["../../../../../admin/src/features/Tracking.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport axios, { AxiosResponse } from 'axios';\n\nimport { Tours } from '../components/GuidedTour/Tours';\nimport { useDeviceType } from '../hooks/useDeviceType';\nimport { useInformationQuery, useInitQuery, useTelemetryPropertiesQuery } from '../services/admin';\n\nimport { useAppInfo } from './AppInfo';\nimport { useAuth } from './Auth';\nimport { useStrapiApp } from './StrapiApp';\n\nexport interface TelemetryProperties {\n useTypescriptOnServer?: boolean;\n useTypescriptOnAdmin?: boolean;\n isHostedOnStrapiCloud?: boolean;\n numberOfAllContentTypes?: number;\n numberOfComponents?: number;\n numberOfDynamicZones?: number;\n numberOfContentTypeFolders?: number;\n}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n strapiVersion?: string | null;\n /**\n * True once the version that `trackUsage` will attach is known, or the\n * information request has failed. Callers that must send a single event\n * wait for this so a later version update does not send the event again.\n */\n isStrapiVersionReady: boolean;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: false,\n isStrapiVersionReady: false,\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface TrackingProviderProps {\n children: React.ReactNode;\n}\n\nconst TrackingProvider = ({ children }: TrackingProviderProps) => {\n const token = useAuth('App', (state) => state.token);\n const { data: initData } = useInitQuery();\n const { uuid } = initData ?? {};\n const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);\n\n const { data } = useTelemetryPropertiesQuery(undefined, {\n skip: !initData?.uuid || !token,\n });\n const versionQueryEnabled = Boolean(initData?.uuid && token);\n const {\n data: appInfo,\n isLoading: isLoadingAppInfo,\n isError: isInformationError,\n } = useInformationQuery(undefined, {\n skip: !versionQueryEnabled,\n });\n const strapiVersion = appInfo?.strapiVersion;\n const isStrapiVersionReady =\n Boolean(strapiVersion) || (versionQueryEnabled && isInformationError);\n React.useEffect(() => {\n if (uuid && data && !isLoadingAppInfo) {\n const event = 'didInitializeAdministration';\n try {\n fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/api/v2/track`, {\n method: 'POST',\n body: JSON.stringify({\n // This event is anonymous\n event,\n userId: '',\n eventPropeties: {},\n groupProperties: {\n ...data,\n projectId: uuid,\n registeredWidgets: getAllWidgets().map((widget) => widget.uid),\n version: strapiVersion,\n },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch {\n // silence is golden\n }\n }\n }, [data, uuid, getAllWidgets, isLoadingAppInfo, strapiVersion]);\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n strapiVersion,\n isStrapiVersionReady,\n }),\n [uuid, data, strapiVersion, isStrapiVersionReady]\n );\n\n return <TrackingContext.Provider value={value}>{children}</TrackingContext.Provider>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Hook\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * We can group these events together because none have properties so there's no benefit\n * to having them as separate types.\n *\n * Meanwhile those with properties have different property shapes corresponding to the specific\n * event so understanding which properties go with which event is very helpful.\n */\nexport interface EventWithoutProperties {\n name:\n | 'changeComponentsOrder'\n | 'didAddComponentToDynamicZone'\n | 'didBulkDeleteEntries'\n | 'didNotBulkDeleteEntries'\n | 'didChangeDisplayedFields'\n | 'didCheckDraftRelations'\n | 'didClickGuidedTourHomepageApiTokens'\n | 'didClickGuidedTourHomepageContentManager'\n | 'didClickGuidedTourHomepageContentTypeBuilder'\n | 'didClickGuidedTourStep1CollectionType'\n | 'didClickGuidedTourStep2ContentManager'\n | 'didClickGuidedTourStep3ApiTokens'\n | 'didClickonBlogSection'\n | 'didClickonCodeExampleSection'\n | 'didClickonReadTheDocumentationSection'\n | 'didClickOnTryStrapiCloudSection'\n | 'didClickonTutorialSection'\n | 'didCreateGuidedTourCollectionType'\n | 'didCreateGuidedTourEntry'\n | 'didCreateNewRole'\n | 'didCreateRole'\n | 'didDeleteToken'\n | 'didDuplicateRole'\n | 'didEditEditSettings'\n | 'didEditEmailTemplates'\n | 'didEditFieldNameOnContentType'\n | 'didEditListSettings'\n | 'didEditMediaLibraryConfig'\n | 'didEditNameOfContentType'\n | 'didGenerateGuidedTourApiTokens'\n | 'didLaunchGuidedtour'\n | 'didNotCreateFirstAdmin'\n | 'didNotSaveComponent'\n | 'didPluginLearnMore'\n | 'didBulkPublishEntries'\n | 'didNotBulkPublishEntries'\n | 'didUnpublishEntry'\n | 'didBulkUnpublishEntries'\n | 'didNotBulkUnpublishEntries'\n | 'didSaveComponent'\n | 'didSaveContentType'\n | 'didSearch'\n | 'didSkipGuidedtour'\n | 'didSubmitPlugin'\n | 'didSubmitProvider'\n | 'didUpdateConditions'\n | 'didSelectAllMediaLibraryElements'\n | 'didSelectContentTypeFieldSettings'\n | 'didSelectContentTypeSettings'\n | 'didEditAuthenticationProvider'\n | 'didRestoreHistoryVersion'\n | 'hasClickedCTBAddFieldBanner'\n | 'removeComponentFromDynamicZone'\n | 'willAddMoreFieldToContentType'\n | 'willBulkDeleteEntries'\n | 'willBulkPublishEntries'\n | 'willBulkUnpublishEntries'\n | 'willChangeNumberOfEntriesPerPage'\n | 'willCheckDraftRelations'\n | 'willCreateComponent'\n | 'willCreateComponentFromAttributesModal'\n | 'willCreateContentType'\n | 'willCreateFirstAdmin'\n | 'willCreateNewRole'\n | 'willCreateRole'\n | 'willCreateSingleType'\n | 'willCreateStage'\n | 'willCreateWorkflow'\n | 'willDeleteEntryFromList'\n | 'willDeleteFieldOfContentType'\n | 'willDuplicateRole'\n | 'willEditEditLayout'\n | 'willEditEmailTemplates'\n | 'willEditEntryFromButton'\n | 'willEditEntryFromList'\n | 'willEditReleaseFromHome'\n | 'willEditFieldOfContentType'\n | 'willEditMediaLibraryConfig'\n | 'willEditNameOfContentType'\n | 'willEditNameOfSingleType'\n | 'willEditAuthenticationProvider'\n | 'willEditFieldNameOnContentType'\n | 'willEditStage'\n | 'willFilterEntries'\n | 'willInstallPlugin'\n | 'willOpenAuditLogDetailsFromHome'\n | 'willUnpublishEntry'\n | 'willSaveComponent'\n | 'willSaveContentType'\n | 'willSaveContentTypeLayout'\n | 'didEditFieldNameOnContentType'\n | 'didCreateRelease'\n | 'didStartNewChat'\n | 'didLaunchGuidedtour'\n | 'didEditAICaption'\n | 'didEditAIAlternativeText'\n | 'didGenerateMetadataRetroactively'\n | 'didActOnFolders';\n\n properties?: never;\n}\n\ninterface DidAccessAuthenticatedAdministrationEvent {\n name: 'didAccessAuthenticatedAdministration';\n properties: {\n registeredWidgets: string[];\n projectId: string;\n };\n}\n\ninterface DidFilterMediaLibraryElementsEvent {\n name: 'didFilterMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n filter: string;\n };\n}\n\ninterface DidSortMediaLibraryElementsEvent {\n name: 'didSortMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n sort: string;\n };\n}\n\ninterface DidCropFileEvent {\n name: 'didCropFile';\n properties: MediaEvents['properties'] & {\n duplicatedFile: null | boolean;\n };\n}\n\ninterface DidSelectFile {\n name: 'didSelectFile';\n properties: MediaEvents['properties'] & {\n source: 'url' | 'computer';\n };\n}\n\ninterface DidEditMediaLibraryElementsEvent {\n name: 'didEditMediaLibraryElements';\n properties: MediaEvents['properties'] & {\n type: string;\n changeLocation: string | boolean;\n };\n}\n\ninterface MediaEvents {\n name:\n | 'didSearchMediaLibraryElements'\n | 'didReplaceMedia'\n | 'didAddMediaLibraryFolders'\n | 'willAddMediaLibraryAssets';\n properties: {\n location: string;\n };\n}\n\ninterface DidSelectContentTypeFieldTypeEvent {\n name: 'didSelectContentTypeFieldType';\n properties: {\n type?: string;\n };\n}\n\ninterface DidChangeModeEvent {\n name: 'didChangeMode';\n properties: {\n newMode: string;\n };\n}\ninterface DidSubmitWithErrorsFirstAdminEvent {\n name: 'didSubmitWithErrorsFirstAdmin';\n properties: {\n count: string;\n };\n}\n\ninterface WillNavigateEvent {\n name: 'willNavigate';\n properties: {\n from: string;\n to: string;\n };\n}\n\ninterface DidClickOnDocLink {\n name: 'didClickOnDocLink';\n properties: {\n from: string;\n to: string;\n };\n}\n\ninterface DidAccessTokenListEvent {\n name: 'didAccessTokenList';\n properties: {\n tokenType: TokenEvents['properties']['tokenType'];\n number: number;\n };\n}\ninterface LogoEvent {\n name: 'didChangeLogo' | 'didClickResetLogo';\n properties: {\n logo: 'menu' | 'auth';\n };\n}\n\ninterface TokenEvents {\n name:\n | 'didCopyTokenKey'\n | 'didAddTokenFromList'\n | 'didEditTokenFromList'\n | 'willAccessTokenList'\n | 'willAddTokenFromList'\n | 'willCreateToken'\n | 'willDeleteToken'\n | 'willEditToken'\n | 'willEditTokenFromList';\n properties: {\n tokenType: 'api-token' | 'transfer-token';\n };\n}\n\ninterface WillModifyTokenEvent {\n name: 'didCreateToken' | 'didEditToken';\n properties: {\n tokenType: TokenEvents['properties']['tokenType'];\n kind?: 'admin' | 'content-api';\n type?: 'custom' | 'full-access' | 'read-only' | Array<'push' | 'pull' | 'push-pull'>;\n };\n}\n\ninterface DeleteEntryEvents {\n name: 'willDeleteEntry' | 'didDeleteEntry' | 'didNotDeleteEntry';\n properties: {\n status?: string;\n error?: unknown;\n };\n}\n\ninterface CreateEntryEvents {\n name: 'willCreateEntry' | 'didCreateEntry' | 'didNotCreateEntry';\n properties: {\n documentId?: string;\n status?: string;\n error?: unknown;\n fromPreview?: boolean;\n fromRelationModal?: boolean;\n };\n}\n\ninterface PublishEntryEvents {\n name: 'willPublishEntry' | 'didPublishEntry';\n properties: {\n documentId?: string;\n fromPreview?: boolean;\n fromRelationModal?: boolean;\n };\n}\n\ninterface UpdateEntryEvents {\n name: 'willEditEntry' | 'didEditEntry' | 'didNotEditEntry';\n properties: {\n documentId?: string;\n status?: string;\n error?: unknown;\n fromPreview?: boolean;\n fromRelationModal?: boolean;\n };\n}\n\ninterface DidFilterEntriesEvent {\n name: 'didFilterEntries';\n properties: {\n useRelation: boolean;\n };\n}\n\ninterface DidPublishRelease {\n name: 'didPublishRelease';\n properties: {\n totalEntries: number;\n totalPublishedEntries: number;\n totalUnpublishedEntries: number;\n };\n}\n\ninterface DidUsePresetPromptEvent {\n name: 'didUsePresetPrompt';\n properties: {\n promptType:\n 'generate-product-schema' | 'tell-me-about-the-content-type-builder' | 'tell-me-about-strapi';\n };\n}\n\ninterface DidAnswerMessageEvent {\n name: 'didAnswerMessage';\n properties: {\n successful: boolean;\n };\n}\n\ninterface DidVoteAnswerEvent {\n name: 'didVoteAnswer';\n properties: {\n value: 'positive' | 'negative';\n };\n}\n\ninterface DidUpdateCTBSchema {\n name: 'didUpdateCTBSchema';\n properties: {\n success: boolean;\n newContentTypes: number;\n editedContentTypes: number;\n deletedContentTypes: number;\n newComponents: number;\n editedComponents: number;\n deletedComponents: number;\n newFields: number;\n editedFields: number;\n deletedFields: number;\n };\n}\n\ninterface DidSkipGuidedTour {\n name: 'didSkipGuidedTour';\n properties: {\n name: keyof Tours | 'all';\n };\n}\n\ninterface DidCompleteGuidedTour {\n name: 'didCompleteGuidedTour';\n properties: {\n name: keyof Tours | 'all';\n };\n}\n\ninterface DidStartGuidedTour {\n name: 'didStartGuidedTour';\n properties: {\n name: keyof Tours;\n fromHomepage?: boolean;\n };\n}\n\ninterface WillEditEntryFromHome {\n name: 'willEditEntryFromHome';\n properties: {\n entryType: 'edited' | 'published' | 'assigned';\n };\n}\n\ninterface DidOpenHomeWidgetLink {\n name: 'didOpenHomeWidgetLink';\n properties: {\n widgetUID: string;\n };\n}\n\ninterface DidOpenKeyStatisticsWidgetLink {\n name: 'didOpenKeyStatisticsWidgetLink';\n properties: {\n itemKey: string;\n };\n}\n\ntype EventsWithProperties =\n | CreateEntryEvents\n | PublishEntryEvents\n | DidAccessAuthenticatedAdministrationEvent\n | DidAccessTokenListEvent\n | DidChangeModeEvent\n | DidCropFileEvent\n | DeleteEntryEvents\n | DidEditMediaLibraryElementsEvent\n | DidFilterMediaLibraryElementsEvent\n | DidFilterEntriesEvent\n | DidSelectContentTypeFieldTypeEvent\n | DidSelectFile\n | DidSortMediaLibraryElementsEvent\n | DidSubmitWithErrorsFirstAdminEvent\n | DidUsePresetPromptEvent\n | DidAnswerMessageEvent\n | DidVoteAnswerEvent\n | LogoEvent\n | TokenEvents\n | UpdateEntryEvents\n | WillModifyTokenEvent\n | WillNavigateEvent\n | DidClickOnDocLink\n | DidPublishRelease\n | MediaEvents\n | DidUpdateCTBSchema\n | DidSkipGuidedTour\n | DidCompleteGuidedTour\n | DidStartGuidedTour\n | DidOpenHomeWidgetLink\n | DidOpenKeyStatisticsWidgetLink\n | WillEditEntryFromHome;\n\nexport type TrackingEvent = EventWithoutProperties | EventsWithProperties;\nexport interface UseTrackingReturn {\n /**\n * This type helps show all the available event names before you start typing,\n * however autocomplete isn't great.\n */\n trackUsage<TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties: TEvent['properties']\n ): Promise<null | AxiosResponse<string>>;\n trackUsage<TEvent extends Extract<TrackingEvent, { properties?: never }>>(\n event: TEvent['name'],\n properties?: never\n ): Promise<null | AxiosResponse<string>>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n trackUsage<TEvent extends Extract<TrackingEvent, { properties: object }>>(\n event: TEvent['name'],\n properties: TEvent['properties']\n ): Promise<null | AxiosResponse<string>>;\n}\n\n/**\n * @description Used to send amplitude events to the Strapi Tracking hub.\n *\n * @example\n * ```tsx\n * import { useTracking } from '@strapi/strapi/admin';\n *\n * const MyComponent = () => {\n * const { trackUsage } = useTracking();\n *\n * const handleClick = () => {\n * trackUsage('my-event', { myProperty: 'myValue' });\n * }\n *\n * return <button onClick={handleClick}>Send Event</button>\n * }\n * ```\n */\nconst useTracking = (): UseTrackingReturn => {\n const deviceType = useDeviceType();\n const deviceTypeRef = React.useRef(deviceType);\n deviceTypeRef.current = deviceType;\n const { uuid, telemetryProperties, strapiVersion } = React.useContext(TrackingContext);\n const userId = useAppInfo('useTracking', (state) => state.userId);\n const trackUsage = React.useCallback(\n async <TEvent extends TrackingEvent>(\n event: TEvent['name'],\n properties?: TEvent['properties']\n ) => {\n try {\n if (uuid && !window.strapi.telemetryDisabled) {\n const res = await axios.post<string>(\n `${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/api/v2/track`,\n {\n event,\n userId,\n eventProperties: { ...properties },\n userProperties: {\n deviceType: deviceTypeRef.current,\n },\n groupProperties: {\n ...telemetryProperties,\n projectId: uuid,\n projectType: window.strapi.projectType,\n version: strapiVersion,\n },\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }\n );\n\n return res;\n }\n } catch {\n // Silence is golden\n }\n\n return null;\n },\n [strapiVersion, telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\n/**\n * Internal readiness signal for events that must wait for the provider's version.\n */\nconst useStrapiVersionReady = () => React.useContext(TrackingContext).isStrapiVersionReady;\n\nexport { TrackingProvider, useTracking, useStrapiVersionReady };\n"],"names":["TrackingContext","React","createContext","uuid","isStrapiVersionReady","TrackingProvider","children","token","useAuth","state","data","initData","useInitQuery","getAllWidgets","useStrapiApp","widgets","getAll","useTelemetryPropertiesQuery","undefined","skip","versionQueryEnabled","Boolean","appInfo","isLoading","isLoadingAppInfo","isError","isInformationError","useInformationQuery","strapiVersion","useEffect","event","fetch","process","env","STRAPI_ANALYTICS_URL","method","body","JSON","stringify","userId","eventPropeties","groupProperties","projectId","registeredWidgets","map","widget","uid","version","headers","value","useMemo","telemetryProperties","_jsx","Provider","useTracking","deviceType","useDeviceType","deviceTypeRef","useRef","current","useContext","useAppInfo","trackUsage","useCallback","properties","window","strapi","telemetryDisabled","res","axios","post","eventProperties","userProperties","projectType","useStrapiVersionReady"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FreeTrialEndedModal.js","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
1
+ {"version":3,"file":"FreeTrialEndedModal.js","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FreeTrialEndedModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
1
+ {"version":3,"file":"FreeTrialEndedModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
@@ -299,7 +299,7 @@ const ProfilePage = ()=>{
299
299
  type: 'password'
300
300
  }
301
301
  ]
302
- ].map((row, index)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
302
+ ].map((row)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
303
303
  gap: 5,
304
304
  children: row.map(({ size, ...field })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
305
305
  xs: 12,
@@ -311,7 +311,7 @@ const ProfilePage = ()=>{
311
311
  ...field
312
312
  })
313
313
  }, field.name))
314
- }, index))
314
+ }, row.map((field)=>field.name).join('.')))
315
315
  ]
316
316
  });
317
317
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePage.js","sources":["../../../../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, useNotifyAT, Grid, Typography, FlexProps } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, FormHelpers } from '../components/Form';\nimport { InputRenderer } from '../components/FormInputs/Renderer';\nimport { useGuidedTour } from '../components/GuidedTour/Context';\nimport { Layouts } from '../components/Layouts/Layout';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useTracking } from '../features/Tracking';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useIsDesktop } from '../hooks/useMediaQuery';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { translatedErrors } from '../utils/translatedErrors';\nimport { getDisplayName } from '../utils/users';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panel = ({ children, ...flexProps }: FlexProps) => {\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} {...flexProps}>\n {children}\n </Flex>\n </Box>\n );\n};\n\nconst ProfilePage = () => {\n const isDesktop = useIsDesktop();\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'Settings.permissions.users.sso.provider.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormHelpers<UpdateUsersMeBody>\n ) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n }\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'danger',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email: email ?? '',\n firstname: firstname ?? '',\n lastname: lastname ?? '',\n username: username ?? '',\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <>\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage({\n id: 'Settings.profile.form.section.head.title',\n defaultMessage: 'User profile',\n })}\n </Page.Title>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n initialValues={initialData}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n >\n {({ isSubmitting, modified }) => (\n <>\n <Layouts.Header\n title={getDisplayName(user)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified}\n fullWidth\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={6}>\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection />\n {!hasLockedRole && <PasswordSection />}\n <PreferencesSection localeNames={localeNames} />\n </Flex>\n </Layouts.Content>\n </Box>\n </>\n )}\n </Form>\n {isDesktop && process.env.NODE_ENV === 'development' && (\n <Box paddingBottom={6}>\n <Layouts.Content>\n <GuidedTourSection />\n </Layouts.Content>\n </Box>\n )}\n </Page.Main>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst PasswordSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n {[\n [\n {\n label: formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n }),\n name: 'currentPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n [\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n size: 6,\n type: 'password' as const,\n },\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n ].map((row, index) => (\n <Grid.Root key={index} gap={5}>\n {row.map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps {\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Panel>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n tag=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid.Root gap={5}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n }),\n name: 'preferedLanguage',\n options: Object.entries(localeNames).map(([value, label]) => ({\n label,\n value,\n })),\n placeholder: formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n }),\n name: 'currentTheme',\n options: [\n {\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n }),\n value: 'system',\n },\n ...themesToDisplay.map((theme) => ({\n label: formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n ),\n value: theme,\n })),\n ],\n placeholder: formatMessage({\n id: 'app.components.Select.placeholder',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst UserInfoSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 6,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }),\n name: 'username',\n size: 6,\n type: 'string' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourSection = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const dispatch = useGuidedTour('ProfilePage', (s) => s.dispatch);\n\n const onClickReset = () => {\n dispatch({ type: 'reset_all_tours' });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'tours.profile.notification.success.reset',\n defaultMessage: 'Guided tour reset',\n }),\n });\n };\n\n return (\n <Panel alignItems=\"start\">\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'tours.profile.title',\n defaultMessage: 'Guided tour',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage({\n id: 'tours.profile.description',\n defaultMessage: 'You can reset the guided tour at any time.',\n })}\n </Typography>\n </Flex>\n <Button variant=\"tertiary\" onClick={onClickReset}>\n {formatMessage({\n id: 'tours.profile.reset',\n defaultMessage: 'Reset guided tour',\n })}\n </Button>\n </Panel>\n );\n};\n\nexport { ProfilePage };\n"],"names":["PROFILE_VALIDTION_SCHEMA","yup","object","shape","COMMON_USER_SCHEMA","currentPassword","string","when","password","confirmPassword","passSchema","required","id","translatedErrors","defaultMessage","nullable","preferedLanguage","Panel","children","flexProps","_jsx","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Flex","direction","alignItems","gap","ProfilePage","isDesktop","useIsDesktop","localeNames","useTypedSelector","state","admin_app","language","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","notifyStatus","useNotifyAT","currentTheme","theme","dispatch","useTypedDispatch","_unstableFormatValidationErrors","formatValidationErrors","_unstableFormatAPIError","formatApiError","useAPIErrorHandler","user","useAuth","React","useEffect","type","message","updateMe","isLoading","isSubmittingForm","useUpdateMeMutation","data","dataSSO","error","useIsSSOLockedQuery","undefined","skip","window","strapi","isEE","features","isEnabled","handleSubmit","body","setErrors","_confirmPassword","bodyRest","dataToSend","_password","_currentPassword","passwordRequestBodyRest","res","setAppTheme","newMode","isBaseQueryError","name","Page","Loading","hasLockedRole","isSSOLocked","email","firstname","lastname","username","initialData","_Fragment","_jsxs","Main","aria-busy","Title","Form","method","onSubmit","initialValues","validationSchema","isSubmitting","modified","Layouts","Header","title","getDisplayName","primaryAction","Button","startIcon","Check","loading","disabled","fullWidth","Content","UserInfoSection","PasswordSection","PreferencesSection","process","env","NODE_ENV","GuidedTourSection","Typography","variant","tag","label","size","autoComplete","map","row","index","Grid","Root","field","Item","xs","m","col","InputRenderer","themesToDisplay","availableThemes","here","color","target","rel","href","hint","options","Object","entries","value","placeholder","upperFirst","useGuidedTour","s","onClickReset","onClick"],"mappings":"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"}
1
+ {"version":3,"file":"ProfilePage.js","sources":["../../../../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, useNotifyAT, Grid, Typography, FlexProps } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, FormHelpers } from '../components/Form';\nimport { InputRenderer } from '../components/FormInputs/Renderer';\nimport { useGuidedTour } from '../components/GuidedTour/Context';\nimport { Layouts } from '../components/Layouts/Layout';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useTracking } from '../features/Tracking';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useIsDesktop } from '../hooks/useMediaQuery';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { translatedErrors } from '../utils/translatedErrors';\nimport { getDisplayName } from '../utils/users';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panel = ({ children, ...flexProps }: FlexProps) => {\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} {...flexProps}>\n {children}\n </Flex>\n </Box>\n );\n};\n\nconst ProfilePage = () => {\n const isDesktop = useIsDesktop();\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'Settings.permissions.users.sso.provider.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormHelpers<UpdateUsersMeBody>\n ) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n }\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'danger',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email: email ?? '',\n firstname: firstname ?? '',\n lastname: lastname ?? '',\n username: username ?? '',\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <>\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage({\n id: 'Settings.profile.form.section.head.title',\n defaultMessage: 'User profile',\n })}\n </Page.Title>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n initialValues={initialData}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n >\n {({ isSubmitting, modified }) => (\n <>\n <Layouts.Header\n title={getDisplayName(user)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified}\n fullWidth\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={6}>\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection />\n {!hasLockedRole && <PasswordSection />}\n <PreferencesSection localeNames={localeNames} />\n </Flex>\n </Layouts.Content>\n </Box>\n </>\n )}\n </Form>\n {isDesktop && process.env.NODE_ENV === 'development' && (\n <Box paddingBottom={6}>\n <Layouts.Content>\n <GuidedTourSection />\n </Layouts.Content>\n </Box>\n )}\n </Page.Main>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst PasswordSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n {[\n [\n {\n label: formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n }),\n name: 'currentPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n [\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n size: 6,\n type: 'password' as const,\n },\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n ].map((row) => (\n <Grid.Root key={row.map((field) => field.name).join('.')} gap={5}>\n {row.map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps {\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Panel>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n tag=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid.Root gap={5}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n }),\n name: 'preferedLanguage',\n options: Object.entries(localeNames).map(([value, label]) => ({\n label,\n value,\n })),\n placeholder: formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n }),\n name: 'currentTheme',\n options: [\n {\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n }),\n value: 'system',\n },\n ...themesToDisplay.map((theme) => ({\n label: formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n ),\n value: theme,\n })),\n ],\n placeholder: formatMessage({\n id: 'app.components.Select.placeholder',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst UserInfoSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 6,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }),\n name: 'username',\n size: 6,\n type: 'string' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourSection = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const dispatch = useGuidedTour('ProfilePage', (s) => s.dispatch);\n\n const onClickReset = () => {\n dispatch({ type: 'reset_all_tours' });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'tours.profile.notification.success.reset',\n defaultMessage: 'Guided tour reset',\n }),\n });\n };\n\n return (\n <Panel alignItems=\"start\">\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'tours.profile.title',\n defaultMessage: 'Guided tour',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage({\n id: 'tours.profile.description',\n defaultMessage: 'You can reset the guided tour at any time.',\n })}\n </Typography>\n </Flex>\n <Button variant=\"tertiary\" onClick={onClickReset}>\n {formatMessage({\n id: 'tours.profile.reset',\n defaultMessage: 'Reset guided tour',\n })}\n </Button>\n </Panel>\n );\n};\n\nexport { ProfilePage };\n"],"names":["PROFILE_VALIDTION_SCHEMA","yup","object","shape","COMMON_USER_SCHEMA","currentPassword","string","when","password","confirmPassword","passSchema","required","id","translatedErrors","defaultMessage","nullable","preferedLanguage","Panel","children","flexProps","_jsx","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Flex","direction","alignItems","gap","ProfilePage","isDesktop","useIsDesktop","localeNames","useTypedSelector","state","admin_app","language","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","notifyStatus","useNotifyAT","currentTheme","theme","dispatch","useTypedDispatch","_unstableFormatValidationErrors","formatValidationErrors","_unstableFormatAPIError","formatApiError","useAPIErrorHandler","user","useAuth","React","useEffect","type","message","updateMe","isLoading","isSubmittingForm","useUpdateMeMutation","data","dataSSO","error","useIsSSOLockedQuery","undefined","skip","window","strapi","isEE","features","isEnabled","handleSubmit","body","setErrors","_confirmPassword","bodyRest","dataToSend","_password","_currentPassword","passwordRequestBodyRest","res","setAppTheme","newMode","isBaseQueryError","name","Page","Loading","hasLockedRole","isSSOLocked","email","firstname","lastname","username","initialData","_Fragment","_jsxs","Main","aria-busy","Title","Form","method","onSubmit","initialValues","validationSchema","isSubmitting","modified","Layouts","Header","title","getDisplayName","primaryAction","Button","startIcon","Check","loading","disabled","fullWidth","Content","UserInfoSection","PasswordSection","PreferencesSection","process","env","NODE_ENV","GuidedTourSection","Typography","variant","tag","label","size","autoComplete","map","row","Grid","Root","field","Item","xs","m","col","InputRenderer","join","themesToDisplay","availableThemes","here","color","target","rel","href","hint","options","Object","entries","value","placeholder","upperFirst","useGuidedTour","s","onClickReset","onClick"],"mappings":"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"}
@@ -273,7 +273,7 @@ const ProfilePage = ()=>{
273
273
  type: 'password'
274
274
  }
275
275
  ]
276
- ].map((row, index)=>/*#__PURE__*/ jsx(Grid.Root, {
276
+ ].map((row)=>/*#__PURE__*/ jsx(Grid.Root, {
277
277
  gap: 5,
278
278
  children: row.map(({ size, ...field })=>/*#__PURE__*/ jsx(Grid.Item, {
279
279
  xs: 12,
@@ -285,7 +285,7 @@ const ProfilePage = ()=>{
285
285
  ...field
286
286
  })
287
287
  }, field.name))
288
- }, index))
288
+ }, row.map((field)=>field.name).join('.')))
289
289
  ]
290
290
  });
291
291
  };