@strapi/admin 5.50.0 → 5.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) 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/ResizeIndicator.js +6 -6
  75. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  76. package/dist/admin/admin/src/components/SubNav.js +11 -9
  77. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  78. package/dist/admin/admin/src/components/SubNav.mjs +4 -2
  79. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  80. package/dist/admin/admin/src/components/Table.js +9 -5
  81. package/dist/admin/admin/src/components/Table.js.map +1 -1
  82. package/dist/admin/admin/src/components/Table.mjs +6 -2
  83. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  84. package/dist/admin/admin/src/components/Theme.js +2 -2
  85. package/dist/admin/admin/src/components/Theme.js.map +1 -1
  86. package/dist/admin/admin/src/components/UnauthenticatedLogo.js +2 -2
  87. package/dist/admin/admin/src/components/UnauthenticatedLogo.js.map +1 -1
  88. package/dist/admin/admin/src/components/UpsellBanner.js +3 -3
  89. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  90. package/dist/admin/admin/src/components/WidgetRoot.js +4 -7
  91. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  92. package/dist/admin/admin/src/components/WidgetRoot.mjs +1 -1
  93. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  94. package/dist/admin/admin/src/components/Widgets.js +5 -5
  95. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  96. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  97. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  98. package/dist/admin/admin/src/core/apis/Widgets.js +1 -1
  99. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  100. package/dist/admin/admin/src/core/apis/Widgets.mjs +1 -1
  101. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  102. package/dist/admin/admin/src/core/store/configure.js.map +1 -1
  103. package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
  104. package/dist/admin/admin/src/core/utils/createHook.js.map +1 -1
  105. package/dist/admin/admin/src/core/utils/createHook.mjs.map +1 -1
  106. package/dist/admin/admin/src/features/Tracking.js +3 -1
  107. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  108. package/dist/admin/admin/src/features/Tracking.mjs +3 -1
  109. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  110. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  111. package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
  112. package/dist/admin/admin/src/hooks/useMediaQuery.js +4 -4
  113. package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
  114. package/dist/admin/admin/src/hooks/useMenu.js +5 -3
  115. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  116. package/dist/admin/admin/src/hooks/useMenu.mjs +5 -3
  117. package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
  118. package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
  119. package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
  120. package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
  121. package/dist/admin/admin/src/hooks/useThrottledCallback.mjs.map +1 -1
  122. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +1 -1
  123. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  124. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -1
  125. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  126. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js +3 -3
  127. package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js.map +1 -1
  128. package/dist/admin/admin/src/pages/Auth/components/Register.js +17 -9
  129. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +15 -7
  131. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  132. package/dist/admin/admin/src/pages/Home/HomePage.js +2 -2
  133. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +3 -6
  135. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
  136. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs +1 -1
  137. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs.map +1 -1
  138. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +4 -8
  139. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  140. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs +1 -1
  141. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  142. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +4 -8
  143. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs +1 -1
  145. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +2 -2
  147. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  148. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  149. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +2 -2
  150. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  151. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +2 -2
  152. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  153. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +2 -2
  154. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  155. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +2 -2
  156. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  157. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +4 -4
  158. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  159. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.mjs.map +1 -1
  161. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +0 -2
  162. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  163. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +0 -2
  164. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  165. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +2 -2
  166. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  167. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +2 -2
  168. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  169. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js +2 -2
  170. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js.map +1 -1
  171. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -10
  172. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  173. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js +3 -3
  174. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
  175. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -5
  176. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  177. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js +2 -2
  178. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js.map +1 -1
  179. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +3 -3
  180. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  181. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.js.map +1 -1
  182. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.mjs.map +1 -1
  183. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  185. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js +3 -3
  186. package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
  187. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +2 -2
  188. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  189. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +2 -2
  190. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  191. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  192. package/dist/admin/admin/src/translations/ja.json.js +693 -687
  193. package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
  194. package/dist/admin/admin/src/translations/ja.json.mjs +693 -687
  195. package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
  196. package/dist/admin/admin/src/translations/pl.json.js +22 -0
  197. package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
  198. package/dist/admin/admin/src/translations/pl.json.mjs +22 -0
  199. package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
  200. package/dist/admin/admin/src/utils/arrays.js.map +1 -1
  201. package/dist/admin/admin/src/utils/arrays.mjs.map +1 -1
  202. package/dist/admin/admin/src/utils/baseQuery.js +1 -1
  203. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  204. package/dist/admin/admin/src/utils/baseQuery.mjs +1 -1
  205. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  206. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  207. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  208. package/dist/admin/admin/src/utils/objects.js +43 -11
  209. package/dist/admin/admin/src/utils/objects.js.map +1 -1
  210. package/dist/admin/admin/src/utils/objects.mjs +43 -11
  211. package/dist/admin/admin/src/utils/objects.mjs.map +1 -1
  212. package/dist/admin/admin/src/utils/once.js.map +1 -1
  213. package/dist/admin/admin/src/utils/once.mjs.map +1 -1
  214. package/dist/admin/admin/src/utils/rulesEngine.js +2 -1
  215. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  216. package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -1
  217. package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
  218. package/dist/admin/admin/src/utils/shims.js.map +1 -1
  219. package/dist/admin/admin/src/utils/shims.mjs.map +1 -1
  220. package/dist/admin/admin/src/utils/widgetVisibility.js +16 -1
  221. package/dist/admin/admin/src/utils/widgetVisibility.js.map +1 -1
  222. package/dist/admin/admin/src/utils/widgetVisibility.mjs +14 -2
  223. package/dist/admin/admin/src/utils/widgetVisibility.mjs.map +1 -1
  224. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +2 -2
  225. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
  226. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +2 -2
  227. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  228. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs +2 -2
  229. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
  230. package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js +2 -2
  231. package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js.map +1 -1
  232. package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js +2 -2
  233. package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js.map +1 -1
  234. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js +3 -3
  235. package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
  236. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +3 -3
  237. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  238. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
  239. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
  240. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
  241. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
  242. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +2 -2
  243. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  244. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  245. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  246. package/dist/admin/src/StrapiApp.d.ts +2 -2
  247. package/dist/admin/src/components/DescriptionComponentRenderer.d.ts +2 -1
  248. package/dist/admin/src/components/Form.d.ts +14 -12
  249. package/dist/admin/src/components/FormInputs/Renderer.d.ts +1 -1
  250. package/dist/admin/src/components/GuidedTour/Steps/Step.d.ts +1 -1
  251. package/dist/admin/src/components/SubNav.d.ts +1 -1
  252. package/dist/admin/src/components/Table.d.ts +3 -2
  253. package/dist/admin/src/core/apis/Plugin.d.ts +1 -1
  254. package/dist/admin/src/core/utils/createHook.d.ts +6 -6
  255. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  256. package/dist/admin/src/hooks/useMenu.d.ts +1 -1
  257. package/dist/admin/src/hooks/useQueryParams.d.ts +2 -1
  258. package/dist/admin/src/hooks/useThrottledCallback.d.ts +1 -1
  259. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.d.ts +1 -1
  260. package/dist/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.d.ts +1 -1
  261. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  262. package/dist/admin/src/services/admin.d.ts +6 -6
  263. package/dist/admin/src/services/api.d.ts +1 -1
  264. package/dist/admin/src/services/apiTokens.d.ts +2 -2
  265. package/dist/admin/src/services/auth.d.ts +12 -12
  266. package/dist/admin/src/services/contentApi.d.ts +1 -1
  267. package/dist/admin/src/services/contentManager.d.ts +1 -1
  268. package/dist/admin/src/services/homepage.d.ts +3 -3
  269. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  270. package/dist/admin/src/services/users.d.ts +8 -8
  271. package/dist/admin/src/services/webhooks.d.ts +2 -2
  272. package/dist/admin/src/utils/arrays.d.ts +1 -1
  273. package/dist/admin/src/utils/baseQuery.d.ts +1 -1
  274. package/dist/admin/src/utils/getFetchClient.d.ts +7 -7
  275. package/dist/admin/src/utils/objects.d.ts +6 -4
  276. package/dist/admin/src/utils/once.d.ts +1 -1
  277. package/dist/admin/src/utils/widgetVisibility.d.ts +11 -0
  278. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/tableHeaders.d.ts +2 -1
  279. package/dist/ee/admin/src/services/ai.d.ts +3 -3
  280. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  281. package/dist/server/server/src/services/permission/sections-builder/handlers.js +9 -2
  282. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  283. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs +9 -2
  284. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  285. package/dist/server/server/src/services/role.js +5 -1
  286. package/dist/server/server/src/services/role.js.map +1 -1
  287. package/dist/server/server/src/services/role.mjs +5 -1
  288. package/dist/server/server/src/services/role.mjs.map +1 -1
  289. package/dist/server/server/src/validation/common-validators.js +19 -11
  290. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  291. package/dist/server/server/src/validation/common-validators.mjs +19 -11
  292. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  293. package/dist/server/server/src/validation/permission.js +1 -1
  294. package/dist/server/server/src/validation/permission.js.map +1 -1
  295. package/dist/server/server/src/validation/permission.mjs +1 -1
  296. package/dist/server/server/src/validation/permission.mjs.map +1 -1
  297. package/dist/server/server/src/validation/role.js +2 -2
  298. package/dist/server/server/src/validation/role.js.map +1 -1
  299. package/dist/server/server/src/validation/role.mjs +2 -2
  300. package/dist/server/server/src/validation/role.mjs.map +1 -1
  301. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  302. package/dist/server/src/services/role.d.ts.map +1 -1
  303. package/dist/server/src/validation/common-validators.d.ts.map +1 -1
  304. package/dist/server/src/validation/role.d.ts.map +1 -1
  305. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.js","sources":["../../../../../admin/src/hooks/useMenu.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Cog, ShoppingCart, House } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAuth, AuthContextValue } from '../features/Auth';\nimport { StrapiAppContextValue, useStrapiApp } from '../features/StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\nexport type MenuItem = Omit<StrapiAppContextValue['menu'][number], 'Component'> & {\n navigationLink?: string;\n};\nexport type MobileMenuItem = {\n to: string;\n target?: string;\n link?: string;\n};\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n topMobileNavigation: MobileMenuItem[];\n burgerMobileNavigation: MobileMenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = (shouldUpdateStrapi: boolean) => {\n const checkUserHasPermissions = useAuth('useMenu', (state) => state.checkUserHasPermissions);\n const rawMenu = useStrapiApp('useMenu', (state) => state.menu);\n const menu = React.useMemo(() => normalizeMenuLinks(rawMenu), [rawMenu]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: House,\n intlLabel: {\n id: 'global.home',\n defaultMessage: 'Home',\n },\n to: '/',\n permissions: [],\n position: 0,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: 'https://market.strapi.io',\n target: '_blank',\n permissions: permissions.marketplace?.main ?? [],\n position: 7,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n position: 9,\n },\n ],\n pluginsSectionLinks: [],\n topMobileNavigation: [\n {\n to: '/',\n },\n {\n to: 'content-manager',\n },\n {\n to: 'plugins/content-releases',\n },\n {\n to: 'plugins/upload',\n },\n ],\n burgerMobileNavigation: [\n {\n to: '/settings',\n },\n ],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(\n menu,\n checkUserHasPermissions\n );\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n generalSectionLinksRef.current,\n shouldUpdateStrapi,\n checkUserHasPermissions\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n menu,\n permissions,\n shouldUpdateStrapi,\n checkUserHasPermissions,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false,\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const generalSectionLinks = normalizeMenuLinks(generalSectionRawLinks);\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionLinks.filter(\n (_, index) => generalSectionLinksPermissions[index].length > 0\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n pluginsSectionRawLinks: MenuItem[],\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const pluginSectionLinks = normalizeMenuLinks(pluginsSectionRawLinks);\n const pluginSectionLinksPermissions = await Promise.all(\n pluginSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedPluginSectionLinks = pluginSectionLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index].length > 0\n );\n\n return authorizedPluginSectionLinks;\n};\n\nconst normalizeMenuLinks = (links: unknown): MenuItem[] => {\n if (!Array.isArray(links)) {\n return [];\n }\n\n const isValidIcon = (icon: unknown) => {\n if (typeof icon === 'string' || typeof icon === 'function' || React.isValidElement(icon)) {\n return true;\n }\n\n if (!icon || typeof icon !== 'object') {\n return false;\n }\n\n const reactType = (icon as { $$typeof?: symbol }).$$typeof;\n\n return (\n reactType === Symbol.for('react.forward_ref') ||\n reactType === Symbol.for('react.memo') ||\n reactType === Symbol.for('react.lazy')\n );\n };\n\n return links.reduce<MenuItem[]>((acc, link) => {\n if (!link || typeof link !== 'object') {\n return acc;\n }\n\n const candidate = link as Partial<MenuItem>;\n\n if (\n typeof candidate.to !== 'string' ||\n !isValidIcon(candidate.icon) ||\n typeof candidate.intlLabel?.id !== 'string' ||\n typeof candidate.intlLabel.defaultMessage !== 'string'\n ) {\n return acc;\n }\n\n acc.push({\n ...candidate,\n permissions: Array.isArray(candidate.permissions) ? candidate.permissions : [],\n } as MenuItem);\n\n return acc;\n }, []);\n};\n\nexport { useMenu, normalizeMenuLinks };\n"],"names":["useMenu","shouldUpdateStrapi","checkUserHasPermissions","useAuth","state","rawMenu","useStrapiApp","menu","React","useMemo","normalizeMenuLinks","permissions","useTypedSelector","admin_app","menuWithUserPermissions","setMenuWithUserPermissions","useState","generalSectionLinks","icon","House","intlLabel","id","defaultMessage","to","position","ShoppingCart","target","marketplace","main","Cog","notificationsCount","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","isLoading","generalSectionLinksRef","useRef","useEffect","applyMenuPermissions","authorizedPluginSectionLinks","getPluginSectionLinks","authorizedGeneralSectionLinks","getGeneralLinks","current","generalSectionRawLinks","generalSectionLinksPermissions","Promise","all","map","filter","_","index","length","settingsLinkIndex","findIndex","obj","authorizedGeneralLinksClone","cloneDeep","pluginsSectionRawLinks","pluginSectionLinks","pluginSectionLinksPermissions","links","Array","isArray","isValidIcon","isValidElement","reactType","$$typeof","Symbol","for","reduce","acc","link","candidate","push"],"mappings":"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"}
1
+ {"version":3,"file":"useMenu.js","sources":["../../../../../admin/src/hooks/useMenu.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Cog, ShoppingCart, House } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAuth, AuthContextValue } from '../features/Auth';\nimport { StrapiAppContextValue, useStrapiApp } from '../features/StrapiApp';\nimport { hideCloudDeployMenuLinkInProduction } from '../utils/widgetVisibility';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\nexport type MenuItem = Omit<StrapiAppContextValue['menu'][number], 'Component'> & {\n navigationLink?: string;\n};\nexport type MobileMenuItem = {\n to: string;\n target?: string;\n link?: string;\n};\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n topMobileNavigation: MobileMenuItem[];\n burgerMobileNavigation: MobileMenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = (shouldUpdateStrapi: boolean, currentEnvironment?: string) => {\n const checkUserHasPermissions = useAuth('useMenu', (state) => state.checkUserHasPermissions);\n const rawMenu = useStrapiApp('useMenu', (state) => state.menu);\n const menu = React.useMemo(() => normalizeMenuLinks(rawMenu), [rawMenu]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: House,\n intlLabel: {\n id: 'global.home',\n defaultMessage: 'Home',\n },\n to: '/',\n permissions: [],\n position: 0,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: 'https://market.strapi.io',\n target: '_blank',\n permissions: permissions.marketplace?.main ?? [],\n position: 7,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n position: 9,\n },\n ],\n pluginsSectionLinks: [],\n topMobileNavigation: [\n {\n to: '/',\n },\n {\n to: 'content-manager',\n },\n {\n to: 'plugins/content-releases',\n },\n {\n to: 'plugins/upload',\n },\n ],\n burgerMobileNavigation: [\n {\n to: '/settings',\n },\n ],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(\n menu,\n checkUserHasPermissions\n );\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n generalSectionLinksRef.current,\n shouldUpdateStrapi,\n checkUserHasPermissions\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: hideCloudDeployMenuLinkInProduction(\n authorizedPluginSectionLinks,\n currentEnvironment\n ),\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n menu,\n permissions,\n shouldUpdateStrapi,\n checkUserHasPermissions,\n currentEnvironment,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false,\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const generalSectionLinks = normalizeMenuLinks(generalSectionRawLinks);\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionLinks.filter(\n (_, index) => generalSectionLinksPermissions[index].length > 0\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n pluginsSectionRawLinks: MenuItem[],\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const pluginSectionLinks = normalizeMenuLinks(pluginsSectionRawLinks);\n const pluginSectionLinksPermissions = await Promise.all(\n pluginSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedPluginSectionLinks = pluginSectionLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index].length > 0\n );\n\n return authorizedPluginSectionLinks;\n};\n\nconst normalizeMenuLinks = (links: unknown): MenuItem[] => {\n if (!Array.isArray(links)) {\n return [];\n }\n\n const isValidIcon = (icon: unknown) => {\n if (typeof icon === 'string' || typeof icon === 'function' || React.isValidElement(icon)) {\n return true;\n }\n\n if (!icon || typeof icon !== 'object') {\n return false;\n }\n\n const reactType = (icon as { $$typeof?: symbol }).$$typeof;\n\n return (\n reactType === Symbol.for('react.forward_ref') ||\n reactType === Symbol.for('react.memo') ||\n reactType === Symbol.for('react.lazy')\n );\n };\n\n return links.reduce<MenuItem[]>((acc, link) => {\n if (!link || typeof link !== 'object') {\n return acc;\n }\n\n const candidate = link as Partial<MenuItem>;\n\n if (\n typeof candidate.to !== 'string' ||\n !isValidIcon(candidate.icon) ||\n typeof candidate.intlLabel?.id !== 'string' ||\n typeof candidate.intlLabel.defaultMessage !== 'string'\n ) {\n return acc;\n }\n\n acc.push({\n ...candidate,\n permissions: Array.isArray(candidate.permissions) ? candidate.permissions : [],\n } as MenuItem);\n\n return acc;\n }, []);\n};\n\nexport { useMenu, normalizeMenuLinks };\n"],"names":["useMenu","shouldUpdateStrapi","currentEnvironment","checkUserHasPermissions","useAuth","state","rawMenu","useStrapiApp","menu","React","useMemo","normalizeMenuLinks","permissions","useTypedSelector","admin_app","menuWithUserPermissions","setMenuWithUserPermissions","useState","generalSectionLinks","icon","House","intlLabel","id","defaultMessage","to","position","ShoppingCart","target","marketplace","main","Cog","notificationsCount","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","isLoading","generalSectionLinksRef","useRef","useEffect","applyMenuPermissions","authorizedPluginSectionLinks","getPluginSectionLinks","authorizedGeneralSectionLinks","getGeneralLinks","current","hideCloudDeployMenuLinkInProduction","generalSectionRawLinks","generalSectionLinksPermissions","Promise","all","map","filter","_","index","length","settingsLinkIndex","findIndex","obj","authorizedGeneralLinksClone","cloneDeep","pluginsSectionRawLinks","pluginSectionLinks","pluginSectionLinksPermissions","links","Array","isArray","isValidIcon","isValidElement","reactType","$$typeof","Symbol","for","reduce","acc","link","candidate","push"],"mappings":"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"}
@@ -4,8 +4,9 @@ import cloneDeep from 'lodash/cloneDeep';
4
4
  import { useTypedSelector } from '../core/store/hooks.mjs';
5
5
  import { useAuth } from '../features/Auth.mjs';
6
6
  import { useStrapiApp } from '../features/StrapiApp.mjs';
7
+ import { hideCloudDeployMenuLinkInProduction } from '../utils/widgetVisibility.mjs';
7
8
 
8
- const useMenu = (shouldUpdateStrapi)=>{
9
+ const useMenu = (shouldUpdateStrapi, currentEnvironment)=>{
9
10
  const checkUserHasPermissions = useAuth('useMenu', (state)=>state.checkUserHasPermissions);
10
11
  const rawMenu = useStrapiApp('useMenu', (state)=>state.menu);
11
12
  const menu = React.useMemo(()=>normalizeMenuLinks(rawMenu), [
@@ -79,7 +80,7 @@ const useMenu = (shouldUpdateStrapi)=>{
79
80
  setMenuWithUserPermissions((state)=>({
80
81
  ...state,
81
82
  generalSectionLinks: authorizedGeneralSectionLinks,
82
- pluginsSectionLinks: authorizedPluginSectionLinks,
83
+ pluginsSectionLinks: hideCloudDeployMenuLinkInProduction(authorizedPluginSectionLinks, currentEnvironment),
83
84
  isLoading: false
84
85
  }));
85
86
  }
@@ -90,7 +91,8 @@ const useMenu = (shouldUpdateStrapi)=>{
90
91
  menu,
91
92
  permissions,
92
93
  shouldUpdateStrapi,
93
- checkUserHasPermissions
94
+ checkUserHasPermissions,
95
+ currentEnvironment
94
96
  ]);
95
97
  return menuWithUserPermissions;
96
98
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.mjs","sources":["../../../../../admin/src/hooks/useMenu.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Cog, ShoppingCart, House } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAuth, AuthContextValue } from '../features/Auth';\nimport { StrapiAppContextValue, useStrapiApp } from '../features/StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\nexport type MenuItem = Omit<StrapiAppContextValue['menu'][number], 'Component'> & {\n navigationLink?: string;\n};\nexport type MobileMenuItem = {\n to: string;\n target?: string;\n link?: string;\n};\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n topMobileNavigation: MobileMenuItem[];\n burgerMobileNavigation: MobileMenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = (shouldUpdateStrapi: boolean) => {\n const checkUserHasPermissions = useAuth('useMenu', (state) => state.checkUserHasPermissions);\n const rawMenu = useStrapiApp('useMenu', (state) => state.menu);\n const menu = React.useMemo(() => normalizeMenuLinks(rawMenu), [rawMenu]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: House,\n intlLabel: {\n id: 'global.home',\n defaultMessage: 'Home',\n },\n to: '/',\n permissions: [],\n position: 0,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: 'https://market.strapi.io',\n target: '_blank',\n permissions: permissions.marketplace?.main ?? [],\n position: 7,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n position: 9,\n },\n ],\n pluginsSectionLinks: [],\n topMobileNavigation: [\n {\n to: '/',\n },\n {\n to: 'content-manager',\n },\n {\n to: 'plugins/content-releases',\n },\n {\n to: 'plugins/upload',\n },\n ],\n burgerMobileNavigation: [\n {\n to: '/settings',\n },\n ],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(\n menu,\n checkUserHasPermissions\n );\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n generalSectionLinksRef.current,\n shouldUpdateStrapi,\n checkUserHasPermissions\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n menu,\n permissions,\n shouldUpdateStrapi,\n checkUserHasPermissions,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false,\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const generalSectionLinks = normalizeMenuLinks(generalSectionRawLinks);\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionLinks.filter(\n (_, index) => generalSectionLinksPermissions[index].length > 0\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n pluginsSectionRawLinks: MenuItem[],\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const pluginSectionLinks = normalizeMenuLinks(pluginsSectionRawLinks);\n const pluginSectionLinksPermissions = await Promise.all(\n pluginSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedPluginSectionLinks = pluginSectionLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index].length > 0\n );\n\n return authorizedPluginSectionLinks;\n};\n\nconst normalizeMenuLinks = (links: unknown): MenuItem[] => {\n if (!Array.isArray(links)) {\n return [];\n }\n\n const isValidIcon = (icon: unknown) => {\n if (typeof icon === 'string' || typeof icon === 'function' || React.isValidElement(icon)) {\n return true;\n }\n\n if (!icon || typeof icon !== 'object') {\n return false;\n }\n\n const reactType = (icon as { $$typeof?: symbol }).$$typeof;\n\n return (\n reactType === Symbol.for('react.forward_ref') ||\n reactType === Symbol.for('react.memo') ||\n reactType === Symbol.for('react.lazy')\n );\n };\n\n return links.reduce<MenuItem[]>((acc, link) => {\n if (!link || typeof link !== 'object') {\n return acc;\n }\n\n const candidate = link as Partial<MenuItem>;\n\n if (\n typeof candidate.to !== 'string' ||\n !isValidIcon(candidate.icon) ||\n typeof candidate.intlLabel?.id !== 'string' ||\n typeof candidate.intlLabel.defaultMessage !== 'string'\n ) {\n return acc;\n }\n\n acc.push({\n ...candidate,\n permissions: Array.isArray(candidate.permissions) ? candidate.permissions : [],\n } as MenuItem);\n\n return acc;\n }, []);\n};\n\nexport { useMenu, normalizeMenuLinks };\n"],"names":["useMenu","shouldUpdateStrapi","checkUserHasPermissions","useAuth","state","rawMenu","useStrapiApp","menu","React","useMemo","normalizeMenuLinks","permissions","useTypedSelector","admin_app","menuWithUserPermissions","setMenuWithUserPermissions","useState","generalSectionLinks","icon","House","intlLabel","id","defaultMessage","to","position","ShoppingCart","target","marketplace","main","Cog","notificationsCount","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","isLoading","generalSectionLinksRef","useRef","useEffect","applyMenuPermissions","authorizedPluginSectionLinks","getPluginSectionLinks","authorizedGeneralSectionLinks","getGeneralLinks","current","generalSectionRawLinks","generalSectionLinksPermissions","Promise","all","map","filter","_","index","length","settingsLinkIndex","findIndex","obj","authorizedGeneralLinksClone","cloneDeep","pluginsSectionRawLinks","pluginSectionLinks","pluginSectionLinksPermissions","links","Array","isArray","isValidIcon","isValidElement","reactType","$$typeof","Symbol","for","reduce","acc","link","candidate","push"],"mappings":"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"}
1
+ {"version":3,"file":"useMenu.mjs","sources":["../../../../../admin/src/hooks/useMenu.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Cog, ShoppingCart, House } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAuth, AuthContextValue } from '../features/Auth';\nimport { StrapiAppContextValue, useStrapiApp } from '../features/StrapiApp';\nimport { hideCloudDeployMenuLinkInProduction } from '../utils/widgetVisibility';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\nexport type MenuItem = Omit<StrapiAppContextValue['menu'][number], 'Component'> & {\n navigationLink?: string;\n};\nexport type MobileMenuItem = {\n to: string;\n target?: string;\n link?: string;\n};\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n topMobileNavigation: MobileMenuItem[];\n burgerMobileNavigation: MobileMenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = (shouldUpdateStrapi: boolean, currentEnvironment?: string) => {\n const checkUserHasPermissions = useAuth('useMenu', (state) => state.checkUserHasPermissions);\n const rawMenu = useStrapiApp('useMenu', (state) => state.menu);\n const menu = React.useMemo(() => normalizeMenuLinks(rawMenu), [rawMenu]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: House,\n intlLabel: {\n id: 'global.home',\n defaultMessage: 'Home',\n },\n to: '/',\n permissions: [],\n position: 0,\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: 'https://market.strapi.io',\n target: '_blank',\n permissions: permissions.marketplace?.main ?? [],\n position: 7,\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n position: 9,\n },\n ],\n pluginsSectionLinks: [],\n topMobileNavigation: [\n {\n to: '/',\n },\n {\n to: 'content-manager',\n },\n {\n to: 'plugins/content-releases',\n },\n {\n to: 'plugins/upload',\n },\n ],\n burgerMobileNavigation: [\n {\n to: '/settings',\n },\n ],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(\n menu,\n checkUserHasPermissions\n );\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n generalSectionLinksRef.current,\n shouldUpdateStrapi,\n checkUserHasPermissions\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: hideCloudDeployMenuLinkInProduction(\n authorizedPluginSectionLinks,\n currentEnvironment\n ),\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n menu,\n permissions,\n shouldUpdateStrapi,\n checkUserHasPermissions,\n currentEnvironment,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false,\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const generalSectionLinks = normalizeMenuLinks(generalSectionRawLinks);\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionLinks.filter(\n (_, index) => generalSectionLinksPermissions[index].length > 0\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n pluginsSectionRawLinks: MenuItem[],\n checkUserHasPermissions: AuthContextValue['checkUserHasPermissions']\n) => {\n const pluginSectionLinks = normalizeMenuLinks(pluginsSectionRawLinks);\n const pluginSectionLinksPermissions = await Promise.all(\n pluginSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedPluginSectionLinks = pluginSectionLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index].length > 0\n );\n\n return authorizedPluginSectionLinks;\n};\n\nconst normalizeMenuLinks = (links: unknown): MenuItem[] => {\n if (!Array.isArray(links)) {\n return [];\n }\n\n const isValidIcon = (icon: unknown) => {\n if (typeof icon === 'string' || typeof icon === 'function' || React.isValidElement(icon)) {\n return true;\n }\n\n if (!icon || typeof icon !== 'object') {\n return false;\n }\n\n const reactType = (icon as { $$typeof?: symbol }).$$typeof;\n\n return (\n reactType === Symbol.for('react.forward_ref') ||\n reactType === Symbol.for('react.memo') ||\n reactType === Symbol.for('react.lazy')\n );\n };\n\n return links.reduce<MenuItem[]>((acc, link) => {\n if (!link || typeof link !== 'object') {\n return acc;\n }\n\n const candidate = link as Partial<MenuItem>;\n\n if (\n typeof candidate.to !== 'string' ||\n !isValidIcon(candidate.icon) ||\n typeof candidate.intlLabel?.id !== 'string' ||\n typeof candidate.intlLabel.defaultMessage !== 'string'\n ) {\n return acc;\n }\n\n acc.push({\n ...candidate,\n permissions: Array.isArray(candidate.permissions) ? candidate.permissions : [],\n } as MenuItem);\n\n return acc;\n }, []);\n};\n\nexport { useMenu, normalizeMenuLinks };\n"],"names":["useMenu","shouldUpdateStrapi","currentEnvironment","checkUserHasPermissions","useAuth","state","rawMenu","useStrapiApp","menu","React","useMemo","normalizeMenuLinks","permissions","useTypedSelector","admin_app","menuWithUserPermissions","setMenuWithUserPermissions","useState","generalSectionLinks","icon","House","intlLabel","id","defaultMessage","to","position","ShoppingCart","target","marketplace","main","Cog","notificationsCount","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","isLoading","generalSectionLinksRef","useRef","useEffect","applyMenuPermissions","authorizedPluginSectionLinks","getPluginSectionLinks","authorizedGeneralSectionLinks","getGeneralLinks","current","hideCloudDeployMenuLinkInProduction","generalSectionRawLinks","generalSectionLinksPermissions","Promise","all","map","filter","_","index","length","settingsLinkIndex","findIndex","obj","authorizedGeneralLinksClone","cloneDeep","pluginsSectionRawLinks","pluginSectionLinks","pluginSectionLinksPermissions","links","Array","isArray","isValidIcon","isValidElement","reactType","$$typeof","Symbol","for","reduce","acc","link","candidate","push"],"mappings":";;;;;;;;AA+BA,MAAMA,OAAAA,GAAU,CAACC,kBAAAA,EAA6BC,kBAAAA,GAAAA;AAC5C,IAAA,MAAMC,0BAA0BC,OAAAA,CAAQ,SAAA,EAAW,CAACC,KAAAA,GAAUA,MAAMF,uBAAuB,CAAA;AAC3F,IAAA,MAAMG,UAAUC,YAAAA,CAAa,SAAA,EAAW,CAACF,KAAAA,GAAUA,MAAMG,IAAI,CAAA;AAC7D,IAAA,MAAMA,OAAOC,KAAAA,CAAMC,OAAO,CAAC,IAAMC,mBAAmBL,OAAAA,CAAAA,EAAU;AAACA,QAAAA;AAAQ,KAAA,CAAA;AACvE,IAAA,MAAMM,cAAcC,gBAAAA,CAAiB,CAACR,QAAUA,KAAAA,CAAMS,SAAS,CAACF,WAAW,CAAA;AAC3E,IAAA,MAAM,CAACG,uBAAAA,EAAyBC,0BAAAA,CAA2B,GAAGP,KAAAA,CAAMQ,QAAQ,CAAO;QACjFC,mBAAAA,EAAqB;AACnB,YAAA;gBACEC,IAAAA,EAAMC,KAAAA;gBACNC,SAAAA,EAAW;oBACTC,EAAAA,EAAI,aAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,EAAAA,EAAI,GAAA;AACJZ,gBAAAA,WAAAA,EAAa,EAAE;gBACfa,QAAAA,EAAU;AACZ,aAAA;AACA,YAAA;gBACEN,IAAAA,EAAMO,YAAAA;gBACNL,SAAAA,EAAW;oBACTC,EAAAA,EAAI,oBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,EAAAA,EAAI,0BAAA;gBACJG,MAAAA,EAAQ,QAAA;AACRf,gBAAAA,WAAAA,EAAaA,WAAAA,CAAYgB,WAAW,EAAEC,IAAAA,IAAQ,EAAE;gBAChDJ,QAAAA,EAAU;AACZ,aAAA;AACA,YAAA;gBACEN,IAAAA,EAAMW,GAAAA;gBACNT,SAAAA,EAAW;oBACTC,EAAAA,EAAI,iBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,EAAAA,EAAI,WAAA;;;AAGJZ,gBAAAA,WAAAA,EAAa,EAAE;gBACfmB,kBAAAA,EAAoB,CAAA;gBACpBN,QAAAA,EAAU;AACZ;AACD,SAAA;AACDO,QAAAA,mBAAAA,EAAqB,EAAE;QACvBC,mBAAAA,EAAqB;AACnB,YAAA;gBACET,EAAAA,EAAI;AACN,aAAA;AACA,YAAA;gBACEA,EAAAA,EAAI;AACN,aAAA;AACA,YAAA;gBACEA,EAAAA,EAAI;AACN,aAAA;AACA,YAAA;gBACEA,EAAAA,EAAI;AACN;AACD,SAAA;QACDU,sBAAAA,EAAwB;AACtB,YAAA;gBACEV,EAAAA,EAAI;AACN;AACD,SAAA;QACDW,SAAAA,EAAW;AACb,KAAA,CAAA;AACA,IAAA,MAAMC,sBAAAA,GAAyB3B,KAAAA,CAAM4B,MAAM,CAACtB,wBAAwBG,mBAAmB,CAAA;AAEvFT,IAAAA,KAAAA,CAAM6B,SAAS,CAAC,IAAA;QACd,eAAeC,oBAAAA,GAAAA;YACb,MAAMC,4BAAAA,GAA+B,MAAMC,qBAAAA,CACzCjC,IAAAA,EACAL,uBAAAA,CAAAA;AAGF,YAAA,MAAMuC,gCAAgC,MAAMC,eAAAA,CAC1CP,sBAAAA,CAAuBQ,OAAO,EAC9B3C,kBAAAA,EACAE,uBAAAA,CAAAA;YAGFa,0BAAAA,CAA2B,CAACX,SAAW;AACrC,oBAAA,GAAGA,KAAK;oBACRa,mBAAAA,EAAqBwB,6BAAAA;AACrBV,oBAAAA,mBAAAA,EAAqBa,oCACnBL,4BAAAA,EACAtC,kBAAAA,CAAAA;oBAEFiC,SAAAA,EAAW;iBACb,CAAA,CAAA;AACF,QAAA;AAEAI,QAAAA,oBAAAA,EAAAA;IACF,CAAA,EAAG;AACDvB,QAAAA,0BAAAA;AACAoB,QAAAA,sBAAAA;AACA5B,QAAAA,IAAAA;AACAI,QAAAA,WAAAA;AACAX,QAAAA,kBAAAA;AACAE,QAAAA,uBAAAA;AACAD,QAAAA;AACD,KAAA,CAAA;IAED,OAAOa,uBAAAA;AACT;AAEA;;AAEkG,qGAElG,MAAM4B,eAAAA,GAAkB,OACtBG,sBAAAA,EACA7C,kBAAAA,GAA8B,KAAK,EACnCE,uBAAAA,GAAAA;AAEA,IAAA,MAAMe,sBAAsBP,kBAAAA,CAAmBmC,sBAAAA,CAAAA;AAC/C,IAAA,MAAMC,8BAAAA,GAAiC,MAAMC,OAAAA,CAAQC,GAAG,CACtD/B,mBAAAA,CAAoBgC,GAAG,CAAC,CAAC,EAAEtC,WAAW,EAAE,GAAKT,uBAAAA,CAAwBS,WAAAA,CAAAA,CAAAA,CAAAA;AAGvE,IAAA,MAAM8B,6BAAAA,GAAgCxB,mBAAAA,CAAoBiC,MAAM,CAC9D,CAACC,CAAAA,EAAGC,KAAAA,GAAUN,8BAA8B,CAACM,KAAAA,CAAM,CAACC,MAAM,GAAG,CAAA,CAAA;IAG/D,MAAMC,iBAAAA,GAAoBb,8BAA8Bc,SAAS,CAC/D,CAACC,GAAAA,GAAQA,GAAAA,CAAIjC,EAAE,KAAK,WAAA,CAAA;IAGtB,IAAI+B,iBAAAA,KAAsB,EAAC,EAAG;AAC5B,QAAA,OAAO,EAAE;AACX,IAAA;AAEA,IAAA,MAAMG,8BAA8BC,SAAAA,CAAUjB,6BAAAA,CAAAA;AAE9CgB,IAAAA,2BAA2B,CAACH,iBAAAA,CAAkB,CAACxB,kBAAkB,GAAG9B,qBAAqB,CAAA,GAAI,CAAA;IAE7F,OAAOyD,2BAAAA;AACT,CAAA;AAEA,MAAMjB,qBAAAA,GAAwB,OAC5BmB,sBAAAA,EACAzD,uBAAAA,GAAAA;AAEA,IAAA,MAAM0D,qBAAqBlD,kBAAAA,CAAmBiD,sBAAAA,CAAAA;AAC9C,IAAA,MAAME,6BAAAA,GAAgC,MAAMd,OAAAA,CAAQC,GAAG,CACrDY,kBAAAA,CAAmBX,GAAG,CAAC,CAAC,EAAEtC,WAAW,EAAE,GAAKT,uBAAAA,CAAwBS,WAAAA,CAAAA,CAAAA,CAAAA;AAGtE,IAAA,MAAM4B,4BAAAA,GAA+BqB,kBAAAA,CAAmBV,MAAM,CAC5D,CAACC,CAAAA,EAAGC,KAAAA,GAAUS,6BAA6B,CAACT,KAAAA,CAAM,CAACC,MAAM,GAAG,CAAA,CAAA;IAG9D,OAAOd,4BAAAA;AACT,CAAA;AAEA,MAAM7B,qBAAqB,CAACoD,KAAAA,GAAAA;AAC1B,IAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACF,KAAAA,CAAAA,EAAQ;AACzB,QAAA,OAAO,EAAE;AACX,IAAA;AAEA,IAAA,MAAMG,cAAc,CAAC/C,IAAAA,GAAAA;QACnB,IAAI,OAAOA,SAAS,QAAA,IAAY,OAAOA,SAAS,UAAA,IAAcV,KAAAA,CAAM0D,cAAc,CAAChD,IAAAA,CAAAA,EAAO;YACxF,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAI,CAACA,IAAAA,IAAQ,OAAOA,IAAAA,KAAS,QAAA,EAAU;YACrC,OAAO,KAAA;AACT,QAAA;QAEA,MAAMiD,SAAAA,GAAY,IAACjD,CAA+BkD,QAAQ;AAE1D,QAAA,OACED,SAAAA,KAAcE,MAAAA,CAAOC,GAAG,CAAC,mBAAA,CAAA,IACzBH,SAAAA,KAAcE,MAAAA,CAAOC,GAAG,CAAC,YAAA,CAAA,IACzBH,SAAAA,KAAcE,MAAAA,CAAOC,GAAG,CAAC,YAAA,CAAA;AAE7B,IAAA,CAAA;AAEA,IAAA,OAAOR,KAAAA,CAAMS,MAAM,CAAa,CAACC,GAAAA,EAAKC,IAAAA,GAAAA;AACpC,QAAA,IAAI,CAACA,IAAAA,IAAQ,OAAOA,IAAAA,KAAS,QAAA,EAAU;YACrC,OAAOD,GAAAA;AACT,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYD,IAAAA;QAElB,IACE,OAAOC,UAAUnD,EAAE,KAAK,YACxB,CAAC0C,WAAAA,CAAYS,SAAAA,CAAUxD,IAAI,CAAA,IAC3B,OAAOwD,UAAUtD,SAAS,EAAEC,OAAO,QAAA,IACnC,OAAOqD,UAAUtD,SAAS,CAACE,cAAc,KAAK,QAAA,EAC9C;YACA,OAAOkD,GAAAA;AACT,QAAA;AAEAA,QAAAA,GAAAA,CAAIG,IAAI,CAAC;AACP,YAAA,GAAGD,SAAS;YACZ/D,WAAAA,EAAaoD,KAAAA,CAAMC,OAAO,CAACU,SAAAA,CAAU/D,WAAW,CAAA,GAAI+D,SAAAA,CAAU/D,WAAW,GAAG;AAC9E,SAAA,CAAA;QAEA,OAAO6D,GAAAA;AACT,IAAA,CAAA,EAAG,EAAE,CAAA;AACP;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryParams.js","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\nexport { useQueryParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery"],"mappings":";;;;;;AAKA,MAAMA,SAAAA,GAAY,IAAA;IAChB,MAAM,EAAEC,MAAM,EAAE,GAAGC,0BAAAA,EAAAA;IAEnB,OAAOC,aAAAA,CAAQ,IAAMF,MAAAA,EAAQ;AAACA,QAAAA;AAAO,KAAA,CAAA;AACvC,CAAA;AAEA,MAAMG,iBAAiB,CAAwBC,aAAAA,GAAAA;AAC7C,IAAA,MAAMJ,MAAAA,GAASD,SAAAA,EAAAA;AACf,IAAA,MAAMM,QAAAA,GAAWC,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,QAAQL,aAAAA,CAAQ,IAAA;;QAEpB,MAAMM,WAAAA,GAAcR,OAAOS,UAAU,CAAC,OAAOT,MAAAA,CAAOU,KAAK,CAAC,CAAA,CAAA,GAAKV,MAAAA;QAC/D,IAAI,CAACA,UAAUI,aAAAA,EAAe;YAC5B,OAAOA,aAAAA;AACT,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGA,aAAa;AAAE,YAAA,GAAGO,SAAMH,WAAAA;AAAa,SAAA;IACnD,CAAA,EAAG;AAACR,QAAAA,MAAAA;AAAQI,QAAAA;AAAc,KAAA,CAAA;IAE1B,MAAMQ,QAAAA,GAAWC,kBACf,CAACC,UAAAA,EAAoBC,SAA4B,MAAM,EAAEC,UAAU,KAAK,GAAA;AACtE,QAAA,IAAIC,SAAAA,GAA6B;AAAE,YAAA,GAAGV;AAAM,SAAA;AAE5C,QAAA,IAAIQ,WAAW,QAAA,EAAU;AACvBG,YAAAA,MAAAA,CAAOC,IAAI,CAACL,UAAAA,CAAAA,CAAYM,OAAO,CAAC,CAACC,GAAAA,GAAAA;gBAC/B,IAAIH,MAAAA,CAAOI,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAWI,GAAAA,CAAAA,EAAM;oBACxD,OAAOJ,SAAS,CAACI,GAAAA,CAAoB;AACvC,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,CAAA,MAAO;YACLJ,SAAAA,GAAY;AAAE,gBAAA,GAAGV,KAAK;AAAE,gBAAA,GAAGO;AAAW,aAAA;AACxC,QAAA;QAEAT,QAAAA,CAAS;AAAEL,YAAAA,MAAAA,EAAQyB,aAAUR,SAAAA,EAAW;gBAAES,MAAAA,EAAQ;AAAM,aAAA;SAAG,EAAG;AAAEV,YAAAA;AAAQ,SAAA,CAAA;IAC1E,CAAA,EACA;AAACX,QAAAA,QAAAA;AAAUE,QAAAA;AAAM,KAAA,CAAA;IAGnB,OAAO;AAAC,QAAA;AAAEA,YAAAA,KAAAA;YAAOoB,QAAAA,EAAU3B;AAAO,SAAA;AAAGY,QAAAA;AAAS,KAAA;AAChD;;;;"}
1
+ {"version":3,"file":"useQueryParams.js","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\ntype QueryParams = Record<string, unknown>;\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object = QueryParams>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\nexport { useQueryParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery"],"mappings":";;;;;;AAOA,MAAMA,SAAAA,GAAY,IAAA;IAChB,MAAM,EAAEC,MAAM,EAAE,GAAGC,0BAAAA,EAAAA;IAEnB,OAAOC,aAAAA,CAAQ,IAAMF,MAAAA,EAAQ;AAACA,QAAAA;AAAO,KAAA,CAAA;AACvC,CAAA;AAEA,MAAMG,iBAAiB,CAAsCC,aAAAA,GAAAA;AAC3D,IAAA,MAAMJ,MAAAA,GAASD,SAAAA,EAAAA;AACf,IAAA,MAAMM,QAAAA,GAAWC,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,QAAQL,aAAAA,CAAQ,IAAA;;QAEpB,MAAMM,WAAAA,GAAcR,OAAOS,UAAU,CAAC,OAAOT,MAAAA,CAAOU,KAAK,CAAC,CAAA,CAAA,GAAKV,MAAAA;QAC/D,IAAI,CAACA,UAAUI,aAAAA,EAAe;YAC5B,OAAOA,aAAAA;AACT,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGA,aAAa;AAAE,YAAA,GAAGO,SAAMH,WAAAA;AAAa,SAAA;IACnD,CAAA,EAAG;AAACR,QAAAA,MAAAA;AAAQI,QAAAA;AAAc,KAAA,CAAA;IAE1B,MAAMQ,QAAAA,GAAWC,kBACf,CAACC,UAAAA,EAAoBC,SAA4B,MAAM,EAAEC,UAAU,KAAK,GAAA;AACtE,QAAA,IAAIC,SAAAA,GAA6B;AAAE,YAAA,GAAGV;AAAM,SAAA;AAE5C,QAAA,IAAIQ,WAAW,QAAA,EAAU;AACvBG,YAAAA,MAAAA,CAAOC,IAAI,CAACL,UAAAA,CAAAA,CAAYM,OAAO,CAAC,CAACC,GAAAA,GAAAA;gBAC/B,IAAIH,MAAAA,CAAOI,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAWI,GAAAA,CAAAA,EAAM;oBACxD,OAAOJ,SAAS,CAACI,GAAAA,CAAoB;AACvC,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,CAAA,MAAO;YACLJ,SAAAA,GAAY;AAAE,gBAAA,GAAGV,KAAK;AAAE,gBAAA,GAAGO;AAAW,aAAA;AACxC,QAAA;QAEAT,QAAAA,CAAS;AAAEL,YAAAA,MAAAA,EAAQyB,aAAUR,SAAAA,EAAW;gBAAES,MAAAA,EAAQ;AAAM,aAAA;SAAG,EAAG;AAAEV,YAAAA;AAAQ,SAAA,CAAA;IAC1E,CAAA,EACA;AAACX,QAAAA,QAAAA;AAAUE,QAAAA;AAAM,KAAA,CAAA;IAGnB,OAAO;AAAC,QAAA;AAAEA,YAAAA,KAAAA;YAAOoB,QAAAA,EAAU3B;AAAO,SAAA;AAAGY,QAAAA;AAAS,KAAA;AAChD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryParams.mjs","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\nexport { useQueryParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery"],"mappings":";;;;AAKA,MAAMA,SAAAA,GAAY,IAAA;IAChB,MAAM,EAAEC,MAAM,EAAE,GAAGC,WAAAA,EAAAA;IAEnB,OAAOC,OAAAA,CAAQ,IAAMF,MAAAA,EAAQ;AAACA,QAAAA;AAAO,KAAA,CAAA;AACvC,CAAA;AAEA,MAAMG,iBAAiB,CAAwBC,aAAAA,GAAAA;AAC7C,IAAA,MAAMJ,MAAAA,GAASD,SAAAA,EAAAA;AACf,IAAA,MAAMM,QAAAA,GAAWC,WAAAA,EAAAA;AAEjB,IAAA,MAAMC,QAAQL,OAAAA,CAAQ,IAAA;;QAEpB,MAAMM,WAAAA,GAAcR,OAAOS,UAAU,CAAC,OAAOT,MAAAA,CAAOU,KAAK,CAAC,CAAA,CAAA,GAAKV,MAAAA;QAC/D,IAAI,CAACA,UAAUI,aAAAA,EAAe;YAC5B,OAAOA,aAAAA;AACT,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGA,aAAa;AAAE,YAAA,GAAGO,MAAMH,WAAAA;AAAa,SAAA;IACnD,CAAA,EAAG;AAACR,QAAAA,MAAAA;AAAQI,QAAAA;AAAc,KAAA,CAAA;IAE1B,MAAMQ,QAAAA,GAAWC,YACf,CAACC,UAAAA,EAAoBC,SAA4B,MAAM,EAAEC,UAAU,KAAK,GAAA;AACtE,QAAA,IAAIC,SAAAA,GAA6B;AAAE,YAAA,GAAGV;AAAM,SAAA;AAE5C,QAAA,IAAIQ,WAAW,QAAA,EAAU;AACvBG,YAAAA,MAAAA,CAAOC,IAAI,CAACL,UAAAA,CAAAA,CAAYM,OAAO,CAAC,CAACC,GAAAA,GAAAA;gBAC/B,IAAIH,MAAAA,CAAOI,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAWI,GAAAA,CAAAA,EAAM;oBACxD,OAAOJ,SAAS,CAACI,GAAAA,CAAoB;AACvC,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,CAAA,MAAO;YACLJ,SAAAA,GAAY;AAAE,gBAAA,GAAGV,KAAK;AAAE,gBAAA,GAAGO;AAAW,aAAA;AACxC,QAAA;QAEAT,QAAAA,CAAS;AAAEL,YAAAA,MAAAA,EAAQyB,UAAUR,SAAAA,EAAW;gBAAES,MAAAA,EAAQ;AAAM,aAAA;SAAG,EAAG;AAAEV,YAAAA;AAAQ,SAAA,CAAA;IAC1E,CAAA,EACA;AAACX,QAAAA,QAAAA;AAAUE,QAAAA;AAAM,KAAA,CAAA;IAGnB,OAAO;AAAC,QAAA;AAAEA,YAAAA,KAAAA;YAAOoB,QAAAA,EAAU3B;AAAO,SAAA;AAAGY,QAAAA;AAAS,KAAA;AAChD;;;;"}
1
+ {"version":3,"file":"useQueryParams.mjs","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\ntype QueryParams = Record<string, unknown>;\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object = QueryParams>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\nexport { useQueryParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery"],"mappings":";;;;AAOA,MAAMA,SAAAA,GAAY,IAAA;IAChB,MAAM,EAAEC,MAAM,EAAE,GAAGC,WAAAA,EAAAA;IAEnB,OAAOC,OAAAA,CAAQ,IAAMF,MAAAA,EAAQ;AAACA,QAAAA;AAAO,KAAA,CAAA;AACvC,CAAA;AAEA,MAAMG,iBAAiB,CAAsCC,aAAAA,GAAAA;AAC3D,IAAA,MAAMJ,MAAAA,GAASD,SAAAA,EAAAA;AACf,IAAA,MAAMM,QAAAA,GAAWC,WAAAA,EAAAA;AAEjB,IAAA,MAAMC,QAAQL,OAAAA,CAAQ,IAAA;;QAEpB,MAAMM,WAAAA,GAAcR,OAAOS,UAAU,CAAC,OAAOT,MAAAA,CAAOU,KAAK,CAAC,CAAA,CAAA,GAAKV,MAAAA;QAC/D,IAAI,CAACA,UAAUI,aAAAA,EAAe;YAC5B,OAAOA,aAAAA;AACT,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGA,aAAa;AAAE,YAAA,GAAGO,MAAMH,WAAAA;AAAa,SAAA;IACnD,CAAA,EAAG;AAACR,QAAAA,MAAAA;AAAQI,QAAAA;AAAc,KAAA,CAAA;IAE1B,MAAMQ,QAAAA,GAAWC,YACf,CAACC,UAAAA,EAAoBC,SAA4B,MAAM,EAAEC,UAAU,KAAK,GAAA;AACtE,QAAA,IAAIC,SAAAA,GAA6B;AAAE,YAAA,GAAGV;AAAM,SAAA;AAE5C,QAAA,IAAIQ,WAAW,QAAA,EAAU;AACvBG,YAAAA,MAAAA,CAAOC,IAAI,CAACL,UAAAA,CAAAA,CAAYM,OAAO,CAAC,CAACC,GAAAA,GAAAA;gBAC/B,IAAIH,MAAAA,CAAOI,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAWI,GAAAA,CAAAA,EAAM;oBACxD,OAAOJ,SAAS,CAACI,GAAAA,CAAoB;AACvC,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,CAAA,MAAO;YACLJ,SAAAA,GAAY;AAAE,gBAAA,GAAGV,KAAK;AAAE,gBAAA,GAAGO;AAAW,aAAA;AACxC,QAAA;QAEAT,QAAAA,CAAS;AAAEL,YAAAA,MAAAA,EAAQyB,UAAUR,SAAAA,EAAW;gBAAES,MAAAA,EAAQ;AAAM,aAAA;SAAG,EAAG;AAAEV,YAAAA;AAAQ,SAAA,CAAA;IAC1E,CAAA,EACA;AAACX,QAAAA,QAAAA;AAAUE,QAAAA;AAAM,KAAA,CAAA;IAGnB,OAAO;AAAC,QAAA;AAAEA,YAAAA,KAAAA;YAAOoB,QAAAA,EAAU3B;AAAO,SAAA;AAAGY,QAAAA;AAAS,KAAA;AAChD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useThrottledCallback.js","sources":["../../../../../admin/src/hooks/useThrottledCallback.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport throttle from 'lodash/throttle';\n\ntype ThrottleSettings = Parameters<typeof throttle>[2];\n\n/**\n * @internal\n * @description Create a throttled version of a callback\n * @example\n * ```tsx\n * // First create a callback using React’s `useCallback` hook\n * const myCallback = useCallback(() => {\n * // this is not throttled\n * }, [])\n *\n * // Then make a throttled version using the `useThrottledCallback` hook\n * const myThrottledCallback = useThrottledCallback(myCallback, 100)\n *\n * // Call the throttled callback\n * <Button onClick={myThrottledCallback} />\n * ```\n */\nconst useThrottledCallback = <T extends (...args: any[]) => any>(\n callback: T,\n wait: number,\n options: ThrottleSettings\n): T => {\n const throttledCallback = useMemo(\n () => throttle(callback, wait, options) as unknown as T,\n [callback, options, wait]\n );\n\n return throttledCallback;\n};\n\nexport { useThrottledCallback };\n"],"names":["useThrottledCallback","callback","wait","options","throttledCallback","useMemo","throttle"],"mappings":";;;;;;;;;AAMA;;;;;;;;;;;;;;;;AAgBC,IACD,MAAMA,oBAAAA,GAAuB,CAC3BC,QAAAA,EACAC,IAAAA,EACAC,OAAAA,GAAAA;AAEA,IAAA,MAAMC,oBAAoBC,aAAAA,CACxB,IAAMC,yBAAAA,CAASL,QAAAA,EAAUC,MAAMC,OAAAA,CAAAA,EAC/B;AAACF,QAAAA,QAAAA;AAAUE,QAAAA,OAAAA;AAASD,QAAAA;AAAK,KAAA,CAAA;IAG3B,OAAOE,iBAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useThrottledCallback.js","sources":["../../../../../admin/src/hooks/useThrottledCallback.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport throttle from 'lodash/throttle';\n\ntype ThrottleSettings = Parameters<typeof throttle>[2];\n\n/**\n * @internal\n * @description Create a throttled version of a callback\n * @example\n * ```tsx\n * // First create a callback using React’s `useCallback` hook\n * const myCallback = useCallback(() => {\n * // this is not throttled\n * }, [])\n *\n * // Then make a throttled version using the `useThrottledCallback` hook\n * const myThrottledCallback = useThrottledCallback(myCallback, 100)\n *\n * // Call the throttled callback\n * <Button onClick={myThrottledCallback} />\n * ```\n */\nconst useThrottledCallback = <T extends (...args: never[]) => unknown>(\n callback: T,\n wait: number,\n options: ThrottleSettings\n): T => {\n const throttledCallback = useMemo(\n () => throttle(callback, wait, options) as unknown as T,\n [callback, options, wait]\n );\n\n return throttledCallback;\n};\n\nexport { useThrottledCallback };\n"],"names":["useThrottledCallback","callback","wait","options","throttledCallback","useMemo","throttle"],"mappings":";;;;;;;;;AAMA;;;;;;;;;;;;;;;;AAgBC,IACD,MAAMA,oBAAAA,GAAuB,CAC3BC,QAAAA,EACAC,IAAAA,EACAC,OAAAA,GAAAA;AAEA,IAAA,MAAMC,oBAAoBC,aAAAA,CACxB,IAAMC,yBAAAA,CAASL,QAAAA,EAAUC,MAAMC,OAAAA,CAAAA,EAC/B;AAACF,QAAAA,QAAAA;AAAUE,QAAAA,OAAAA;AAASD,QAAAA;AAAK,KAAA,CAAA;IAG3B,OAAOE,iBAAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useThrottledCallback.mjs","sources":["../../../../../admin/src/hooks/useThrottledCallback.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport throttle from 'lodash/throttle';\n\ntype ThrottleSettings = Parameters<typeof throttle>[2];\n\n/**\n * @internal\n * @description Create a throttled version of a callback\n * @example\n * ```tsx\n * // First create a callback using React’s `useCallback` hook\n * const myCallback = useCallback(() => {\n * // this is not throttled\n * }, [])\n *\n * // Then make a throttled version using the `useThrottledCallback` hook\n * const myThrottledCallback = useThrottledCallback(myCallback, 100)\n *\n * // Call the throttled callback\n * <Button onClick={myThrottledCallback} />\n * ```\n */\nconst useThrottledCallback = <T extends (...args: any[]) => any>(\n callback: T,\n wait: number,\n options: ThrottleSettings\n): T => {\n const throttledCallback = useMemo(\n () => throttle(callback, wait, options) as unknown as T,\n [callback, options, wait]\n );\n\n return throttledCallback;\n};\n\nexport { useThrottledCallback };\n"],"names":["useThrottledCallback","callback","wait","options","throttledCallback","useMemo","throttle"],"mappings":";;;AAMA;;;;;;;;;;;;;;;;AAgBC,IACD,MAAMA,oBAAAA,GAAuB,CAC3BC,QAAAA,EACAC,IAAAA,EACAC,OAAAA,GAAAA;AAEA,IAAA,MAAMC,oBAAoBC,OAAAA,CACxB,IAAMC,QAAAA,CAASL,QAAAA,EAAUC,MAAMC,OAAAA,CAAAA,EAC/B;AAACF,QAAAA,QAAAA;AAAUE,QAAAA,OAAAA;AAASD,QAAAA;AAAK,KAAA,CAAA;IAG3B,OAAOE,iBAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useThrottledCallback.mjs","sources":["../../../../../admin/src/hooks/useThrottledCallback.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport throttle from 'lodash/throttle';\n\ntype ThrottleSettings = Parameters<typeof throttle>[2];\n\n/**\n * @internal\n * @description Create a throttled version of a callback\n * @example\n * ```tsx\n * // First create a callback using React’s `useCallback` hook\n * const myCallback = useCallback(() => {\n * // this is not throttled\n * }, [])\n *\n * // Then make a throttled version using the `useThrottledCallback` hook\n * const myThrottledCallback = useThrottledCallback(myCallback, 100)\n *\n * // Call the throttled callback\n * <Button onClick={myThrottledCallback} />\n * ```\n */\nconst useThrottledCallback = <T extends (...args: never[]) => unknown>(\n callback: T,\n wait: number,\n options: ThrottleSettings\n): T => {\n const throttledCallback = useMemo(\n () => throttle(callback, wait, options) as unknown as T,\n [callback, options, wait]\n );\n\n return throttledCallback;\n};\n\nexport { useThrottledCallback };\n"],"names":["useThrottledCallback","callback","wait","options","throttledCallback","useMemo","throttle"],"mappings":";;;AAMA;;;;;;;;;;;;;;;;AAgBC,IACD,MAAMA,oBAAAA,GAAuB,CAC3BC,QAAAA,EACAC,IAAAA,EACAC,OAAAA,GAAAA;AAEA,IAAA,MAAMC,oBAAoBC,OAAAA,CACxB,IAAMC,QAAAA,CAASL,QAAAA,EAAUC,MAAMC,OAAAA,CAAAA,EAC/B;AAACF,QAAAA,QAAAA;AAAUE,QAAAA,OAAAA;AAASD,QAAAA;AAAK,KAAA,CAAA;IAG3B,OAAOE,iBAAAA;AACT;;;;"}
@@ -87,7 +87,7 @@ const AdminLayout = ()=>{
87
87
  userInfo
88
88
  ]);
89
89
  const { trackUsage } = Tracking.useTracking();
90
- const { isLoading: isLoadingMenu, generalSectionLinks, pluginsSectionLinks, topMobileNavigation, burgerMobileNavigation } = useMenu.useMenu(checkLatestStrapiVersion(strapiVersion, tagName));
90
+ const { isLoading: isLoadingMenu, generalSectionLinks, pluginsSectionLinks, topMobileNavigation, burgerMobileNavigation } = useMenu.useMenu(checkLatestStrapiVersion(strapiVersion, tagName), appInfo?.currentEnvironment);
91
91
  const getAllWidgets = StrapiApp.useStrapiApp('TrackingProvider', (state)=>state.widgets.getAll);
92
92
  const projectId = appInfo?.projectId;
93
93
  React__namespace.useEffect(()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticatedLayout.js","sources":["../../../../../admin/src/layouts/AuthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport packageInfo from '@strapi/admin/package.json';\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n\nimport { LazyOutlet } from '../components/LazyOutlet';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { NpsSurvey } from '../components/NpsSurvey';\nimport { Page } from '../components/PageHelpers';\nimport { PluginsInitializer } from '../components/PluginsInitializer';\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { UpsellBanner } from '../components/UpsellBanner';\nimport { AppInfoProvider } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useTracking } from '../features/Tracking';\nimport { useMenu } from '../hooks/useMenu';\nimport { useInformationQuery } from '../services/admin';\nimport { hashAdminUserEmail } from '../utils/users';\n\nconst { version: strapiVersion } = packageInfo;\n\nconst AdminLayout = () => {\n const { formatMessage } = useIntl();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n return;\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n const { trackUsage } = useTracking();\n\n const {\n isLoading: isLoadingMenu,\n generalSectionLinks,\n pluginsSectionLinks,\n topMobileNavigation,\n burgerMobileNavigation,\n } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName));\n\n const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);\n const projectId = appInfo?.projectId;\n React.useEffect(() => {\n if (projectId) {\n trackUsage('didAccessAuthenticatedAdministration', {\n registeredWidgets: getAllWidgets().map((widget) => widget.uid),\n projectId,\n });\n }\n }, [projectId, getAllWidgets, trackUsage]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingMenu || isLoadingAppInfo) {\n return <Page.Loading />;\n }\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n >\n <NpsSurvey />\n <PluginsInitializer>\n <DndProvider backend={HTML5Backend}>\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex\n height=\"100dvh\"\n direction={{\n initial: 'column',\n large: 'row',\n }}\n alignItems=\"flex-start\"\n >\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n topMobileNavigation={topMobileNavigation}\n burgerMobileNavigation={burgerMobileNavigation}\n />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n overflow=\"auto\"\n width=\"100%\"\n height={{\n initial: 'auto',\n large: '100%',\n }}\n >\n <UpsellBanner />\n {/*\n * Top-level Suspense only — nested layouts (Settings, Content Manager) use\n * LazyOutlet with useNavigation so in-app navigations show loading in the content\n * column without hiding section side navs.\n */}\n <LazyOutlet suspenseOnly />\n </Flex>\n </Flex>\n </Box>\n </DndProvider>\n </PluginsInitializer>\n </AppInfoProvider>\n );\n};\n\nconst PrivateAdminLayout = () => {\n return (\n <PrivateRoute>\n <AdminLayout />\n </PrivateRoute>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AdminLayout, PrivateAdminLayout };\n"],"names":["version","strapiVersion","packageInfo","AdminLayout","formatMessage","useIntl","userInfo","useAuth","state","user","userId","setUserId","React","useState","showReleaseNotification","useConfiguration","data","appInfo","isLoading","isLoadingAppInfo","useInformationQuery","tagName","setTagName","useEffect","fetch","then","res","ok","response","json","tag_name","Error","catch","hashAdminUserEmail","id","trackUsage","useTracking","isLoadingMenu","generalSectionLinks","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","useMenu","checkLatestStrapiVersion","getAllWidgets","useStrapiApp","widgets","getAll","projectId","registeredWidgets","map","widget","uid","_jsx","Page","Loading","_jsxs","AppInfoProvider","latestStrapiReleaseTag","shouldUpdateStrapi","NpsSurvey","PluginsInitializer","DndProvider","backend","HTML5Backend","Box","background","SkipToContent","defaultMessage","Flex","height","direction","initial","large","alignItems","LeftMenu","flex","overflow","width","UpsellBanner","LazyOutlet","suspenseOnly","PrivateAdminLayout","PrivateRoute","currentPackageVersion","latestPublishedVersion","valid","lt"],"mappings":"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"}
1
+ {"version":3,"file":"AuthenticatedLayout.js","sources":["../../../../../admin/src/layouts/AuthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport packageInfo from '@strapi/admin/package.json';\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n\nimport { LazyOutlet } from '../components/LazyOutlet';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { NpsSurvey } from '../components/NpsSurvey';\nimport { Page } from '../components/PageHelpers';\nimport { PluginsInitializer } from '../components/PluginsInitializer';\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { UpsellBanner } from '../components/UpsellBanner';\nimport { AppInfoProvider } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useTracking } from '../features/Tracking';\nimport { useMenu } from '../hooks/useMenu';\nimport { useInformationQuery } from '../services/admin';\nimport { hashAdminUserEmail } from '../utils/users';\n\nconst { version: strapiVersion } = packageInfo;\n\nconst AdminLayout = () => {\n const { formatMessage } = useIntl();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n return;\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n const { trackUsage } = useTracking();\n\n const {\n isLoading: isLoadingMenu,\n generalSectionLinks,\n pluginsSectionLinks,\n topMobileNavigation,\n burgerMobileNavigation,\n } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName), appInfo?.currentEnvironment);\n\n const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);\n const projectId = appInfo?.projectId;\n React.useEffect(() => {\n if (projectId) {\n trackUsage('didAccessAuthenticatedAdministration', {\n registeredWidgets: getAllWidgets().map((widget) => widget.uid),\n projectId,\n });\n }\n }, [projectId, getAllWidgets, trackUsage]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingMenu || isLoadingAppInfo) {\n return <Page.Loading />;\n }\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n >\n <NpsSurvey />\n <PluginsInitializer>\n <DndProvider backend={HTML5Backend}>\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex\n height=\"100dvh\"\n direction={{\n initial: 'column',\n large: 'row',\n }}\n alignItems=\"flex-start\"\n >\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n topMobileNavigation={topMobileNavigation}\n burgerMobileNavigation={burgerMobileNavigation}\n />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n overflow=\"auto\"\n width=\"100%\"\n height={{\n initial: 'auto',\n large: '100%',\n }}\n >\n <UpsellBanner />\n {/*\n * Top-level Suspense only — nested layouts (Settings, Content Manager) use\n * LazyOutlet with useNavigation so in-app navigations show loading in the content\n * column without hiding section side navs.\n */}\n <LazyOutlet suspenseOnly />\n </Flex>\n </Flex>\n </Box>\n </DndProvider>\n </PluginsInitializer>\n </AppInfoProvider>\n );\n};\n\nconst PrivateAdminLayout = () => {\n return (\n <PrivateRoute>\n <AdminLayout />\n </PrivateRoute>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AdminLayout, PrivateAdminLayout };\n"],"names":["version","strapiVersion","packageInfo","AdminLayout","formatMessage","useIntl","userInfo","useAuth","state","user","userId","setUserId","React","useState","showReleaseNotification","useConfiguration","data","appInfo","isLoading","isLoadingAppInfo","useInformationQuery","tagName","setTagName","useEffect","fetch","then","res","ok","response","json","tag_name","Error","catch","hashAdminUserEmail","id","trackUsage","useTracking","isLoadingMenu","generalSectionLinks","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","useMenu","checkLatestStrapiVersion","currentEnvironment","getAllWidgets","useStrapiApp","widgets","getAll","projectId","registeredWidgets","map","widget","uid","_jsx","Page","Loading","_jsxs","AppInfoProvider","latestStrapiReleaseTag","shouldUpdateStrapi","NpsSurvey","PluginsInitializer","DndProvider","backend","HTML5Backend","Box","background","SkipToContent","defaultMessage","Flex","height","direction","initial","large","alignItems","LeftMenu","flex","overflow","width","UpsellBanner","LazyOutlet","suspenseOnly","PrivateAdminLayout","PrivateRoute","currentPackageVersion","latestPublishedVersion","valid","lt"],"mappings":"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"}
@@ -60,7 +60,7 @@ const AdminLayout = ()=>{
60
60
  userInfo
61
61
  ]);
62
62
  const { trackUsage } = useTracking();
63
- const { isLoading: isLoadingMenu, generalSectionLinks, pluginsSectionLinks, topMobileNavigation, burgerMobileNavigation } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName));
63
+ const { isLoading: isLoadingMenu, generalSectionLinks, pluginsSectionLinks, topMobileNavigation, burgerMobileNavigation } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName), appInfo?.currentEnvironment);
64
64
  const getAllWidgets = useStrapiApp('TrackingProvider', (state)=>state.widgets.getAll);
65
65
  const projectId = appInfo?.projectId;
66
66
  React.useEffect(()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticatedLayout.mjs","sources":["../../../../../admin/src/layouts/AuthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport packageInfo from '@strapi/admin/package.json';\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n\nimport { LazyOutlet } from '../components/LazyOutlet';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { NpsSurvey } from '../components/NpsSurvey';\nimport { Page } from '../components/PageHelpers';\nimport { PluginsInitializer } from '../components/PluginsInitializer';\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { UpsellBanner } from '../components/UpsellBanner';\nimport { AppInfoProvider } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useTracking } from '../features/Tracking';\nimport { useMenu } from '../hooks/useMenu';\nimport { useInformationQuery } from '../services/admin';\nimport { hashAdminUserEmail } from '../utils/users';\n\nconst { version: strapiVersion } = packageInfo;\n\nconst AdminLayout = () => {\n const { formatMessage } = useIntl();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n return;\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n const { trackUsage } = useTracking();\n\n const {\n isLoading: isLoadingMenu,\n generalSectionLinks,\n pluginsSectionLinks,\n topMobileNavigation,\n burgerMobileNavigation,\n } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName));\n\n const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);\n const projectId = appInfo?.projectId;\n React.useEffect(() => {\n if (projectId) {\n trackUsage('didAccessAuthenticatedAdministration', {\n registeredWidgets: getAllWidgets().map((widget) => widget.uid),\n projectId,\n });\n }\n }, [projectId, getAllWidgets, trackUsage]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingMenu || isLoadingAppInfo) {\n return <Page.Loading />;\n }\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n >\n <NpsSurvey />\n <PluginsInitializer>\n <DndProvider backend={HTML5Backend}>\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex\n height=\"100dvh\"\n direction={{\n initial: 'column',\n large: 'row',\n }}\n alignItems=\"flex-start\"\n >\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n topMobileNavigation={topMobileNavigation}\n burgerMobileNavigation={burgerMobileNavigation}\n />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n overflow=\"auto\"\n width=\"100%\"\n height={{\n initial: 'auto',\n large: '100%',\n }}\n >\n <UpsellBanner />\n {/*\n * Top-level Suspense only — nested layouts (Settings, Content Manager) use\n * LazyOutlet with useNavigation so in-app navigations show loading in the content\n * column without hiding section side navs.\n */}\n <LazyOutlet suspenseOnly />\n </Flex>\n </Flex>\n </Box>\n </DndProvider>\n </PluginsInitializer>\n </AppInfoProvider>\n );\n};\n\nconst PrivateAdminLayout = () => {\n return (\n <PrivateRoute>\n <AdminLayout />\n </PrivateRoute>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AdminLayout, PrivateAdminLayout };\n"],"names":["version","strapiVersion","packageInfo","AdminLayout","formatMessage","useIntl","userInfo","useAuth","state","user","userId","setUserId","React","useState","showReleaseNotification","useConfiguration","data","appInfo","isLoading","isLoadingAppInfo","useInformationQuery","tagName","setTagName","useEffect","fetch","then","res","ok","response","json","tag_name","Error","catch","hashAdminUserEmail","id","trackUsage","useTracking","isLoadingMenu","generalSectionLinks","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","useMenu","checkLatestStrapiVersion","getAllWidgets","useStrapiApp","widgets","getAll","projectId","registeredWidgets","map","widget","uid","_jsx","Page","Loading","_jsxs","AppInfoProvider","latestStrapiReleaseTag","shouldUpdateStrapi","NpsSurvey","PluginsInitializer","DndProvider","backend","HTML5Backend","Box","background","SkipToContent","defaultMessage","Flex","height","direction","initial","large","alignItems","LeftMenu","flex","overflow","width","UpsellBanner","LazyOutlet","suspenseOnly","PrivateAdminLayout","PrivateRoute","currentPackageVersion","latestPublishedVersion","valid","lt"],"mappings":"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"}
1
+ {"version":3,"file":"AuthenticatedLayout.mjs","sources":["../../../../../admin/src/layouts/AuthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport packageInfo from '@strapi/admin/package.json';\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n\nimport { LazyOutlet } from '../components/LazyOutlet';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { NpsSurvey } from '../components/NpsSurvey';\nimport { Page } from '../components/PageHelpers';\nimport { PluginsInitializer } from '../components/PluginsInitializer';\nimport { PrivateRoute } from '../components/PrivateRoute';\nimport { UpsellBanner } from '../components/UpsellBanner';\nimport { AppInfoProvider } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useTracking } from '../features/Tracking';\nimport { useMenu } from '../hooks/useMenu';\nimport { useInformationQuery } from '../services/admin';\nimport { hashAdminUserEmail } from '../utils/users';\n\nconst { version: strapiVersion } = packageInfo;\n\nconst AdminLayout = () => {\n const { formatMessage } = useIntl();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n return;\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n const { trackUsage } = useTracking();\n\n const {\n isLoading: isLoadingMenu,\n generalSectionLinks,\n pluginsSectionLinks,\n topMobileNavigation,\n burgerMobileNavigation,\n } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName), appInfo?.currentEnvironment);\n\n const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);\n const projectId = appInfo?.projectId;\n React.useEffect(() => {\n if (projectId) {\n trackUsage('didAccessAuthenticatedAdministration', {\n registeredWidgets: getAllWidgets().map((widget) => widget.uid),\n projectId,\n });\n }\n }, [projectId, getAllWidgets, trackUsage]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingMenu || isLoadingAppInfo) {\n return <Page.Loading />;\n }\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n >\n <NpsSurvey />\n <PluginsInitializer>\n <DndProvider backend={HTML5Backend}>\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex\n height=\"100dvh\"\n direction={{\n initial: 'column',\n large: 'row',\n }}\n alignItems=\"flex-start\"\n >\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n topMobileNavigation={topMobileNavigation}\n burgerMobileNavigation={burgerMobileNavigation}\n />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n overflow=\"auto\"\n width=\"100%\"\n height={{\n initial: 'auto',\n large: '100%',\n }}\n >\n <UpsellBanner />\n {/*\n * Top-level Suspense only — nested layouts (Settings, Content Manager) use\n * LazyOutlet with useNavigation so in-app navigations show loading in the content\n * column without hiding section side navs.\n */}\n <LazyOutlet suspenseOnly />\n </Flex>\n </Flex>\n </Box>\n </DndProvider>\n </PluginsInitializer>\n </AppInfoProvider>\n );\n};\n\nconst PrivateAdminLayout = () => {\n return (\n <PrivateRoute>\n <AdminLayout />\n </PrivateRoute>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AdminLayout, PrivateAdminLayout };\n"],"names":["version","strapiVersion","packageInfo","AdminLayout","formatMessage","useIntl","userInfo","useAuth","state","user","userId","setUserId","React","useState","showReleaseNotification","useConfiguration","data","appInfo","isLoading","isLoadingAppInfo","useInformationQuery","tagName","setTagName","useEffect","fetch","then","res","ok","response","json","tag_name","Error","catch","hashAdminUserEmail","id","trackUsage","useTracking","isLoadingMenu","generalSectionLinks","pluginsSectionLinks","topMobileNavigation","burgerMobileNavigation","useMenu","checkLatestStrapiVersion","currentEnvironment","getAllWidgets","useStrapiApp","widgets","getAll","projectId","registeredWidgets","map","widget","uid","_jsx","Page","Loading","_jsxs","AppInfoProvider","latestStrapiReleaseTag","shouldUpdateStrapi","NpsSurvey","PluginsInitializer","DndProvider","backend","HTML5Backend","Box","background","SkipToContent","defaultMessage","Flex","height","direction","initial","large","alignItems","LeftMenu","flex","overflow","width","UpsellBanner","LazyOutlet","suspenseOnly","PrivateAdminLayout","PrivateRoute","currentPackageVersion","latestPublishedVersion","valid","lt"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,EAAEA,OAAAA,EAASC,aAAa,EAAE,GAAGC,WAAAA;AAEnC,MAAMC,WAAAA,GAAc,IAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAWC,OAAAA,CAAQ,kBAAA,EAAoB,CAACC,KAAAA,GAAUA,MAAMC,IAAI,CAAA;AAClE,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAAA,CAAU,GAAGC,MAAMC,QAAQ,EAAA;AAC1C,IAAA,MAAM,EAAEC,uBAAuB,EAAE,GAAGC,gBAAAA,CAAiB,kBAAA,CAAA;AAErD,IAAA,MAAM,EAAEC,IAAAA,EAAMC,OAAO,EAAEC,SAAAA,EAAWC,gBAAgB,EAAE,GAAGC,mBAAAA,EAAAA;AACvD,IAAA,MAAM,CAACC,OAAAA,EAASC,UAAAA,CAAW,GAAGV,KAAAA,CAAMC,QAAQ,CAASZ,aAAAA,CAAAA;AAErDW,IAAAA,KAAAA,CAAMW,SAAS,CAAC,IAAA;AACd,QAAA,IAAIT,uBAAAA,EAAyB;YAC3BU,KAAAA,CAAM,4DAAA,CAAA,CACHC,IAAI,CAAC,OAAOC,GAAAA,GAAAA;gBACX,IAAI,CAACA,GAAAA,CAAIC,EAAE,EAAE;AACX,oBAAA;AACF,gBAAA;gBAEA,MAAMC,QAAAA,GAAY,MAAMF,GAAAA,CAAIG,IAAI,EAAA;gBAEhC,IAAI,CAACD,QAAAA,CAASE,QAAQ,EAAE;AACtB,oBAAA,MAAM,IAAIC,KAAAA,EAAAA;AACZ,gBAAA;AAEAT,gBAAAA,UAAAA,CAAWM,SAASE,QAAQ,CAAA;AAC9B,YAAA,CAAA,CAAA,CACCE,KAAK,CAAC,IAAA;AACL;;cAGF,CAAA,CAAA;AACJ,QAAA;IACF,CAAA,EAAG;AAAClB,QAAAA;AAAwB,KAAA,CAAA;AAE5BF,IAAAA,KAAAA,CAAMW,SAAS,CAAC,IAAA;QACdU,kBAAAA,CAAmB3B,QAAAA,CAAAA,CAAUmB,IAAI,CAAC,CAACS,EAAAA,GAAAA;AACjC,YAAA,IAAIA,EAAAA,EAAI;gBACNvB,SAAAA,CAAUuB,EAAAA,CAAAA;AACZ,YAAA;AACF,QAAA,CAAA,CAAA;IACF,CAAA,EAAG;AAAC5B,QAAAA;AAAS,KAAA,CAAA;IAEb,MAAM,EAAE6B,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AAEvB,IAAA,MAAM,EACJlB,SAAAA,EAAWmB,aAAa,EACxBC,mBAAmB,EACnBC,mBAAmB,EACnBC,mBAAmB,EACnBC,sBAAsB,EACvB,GAAGC,QAAQC,wBAAAA,CAAyB1C,aAAAA,EAAeoB,UAAUJ,OAAAA,EAAS2B,kBAAAA,CAAAA;IAEvE,MAAMC,aAAAA,GAAgBC,aAAa,kBAAA,EAAoB,CAACtC,QAAUA,KAAAA,CAAMuC,OAAO,CAACC,MAAM,CAAA;AACtF,IAAA,MAAMC,YAAYhC,OAAAA,EAASgC,SAAAA;AAC3BrC,IAAAA,KAAAA,CAAMW,SAAS,CAAC,IAAA;AACd,QAAA,IAAI0B,SAAAA,EAAW;AACbd,YAAAA,UAAAA,CAAW,sCAAA,EAAwC;AACjDe,gBAAAA,iBAAAA,EAAmBL,gBAAgBM,GAAG,CAAC,CAACC,MAAAA,GAAWA,OAAOC,GAAG,CAAA;AAC7DJ,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,SAAAA;AAAWJ,QAAAA,aAAAA;AAAeV,QAAAA;AAAW,KAAA,CAAA;;;AAIzC,IAAA,IAAIE,iBAAiBlB,gBAAAA,EAAkB;QACrC,qBAAOmC,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;AAEA,IAAA,qBACEC,IAAA,CAACC,eAAAA,EAAAA;AACE,QAAA,GAAGzC,OAAO;QACXP,MAAAA,EAAQA,MAAAA;QACRiD,sBAAAA,EAAwBtC,OAAAA;AACxBuC,QAAAA,kBAAAA,EAAoBjB,yBAAyB1C,aAAAA,EAAeoB,OAAAA,CAAAA;;0BAE5DiC,GAAA,CAACO,SAAAA,EAAAA,EAAAA,CAAAA;0BACDP,GAAA,CAACQ,kBAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAR,GAAA,CAACS,WAAAA,EAAAA;oBAAYC,OAAAA,EAASC,YAAAA;AACpB,oBAAA,QAAA,gBAAAR,IAAA,CAACS,GAAAA,EAAAA;wBAAIC,UAAAA,EAAW,YAAA;;0CACdb,GAAA,CAACc,aAAAA,EAAAA;0CACEhE,aAAAA,CAAc;oCAAE8B,EAAAA,EAAI,eAAA;oCAAiBmC,cAAAA,EAAgB;AAAkB,iCAAA;;0CAE1EZ,IAAA,CAACa,IAAAA,EAAAA;gCACCC,MAAAA,EAAO,QAAA;gCACPC,SAAAA,EAAW;oCACTC,OAAAA,EAAS,QAAA;oCACTC,KAAAA,EAAO;AACT,iCAAA;gCACAC,UAAAA,EAAW,YAAA;;kDAEXrB,GAAA,CAACsB,QAAAA,EAAAA;wCACCtC,mBAAAA,EAAqBA,mBAAAA;wCACrBC,mBAAAA,EAAqBA,mBAAAA;wCACrBC,mBAAAA,EAAqBA,mBAAAA;wCACrBC,sBAAAA,EAAwBA;;kDAE1BgB,IAAA,CAACa,IAAAA,EAAAA;wCACCE,SAAAA,EAAU,QAAA;wCACVG,UAAAA,EAAW,SAAA;wCACXE,IAAAA,EAAM,CAAA;wCACNC,QAAAA,EAAS,MAAA;wCACTC,KAAAA,EAAM,MAAA;wCACNR,MAAAA,EAAQ;4CACNE,OAAAA,EAAS,MAAA;4CACTC,KAAAA,EAAO;AACT,yCAAA;;0DAEApB,GAAA,CAAC0B,YAAAA,EAAAA,EAAAA,CAAAA;0DAMD1B,GAAA,CAAC2B,UAAAA,EAAAA;gDAAWC,YAAY,EAAA;;;;;;;;;;;;AAQxC;AAEA,MAAMC,kBAAAA,GAAqB,IAAA;AACzB,IAAA,qBACE7B,GAAA,CAAC8B,YAAAA,EAAAA;AACC,QAAA,QAAA,gBAAA9B,GAAA,CAACnD,WAAAA,EAAAA,EAAAA;;AAGP;AAEA,MAAMwC,wBAAAA,GAA2B,CAC/B0C,qBAAAA,EACAC,sBAAAA,GAAiC,EAAE,GAAA;AAEnC,IAAA,IAAI,CAACC,KAAAA,CAAMF,qBAAAA,CAAAA,IAA0B,CAACE,MAAMD,sBAAAA,CAAAA,EAAyB;QACnE,OAAO,KAAA;AACT,IAAA;AAEA,IAAA,OAAOE,GAAGH,qBAAAA,EAAuBC,sBAAAA,CAAAA;AACnC,CAAA;;;;"}
@@ -4,17 +4,17 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  require('react');
5
5
  var designSystem = require('@strapi/design-system');
6
6
  var reactIntl = require('react-intl');
7
- var styled = require('styled-components');
7
+ var styledComponents = require('styled-components');
8
8
  var theme = require('../constants/theme.js');
9
9
  var hooks = require('../core/store/hooks.js');
10
10
  var reducer = require('../reducer.js');
11
11
 
12
- const Wrapper = styled.styled(designSystem.Box)`
12
+ const Wrapper = styledComponents.styled(designSystem.Box)`
13
13
  margin: 0 auto;
14
14
  width: 100%;
15
15
  max-width: 55.2rem;
16
16
  `;
17
- const Column = styled.styled(designSystem.Flex)`
17
+ const Column = styledComponents.styled(designSystem.Flex)`
18
18
  flex-direction: column;
19
19
  `;
20
20
  const LocaleToggle = ()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"UnauthenticatedLayout.js","sources":["../../../../../admin/src/layouts/UnauthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { RESPONSIVE_DEFAULT_SPACING } from '../constants/theme';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { setLocale } from '../reducer';\n\nconst Wrapper = styled<BoxComponent>(Box)`\n margin: 0 auto;\n width: 100%;\n max-width: 55.2rem;\n`;\n\nexport const Column = styled<FlexComponent>(Flex)`\n flex-direction: column;\n`;\n\nconst LocaleToggle = () => {\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const dispatch = useTypedDispatch();\n const { formatMessage, locale } = useIntl();\n\n return (\n <SingleSelect\n aria-label={formatMessage({\n id: 'global.localeToggle.label',\n defaultMessage: 'Select interface language',\n })}\n value={locale}\n onChange={(language) => {\n dispatch(setLocale(language as string));\n }}\n >\n {Object.entries(localeNames).map(([language, name]) => (\n <SingleSelectOption key={language} value={language}>\n {name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n};\n\ninterface LayoutContentProps {\n children: React.ReactNode;\n}\n\nexport const LayoutContent = ({ children }: LayoutContentProps) => (\n <Wrapper\n shadow=\"tableShadow\"\n hasRadius\n paddingTop={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={RESPONSIVE_DEFAULT_SPACING}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n background=\"neutral0\"\n >\n {children}\n </Wrapper>\n);\n\ninterface UnauthenticatedLayoutProps {\n children: React.ReactNode;\n}\n\nexport const UnauthenticatedLayout = ({ children }: UnauthenticatedLayoutProps) => {\n return (\n <div>\n <Flex tag=\"header\" justifyContent=\"flex-end\">\n <Box paddingTop={6} paddingRight={RESPONSIVE_DEFAULT_SPACING}>\n <LocaleToggle />\n </Box>\n </Flex>\n <Box\n paddingTop={2}\n paddingBottom={RESPONSIVE_DEFAULT_SPACING}\n marginLeft={RESPONSIVE_DEFAULT_SPACING}\n marginRight={RESPONSIVE_DEFAULT_SPACING}\n >\n {children}\n </Box>\n </div>\n );\n};\n"],"names":["Wrapper","styled","Box","Column","Flex","LocaleToggle","localeNames","useTypedSelector","state","admin_app","language","dispatch","useTypedDispatch","formatMessage","locale","useIntl","_jsx","SingleSelect","aria-label","id","defaultMessage","value","onChange","setLocale","Object","entries","map","name","SingleSelectOption","LayoutContent","children","shadow","hasRadius","paddingTop","RESPONSIVE_DEFAULT_SPACING","paddingBottom","paddingLeft","paddingRight","background","UnauthenticatedLayout","_jsxs","div","tag","justifyContent","marginLeft","marginRight"],"mappings":";;;;;;;;;;;AAiBA,MAAMA,OAAAA,GAAUC,aAAAA,CAAqBC,gBAAAA,CAAI;;;;AAIzC,CAAC;AAEM,MAAMC,MAAAA,GAASF,aAAAA,CAAsBG,iBAAAA,CAAK;;AAEjD;AAEA,MAAMC,YAAAA,GAAe,IAAA;IACnB,MAAMC,WAAAA,GAAcC,uBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACC,QAAQ,CAACJ,WAAW,CAAA;AACpF,IAAA,MAAMK,QAAAA,GAAWC,sBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGC,iBAAAA,EAAAA;AAElC,IAAA,qBACEC,cAAA,CAACC,yBAAAA,EAAAA;AACCC,QAAAA,YAAAA,EAAYL,aAAAA,CAAc;YACxBM,EAAAA,EAAI,2BAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAC,KAAAA,EAAOP,MAAAA;AACPQ,QAAAA,QAAAA,EAAU,CAACZ,QAAAA,GAAAA;AACTC,YAAAA,QAAAA,CAASY,iBAAAA,CAAUb,QAAAA,CAAAA,CAAAA;AACrB,QAAA,CAAA;kBAECc,MAAAA,CAAOC,OAAO,CAACnB,WAAAA,CAAAA,CAAaoB,GAAG,CAAC,CAAC,CAAChB,QAAAA,EAAUiB,IAAAA,CAAK,iBAChDX,cAAA,CAACY,+BAAAA,EAAAA;gBAAkCP,KAAAA,EAAOX,QAAAA;AACvCiB,gBAAAA,QAAAA,EAAAA;AADsBjB,aAAAA,EAAAA,QAAAA,CAAAA;;AAMjC,CAAA;MAMamB,aAAAA,GAAgB,CAAC,EAAEC,QAAQ,EAAsB,iBAC5Dd,cAAA,CAAChB,OAAAA,EAAAA;QACC+B,MAAAA,EAAO,aAAA;QACPC,SAAS,EAAA,IAAA;QACTC,UAAAA,EAAYC,gCAAAA;QACZC,aAAAA,EAAeD,gCAAAA;QACfE,WAAAA,EAAaF,gCAAAA;QACbG,YAAAA,EAAcH,gCAAAA;QACdI,UAAAA,EAAW,UAAA;AAEVR,QAAAA,QAAAA,EAAAA;AAEH,KAAA;AAMK,MAAMS,qBAAAA,GAAwB,CAAC,EAAET,QAAQ,EAA8B,GAAA;AAC5E,IAAA,qBACEU,eAAA,CAACC,KAAAA,EAAAA;;0BACCzB,cAAA,CAACZ,iBAAAA,EAAAA;gBAAKsC,GAAAA,EAAI,QAAA;gBAASC,cAAAA,EAAe,UAAA;AAChC,gBAAA,QAAA,gBAAA3B,cAAA,CAACd,gBAAAA,EAAAA;oBAAI+B,UAAAA,EAAY,CAAA;oBAAGI,YAAAA,EAAcH,gCAAAA;AAChC,oBAAA,QAAA,gBAAAlB,cAAA,CAACX,YAAAA,EAAAA,EAAAA;;;0BAGLW,cAAA,CAACd,gBAAAA,EAAAA;gBACC+B,UAAAA,EAAY,CAAA;gBACZE,aAAAA,EAAeD,gCAAAA;gBACfU,UAAAA,EAAYV,gCAAAA;gBACZW,WAAAA,EAAaX,gCAAAA;AAEZJ,gBAAAA,QAAAA,EAAAA;;;;AAIT;;;;;;"}
1
+ {"version":3,"file":"UnauthenticatedLayout.js","sources":["../../../../../admin/src/layouts/UnauthenticatedLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { RESPONSIVE_DEFAULT_SPACING } from '../constants/theme';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { setLocale } from '../reducer';\n\nconst Wrapper = styled<BoxComponent>(Box)`\n margin: 0 auto;\n width: 100%;\n max-width: 55.2rem;\n`;\n\nexport const Column = styled<FlexComponent>(Flex)`\n flex-direction: column;\n`;\n\nconst LocaleToggle = () => {\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const dispatch = useTypedDispatch();\n const { formatMessage, locale } = useIntl();\n\n return (\n <SingleSelect\n aria-label={formatMessage({\n id: 'global.localeToggle.label',\n defaultMessage: 'Select interface language',\n })}\n value={locale}\n onChange={(language) => {\n dispatch(setLocale(language as string));\n }}\n >\n {Object.entries(localeNames).map(([language, name]) => (\n <SingleSelectOption key={language} value={language}>\n {name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n );\n};\n\ninterface LayoutContentProps {\n children: React.ReactNode;\n}\n\nexport const LayoutContent = ({ children }: LayoutContentProps) => (\n <Wrapper\n shadow=\"tableShadow\"\n hasRadius\n paddingTop={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={RESPONSIVE_DEFAULT_SPACING}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n background=\"neutral0\"\n >\n {children}\n </Wrapper>\n);\n\ninterface UnauthenticatedLayoutProps {\n children: React.ReactNode;\n}\n\nexport const UnauthenticatedLayout = ({ children }: UnauthenticatedLayoutProps) => {\n return (\n <div>\n <Flex tag=\"header\" justifyContent=\"flex-end\">\n <Box paddingTop={6} paddingRight={RESPONSIVE_DEFAULT_SPACING}>\n <LocaleToggle />\n </Box>\n </Flex>\n <Box\n paddingTop={2}\n paddingBottom={RESPONSIVE_DEFAULT_SPACING}\n marginLeft={RESPONSIVE_DEFAULT_SPACING}\n marginRight={RESPONSIVE_DEFAULT_SPACING}\n >\n {children}\n </Box>\n </div>\n );\n};\n"],"names":["Wrapper","styled","Box","Column","Flex","LocaleToggle","localeNames","useTypedSelector","state","admin_app","language","dispatch","useTypedDispatch","formatMessage","locale","useIntl","_jsx","SingleSelect","aria-label","id","defaultMessage","value","onChange","setLocale","Object","entries","map","name","SingleSelectOption","LayoutContent","children","shadow","hasRadius","paddingTop","RESPONSIVE_DEFAULT_SPACING","paddingBottom","paddingLeft","paddingRight","background","UnauthenticatedLayout","_jsxs","div","tag","justifyContent","marginLeft","marginRight"],"mappings":";;;;;;;;;;;AAiBA,MAAMA,OAAAA,GAAUC,uBAAAA,CAAqBC,gBAAAA,CAAI;;;;AAIzC,CAAC;AAEM,MAAMC,MAAAA,GAASF,uBAAAA,CAAsBG,iBAAAA,CAAK;;AAEjD;AAEA,MAAMC,YAAAA,GAAe,IAAA;IACnB,MAAMC,WAAAA,GAAcC,uBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACC,QAAQ,CAACJ,WAAW,CAAA;AACpF,IAAA,MAAMK,QAAAA,GAAWC,sBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGC,iBAAAA,EAAAA;AAElC,IAAA,qBACEC,cAAA,CAACC,yBAAAA,EAAAA;AACCC,QAAAA,YAAAA,EAAYL,aAAAA,CAAc;YACxBM,EAAAA,EAAI,2BAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAC,KAAAA,EAAOP,MAAAA;AACPQ,QAAAA,QAAAA,EAAU,CAACZ,QAAAA,GAAAA;AACTC,YAAAA,QAAAA,CAASY,iBAAAA,CAAUb,QAAAA,CAAAA,CAAAA;AACrB,QAAA,CAAA;kBAECc,MAAAA,CAAOC,OAAO,CAACnB,WAAAA,CAAAA,CAAaoB,GAAG,CAAC,CAAC,CAAChB,QAAAA,EAAUiB,IAAAA,CAAK,iBAChDX,cAAA,CAACY,+BAAAA,EAAAA;gBAAkCP,KAAAA,EAAOX,QAAAA;AACvCiB,gBAAAA,QAAAA,EAAAA;AADsBjB,aAAAA,EAAAA,QAAAA,CAAAA;;AAMjC,CAAA;MAMamB,aAAAA,GAAgB,CAAC,EAAEC,QAAQ,EAAsB,iBAC5Dd,cAAA,CAAChB,OAAAA,EAAAA;QACC+B,MAAAA,EAAO,aAAA;QACPC,SAAS,EAAA,IAAA;QACTC,UAAAA,EAAYC,gCAAAA;QACZC,aAAAA,EAAeD,gCAAAA;QACfE,WAAAA,EAAaF,gCAAAA;QACbG,YAAAA,EAAcH,gCAAAA;QACdI,UAAAA,EAAW,UAAA;AAEVR,QAAAA,QAAAA,EAAAA;AAEH,KAAA;AAMK,MAAMS,qBAAAA,GAAwB,CAAC,EAAET,QAAQ,EAA8B,GAAA;AAC5E,IAAA,qBACEU,eAAA,CAACC,KAAAA,EAAAA;;0BACCzB,cAAA,CAACZ,iBAAAA,EAAAA;gBAAKsC,GAAAA,EAAI,QAAA;gBAASC,cAAAA,EAAe,UAAA;AAChC,gBAAA,QAAA,gBAAA3B,cAAA,CAACd,gBAAAA,EAAAA;oBAAI+B,UAAAA,EAAY,CAAA;oBAAGI,YAAAA,EAAcH,gCAAAA;AAChC,oBAAA,QAAA,gBAAAlB,cAAA,CAACX,YAAAA,EAAAA,EAAAA;;;0BAGLW,cAAA,CAACd,gBAAAA,EAAAA;gBACC+B,UAAAA,EAAY,CAAA;gBACZE,aAAAA,EAAeD,gCAAAA;gBACfU,UAAAA,EAAYV,gCAAAA;gBACZW,WAAAA,EAAaX,gCAAAA;AAEZJ,gBAAAA,QAAAA,EAAAA;;;;AAIT;;;;;;"}
@@ -6,7 +6,7 @@ var designSystem = require('@strapi/design-system');
6
6
  var omit = require('lodash/omit');
7
7
  var reactIntl = require('react-intl');
8
8
  var reactRouterDom = require('react-router-dom');
9
- var styled = require('styled-components');
9
+ var styledComponents = require('styled-components');
10
10
  var yup = require('yup');
11
11
  var Form = require('../../../components/Form.js');
12
12
  var Renderer = require('../../../components/FormInputs/Renderer.js');
@@ -174,6 +174,12 @@ const REGISTER_ADMIN_SCHEMA = yup__namespace.object().shape({
174
174
  defaultMessage: 'Email is required'
175
175
  }).nullable()
176
176
  });
177
+ const isRecord = (value)=>{
178
+ return typeof value === 'object' && !Array.isArray(value) && value !== null;
179
+ };
180
+ const isMessageDescriptor = (value)=>{
181
+ return isRecord(value) && typeof value.id === 'string' && typeof value.defaultMessage === 'string';
182
+ };
177
183
  const Register = ({ hasAdmin })=>{
178
184
  const { toggleNotification } = Notifications.useNotification();
179
185
  const navigate = reactRouterDom.useNavigate();
@@ -362,24 +368,26 @@ const Register = ({ hasAdmin })=>{
362
368
  if (err instanceof yup.ValidationError) {
363
369
  const formatDescriptor = (msg)=>{
364
370
  try {
365
- if (!msg) return '';
371
+ if (msg === undefined || msg === null) return '';
366
372
  if (typeof msg === 'string') return msg;
367
373
  // Direct descriptor
368
- if ('id' in msg && 'defaultMessage' in msg) return formatMessage(msg);
374
+ if (isMessageDescriptor(msg)) return formatMessage(msg);
369
375
  // Wrapped descriptor: { message: { id, defaultMessage } }
370
- if (msg.message && typeof msg.message === 'object' && 'id' in msg.message) {
376
+ if (isRecord(msg) && isMessageDescriptor(msg.message)) {
371
377
  return formatMessage(msg.message);
372
378
  }
373
379
  // errors array: [{ id, defaultMessage }]
374
- if (Array.isArray(msg.errors) && msg.errors.length > 0) {
380
+ if (isRecord(msg) && Array.isArray(msg.errors) && msg.errors.length > 0) {
375
381
  const first = msg.errors[0];
376
382
  if (typeof first === 'string') return first;
377
- if (first && typeof first === 'object' && 'id' in first) return formatMessage(first);
383
+ if (isMessageDescriptor(first)) return formatMessage(first);
378
384
  }
379
385
  // fallback to defaultMessage if present
380
- if ('defaultMessage' in msg) return msg.defaultMessage;
386
+ if (isRecord(msg) && typeof msg.defaultMessage === 'string') {
387
+ return msg.defaultMessage;
388
+ }
381
389
  return String(msg);
382
- } catch (e) {
390
+ } catch {
383
391
  return String(msg);
384
392
  }
385
393
  };
@@ -542,7 +550,7 @@ const Register = ({ hasAdmin })=>{
542
550
  return acc;
543
551
  }, {});
544
552
  }
545
- const A = styled.styled.a`
553
+ const A = styledComponents.styled.a`
546
554
  color: ${({ theme })=>theme.colors.primary600};
547
555
  `;
548
556