@strapi/admin 5.50.0 → 5.50.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/dist/admin/admin/src/components/ConfirmDialog.js +2 -2
  2. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  3. package/dist/admin/admin/src/components/ContentBox.js +3 -3
  4. package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
  5. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -8
  6. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
  7. package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs +8 -8
  8. package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/ErrorElement.js +4 -4
  10. package/dist/admin/admin/src/components/ErrorElement.js.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +41 -27
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +41 -27
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Date.js +1 -1
  16. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Date.mjs +1 -1
  18. package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/FormInputs/Email.js.map +1 -1
  20. package/dist/admin/admin/src/components/FormInputs/Email.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +4 -1
  22. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  23. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +4 -1
  24. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/FormInputs/Json.js +2 -1
  26. package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
  27. package/dist/admin/admin/src/components/FormInputs/Json.mjs +2 -1
  28. package/dist/admin/admin/src/components/FormInputs/Json.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/FormInputs/Password.js.map +1 -1
  30. package/dist/admin/admin/src/components/FormInputs/Password.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/FormInputs/Renderer.js +18 -26
  32. package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
  33. package/dist/admin/admin/src/components/FormInputs/Renderer.mjs +20 -28
  34. package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/FormInputs/String.js.map +1 -1
  36. package/dist/admin/admin/src/components/FormInputs/String.mjs.map +1 -1
  37. package/dist/admin/admin/src/components/FormInputs/Textarea.js.map +1 -1
  38. package/dist/admin/admin/src/components/FormInputs/Textarea.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/GapDropZone.js +2 -2
  40. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
  41. package/dist/admin/admin/src/components/GradientBadge.js +3 -3
  42. package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
  43. package/dist/admin/admin/src/components/GuidedTour/Overview.js +8 -8
  44. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  45. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +4 -4
  46. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  47. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
  48. package/dist/admin/admin/src/components/GuidedTour/Tours.js +2 -2
  49. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  50. package/dist/admin/admin/src/components/Layouts/ActionLayout.js +2 -2
  51. package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
  52. package/dist/admin/admin/src/components/Layouts/GridLayout.js +2 -2
  53. package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
  54. package/dist/admin/admin/src/components/Layouts/Layout.js +4 -4
  55. package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
  56. package/dist/admin/admin/src/components/LeftMenu.js +3 -3
  57. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  58. package/dist/admin/admin/src/components/MainNav/MainNav.js +2 -2
  59. package/dist/admin/admin/src/components/MainNav/MainNav.js.map +1 -1
  60. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +4 -4
  61. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
  62. package/dist/admin/admin/src/components/MainNav/NavBrand.js +2 -2
  63. package/dist/admin/admin/src/components/MainNav/NavBrand.js.map +1 -1
  64. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +3 -3
  65. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
  66. package/dist/admin/admin/src/components/MainNav/NavLink.js +8 -8
  67. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  68. package/dist/admin/admin/src/components/MainNav/NavUser.js +7 -7
  69. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  70. package/dist/admin/admin/src/components/MainNav/TrialCountdown.js +3 -3
  71. package/dist/admin/admin/src/components/MainNav/TrialCountdown.js.map +1 -1
  72. package/dist/admin/admin/src/components/NpsSurvey.js +2 -2
  73. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  74. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  75. package/dist/admin/admin/src/components/ResizeIndicator.js +6 -6
  76. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  77. package/dist/admin/admin/src/components/SubNav.js +11 -9
  78. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  79. package/dist/admin/admin/src/components/SubNav.mjs +4 -2
  80. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  81. package/dist/admin/admin/src/components/Table.js +9 -5
  82. package/dist/admin/admin/src/components/Table.js.map +1 -1
  83. package/dist/admin/admin/src/components/Table.mjs +6 -2
  84. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  85. package/dist/admin/admin/src/components/Theme.js +2 -2
  86. package/dist/admin/admin/src/components/Theme.js.map +1 -1
  87. package/dist/admin/admin/src/components/UnauthenticatedLogo.js +2 -2
  88. package/dist/admin/admin/src/components/UnauthenticatedLogo.js.map +1 -1
  89. package/dist/admin/admin/src/components/UpsellBanner.js +3 -3
  90. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  91. package/dist/admin/admin/src/components/WidgetRoot.js +4 -7
  92. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  93. package/dist/admin/admin/src/components/WidgetRoot.mjs +1 -1
  94. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  95. package/dist/admin/admin/src/components/Widgets.js +5 -5
  96. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  97. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  98. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  99. package/dist/admin/admin/src/core/apis/Widgets.js +1 -1
  100. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  101. package/dist/admin/admin/src/core/apis/Widgets.mjs +1 -1
  102. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  103. package/dist/admin/admin/src/core/store/configure.js.map +1 -1
  104. package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
  105. package/dist/admin/admin/src/core/utils/createHook.js.map +1 -1
  106. package/dist/admin/admin/src/core/utils/createHook.mjs.map +1 -1
  107. package/dist/admin/admin/src/features/Tracking.js +3 -1
  108. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  109. package/dist/admin/admin/src/features/Tracking.mjs +3 -1
  110. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  111. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  112. package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
  113. package/dist/admin/admin/src/hooks/useMediaQuery.js +4 -4
  114. package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
  115. package/dist/admin/admin/src/hooks/useMenu.js +6 -4
  116. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  117. package/dist/admin/admin/src/hooks/useMenu.mjs +6 -4
  118. package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
  119. package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
  120. package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
  121. package/dist/admin/admin/src/hooks/useRBAC.js +1 -1
  122. package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
  123. package/dist/admin/admin/src/hooks/useRBAC.mjs +1 -1
  124. package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
  125. package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
  126. package/dist/admin/admin/src/hooks/useThrottledCallback.mjs.map +1 -1
  127. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +1 -1
  128. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  129. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -1
  130. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  131. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js +3 -3
  132. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js.map +1 -1
  133. package/dist/admin/admin/src/pages/Auth/components/Register.js +17 -9
  134. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  135. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +15 -7
  136. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  137. package/dist/admin/admin/src/pages/Home/HomePage.js +2 -2
  138. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  139. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +3 -6
  140. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
  141. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs +1 -1
  142. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs.map +1 -1
  143. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +4 -8
  144. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  145. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs +1 -1
  146. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  147. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +4 -8
  148. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
  149. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs +1 -1
  150. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +2 -2
  152. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +2 -2
  155. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +2 -2
  157. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  158. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +2 -2
  159. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +2 -2
  161. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +4 -4
  163. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  164. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.mjs.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +3 -11
  167. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  168. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +3 -11
  169. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  170. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +2 -2
  171. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  172. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +2 -2
  173. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  174. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js +2 -2
  175. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js.map +1 -1
  176. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -10
  177. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  178. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js +3 -3
  179. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
  180. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -5
  181. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  182. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js +2 -2
  183. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js.map +1 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +3 -3
  185. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  186. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.js.map +1 -1
  187. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.mjs.map +1 -1
  188. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  189. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  190. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js +3 -3
  191. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
  192. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +2 -2
  193. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  194. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +2 -2
  195. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  196. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  197. package/dist/admin/admin/src/reducer.js +3 -3
  198. package/dist/admin/admin/src/reducer.js.map +1 -1
  199. package/dist/admin/admin/src/reducer.mjs +4 -4
  200. package/dist/admin/admin/src/reducer.mjs.map +1 -1
  201. package/dist/admin/admin/src/render.js +6 -2
  202. package/dist/admin/admin/src/render.js.map +1 -1
  203. package/dist/admin/admin/src/render.mjs +6 -2
  204. package/dist/admin/admin/src/render.mjs.map +1 -1
  205. package/dist/admin/admin/src/translations/en.json.js +1 -2
  206. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  207. package/dist/admin/admin/src/translations/en.json.mjs +1 -2
  208. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  209. package/dist/admin/admin/src/translations/ja.json.js +693 -687
  210. package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
  211. package/dist/admin/admin/src/translations/ja.json.mjs +693 -687
  212. package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
  213. package/dist/admin/admin/src/translations/ko.json.js +157 -1
  214. package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
  215. package/dist/admin/admin/src/translations/ko.json.mjs +157 -1
  216. package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
  217. package/dist/admin/admin/src/translations/pl.json.js +22 -0
  218. package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
  219. package/dist/admin/admin/src/translations/pl.json.mjs +22 -0
  220. package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
  221. package/dist/admin/admin/src/utils/arrays.js.map +1 -1
  222. package/dist/admin/admin/src/utils/arrays.mjs.map +1 -1
  223. package/dist/admin/admin/src/utils/baseQuery.js +1 -1
  224. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  225. package/dist/admin/admin/src/utils/baseQuery.mjs +1 -1
  226. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  227. package/dist/admin/admin/src/utils/cookies.js +7 -0
  228. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  229. package/dist/admin/admin/src/utils/cookies.mjs +7 -1
  230. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  231. package/dist/admin/admin/src/utils/getFetchClient.js +2 -2
  232. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  233. package/dist/admin/admin/src/utils/getFetchClient.mjs +3 -3
  234. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  235. package/dist/admin/admin/src/utils/getProjectType.js +22 -0
  236. package/dist/admin/admin/src/utils/getProjectType.js.map +1 -0
  237. package/dist/admin/admin/src/utils/getProjectType.mjs +20 -0
  238. package/dist/admin/admin/src/utils/getProjectType.mjs.map +1 -0
  239. package/dist/admin/admin/src/utils/objects.js +43 -11
  240. package/dist/admin/admin/src/utils/objects.js.map +1 -1
  241. package/dist/admin/admin/src/utils/objects.mjs +43 -11
  242. package/dist/admin/admin/src/utils/objects.mjs.map +1 -1
  243. package/dist/admin/admin/src/utils/once.js.map +1 -1
  244. package/dist/admin/admin/src/utils/once.mjs.map +1 -1
  245. package/dist/admin/admin/src/utils/rulesEngine.js +2 -1
  246. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  247. package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -1
  248. package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
  249. package/dist/admin/admin/src/utils/shims.js.map +1 -1
  250. package/dist/admin/admin/src/utils/shims.mjs.map +1 -1
  251. package/dist/admin/admin/src/utils/widgetVisibility.js +16 -1
  252. package/dist/admin/admin/src/utils/widgetVisibility.js.map +1 -1
  253. package/dist/admin/admin/src/utils/widgetVisibility.mjs +14 -2
  254. package/dist/admin/admin/src/utils/widgetVisibility.mjs.map +1 -1
  255. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +2 -2
  256. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
  257. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +2 -2
  258. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  259. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs +2 -2
  260. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
  261. package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js +2 -2
  262. package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js.map +1 -1
  263. package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js +2 -2
  264. package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js.map +1 -1
  265. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js +3 -3
  266. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
  267. package/dist/admin/ee/admin/src/pages/AuthResponse.js +1 -1
  268. package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
  269. package/dist/admin/ee/admin/src/pages/AuthResponse.mjs +2 -2
  270. package/dist/admin/ee/admin/src/pages/AuthResponse.mjs.map +1 -1
  271. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +3 -3
  272. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  273. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  274. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  275. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
  276. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
  277. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +2 -2
  278. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  279. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  280. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  281. package/dist/admin/shared/utils/auth-cookie-name.js +31 -0
  282. package/dist/admin/shared/utils/auth-cookie-name.js.map +1 -0
  283. package/dist/admin/shared/utils/auth-cookie-name.mjs +28 -0
  284. package/dist/admin/shared/utils/auth-cookie-name.mjs.map +1 -0
  285. package/dist/admin/src/StrapiApp.d.ts +2 -2
  286. package/dist/admin/src/components/DescriptionComponentRenderer.d.ts +2 -1
  287. package/dist/admin/src/components/Form.d.ts +14 -12
  288. package/dist/admin/src/components/FormInputs/Renderer.d.ts +1 -1
  289. package/dist/admin/src/components/GuidedTour/Steps/Step.d.ts +1 -1
  290. package/dist/admin/src/components/SubNav.d.ts +1 -1
  291. package/dist/admin/src/components/Table.d.ts +3 -2
  292. package/dist/admin/src/core/apis/Plugin.d.ts +1 -1
  293. package/dist/admin/src/core/utils/createHook.d.ts +6 -6
  294. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  295. package/dist/admin/src/hooks/useMenu.d.ts +1 -1
  296. package/dist/admin/src/hooks/useQueryParams.d.ts +2 -1
  297. package/dist/admin/src/hooks/useThrottledCallback.d.ts +1 -1
  298. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.d.ts +1 -1
  299. package/dist/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.d.ts +1 -1
  300. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +5 -5
  301. package/dist/admin/src/services/admin.d.ts +6 -6
  302. package/dist/admin/src/services/api.d.ts +1 -1
  303. package/dist/admin/src/services/apiTokens.d.ts +2 -2
  304. package/dist/admin/src/services/auth.d.ts +12 -12
  305. package/dist/admin/src/services/contentApi.d.ts +1 -1
  306. package/dist/admin/src/services/contentManager.d.ts +1 -1
  307. package/dist/admin/src/services/homepage.d.ts +3 -3
  308. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  309. package/dist/admin/src/services/users.d.ts +8 -8
  310. package/dist/admin/src/services/webhooks.d.ts +3 -3
  311. package/dist/admin/src/utils/arrays.d.ts +1 -1
  312. package/dist/admin/src/utils/baseQuery.d.ts +1 -1
  313. package/dist/admin/src/utils/cookies.d.ts +5 -0
  314. package/dist/admin/src/utils/getFetchClient.d.ts +7 -7
  315. package/dist/admin/src/utils/getProjectType.d.ts +16 -0
  316. package/dist/admin/src/utils/objects.d.ts +6 -4
  317. package/dist/admin/src/utils/once.d.ts +1 -1
  318. package/dist/admin/src/utils/widgetVisibility.d.ts +11 -0
  319. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.d.ts +1 -1
  320. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/tableHeaders.d.ts +2 -1
  321. package/dist/ee/admin/src/services/ai.d.ts +3 -3
  322. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  323. package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts +1 -1
  324. package/dist/ee/server/src/controllers/admin.d.ts +2 -0
  325. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  326. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  327. package/dist/ee/server/src/controllers/index.d.ts +2 -0
  328. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  329. package/dist/ee/server/src/index.d.ts +2 -0
  330. package/dist/ee/server/src/index.d.ts.map +1 -1
  331. package/dist/ee/server/src/routes/index.d.ts +2 -2
  332. package/dist/ee/server/src/routes/sso.d.ts +2 -2
  333. package/dist/ee/server/src/services/index.d.ts +2 -2
  334. package/dist/server/ee/server/src/controllers/admin.js +1 -0
  335. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  336. package/dist/server/ee/server/src/controllers/admin.mjs +1 -0
  337. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  338. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +1 -1
  339. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  340. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +2 -2
  341. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  342. package/dist/server/server/src/services/permission/sections-builder/handlers.js +9 -2
  343. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  344. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs +9 -2
  345. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  346. package/dist/server/server/src/services/role.js +5 -1
  347. package/dist/server/server/src/services/role.js.map +1 -1
  348. package/dist/server/server/src/services/role.mjs +5 -1
  349. package/dist/server/server/src/services/role.mjs.map +1 -1
  350. package/dist/server/server/src/validation/common-validators.js +19 -11
  351. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  352. package/dist/server/server/src/validation/common-validators.mjs +19 -11
  353. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  354. package/dist/server/server/src/validation/permission.js +1 -1
  355. package/dist/server/server/src/validation/permission.js.map +1 -1
  356. package/dist/server/server/src/validation/permission.mjs +1 -1
  357. package/dist/server/server/src/validation/permission.mjs.map +1 -1
  358. package/dist/server/server/src/validation/role.js +2 -2
  359. package/dist/server/server/src/validation/role.js.map +1 -1
  360. package/dist/server/server/src/validation/role.mjs +2 -2
  361. package/dist/server/server/src/validation/role.mjs.map +1 -1
  362. package/dist/server/shared/utils/auth-cookie-name.js +31 -0
  363. package/dist/server/shared/utils/auth-cookie-name.js.map +1 -0
  364. package/dist/server/shared/utils/auth-cookie-name.mjs +28 -0
  365. package/dist/server/shared/utils/auth-cookie-name.mjs.map +1 -0
  366. package/dist/server/shared/utils/session-auth.js +6 -0
  367. package/dist/server/shared/utils/session-auth.js.map +1 -1
  368. package/dist/server/shared/utils/session-auth.mjs +6 -1
  369. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  370. package/dist/server/src/controllers/admin.d.ts +3 -3
  371. package/dist/server/src/controllers/index.d.ts +3 -3
  372. package/dist/server/src/domain/user.d.ts +1 -1
  373. package/dist/server/src/index.d.ts +19 -19
  374. package/dist/server/src/middlewares/index.d.ts +1 -1
  375. package/dist/server/src/services/index.d.ts +13 -13
  376. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  377. package/dist/server/src/services/role.d.ts.map +1 -1
  378. package/dist/server/src/validation/common-validators.d.ts.map +1 -1
  379. package/dist/server/src/validation/role.d.ts.map +1 -1
  380. package/dist/shared/utils/__tests__/auth-cookie-name.test.d.ts +1 -0
  381. package/dist/shared/utils/__tests__/auth-cookie-name.test.d.ts.map +1 -0
  382. package/dist/shared/utils/__tests__/session-auth.test.d.ts +1 -0
  383. package/dist/shared/utils/__tests__/session-auth.test.d.ts.map +1 -0
  384. package/dist/shared/utils/auth-cookie-name.d.ts +14 -0
  385. package/dist/shared/utils/auth-cookie-name.d.ts.map +1 -0
  386. package/dist/shared/utils/session-auth.d.ts +1 -0
  387. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  388. package/package.json +20 -17
@@ -1 +1 @@
1
- {"version":3,"file":"Widgets.js","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth, useTracking } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Box, Flex, LinkButton, Typography } from '@strapi/design-system';\nimport {\n Cloud,\n CloudUpload,\n Earth,\n Images,\n User,\n Key,\n Files,\n Layout,\n Graph,\n Webhooks,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetCountDocumentsQuery, useGetKeyStatisticsQuery } from '../services/homepage';\nimport { getDisplayName, getInitials } from '../utils/users';\n\nimport { Widget } from './WidgetHelpers';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Key Statistics\n * -----------------------------------------------------------------------------------------------*/\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst GridCell = styled(Box)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n &:nth-child(2n) {\n border-right: none;\n }\n &:nth-last-child(-n + 2) {\n border-bottom: none;\n }\n`;\n\nconst formatNumber = ({ locale, number }: { locale: string; number: number }) => {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(number);\n};\n\nconst LinkCell = styled(Link)`\n text-decoration: none;\n padding: ${({ theme }) => theme.spaces[3]};\n`;\n\nconst KeyStatisticsWidget = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery();\n const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } =\n useGetKeyStatisticsQuery();\n\n if (isLoadingKeyStatistics || isLoadingCountDocuments) {\n return <Widget.Loading />;\n }\n\n if (!countKeyStatistics || !countDocuments) {\n return <Widget.Error />;\n }\n\n const keyStatisticsList = {\n entries: {\n label: {\n id: 'widget.key-statistics.list.entries',\n defaultMessage: 'Entries',\n },\n icon: {\n component: <Files />,\n background: 'primary100',\n color: 'primary600',\n },\n link: '/content-manager',\n },\n assets: {\n label: {\n id: 'widget.key-statistics.list.assets',\n defaultMessage: 'Assets',\n },\n icon: {\n component: <Images />,\n background: 'warning100',\n color: 'warning600',\n },\n link: '/plugins/upload',\n },\n contentTypes: {\n label: {\n id: 'widget.key-statistics.list.contentTypes',\n defaultMessage: 'Content-Types',\n },\n icon: {\n component: <Layout />,\n background: 'secondary100',\n color: 'secondary600',\n },\n link: '/plugins/content-type-builder',\n },\n components: {\n label: {\n id: 'widget.key-statistics.list.components',\n defaultMessage: 'Components',\n },\n icon: {\n component: <Graph />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/plugins/content-type-builder',\n },\n locales: {\n label: {\n id: 'widget.key-statistics.list.locales',\n defaultMessage: 'Locales',\n },\n icon: {\n component: <Earth />,\n background: 'success100',\n color: 'success600',\n },\n link: '/settings/internationalization',\n },\n admins: {\n label: {\n id: 'widget.key-statistics.list.admins',\n defaultMessage: 'Admins',\n },\n icon: {\n component: <User />,\n background: 'danger100',\n color: 'danger600',\n },\n link: '/settings/users?pageSize=10&page=1&sort=firstname',\n },\n webhooks: {\n label: {\n id: 'widget.key-statistics.list.webhooks',\n defaultMessage: 'Webhooks',\n },\n icon: {\n component: <Webhooks />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/settings/webhooks',\n },\n apiTokens: {\n label: {\n id: 'widget.key-statistics.list.apiTokens',\n defaultMessage: 'API Tokens',\n },\n icon: {\n component: <Key />,\n background: 'neutral100',\n color: 'neutral600',\n },\n link: '/settings/api-tokens?sort=name:ASC',\n },\n };\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const totalCountEntries = draft + published + modified;\n\n return (\n <Grid>\n {Object.entries(keyStatisticsList).map(([key, item]) => {\n const value = countKeyStatistics?.[key as keyof typeof countKeyStatistics];\n return (\n value !== null && (\n <GridCell\n as={LinkCell}\n to={item.link}\n key={`key-statistics-${key}`}\n data-testid={`stat-${key}`}\n onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Flex\n padding={2}\n borderRadius={1}\n background={item.icon.background}\n color={item.icon.color}\n >\n {item.icon.component}\n </Flex>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {formatMessage(item.label)}\n </Typography>\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatNumber({\n locale,\n number: key === 'entries' ? totalCountEntries : value,\n })}\n </Typography>\n </Flex>\n </Flex>\n </GridCell>\n )\n );\n })}\n </Grid>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeployNowWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeployNowWidget = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" gap={4} height=\"100%\" alignItems=\"center\" justifyContent=\"center\">\n <CloudUpload width=\"3.2rem\" height=\"3.2rem\" />\n <Flex direction=\"column\" gap={2}>\n <Typography variant=\"beta\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.widget.deploy-now.title',\n defaultMessage: 'Ready to go live ?',\n })}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.widget.deploy-now.description',\n defaultMessage: 'Deploy with Strapi Cloud',\n })}\n </Typography>\n </Flex>\n <LinkButton href=\"https://cloud.strapi.io/login\" isExternal size=\"L\" startIcon={<Cloud />}>\n {formatMessage({ id: 'HomePage.widget.deploy-now.button', defaultMessage: 'Deploy Now' })}\n </LinkButton>\n </Flex>\n );\n};\n\nexport { ProfileWidget, KeyStatisticsWidget, DeployNowWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id","Grid","Box","theme","colors","neutral200","borderRadius","GridCell","formatNumber","locale","number","Intl","NumberFormat","notation","maximumFractionDigits","format","LinkCell","Link","spaces","KeyStatisticsWidget","trackUsage","useTracking","formatMessage","useIntl","data","countDocuments","isLoading","isLoadingCountDocuments","useGetCountDocumentsQuery","countKeyStatistics","isLoadingKeyStatistics","useGetKeyStatisticsQuery","Widget","Loading","Error","keyStatisticsList","entries","label","defaultMessage","icon","component","Files","background","color","link","assets","Images","contentTypes","Layout","components","Graph","locales","Earth","admins","User","webhooks","Webhooks","apiTokens","Key","draft","published","modified","totalCountEntries","Object","key","item","value","as","to","data-testid","onClick","itemKey","alignItems","padding","DeployNowWidget","CloudUpload","width","LinkButton","href","isExternal","size","startIcon","Cloud"],"mappings":"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"}
1
+ {"version":3,"file":"Widgets.js","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth, useTracking } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Box, Flex, LinkButton, Typography } from '@strapi/design-system';\nimport {\n Cloud,\n CloudUpload,\n Earth,\n Images,\n User,\n Key,\n Files,\n Layout,\n Graph,\n Webhooks,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetCountDocumentsQuery, useGetKeyStatisticsQuery } from '../services/homepage';\nimport { getDisplayName, getInitials } from '../utils/users';\n\nimport { Widget } from './WidgetHelpers';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Key Statistics\n * -----------------------------------------------------------------------------------------------*/\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst GridCell = styled(Box)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n &:nth-child(2n) {\n border-right: none;\n }\n &:nth-last-child(-n + 2) {\n border-bottom: none;\n }\n`;\n\nconst formatNumber = ({ locale, number }: { locale: string; number: number }) => {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(number);\n};\n\nconst LinkCell = styled(Link)`\n text-decoration: none;\n padding: ${({ theme }) => theme.spaces[3]};\n`;\n\nconst KeyStatisticsWidget = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery();\n const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } =\n useGetKeyStatisticsQuery();\n\n if (isLoadingKeyStatistics || isLoadingCountDocuments) {\n return <Widget.Loading />;\n }\n\n if (!countKeyStatistics || !countDocuments) {\n return <Widget.Error />;\n }\n\n const keyStatisticsList = {\n entries: {\n label: {\n id: 'widget.key-statistics.list.entries',\n defaultMessage: 'Entries',\n },\n icon: {\n component: <Files />,\n background: 'primary100',\n color: 'primary600',\n },\n link: '/content-manager',\n },\n assets: {\n label: {\n id: 'widget.key-statistics.list.assets',\n defaultMessage: 'Assets',\n },\n icon: {\n component: <Images />,\n background: 'warning100',\n color: 'warning600',\n },\n link: '/plugins/upload',\n },\n contentTypes: {\n label: {\n id: 'widget.key-statistics.list.contentTypes',\n defaultMessage: 'Content-Types',\n },\n icon: {\n component: <Layout />,\n background: 'secondary100',\n color: 'secondary600',\n },\n link: '/plugins/content-type-builder',\n },\n components: {\n label: {\n id: 'widget.key-statistics.list.components',\n defaultMessage: 'Components',\n },\n icon: {\n component: <Graph />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/plugins/content-type-builder',\n },\n locales: {\n label: {\n id: 'widget.key-statistics.list.locales',\n defaultMessage: 'Locales',\n },\n icon: {\n component: <Earth />,\n background: 'success100',\n color: 'success600',\n },\n link: '/settings/internationalization',\n },\n admins: {\n label: {\n id: 'widget.key-statistics.list.admins',\n defaultMessage: 'Admins',\n },\n icon: {\n component: <User />,\n background: 'danger100',\n color: 'danger600',\n },\n link: '/settings/users?pageSize=10&page=1&sort=firstname',\n },\n webhooks: {\n label: {\n id: 'widget.key-statistics.list.webhooks',\n defaultMessage: 'Webhooks',\n },\n icon: {\n component: <Webhooks />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/settings/webhooks',\n },\n apiTokens: {\n label: {\n id: 'widget.key-statistics.list.apiTokens',\n defaultMessage: 'API Tokens',\n },\n icon: {\n component: <Key />,\n background: 'neutral100',\n color: 'neutral600',\n },\n link: '/settings/api-tokens?sort=name:ASC',\n },\n };\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const totalCountEntries = draft + published + modified;\n\n return (\n <Grid>\n {Object.entries(keyStatisticsList).map(([key, item]) => {\n const value = countKeyStatistics?.[key as keyof typeof countKeyStatistics];\n return (\n value !== null && (\n <GridCell\n as={LinkCell}\n to={item.link}\n key={`key-statistics-${key}`}\n data-testid={`stat-${key}`}\n onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Flex\n padding={2}\n borderRadius={1}\n background={item.icon.background}\n color={item.icon.color}\n >\n {item.icon.component}\n </Flex>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {formatMessage(item.label)}\n </Typography>\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatNumber({\n locale,\n number: key === 'entries' ? totalCountEntries : value,\n })}\n </Typography>\n </Flex>\n </Flex>\n </GridCell>\n )\n );\n })}\n </Grid>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeployNowWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeployNowWidget = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" gap={4} height=\"100%\" alignItems=\"center\" justifyContent=\"center\">\n <CloudUpload width=\"3.2rem\" height=\"3.2rem\" />\n <Flex direction=\"column\" gap={2}>\n <Typography variant=\"beta\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.widget.deploy-now.title',\n defaultMessage: 'Ready to go live ?',\n })}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.widget.deploy-now.description',\n defaultMessage: 'Deploy with Strapi Cloud',\n })}\n </Typography>\n </Flex>\n <LinkButton href=\"https://cloud.strapi.io/login\" isExternal size=\"L\" startIcon={<Cloud />}>\n {formatMessage({ id: 'HomePage.widget.deploy-now.button', defaultMessage: 'Deploy Now' })}\n </LinkButton>\n </Flex>\n );\n};\n\nexport { ProfileWidget, KeyStatisticsWidget, DeployNowWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id","Grid","Box","theme","colors","neutral200","borderRadius","GridCell","formatNumber","locale","number","Intl","NumberFormat","notation","maximumFractionDigits","format","LinkCell","Link","spaces","KeyStatisticsWidget","trackUsage","useTracking","formatMessage","useIntl","data","countDocuments","isLoading","isLoadingCountDocuments","useGetCountDocumentsQuery","countKeyStatistics","isLoadingKeyStatistics","useGetKeyStatisticsQuery","Widget","Loading","Error","keyStatisticsList","entries","label","defaultMessage","icon","component","Files","background","color","link","assets","Images","contentTypes","Layout","components","Graph","locales","Earth","admins","User","webhooks","Webhooks","apiTokens","Key","draft","published","modified","totalCountEntries","Object","key","item","value","as","to","data-testid","onClick","itemKey","alignItems","padding","DeployNowWidget","CloudUpload","width","LinkButton","href","isExternal","size","startIcon","Cloud"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.js","sources":["../../../../../../admin/src/core/apis/Plugin.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { immerable } from 'immer';\n\nexport interface PluginConfig\n extends Partial<Pick<Plugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady'>> {\n name: string;\n id: string;\n}\n\nexport class Plugin {\n [immerable] = true;\n\n apis: Record<string, unknown>;\n initializer: React.ComponentType<{ setPlugin(pluginId: string): void }> | null;\n injectionZones: Record<\n string,\n Record<string, Array<{ name: string; Component: React.ComponentType }>>\n >;\n isReady: boolean;\n name: string;\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: { name: string; Component: React.ComponentType }\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n"],"names":["Plugin","getInjectedComponents","containerName","blockName","injectionZones","err","console","error","injectComponent","component","push","pluginConf","immerable","apis","initializer","isReady","undefined","name","pluginId","id"],"mappings":";;;;AAWO,MAAMA,MAAAA,CAAAA;IAsBXC,qBAAAA,CAAsBC,aAAqB,EAAEC,SAAiB,EAAE;QAC9D,IAAI;YACF,OAAO,IAAI,CAACC,cAAc,CAACF,cAAc,CAACC,SAAAA,CAAU,IAAI,EAAE;AAC5D,QAAA,CAAA,CAAE,OAAOE,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,+BAAA,EAAiCF,GAAAA,CAAAA;AAE/C,YAAA,OAAO,EAAE;AACX,QAAA;AACF,IAAA;AAEAG,IAAAA,eAAAA,CACEN,aAAqB,EACrBC,SAAiB,EACjBM,SAA2D,EAC3D;QACA,IAAI;YACF,IAAI,CAACL,cAAc,CAACF,aAAAA,CAAc,CAACC,SAAAA,CAAU,CAACO,IAAI,CAACD,SAAAA,CAAAA;AACrD,QAAA,CAAA,CAAE,OAAOJ,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,yBAAA,EAA2BF,GAAAA,CAAAA;AAC3C,QAAA;AACF,IAAA;AA7BA,IAAA,WAAA,CAAYM,UAAwB,CAAE;AAZtC,QAAA,IAAA,CAACC,gBAAU,GAAG,IAAA;AAaZ,QAAA,IAAI,CAACC,IAAI,GAAGF,UAAAA,CAAWE,IAAI,IAAI,EAAC;AAChC,QAAA,IAAI,CAACC,WAAW,GAAGH,UAAAA,CAAWG,WAAW,IAAI,IAAA;AAC7C,QAAA,IAAI,CAACV,cAAc,GAAGO,UAAAA,CAAWP,cAAc,IAAI,EAAC;QACpD,IAAI,CAACW,OAAO,GAAGJ,UAAAA,CAAWI,OAAO,KAAKC,SAAAA,GAAYL,UAAAA,CAAWI,OAAO,GAAG,IAAA;AACvE,QAAA,IAAI,CAACE,IAAI,GAAGN,UAAAA,CAAWM,IAAI;AAC3B,QAAA,IAAI,CAACC,QAAQ,GAAGP,UAAAA,CAAWQ,EAAE;AAC/B,IAAA;AAuBF;;;;"}
1
+ {"version":3,"file":"Plugin.js","sources":["../../../../../../admin/src/core/apis/Plugin.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { immerable } from 'immer';\n\nexport interface PluginConfig\n extends Partial<Pick<Plugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady'>> {\n name: string;\n id: string;\n}\n\nexport class Plugin {\n [immerable] = true;\n\n apis: Record<string, unknown>;\n initializer: React.ComponentType<{ setPlugin(_pluginId: string): void }> | null;\n injectionZones: Record<\n string,\n Record<string, Array<{ name: string; Component: React.ComponentType }>>\n >;\n isReady: boolean;\n name: string;\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: { name: string; Component: React.ComponentType }\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n"],"names":["Plugin","getInjectedComponents","containerName","blockName","injectionZones","err","console","error","injectComponent","component","push","pluginConf","immerable","apis","initializer","isReady","undefined","name","pluginId","id"],"mappings":";;;;AAWO,MAAMA,MAAAA,CAAAA;IAsBXC,qBAAAA,CAAsBC,aAAqB,EAAEC,SAAiB,EAAE;QAC9D,IAAI;YACF,OAAO,IAAI,CAACC,cAAc,CAACF,cAAc,CAACC,SAAAA,CAAU,IAAI,EAAE;AAC5D,QAAA,CAAA,CAAE,OAAOE,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,+BAAA,EAAiCF,GAAAA,CAAAA;AAE/C,YAAA,OAAO,EAAE;AACX,QAAA;AACF,IAAA;AAEAG,IAAAA,eAAAA,CACEN,aAAqB,EACrBC,SAAiB,EACjBM,SAA2D,EAC3D;QACA,IAAI;YACF,IAAI,CAACL,cAAc,CAACF,aAAAA,CAAc,CAACC,SAAAA,CAAU,CAACO,IAAI,CAACD,SAAAA,CAAAA;AACrD,QAAA,CAAA,CAAE,OAAOJ,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,yBAAA,EAA2BF,GAAAA,CAAAA;AAC3C,QAAA;AACF,IAAA;AA7BA,IAAA,WAAA,CAAYM,UAAwB,CAAE;AAZtC,QAAA,IAAA,CAACC,gBAAU,GAAG,IAAA;AAaZ,QAAA,IAAI,CAACC,IAAI,GAAGF,UAAAA,CAAWE,IAAI,IAAI,EAAC;AAChC,QAAA,IAAI,CAACC,WAAW,GAAGH,UAAAA,CAAWG,WAAW,IAAI,IAAA;AAC7C,QAAA,IAAI,CAACV,cAAc,GAAGO,UAAAA,CAAWP,cAAc,IAAI,EAAC;QACpD,IAAI,CAACW,OAAO,GAAGJ,UAAAA,CAAWI,OAAO,KAAKC,SAAAA,GAAYL,UAAAA,CAAWI,OAAO,GAAG,IAAA;AACvE,QAAA,IAAI,CAACE,IAAI,GAAGN,UAAAA,CAAWM,IAAI;AAC3B,QAAA,IAAI,CAACC,QAAQ,GAAGP,UAAAA,CAAWQ,EAAE;AAC/B,IAAA;AAuBF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.mjs","sources":["../../../../../../admin/src/core/apis/Plugin.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { immerable } from 'immer';\n\nexport interface PluginConfig\n extends Partial<Pick<Plugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady'>> {\n name: string;\n id: string;\n}\n\nexport class Plugin {\n [immerable] = true;\n\n apis: Record<string, unknown>;\n initializer: React.ComponentType<{ setPlugin(pluginId: string): void }> | null;\n injectionZones: Record<\n string,\n Record<string, Array<{ name: string; Component: React.ComponentType }>>\n >;\n isReady: boolean;\n name: string;\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: { name: string; Component: React.ComponentType }\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n"],"names":["Plugin","getInjectedComponents","containerName","blockName","injectionZones","err","console","error","injectComponent","component","push","pluginConf","immerable","apis","initializer","isReady","undefined","name","pluginId","id"],"mappings":";;AAWO,MAAMA,MAAAA,CAAAA;IAsBXC,qBAAAA,CAAsBC,aAAqB,EAAEC,SAAiB,EAAE;QAC9D,IAAI;YACF,OAAO,IAAI,CAACC,cAAc,CAACF,cAAc,CAACC,SAAAA,CAAU,IAAI,EAAE;AAC5D,QAAA,CAAA,CAAE,OAAOE,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,+BAAA,EAAiCF,GAAAA,CAAAA;AAE/C,YAAA,OAAO,EAAE;AACX,QAAA;AACF,IAAA;AAEAG,IAAAA,eAAAA,CACEN,aAAqB,EACrBC,SAAiB,EACjBM,SAA2D,EAC3D;QACA,IAAI;YACF,IAAI,CAACL,cAAc,CAACF,aAAAA,CAAc,CAACC,SAAAA,CAAU,CAACO,IAAI,CAACD,SAAAA,CAAAA;AACrD,QAAA,CAAA,CAAE,OAAOJ,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,yBAAA,EAA2BF,GAAAA,CAAAA;AAC3C,QAAA;AACF,IAAA;AA7BA,IAAA,WAAA,CAAYM,UAAwB,CAAE;AAZtC,QAAA,IAAA,CAACC,UAAU,GAAG,IAAA;AAaZ,QAAA,IAAI,CAACC,IAAI,GAAGF,UAAAA,CAAWE,IAAI,IAAI,EAAC;AAChC,QAAA,IAAI,CAACC,WAAW,GAAGH,UAAAA,CAAWG,WAAW,IAAI,IAAA;AAC7C,QAAA,IAAI,CAACV,cAAc,GAAGO,UAAAA,CAAWP,cAAc,IAAI,EAAC;QACpD,IAAI,CAACW,OAAO,GAAGJ,UAAAA,CAAWI,OAAO,KAAKC,SAAAA,GAAYL,UAAAA,CAAWI,OAAO,GAAG,IAAA;AACvE,QAAA,IAAI,CAACE,IAAI,GAAGN,UAAAA,CAAWM,IAAI;AAC3B,QAAA,IAAI,CAACC,QAAQ,GAAGP,UAAAA,CAAWQ,EAAE;AAC/B,IAAA;AAuBF;;;;"}
1
+ {"version":3,"file":"Plugin.mjs","sources":["../../../../../../admin/src/core/apis/Plugin.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { immerable } from 'immer';\n\nexport interface PluginConfig\n extends Partial<Pick<Plugin, 'apis' | 'initializer' | 'injectionZones' | 'isReady'>> {\n name: string;\n id: string;\n}\n\nexport class Plugin {\n [immerable] = true;\n\n apis: Record<string, unknown>;\n initializer: React.ComponentType<{ setPlugin(_pluginId: string): void }> | null;\n injectionZones: Record<\n string,\n Record<string, Array<{ name: string; Component: React.ComponentType }>>\n >;\n isReady: boolean;\n name: string;\n pluginId: PluginConfig['id'];\n\n constructor(pluginConf: PluginConfig) {\n this.apis = pluginConf.apis || {};\n this.initializer = pluginConf.initializer || null;\n this.injectionZones = pluginConf.injectionZones || {};\n this.isReady = pluginConf.isReady !== undefined ? pluginConf.isReady : true;\n this.name = pluginConf.name;\n this.pluginId = pluginConf.id;\n }\n\n getInjectedComponents(containerName: string, blockName: string) {\n try {\n return this.injectionZones[containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n }\n\n injectComponent(\n containerName: string,\n blockName: string,\n component: { name: string; Component: React.ComponentType }\n ) {\n try {\n this.injectionZones[containerName][blockName].push(component);\n } catch (err) {\n console.error('Cannot inject component', err);\n }\n }\n}\n"],"names":["Plugin","getInjectedComponents","containerName","blockName","injectionZones","err","console","error","injectComponent","component","push","pluginConf","immerable","apis","initializer","isReady","undefined","name","pluginId","id"],"mappings":";;AAWO,MAAMA,MAAAA,CAAAA;IAsBXC,qBAAAA,CAAsBC,aAAqB,EAAEC,SAAiB,EAAE;QAC9D,IAAI;YACF,OAAO,IAAI,CAACC,cAAc,CAACF,cAAc,CAACC,SAAAA,CAAU,IAAI,EAAE;AAC5D,QAAA,CAAA,CAAE,OAAOE,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,+BAAA,EAAiCF,GAAAA,CAAAA;AAE/C,YAAA,OAAO,EAAE;AACX,QAAA;AACF,IAAA;AAEAG,IAAAA,eAAAA,CACEN,aAAqB,EACrBC,SAAiB,EACjBM,SAA2D,EAC3D;QACA,IAAI;YACF,IAAI,CAACL,cAAc,CAACF,aAAAA,CAAc,CAACC,SAAAA,CAAU,CAACO,IAAI,CAACD,SAAAA,CAAAA;AACrD,QAAA,CAAA,CAAE,OAAOJ,GAAAA,EAAK;YACZC,OAAAA,CAAQC,KAAK,CAAC,yBAAA,EAA2BF,GAAAA,CAAAA;AAC3C,QAAA;AACF,IAAA;AA7BA,IAAA,WAAA,CAAYM,UAAwB,CAAE;AAZtC,QAAA,IAAA,CAACC,UAAU,GAAG,IAAA;AAaZ,QAAA,IAAI,CAACC,IAAI,GAAGF,UAAAA,CAAWE,IAAI,IAAI,EAAC;AAChC,QAAA,IAAI,CAACC,WAAW,GAAGH,UAAAA,CAAWG,WAAW,IAAI,IAAA;AAC7C,QAAA,IAAI,CAACV,cAAc,GAAGO,UAAAA,CAAWP,cAAc,IAAI,EAAC;QACpD,IAAI,CAACW,OAAO,GAAGJ,UAAAA,CAAWI,OAAO,KAAKC,SAAAA,GAAYL,UAAAA,CAAWI,OAAO,GAAG,IAAA;AACvE,QAAA,IAAI,CAACE,IAAI,GAAGN,UAAAA,CAAWM,IAAI;AAC3B,QAAA,IAAI,CAACC,QAAQ,GAAGP,UAAAA,CAAWQ,EAAE;AAC/B,IAAA;AAuBF;;;;"}
@@ -41,7 +41,7 @@ class Widgets {
41
41
  };
42
42
  this.getAll = ()=>{
43
43
  return this.widgets.map((widget)=>{
44
- const { id, pluginId, ...widgetBase } = widget;
44
+ const { id: _id, pluginId: _pluginId, ...widgetBase } = widget;
45
45
  return {
46
46
  ...widgetBase,
47
47
  uid: this.generateUid(widget)
@@ -1 +1 @@
1
- {"version":3,"file":"Widgets.js","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;\n roles?: string[];\n};\n\ntype WidgetWithUID = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\ntype DescriptionReducer = (prev: WidgetArgs[]) => WidgetArgs[];\n\nclass Widgets {\n widgets: WidgetArgs[];\n\n constructor() {\n this.widgets = [];\n }\n\n private generateUid = (widget: WidgetArgs): WidgetUID => {\n return widget.pluginId ? `plugin::${widget.pluginId}.${widget.id}` : `global::${widget.id}`;\n };\n\n private checkWidgets = (widgets: WidgetArgs[]): void => {\n widgets.forEach((widget) => {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n });\n };\n\n register(widgets: WidgetArgs | WidgetArgs[] | DescriptionReducer) {\n if (Array.isArray(widgets)) {\n this.checkWidgets(widgets);\n this.widgets = [...this.widgets, ...widgets];\n } else if (typeof widgets === 'function') {\n const newWidgets = widgets(this.widgets);\n this.checkWidgets(newWidgets);\n this.widgets = newWidgets;\n } else if (typeof widgets === 'object') {\n this.checkWidgets([widgets]);\n this.widgets.push(widgets);\n } else {\n throw new Error('Expected widgets to be an array or a reducer function');\n }\n }\n\n getAll = (): WidgetWithUID[] => {\n return this.widgets.map((widget) => {\n const { id, pluginId, ...widgetBase } = widget;\n return {\n ...widgetBase,\n uid: this.generateUid(widget),\n };\n });\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, WidgetWithUID };\n"],"names":["Widgets","register","widgets","Array","isArray","checkWidgets","newWidgets","push","Error","generateUid","widget","pluginId","id","forEach","invariant","component","title","icon","getAll","map","widgetBase","uid"],"mappings":";;;;;;;;AAkCA,MAAMA,OAAAA,CAAAA;AAoBJC,IAAAA,QAAAA,CAASC,OAAuD,EAAE;QAChE,IAAIC,KAAAA,CAAMC,OAAO,CAACF,OAAAA,CAAAA,EAAU;YAC1B,IAAI,CAACG,YAAY,CAACH,OAAAA,CAAAA;YAClB,IAAI,CAACA,OAAO,GAAG;AAAI,gBAAA,GAAA,IAAI,CAACA,OAAO;AAAKA,gBAAAA,GAAAA;AAAQ,aAAA;QAC9C,CAAA,MAAO,IAAI,OAAOA,OAAAA,KAAY,UAAA,EAAY;AACxC,YAAA,MAAMI,UAAAA,GAAaJ,OAAAA,CAAQ,IAAI,CAACA,OAAO,CAAA;YACvC,IAAI,CAACG,YAAY,CAACC,UAAAA,CAAAA;YAClB,IAAI,CAACJ,OAAO,GAAGI,UAAAA;QACjB,CAAA,MAAO,IAAI,OAAOJ,OAAAA,KAAY,QAAA,EAAU;YACtC,IAAI,CAACG,YAAY,CAAC;AAACH,gBAAAA;AAAQ,aAAA,CAAA;AAC3B,YAAA,IAAI,CAACA,OAAO,CAACK,IAAI,CAACL,OAAAA,CAAAA;QACpB,CAAA,MAAO;AACL,YAAA,MAAM,IAAIM,KAAAA,CAAM,uDAAA,CAAA;AAClB,QAAA;AACF,IAAA;IA/BA,WAAA,EAAc;AAINC,QAAAA,IAAAA,CAAAA,WAAAA,GAAc,CAACC,MAAAA,GAAAA;YACrB,OAAOA,MAAAA,CAAOC,QAAQ,GAAG,CAAC,QAAQ,EAAED,MAAAA,CAAOC,QAAQ,CAAC,CAAC,EAAED,MAAAA,CAAOE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAEF,MAAAA,CAAOE,EAAE,CAAA,CAAE;AAC7F,QAAA,CAAA;AAEQP,QAAAA,IAAAA,CAAAA,YAAAA,GAAe,CAACH,OAAAA,GAAAA;YACtBA,OAAAA,CAAQW,OAAO,CAAC,CAACH,MAAAA,GAAAA;gBACfI,0BAAAA,CAAUJ,MAAAA,CAAOE,EAAE,EAAE,wBAAA,CAAA;gBACrBE,0BAAAA,CAAUJ,MAAAA,CAAOK,SAAS,EAAE,8BAAA,CAAA;gBAC5BD,0BAAAA,CAAUJ,MAAAA,CAAOM,KAAK,EAAE,0BAAA,CAAA;gBACxBF,0BAAAA,CAAUJ,MAAAA,CAAOO,IAAI,EAAE,0BAAA,CAAA;AACzB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;aAkBAC,MAAAA,GAAS,IAAA;AACP,YAAA,OAAO,IAAI,CAAChB,OAAO,CAACiB,GAAG,CAAC,CAACT,MAAAA,GAAAA;AACvB,gBAAA,MAAM,EAAEE,EAAE,EAAED,QAAQ,EAAE,GAAGS,YAAY,GAAGV,MAAAA;gBACxC,OAAO;AACL,oBAAA,GAAGU,UAAU;oBACbC,GAAAA,EAAK,IAAI,CAACZ,WAAW,CAACC,MAAAA;AACxB,iBAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;QAxCE,IAAI,CAACR,OAAO,GAAG,EAAE;AACnB,IAAA;AAwCF;;;;"}
1
+ {"version":3,"file":"Widgets.js","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;\n roles?: string[];\n};\n\ntype WidgetWithUID = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\ntype DescriptionReducer = (prev: WidgetArgs[]) => WidgetArgs[];\n\nclass Widgets {\n widgets: WidgetArgs[];\n\n constructor() {\n this.widgets = [];\n }\n\n private generateUid = (widget: WidgetArgs): WidgetUID => {\n return widget.pluginId ? `plugin::${widget.pluginId}.${widget.id}` : `global::${widget.id}`;\n };\n\n private checkWidgets = (widgets: WidgetArgs[]): void => {\n widgets.forEach((widget) => {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n });\n };\n\n register(widgets: WidgetArgs | WidgetArgs[] | DescriptionReducer) {\n if (Array.isArray(widgets)) {\n this.checkWidgets(widgets);\n this.widgets = [...this.widgets, ...widgets];\n } else if (typeof widgets === 'function') {\n const newWidgets = widgets(this.widgets);\n this.checkWidgets(newWidgets);\n this.widgets = newWidgets;\n } else if (typeof widgets === 'object') {\n this.checkWidgets([widgets]);\n this.widgets.push(widgets);\n } else {\n throw new Error('Expected widgets to be an array or a reducer function');\n }\n }\n\n getAll = (): WidgetWithUID[] => {\n return this.widgets.map((widget) => {\n const { id: _id, pluginId: _pluginId, ...widgetBase } = widget;\n return {\n ...widgetBase,\n uid: this.generateUid(widget),\n };\n });\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, WidgetWithUID };\n"],"names":["Widgets","register","widgets","Array","isArray","checkWidgets","newWidgets","push","Error","generateUid","widget","pluginId","id","forEach","invariant","component","title","icon","getAll","map","_id","_pluginId","widgetBase","uid"],"mappings":";;;;;;;;AAkCA,MAAMA,OAAAA,CAAAA;AAoBJC,IAAAA,QAAAA,CAASC,OAAuD,EAAE;QAChE,IAAIC,KAAAA,CAAMC,OAAO,CAACF,OAAAA,CAAAA,EAAU;YAC1B,IAAI,CAACG,YAAY,CAACH,OAAAA,CAAAA;YAClB,IAAI,CAACA,OAAO,GAAG;AAAI,gBAAA,GAAA,IAAI,CAACA,OAAO;AAAKA,gBAAAA,GAAAA;AAAQ,aAAA;QAC9C,CAAA,MAAO,IAAI,OAAOA,OAAAA,KAAY,UAAA,EAAY;AACxC,YAAA,MAAMI,UAAAA,GAAaJ,OAAAA,CAAQ,IAAI,CAACA,OAAO,CAAA;YACvC,IAAI,CAACG,YAAY,CAACC,UAAAA,CAAAA;YAClB,IAAI,CAACJ,OAAO,GAAGI,UAAAA;QACjB,CAAA,MAAO,IAAI,OAAOJ,OAAAA,KAAY,QAAA,EAAU;YACtC,IAAI,CAACG,YAAY,CAAC;AAACH,gBAAAA;AAAQ,aAAA,CAAA;AAC3B,YAAA,IAAI,CAACA,OAAO,CAACK,IAAI,CAACL,OAAAA,CAAAA;QACpB,CAAA,MAAO;AACL,YAAA,MAAM,IAAIM,KAAAA,CAAM,uDAAA,CAAA;AAClB,QAAA;AACF,IAAA;IA/BA,WAAA,EAAc;AAINC,QAAAA,IAAAA,CAAAA,WAAAA,GAAc,CAACC,MAAAA,GAAAA;YACrB,OAAOA,MAAAA,CAAOC,QAAQ,GAAG,CAAC,QAAQ,EAAED,MAAAA,CAAOC,QAAQ,CAAC,CAAC,EAAED,MAAAA,CAAOE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAEF,MAAAA,CAAOE,EAAE,CAAA,CAAE;AAC7F,QAAA,CAAA;AAEQP,QAAAA,IAAAA,CAAAA,YAAAA,GAAe,CAACH,OAAAA,GAAAA;YACtBA,OAAAA,CAAQW,OAAO,CAAC,CAACH,MAAAA,GAAAA;gBACfI,0BAAAA,CAAUJ,MAAAA,CAAOE,EAAE,EAAE,wBAAA,CAAA;gBACrBE,0BAAAA,CAAUJ,MAAAA,CAAOK,SAAS,EAAE,8BAAA,CAAA;gBAC5BD,0BAAAA,CAAUJ,MAAAA,CAAOM,KAAK,EAAE,0BAAA,CAAA;gBACxBF,0BAAAA,CAAUJ,MAAAA,CAAOO,IAAI,EAAE,0BAAA,CAAA;AACzB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;aAkBAC,MAAAA,GAAS,IAAA;AACP,YAAA,OAAO,IAAI,CAAChB,OAAO,CAACiB,GAAG,CAAC,CAACT,MAAAA,GAAAA;gBACvB,MAAM,EAAEE,IAAIQ,GAAG,EAAET,UAAUU,SAAS,EAAE,GAAGC,UAAAA,EAAY,GAAGZ,MAAAA;gBACxD,OAAO;AACL,oBAAA,GAAGY,UAAU;oBACbC,GAAAA,EAAK,IAAI,CAACd,WAAW,CAACC,MAAAA;AACxB,iBAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;QAxCE,IAAI,CAACR,OAAO,GAAG,EAAE;AACnB,IAAA;AAwCF;;;;"}
@@ -35,7 +35,7 @@ class Widgets {
35
35
  };
36
36
  this.getAll = ()=>{
37
37
  return this.widgets.map((widget)=>{
38
- const { id, pluginId, ...widgetBase } = widget;
38
+ const { id: _id, pluginId: _pluginId, ...widgetBase } = widget;
39
39
  return {
40
40
  ...widgetBase,
41
41
  uid: this.generateUid(widget)
@@ -1 +1 @@
1
- {"version":3,"file":"Widgets.mjs","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;\n roles?: string[];\n};\n\ntype WidgetWithUID = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\ntype DescriptionReducer = (prev: WidgetArgs[]) => WidgetArgs[];\n\nclass Widgets {\n widgets: WidgetArgs[];\n\n constructor() {\n this.widgets = [];\n }\n\n private generateUid = (widget: WidgetArgs): WidgetUID => {\n return widget.pluginId ? `plugin::${widget.pluginId}.${widget.id}` : `global::${widget.id}`;\n };\n\n private checkWidgets = (widgets: WidgetArgs[]): void => {\n widgets.forEach((widget) => {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n });\n };\n\n register(widgets: WidgetArgs | WidgetArgs[] | DescriptionReducer) {\n if (Array.isArray(widgets)) {\n this.checkWidgets(widgets);\n this.widgets = [...this.widgets, ...widgets];\n } else if (typeof widgets === 'function') {\n const newWidgets = widgets(this.widgets);\n this.checkWidgets(newWidgets);\n this.widgets = newWidgets;\n } else if (typeof widgets === 'object') {\n this.checkWidgets([widgets]);\n this.widgets.push(widgets);\n } else {\n throw new Error('Expected widgets to be an array or a reducer function');\n }\n }\n\n getAll = (): WidgetWithUID[] => {\n return this.widgets.map((widget) => {\n const { id, pluginId, ...widgetBase } = widget;\n return {\n ...widgetBase,\n uid: this.generateUid(widget),\n };\n });\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, WidgetWithUID };\n"],"names":["Widgets","register","widgets","Array","isArray","checkWidgets","newWidgets","push","Error","generateUid","widget","pluginId","id","forEach","invariant","component","title","icon","getAll","map","widgetBase","uid"],"mappings":";;AAkCA,MAAMA,OAAAA,CAAAA;AAoBJC,IAAAA,QAAAA,CAASC,OAAuD,EAAE;QAChE,IAAIC,KAAAA,CAAMC,OAAO,CAACF,OAAAA,CAAAA,EAAU;YAC1B,IAAI,CAACG,YAAY,CAACH,OAAAA,CAAAA;YAClB,IAAI,CAACA,OAAO,GAAG;AAAI,gBAAA,GAAA,IAAI,CAACA,OAAO;AAAKA,gBAAAA,GAAAA;AAAQ,aAAA;QAC9C,CAAA,MAAO,IAAI,OAAOA,OAAAA,KAAY,UAAA,EAAY;AACxC,YAAA,MAAMI,UAAAA,GAAaJ,OAAAA,CAAQ,IAAI,CAACA,OAAO,CAAA;YACvC,IAAI,CAACG,YAAY,CAACC,UAAAA,CAAAA;YAClB,IAAI,CAACJ,OAAO,GAAGI,UAAAA;QACjB,CAAA,MAAO,IAAI,OAAOJ,OAAAA,KAAY,QAAA,EAAU;YACtC,IAAI,CAACG,YAAY,CAAC;AAACH,gBAAAA;AAAQ,aAAA,CAAA;AAC3B,YAAA,IAAI,CAACA,OAAO,CAACK,IAAI,CAACL,OAAAA,CAAAA;QACpB,CAAA,MAAO;AACL,YAAA,MAAM,IAAIM,KAAAA,CAAM,uDAAA,CAAA;AAClB,QAAA;AACF,IAAA;IA/BA,WAAA,EAAc;AAINC,QAAAA,IAAAA,CAAAA,WAAAA,GAAc,CAACC,MAAAA,GAAAA;YACrB,OAAOA,MAAAA,CAAOC,QAAQ,GAAG,CAAC,QAAQ,EAAED,MAAAA,CAAOC,QAAQ,CAAC,CAAC,EAAED,MAAAA,CAAOE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAEF,MAAAA,CAAOE,EAAE,CAAA,CAAE;AAC7F,QAAA,CAAA;AAEQP,QAAAA,IAAAA,CAAAA,YAAAA,GAAe,CAACH,OAAAA,GAAAA;YACtBA,OAAAA,CAAQW,OAAO,CAAC,CAACH,MAAAA,GAAAA;gBACfI,SAAAA,CAAUJ,MAAAA,CAAOE,EAAE,EAAE,wBAAA,CAAA;gBACrBE,SAAAA,CAAUJ,MAAAA,CAAOK,SAAS,EAAE,8BAAA,CAAA;gBAC5BD,SAAAA,CAAUJ,MAAAA,CAAOM,KAAK,EAAE,0BAAA,CAAA;gBACxBF,SAAAA,CAAUJ,MAAAA,CAAOO,IAAI,EAAE,0BAAA,CAAA;AACzB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;aAkBAC,MAAAA,GAAS,IAAA;AACP,YAAA,OAAO,IAAI,CAAChB,OAAO,CAACiB,GAAG,CAAC,CAACT,MAAAA,GAAAA;AACvB,gBAAA,MAAM,EAAEE,EAAE,EAAED,QAAQ,EAAE,GAAGS,YAAY,GAAGV,MAAAA;gBACxC,OAAO;AACL,oBAAA,GAAGU,UAAU;oBACbC,GAAAA,EAAK,IAAI,CAACZ,WAAW,CAACC,MAAAA;AACxB,iBAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;QAxCE,IAAI,CAACR,OAAO,GAAG,EAAE;AACnB,IAAA;AAwCF;;;;"}
1
+ {"version":3,"file":"Widgets.mjs","sources":["../../../../../../admin/src/core/apis/Widgets.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport invariant from 'invariant';\nimport { To } from 'react-router-dom';\n\nimport { Permission } from '../../../../shared/contracts/shared';\n\nimport type { Internal, Utils } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\ntype WidgetUID = Utils.String.Suffix<\n | Internal.Namespace.WithSeparator<Internal.Namespace.Plugin>\n | Internal.Namespace.WithSeparator<Internal.Namespace.Global>,\n string\n>;\n\ntype WidgetArgs = {\n icon?: typeof import('@strapi/icons').PuzzlePiece;\n title: MessageDescriptor;\n link?: {\n label: MessageDescriptor;\n href: To;\n };\n component: () => Promise<React.ComponentType>;\n pluginId?: string;\n id: string;\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;\n roles?: string[];\n};\n\ntype WidgetWithUID = Omit<WidgetArgs, 'id' | 'pluginId'> & { uid: WidgetUID };\n\ntype DescriptionReducer = (prev: WidgetArgs[]) => WidgetArgs[];\n\nclass Widgets {\n widgets: WidgetArgs[];\n\n constructor() {\n this.widgets = [];\n }\n\n private generateUid = (widget: WidgetArgs): WidgetUID => {\n return widget.pluginId ? `plugin::${widget.pluginId}.${widget.id}` : `global::${widget.id}`;\n };\n\n private checkWidgets = (widgets: WidgetArgs[]): void => {\n widgets.forEach((widget) => {\n invariant(widget.id, 'An id must be provided');\n invariant(widget.component, 'A component must be provided');\n invariant(widget.title, 'A title must be provided');\n invariant(widget.icon, 'An icon must be provided');\n });\n };\n\n register(widgets: WidgetArgs | WidgetArgs[] | DescriptionReducer) {\n if (Array.isArray(widgets)) {\n this.checkWidgets(widgets);\n this.widgets = [...this.widgets, ...widgets];\n } else if (typeof widgets === 'function') {\n const newWidgets = widgets(this.widgets);\n this.checkWidgets(newWidgets);\n this.widgets = newWidgets;\n } else if (typeof widgets === 'object') {\n this.checkWidgets([widgets]);\n this.widgets.push(widgets);\n } else {\n throw new Error('Expected widgets to be an array or a reducer function');\n }\n }\n\n getAll = (): WidgetWithUID[] => {\n return this.widgets.map((widget) => {\n const { id: _id, pluginId: _pluginId, ...widgetBase } = widget;\n return {\n ...widgetBase,\n uid: this.generateUid(widget),\n };\n });\n };\n}\n\nexport { Widgets };\nexport type { WidgetArgs, WidgetWithUID };\n"],"names":["Widgets","register","widgets","Array","isArray","checkWidgets","newWidgets","push","Error","generateUid","widget","pluginId","id","forEach","invariant","component","title","icon","getAll","map","_id","_pluginId","widgetBase","uid"],"mappings":";;AAkCA,MAAMA,OAAAA,CAAAA;AAoBJC,IAAAA,QAAAA,CAASC,OAAuD,EAAE;QAChE,IAAIC,KAAAA,CAAMC,OAAO,CAACF,OAAAA,CAAAA,EAAU;YAC1B,IAAI,CAACG,YAAY,CAACH,OAAAA,CAAAA;YAClB,IAAI,CAACA,OAAO,GAAG;AAAI,gBAAA,GAAA,IAAI,CAACA,OAAO;AAAKA,gBAAAA,GAAAA;AAAQ,aAAA;QAC9C,CAAA,MAAO,IAAI,OAAOA,OAAAA,KAAY,UAAA,EAAY;AACxC,YAAA,MAAMI,UAAAA,GAAaJ,OAAAA,CAAQ,IAAI,CAACA,OAAO,CAAA;YACvC,IAAI,CAACG,YAAY,CAACC,UAAAA,CAAAA;YAClB,IAAI,CAACJ,OAAO,GAAGI,UAAAA;QACjB,CAAA,MAAO,IAAI,OAAOJ,OAAAA,KAAY,QAAA,EAAU;YACtC,IAAI,CAACG,YAAY,CAAC;AAACH,gBAAAA;AAAQ,aAAA,CAAA;AAC3B,YAAA,IAAI,CAACA,OAAO,CAACK,IAAI,CAACL,OAAAA,CAAAA;QACpB,CAAA,MAAO;AACL,YAAA,MAAM,IAAIM,KAAAA,CAAM,uDAAA,CAAA;AAClB,QAAA;AACF,IAAA;IA/BA,WAAA,EAAc;AAINC,QAAAA,IAAAA,CAAAA,WAAAA,GAAc,CAACC,MAAAA,GAAAA;YACrB,OAAOA,MAAAA,CAAOC,QAAQ,GAAG,CAAC,QAAQ,EAAED,MAAAA,CAAOC,QAAQ,CAAC,CAAC,EAAED,MAAAA,CAAOE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAEF,MAAAA,CAAOE,EAAE,CAAA,CAAE;AAC7F,QAAA,CAAA;AAEQP,QAAAA,IAAAA,CAAAA,YAAAA,GAAe,CAACH,OAAAA,GAAAA;YACtBA,OAAAA,CAAQW,OAAO,CAAC,CAACH,MAAAA,GAAAA;gBACfI,SAAAA,CAAUJ,MAAAA,CAAOE,EAAE,EAAE,wBAAA,CAAA;gBACrBE,SAAAA,CAAUJ,MAAAA,CAAOK,SAAS,EAAE,8BAAA,CAAA;gBAC5BD,SAAAA,CAAUJ,MAAAA,CAAOM,KAAK,EAAE,0BAAA,CAAA;gBACxBF,SAAAA,CAAUJ,MAAAA,CAAOO,IAAI,EAAE,0BAAA,CAAA;AACzB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;aAkBAC,MAAAA,GAAS,IAAA;AACP,YAAA,OAAO,IAAI,CAAChB,OAAO,CAACiB,GAAG,CAAC,CAACT,MAAAA,GAAAA;gBACvB,MAAM,EAAEE,IAAIQ,GAAG,EAAET,UAAUU,SAAS,EAAE,GAAGC,UAAAA,EAAY,GAAGZ,MAAAA;gBACxD,OAAO;AACL,oBAAA,GAAGY,UAAU;oBACbC,GAAAA,EAAK,IAAI,CAACd,WAAW,CAACC,MAAAA;AACxB,iBAAA;AACF,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;QAxCE,IAAI,CAACR,OAAO,GAAG,EAAE;AACnB,IAAA;AAwCF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"configure.js","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\nimport { getBasename } from '../utils/basename';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n const basename = getBasename();\n window.location.href = `${basename}/auth/login`;\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","basename","getBasename","window","location","href"],"mappings":";;;;;;;AAcA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,YAAAA,CAASC,WAAW,GAAGD,aAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,uBAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAMF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAA2B,EAAC;;;AAIlC,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,sBAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,YAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,mBAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,cAAAA,EAAAA,CAAAA;AACT,gBAAA,MAAMC,UAAAA,GAAWC,oBAAAA,EAAAA;AACjBC,gBAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAA,EAAGJ,UAAAA,CAAS,WAAW,CAAC;AAC/C,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOlC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
1
+ {"version":3,"file":"configure.js","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\nimport { getBasename } from '../utils/basename';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\ntype DefaultMiddlewareOptions = {\n serializableCheck?: boolean;\n immutableCheck?: boolean;\n};\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions: DefaultMiddlewareOptions = {};\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n const basename = getBasename();\n window.location.href = `${basename}/auth/login`;\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","basename","getBasename","window","location","href"],"mappings":";;;;;;;AAcA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,YAAAA,CAASC,WAAW,GAAGD,aAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,uBAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAWF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAAqD,EAAC;;;AAI5D,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,sBAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,YAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,mBAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,cAAAA,EAAAA,CAAAA;AACT,gBAAA,MAAMC,UAAAA,GAAWC,oBAAAA,EAAAA;AACjBC,gBAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAA,EAAGJ,UAAAA,CAAS,WAAW,CAAC;AAC/C,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOlC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"configure.mjs","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\nimport { getBasename } from '../utils/basename';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n const basename = getBasename();\n window.location.href = `${basename}/auth/login`;\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","basename","getBasename","window","location","href"],"mappings":";;;;;AAcA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,QAAAA,CAASC,WAAW,GAAGD,SAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,eAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAMF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAA2B,EAAC;;;AAIlC,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,cAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,QAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,WAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,MAAAA,EAAAA,CAAAA;AACT,gBAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjBC,gBAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAA,EAAGJ,QAAAA,CAAS,WAAW,CAAC;AAC/C,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOlC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
1
+ {"version":3,"file":"configure.mjs","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\nimport { getBasename } from '../utils/basename';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\ntype DefaultMiddlewareOptions = {\n serializableCheck?: boolean;\n immutableCheck?: boolean;\n};\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions: DefaultMiddlewareOptions = {};\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n const basename = getBasename();\n window.location.href = `${basename}/auth/login`;\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","basename","getBasename","window","location","href"],"mappings":";;;;;AAcA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,QAAAA,CAASC,WAAW,GAAGD,SAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,eAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAWF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAAqD,EAAC;;;AAI5D,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,cAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,QAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,WAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,MAAAA,EAAAA,CAAAA;AACT,gBAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjBC,gBAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAA,EAAGJ,QAAAA,CAAS,WAAW,CAAC;AAC/C,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOlC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createHook.js","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":";;AAAA,sFAOaA,UAAAA,GAAa,IAAA;AACxB,IAAA,MAAMC,YAAuB,EAAE;IAE/B,OAAO;AACLC,QAAAA,QAAAA,CAAAA,CAASC,EAAW,EAAA;AAClBF,YAAAA,SAAAA,CAAUG,IAAI,CAACD,EAAAA,CAAAA;AACjB,QAAA,CAAA;AACAE,QAAAA,MAAAA,CAAAA,CAAOC,OAAgB,EAAA;AACrBL,YAAAA,SAAAA,CAAUM,MAAM,CAACN,SAAAA,CAAUO,OAAO,CAACF,OAAAA,CAAAA,EAAU,CAAA,CAAA;AAC/C,QAAA,CAAA;QACAG,YAAAA,CAAAA,CAAgBC,IAAO,EAAEC,KAAa,EAAA;YACpC,OAAOV,SAAAA,CAAUW,MAAM,CAAC,CAACC,KAAKV,EAAAA,GAAOA,EAAAA,CAAGU,KAAKF,KAAAA,CAAAA,EAAQD,IAAAA,CAAAA;AACvD,QAAA,CAAA;QACA,MAAMI,iBAAAA,CAAAA,CAAqBJ,IAAO,EAAEC,KAAa,EAAA;AAC/C,YAAA,IAAII,MAAAA,GAASL,IAAAA;YAEb,KAAK,MAAMP,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,GAAS,MAAMZ,GAAGY,MAAAA,EAAQJ,KAAAA,CAAAA;AAC5B,YAAA;YAEA,OAAOI,MAAAA;AACT,QAAA,CAAA;AACAC,QAAAA,SAAAA,CAAAA,CAA2B,GAAGN,IAAO,EAAA;AACnC,YAAA,OAAOT,SAAAA,CAAUgB,GAAG,CAAC,CAACd,KAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AACrC,QAAA,CAAA;QACA,MAAMQ,cAAAA,CAAAA,CAAgC,GAAGR,IAAO,EAAA;AAC9C,YAAA,MAAMK,SAAS,EAAE;YAEjB,KAAK,MAAMZ,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,CAAOX,IAAI,CAAC,MAAMD,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AAC1B,YAAA;YAEA,OAAOK,MAAAA;AACT,QAAA,CAAA;AACAI,QAAAA,WAAAA,CAAAA,CAA6B,GAAGT,IAAO,EAAA;AACrC,YAAA,OAAOU,QAAQC,GAAG,CAChBpB,SAAAA,CAAUgB,GAAG,CAAC,CAACd,EAAAA,GAAAA;AACb,gBAAA,OAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA;AACf,YAAA,CAAA,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"createHook.js","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler<TArgs extends unknown[] = never[], TResult = unknown> = (\n ...args: TArgs\n) => TResult;\n\ntype RegisteredHandler = Handler<unknown[], unknown>;\n\nexport const createHook = () => {\n const _handlers: RegisteredHandler[] = [];\n\n return {\n register<TArgs extends unknown[], TResult>(fn: Handler<TArgs, TResult>) {\n _handlers.push(fn as unknown as RegisteredHandler);\n },\n delete<TArgs extends unknown[], TResult>(handler: Handler<TArgs, TResult>) {\n _handlers.splice(_handlers.indexOf(handler as unknown as RegisteredHandler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce<T>((acc, fn) => fn(acc, store) as T, args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = (await fn(result, store)) as T;\n }\n\n return result;\n },\n runSeries<TArgs extends unknown[]>(...args: TArgs) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<TArgs extends unknown[]>(...args: TArgs) {\n const result: unknown[] = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<TArgs extends unknown[]>(...args: TArgs) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":";;AAAA,sFAWaA,UAAAA,GAAa,IAAA;AACxB,IAAA,MAAMC,YAAiC,EAAE;IAEzC,OAAO;AACLC,QAAAA,QAAAA,CAAAA,CAA2CC,EAA2B,EAAA;AACpEF,YAAAA,SAAAA,CAAUG,IAAI,CAACD,EAAAA,CAAAA;AACjB,QAAA,CAAA;AACAE,QAAAA,MAAAA,CAAAA,CAAyCC,OAAgC,EAAA;AACvEL,YAAAA,SAAAA,CAAUM,MAAM,CAACN,SAAAA,CAAUO,OAAO,CAACF,OAAAA,CAAAA,EAA0C,CAAA,CAAA;AAC/E,QAAA,CAAA;QACAG,YAAAA,CAAAA,CAAgBC,IAAO,EAAEC,KAAa,EAAA;YACpC,OAAOV,SAAAA,CAAUW,MAAM,CAAI,CAACC,KAAKV,EAAAA,GAAOA,EAAAA,CAAGU,KAAKF,KAAAA,CAAAA,EAAaD,IAAAA,CAAAA;AAC/D,QAAA,CAAA;QACA,MAAMI,iBAAAA,CAAAA,CAAqBJ,IAAO,EAAEC,KAAa,EAAA;AAC/C,YAAA,IAAII,MAAAA,GAASL,IAAAA;YAEb,KAAK,MAAMP,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,GAAU,MAAMZ,GAAGY,MAAAA,EAAQJ,KAAAA,CAAAA;AAC7B,YAAA;YAEA,OAAOI,MAAAA;AACT,QAAA,CAAA;AACAC,QAAAA,SAAAA,CAAAA,CAAmC,GAAGN,IAAW,EAAA;AAC/C,YAAA,OAAOT,SAAAA,CAAUgB,GAAG,CAAC,CAACd,KAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AACrC,QAAA,CAAA;QACA,MAAMQ,cAAAA,CAAAA,CAAwC,GAAGR,IAAW,EAAA;AAC1D,YAAA,MAAMK,SAAoB,EAAE;YAE5B,KAAK,MAAMZ,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,CAAOX,IAAI,CAAC,MAAMD,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AAC1B,YAAA;YAEA,OAAOK,MAAAA;AACT,QAAA,CAAA;AACAI,QAAAA,WAAAA,CAAAA,CAAqC,GAAGT,IAAW,EAAA;AACjD,YAAA,OAAOU,QAAQC,GAAG,CAChBpB,SAAAA,CAAUgB,GAAG,CAAC,CAACd,EAAAA,GAAAA;AACb,gBAAA,OAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA;AACf,YAAA,CAAA,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createHook.mjs","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":"AAAA,sFAOaA,UAAAA,GAAa,IAAA;AACxB,IAAA,MAAMC,YAAuB,EAAE;IAE/B,OAAO;AACLC,QAAAA,QAAAA,CAAAA,CAASC,EAAW,EAAA;AAClBF,YAAAA,SAAAA,CAAUG,IAAI,CAACD,EAAAA,CAAAA;AACjB,QAAA,CAAA;AACAE,QAAAA,MAAAA,CAAAA,CAAOC,OAAgB,EAAA;AACrBL,YAAAA,SAAAA,CAAUM,MAAM,CAACN,SAAAA,CAAUO,OAAO,CAACF,OAAAA,CAAAA,EAAU,CAAA,CAAA;AAC/C,QAAA,CAAA;QACAG,YAAAA,CAAAA,CAAgBC,IAAO,EAAEC,KAAa,EAAA;YACpC,OAAOV,SAAAA,CAAUW,MAAM,CAAC,CAACC,KAAKV,EAAAA,GAAOA,EAAAA,CAAGU,KAAKF,KAAAA,CAAAA,EAAQD,IAAAA,CAAAA;AACvD,QAAA,CAAA;QACA,MAAMI,iBAAAA,CAAAA,CAAqBJ,IAAO,EAAEC,KAAa,EAAA;AAC/C,YAAA,IAAII,MAAAA,GAASL,IAAAA;YAEb,KAAK,MAAMP,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,GAAS,MAAMZ,GAAGY,MAAAA,EAAQJ,KAAAA,CAAAA;AAC5B,YAAA;YAEA,OAAOI,MAAAA;AACT,QAAA,CAAA;AACAC,QAAAA,SAAAA,CAAAA,CAA2B,GAAGN,IAAO,EAAA;AACnC,YAAA,OAAOT,SAAAA,CAAUgB,GAAG,CAAC,CAACd,KAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AACrC,QAAA,CAAA;QACA,MAAMQ,cAAAA,CAAAA,CAAgC,GAAGR,IAAO,EAAA;AAC9C,YAAA,MAAMK,SAAS,EAAE;YAEjB,KAAK,MAAMZ,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,CAAOX,IAAI,CAAC,MAAMD,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AAC1B,YAAA;YAEA,OAAOK,MAAAA;AACT,QAAA,CAAA;AACAI,QAAAA,WAAAA,CAAAA,CAA6B,GAAGT,IAAO,EAAA;AACrC,YAAA,OAAOU,QAAQC,GAAG,CAChBpB,SAAAA,CAAUgB,GAAG,CAAC,CAACd,EAAAA,GAAAA;AACb,gBAAA,OAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA;AACf,YAAA,CAAA,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"createHook.mjs","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler<TArgs extends unknown[] = never[], TResult = unknown> = (\n ...args: TArgs\n) => TResult;\n\ntype RegisteredHandler = Handler<unknown[], unknown>;\n\nexport const createHook = () => {\n const _handlers: RegisteredHandler[] = [];\n\n return {\n register<TArgs extends unknown[], TResult>(fn: Handler<TArgs, TResult>) {\n _handlers.push(fn as unknown as RegisteredHandler);\n },\n delete<TArgs extends unknown[], TResult>(handler: Handler<TArgs, TResult>) {\n _handlers.splice(_handlers.indexOf(handler as unknown as RegisteredHandler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce<T>((acc, fn) => fn(acc, store) as T, args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = (await fn(result, store)) as T;\n }\n\n return result;\n },\n runSeries<TArgs extends unknown[]>(...args: TArgs) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<TArgs extends unknown[]>(...args: TArgs) {\n const result: unknown[] = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<TArgs extends unknown[]>(...args: TArgs) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":"AAAA,sFAWaA,UAAAA,GAAa,IAAA;AACxB,IAAA,MAAMC,YAAiC,EAAE;IAEzC,OAAO;AACLC,QAAAA,QAAAA,CAAAA,CAA2CC,EAA2B,EAAA;AACpEF,YAAAA,SAAAA,CAAUG,IAAI,CAACD,EAAAA,CAAAA;AACjB,QAAA,CAAA;AACAE,QAAAA,MAAAA,CAAAA,CAAyCC,OAAgC,EAAA;AACvEL,YAAAA,SAAAA,CAAUM,MAAM,CAACN,SAAAA,CAAUO,OAAO,CAACF,OAAAA,CAAAA,EAA0C,CAAA,CAAA;AAC/E,QAAA,CAAA;QACAG,YAAAA,CAAAA,CAAgBC,IAAO,EAAEC,KAAa,EAAA;YACpC,OAAOV,SAAAA,CAAUW,MAAM,CAAI,CAACC,KAAKV,EAAAA,GAAOA,EAAAA,CAAGU,KAAKF,KAAAA,CAAAA,EAAaD,IAAAA,CAAAA;AAC/D,QAAA,CAAA;QACA,MAAMI,iBAAAA,CAAAA,CAAqBJ,IAAO,EAAEC,KAAa,EAAA;AAC/C,YAAA,IAAII,MAAAA,GAASL,IAAAA;YAEb,KAAK,MAAMP,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,GAAU,MAAMZ,GAAGY,MAAAA,EAAQJ,KAAAA,CAAAA;AAC7B,YAAA;YAEA,OAAOI,MAAAA;AACT,QAAA,CAAA;AACAC,QAAAA,SAAAA,CAAAA,CAAmC,GAAGN,IAAW,EAAA;AAC/C,YAAA,OAAOT,SAAAA,CAAUgB,GAAG,CAAC,CAACd,KAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AACrC,QAAA,CAAA;QACA,MAAMQ,cAAAA,CAAAA,CAAwC,GAAGR,IAAW,EAAA;AAC1D,YAAA,MAAMK,SAAoB,EAAE;YAE5B,KAAK,MAAMZ,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,CAAOX,IAAI,CAAC,MAAMD,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AAC1B,YAAA;YAEA,OAAOK,MAAAA;AACT,QAAA,CAAA;AACAI,QAAAA,WAAAA,CAAAA,CAAqC,GAAGT,IAAW,EAAA;AACjD,YAAA,OAAOU,QAAQC,GAAG,CAChBpB,SAAAA,CAAUgB,GAAG,CAAC,CAACd,EAAAA,GAAAA;AACb,gBAAA,OAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA;AACf,YAAA,CAAA,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
@@ -107,6 +107,8 @@ const TrackingProvider = ({ children })=>{
107
107
  * ```
108
108
  */ const useTracking = ()=>{
109
109
  const deviceType = useDeviceType.useDeviceType();
110
+ const deviceTypeRef = React__namespace.useRef(deviceType);
111
+ deviceTypeRef.current = deviceType;
110
112
  const { uuid, telemetryProperties } = React__namespace.useContext(TrackingContext);
111
113
  const userId = AppInfo.useAppInfo('useTracking', (state)=>state.userId);
112
114
  const trackUsage = React__namespace.useCallback(async (event, properties)=>{
@@ -119,7 +121,7 @@ const TrackingProvider = ({ children })=>{
119
121
  ...properties
120
122
  },
121
123
  userProperties: {
122
- deviceType
124
+ deviceType: deviceTypeRef.current
123
125
  },
124
126
  groupProperties: {
125
127
  ...telemetryProperties,
@@ -1 +1 @@
1
- {"version":3,"file":"Tracking.js","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 { 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}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: 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 React.useEffect(() => {\n if (uuid && data) {\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 },\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]);\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n }),\n [uuid, data]\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\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 { uuid, telemetryProperties } = 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,\n },\n groupProperties: {\n ...telemetryProperties,\n projectId: uuid,\n projectType: window.strapi.projectType,\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 (err) {\n // Silence is golden\n }\n\n return null;\n },\n [telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\nexport { TrackingProvider, useTracking };\n"],"names":["TrackingContext","React","createContext","uuid","TrackingProvider","children","token","useAuth","state","data","initData","useInitQuery","getAllWidgets","useStrapiApp","widgets","getAll","useTelemetryPropertiesQuery","undefined","skip","useEffect","event","fetch","process","env","STRAPI_ANALYTICS_URL","method","body","JSON","stringify","userId","eventPropeties","groupProperties","projectId","registeredWidgets","map","widget","uid","headers","value","useMemo","telemetryProperties","_jsx","Provider","useTracking","deviceType","useDeviceType","useContext","useAppInfo","trackUsage","useCallback","properties","window","strapi","telemetryDisabled","res","axios","post","eventProperties","userProperties","projectType","err"],"mappings":"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"}
1
+ {"version":3,"file":"Tracking.js","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 { 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}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: 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 React.useEffect(() => {\n if (uuid && data) {\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 },\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]);\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n }),\n [uuid, data]\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\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 } = 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 },\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }\n );\n\n return res;\n }\n } catch (err) {\n // Silence is golden\n }\n\n return null;\n },\n [telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\nexport { TrackingProvider, useTracking };\n"],"names":["TrackingContext","React","createContext","uuid","TrackingProvider","children","token","useAuth","state","data","initData","useInitQuery","getAllWidgets","useStrapiApp","widgets","getAll","useTelemetryPropertiesQuery","undefined","skip","useEffect","event","fetch","process","env","STRAPI_ANALYTICS_URL","method","body","JSON","stringify","userId","eventPropeties","groupProperties","projectId","registeredWidgets","map","widget","uid","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","err"],"mappings":"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"}
@@ -82,6 +82,8 @@ const TrackingProvider = ({ children })=>{
82
82
  * ```
83
83
  */ const useTracking = ()=>{
84
84
  const deviceType = useDeviceType();
85
+ const deviceTypeRef = React.useRef(deviceType);
86
+ deviceTypeRef.current = deviceType;
85
87
  const { uuid, telemetryProperties } = React.useContext(TrackingContext);
86
88
  const userId = useAppInfo('useTracking', (state)=>state.userId);
87
89
  const trackUsage = React.useCallback(async (event, properties)=>{
@@ -94,7 +96,7 @@ const TrackingProvider = ({ children })=>{
94
96
  ...properties
95
97
  },
96
98
  userProperties: {
97
- deviceType
99
+ deviceType: deviceTypeRef.current
98
100
  },
99
101
  groupProperties: {
100
102
  ...telemetryProperties,
@@ -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 { 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}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: 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 React.useEffect(() => {\n if (uuid && data) {\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 },\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]);\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n }),\n [uuid, data]\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\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 { uuid, telemetryProperties } = 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,\n },\n groupProperties: {\n ...telemetryProperties,\n projectId: uuid,\n projectType: window.strapi.projectType,\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 (err) {\n // Silence is golden\n }\n\n return null;\n },\n [telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\nexport { TrackingProvider, useTracking };\n"],"names":["TrackingContext","React","createContext","uuid","TrackingProvider","children","token","useAuth","state","data","initData","useInitQuery","getAllWidgets","useStrapiApp","widgets","getAll","useTelemetryPropertiesQuery","undefined","skip","useEffect","event","fetch","process","env","STRAPI_ANALYTICS_URL","method","body","JSON","stringify","userId","eventPropeties","groupProperties","projectId","registeredWidgets","map","widget","uid","headers","value","useMemo","telemetryProperties","_jsx","Provider","useTracking","deviceType","useDeviceType","useContext","useAppInfo","trackUsage","useCallback","properties","window","strapi","telemetryDisabled","res","axios","post","eventProperties","userProperties","projectType","err"],"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 { 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}\n\nexport interface TrackingContextValue {\n uuid?: string | boolean;\n telemetryProperties?: TelemetryProperties;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\nconst TrackingContext = React.createContext<TrackingContextValue>({\n uuid: 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 React.useEffect(() => {\n if (uuid && data) {\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 },\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]);\n const value = React.useMemo(\n () => ({\n uuid,\n telemetryProperties: data,\n }),\n [uuid, data]\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\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 } = 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 },\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n }\n );\n\n return res;\n }\n } catch (err) {\n // Silence is golden\n }\n\n return null;\n },\n [telemetryProperties, userId, uuid]\n );\n\n return { trackUsage };\n};\n\nexport { TrackingProvider, useTracking };\n"],"names":["TrackingContext","React","createContext","uuid","TrackingProvider","children","token","useAuth","state","data","initData","useInitQuery","getAllWidgets","useStrapiApp","widgets","getAll","useTelemetryPropertiesQuery","undefined","skip","useEffect","event","fetch","process","env","STRAPI_ANALYTICS_URL","method","body","JSON","stringify","userId","eventPropeties","groupProperties","projectId","registeredWidgets","map","widget","uid","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","err"],"mappings":"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"}