@strapi/admin 5.58.0 → 5.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  2. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  3. package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
  4. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
  6. package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +57 -12
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +57 -12
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +3 -1
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +3 -1
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
  16. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
  18. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/LeftMenu.js +5 -1
  20. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  21. package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
  22. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/PageHelpers.js +2 -1
  24. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  25. package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
  26. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  27. package/dist/admin/admin/src/components/Pagination.js +7 -6
  28. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  29. package/dist/admin/admin/src/components/Pagination.mjs +7 -6
  30. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/RelativeTime.js +2 -1
  32. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  33. package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
  34. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/SubNav.js +6 -12
  36. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  37. package/dist/admin/admin/src/components/SubNav.mjs +7 -13
  38. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/Table.js +3 -1
  40. package/dist/admin/admin/src/components/Table.js.map +1 -1
  41. package/dist/admin/admin/src/components/Table.mjs +3 -1
  42. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  43. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  44. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  46. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  47. package/dist/admin/admin/src/constants.js.map +1 -1
  48. package/dist/admin/admin/src/constants.mjs.map +1 -1
  49. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  50. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  51. package/dist/admin/admin/src/features/Auth.js +2 -1
  52. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  53. package/dist/admin/admin/src/features/Auth.mjs +2 -1
  54. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  55. package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
  56. package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
  57. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  58. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  60. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
  62. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
  64. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  66. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
  68. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
  70. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
  72. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
  74. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
  76. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
  78. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
  80. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
  82. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
  84. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
  86. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
  88. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
  90. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -2
  92. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -2
  94. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -1
  98. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -1
  99. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
  100. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  101. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
  102. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
  104. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  105. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
  106. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
  108. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  109. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
  110. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  111. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
  112. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
  114. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  115. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
  116. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  117. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
  118. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  119. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
  120. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  121. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
  122. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
  126. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
  128. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  132. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
  136. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
  138. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
  140. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
  142. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  145. package/dist/admin/admin/src/router.js.map +1 -1
  146. package/dist/admin/admin/src/router.mjs.map +1 -1
  147. package/dist/admin/admin/src/services/users.js.map +1 -1
  148. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  149. package/dist/admin/admin/src/translations/eu.json.js +1 -1
  150. package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
  151. package/dist/admin/admin/src/utils/cookies.js +7 -6
  152. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  153. package/dist/admin/admin/src/utils/cookies.mjs +7 -6
  154. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  155. package/dist/admin/admin/tests/utils.js +2 -1
  156. package/dist/admin/admin/tests/utils.js.map +1 -1
  157. package/dist/admin/admin/tests/utils.mjs +2 -1
  158. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  159. package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
  160. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
  161. package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
  162. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
  163. package/dist/admin/shared/utils/get-project-type.js +3 -3
  164. package/dist/admin/shared/utils/get-project-type.js.map +1 -1
  165. package/dist/admin/shared/utils/get-project-type.mjs +3 -3
  166. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -1
  167. package/dist/admin/src/components/Filters.d.ts +1 -1
  168. package/dist/admin/src/components/Form.d.ts +1 -1
  169. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
  170. package/dist/admin/src/utils/cookies.d.ts +7 -6
  171. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  172. package/dist/ee/server/src/validation/role.d.ts.map +1 -1
  173. package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
  174. package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
  175. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
  176. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
  177. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  178. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  179. package/dist/server/ee/server/src/validation/role.js +4 -2
  180. package/dist/server/ee/server/src/validation/role.js.map +1 -1
  181. package/dist/server/ee/server/src/validation/role.mjs +4 -2
  182. package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
  183. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  184. package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
  185. package/dist/server/server/src/controllers/admin.js +11 -12
  186. package/dist/server/server/src/controllers/admin.js.map +1 -1
  187. package/dist/server/server/src/controllers/admin.mjs +11 -12
  188. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  189. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  190. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  191. package/dist/server/server/src/services/api-token.js +4 -8
  192. package/dist/server/server/src/services/api-token.js.map +1 -1
  193. package/dist/server/server/src/services/api-token.mjs +4 -8
  194. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  195. package/dist/server/server/src/services/constants.js +4 -0
  196. package/dist/server/server/src/services/constants.js.map +1 -1
  197. package/dist/server/server/src/services/constants.mjs +4 -0
  198. package/dist/server/server/src/services/constants.mjs.map +1 -1
  199. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
  200. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
  201. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  202. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  203. package/dist/server/server/src/services/role.js +8 -5
  204. package/dist/server/server/src/services/role.js.map +1 -1
  205. package/dist/server/server/src/services/role.mjs +8 -5
  206. package/dist/server/server/src/services/role.mjs.map +1 -1
  207. package/dist/server/server/src/validation/admin-tokens.js +4 -4
  208. package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
  209. package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
  210. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
  211. package/dist/server/server/src/validation/api-tokens.js +4 -4
  212. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  213. package/dist/server/server/src/validation/api-tokens.mjs +4 -4
  214. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  215. package/dist/server/server/src/validation/role.js +6 -4
  216. package/dist/server/server/src/validation/role.js.map +1 -1
  217. package/dist/server/server/src/validation/role.mjs +6 -4
  218. package/dist/server/server/src/validation/role.mjs.map +1 -1
  219. package/dist/server/server/src/validation/transfer/token.js +4 -4
  220. package/dist/server/server/src/validation/transfer/token.js.map +1 -1
  221. package/dist/server/server/src/validation/transfer/token.mjs +4 -4
  222. package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
  223. package/dist/server/shared/utils/auth-cookie-path.js +13 -10
  224. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
  225. package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
  226. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
  227. package/dist/server/shared/utils/get-project-type.js +3 -3
  228. package/dist/server/shared/utils/get-project-type.js.map +1 -1
  229. package/dist/server/shared/utils/get-project-type.mjs +3 -3
  230. package/dist/server/shared/utils/get-project-type.mjs.map +1 -1
  231. package/dist/server/shared/utils/session-auth.js +70 -3
  232. package/dist/server/shared/utils/session-auth.js.map +1 -1
  233. package/dist/server/shared/utils/session-auth.mjs +70 -4
  234. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  235. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  236. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  237. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  238. package/dist/server/src/services/constants.d.ts +2 -0
  239. package/dist/server/src/services/constants.d.ts.map +1 -1
  240. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
  241. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  242. package/dist/server/src/services/role.d.ts.map +1 -1
  243. package/dist/server/src/validation/role.d.ts.map +1 -1
  244. package/dist/shared/contracts/transfer.d.ts.map +1 -1
  245. package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
  246. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
  247. package/dist/shared/utils/session-auth.d.ts +16 -0
  248. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  249. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport {\n deepEncodeQueryValues,\n useQueryParams,\n withEncodedUserParams,\n} from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\n/**\n * Carries the position in the `$and` array so we replace that exact entry, not every entry\n * sharing the same `(name, operator, value)`.\n */\ninterface EditingFilter extends FilterFormData {\n index: number;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n editingFilter: EditingFilter | null;\n setEditingFilter: (filter: EditingFilter | null) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\nconst getFilterDetails = (\n filterEntry: Record<string, unknown>,\n options: Filters.Filter[]\n): { name: string; operator: string; value: unknown } | null => {\n const [name] = Object.keys(filterEntry);\n const option = options.find((o) => o.name === name);\n if (!option) {\n return null;\n }\n\n const operatorObj =\n option.type === 'relation'\n ? (filterEntry[name] as Record<string, unknown>)?.[option.mainField?.name ?? 'id']\n : filterEntry[name];\n\n if (typeof operatorObj !== 'object' || operatorObj === null) {\n return null;\n }\n\n const [operator] = Object.keys(operatorObj as Record<string, unknown>);\n if (!operator) {\n return null;\n }\n\n return { name, operator, value: (operatorObj as Record<string, unknown>)[operator] };\n};\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options'>>,\n Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const [editingFilter, setEditingFilter] = React.useState<EditingFilter | null>(null);\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n React.useEffect(() => {\n if (!open) {\n setEditingFilter(null);\n }\n }, [open]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n editingFilter={editingFilter}\n setEditingFilter={setEditingFilter}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const editingFilter = useFilters('Popover', ({ editingFilter }) => editingFilter);\n const setEditingFilter = useFilters('Popover', ({ setEditingFilter }) => setEditingFilter);\n\n const initialValues = React.useMemo(() => {\n return editingFilter ?? { name: options[0]?.name, filter: BASE_FILTERS[0].value };\n }, [editingFilter, options]);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter) ? 'true' : (data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterEntry = {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n };\n\n const existingFilters = query.filters?.$and ?? [];\n\n const newFilterQuery = editingFilter\n ? {\n ...query.filters,\n $and: existingFilters.map((filter, i) =>\n i === editingFilter.index ? newFilterEntry : filter\n ),\n }\n : {\n ...query.filters,\n $and: [...existingFilters, newFilterEntry],\n };\n\n setQuery(\n withEncodedUserParams(query, { filters: deepEncodeQueryValues(newFilterQuery), page: 1 }),\n 'push',\n true\n );\n setOpen(false);\n setEditingFilter(null);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={initialValues}\n onSubmit={handleSubmit}\n key={\n editingFilter\n ? `edit-${editingFilter.index}-${editingFilter.name}-${editingFilter.filter}-${editingFilter.value ?? 'empty'}`\n : 'create'\n }\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n !FILTERS_WITH_NO_VALUE.includes(formValues.filter) ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {editingFilter\n ? formatMessage({\n id: 'app.utils.update-filter',\n defaultMessage: 'Update filter',\n })\n : formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n /**\n * Removed by position: identical filters are a legal query, so matching on\n * `(name, operator, value)` would drop every copy at once.\n */\n const handleRemove = (index: number) => {\n const nextFilters = (query?.filters?.$and ?? []).filter((_, i) => i !== index);\n\n setQuery(\n withEncodedUserParams(query, {\n filters: deepEncodeQueryValues({ $and: nextFilters }),\n page: 1,\n })\n );\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter, index) => {\n const details = getFilterDetails(queryFilter, options);\n if (!details || typeof details.value === 'object') {\n return null;\n }\n\n const filter = options.find(({ name }) => name === details.name);\n if (!filter) {\n return null;\n }\n /**\n * `index` is the position in the raw `$and` array — entries skipped above still count.\n * Never cache it: `qs` re-indexes on removal, so dropping entry 0 of [0, 1, 2]\n * leaves [0, 1] and any held index goes stale.\n */\n return (\n <AttributeTag\n key={`${index}-${details.name}-${details.operator}-${details.value}`}\n {...filter}\n index={index}\n onRemove={handleRemove}\n operator={details.operator}\n value={String(details.value)}\n />\n );\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n /**\n * Position in the `$and` array. An explicit prop rather than a closure bound at the call\n * site, so it stays part of the props comparison if this ever gets memoised.\n */\n index: number;\n onRemove: (index: number) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n index,\n input,\n label,\n mainField,\n name,\n onRemove,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n const setOpen = useFilters('AttributeTag', ({ setOpen }) => setOpen);\n const setEditingFilter = useFilters('AttributeTag', ({ setEditingFilter }) => setEditingFilter);\n\n const handleEdit = () => {\n setEditingFilter({\n name,\n filter: operator,\n index,\n value: FILTERS_WITH_NO_VALUE.includes(operator) ? undefined : value,\n });\n setOpen(true);\n };\n\n const handleRemove = () => {\n onRemove(index);\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const operatorLabel = formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n });\n\n const content = FILTERS_WITH_NO_VALUE.includes(operator)\n ? `${label} ${operatorLabel}`\n : `${label} ${operatorLabel} ${formattedValue}`;\n\n return (\n <Tag padding={1} onClick={handleRemove} icon={<Cross />} label={content}>\n <Box tag=\"span\" cursor=\"pointer\" onClick={handleEdit}>\n {content}\n </Box>\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n _q?: string;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","getFilterDetails","filterEntry","options","name","Object","keys","option","find","o","operatorObj","type","mainField","operator","value","Root","children","disabled","onChange","onOpenChange","open","openProp","defaultOpen","restProps","editingFilter","setEditingFilter","React","useState","handleChange","data","setOpen","useControllableState","prop","defaultProp","useEffect","_jsx","Popover","Trigger","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","initialValues","useMemo","filter","BASE_FILTERS","length","handleSubmit","FILTERS_WITH_NO_VALUE","includes","fieldOptions","operatorValuePairing","newFilterEntry","existingFilters","filters","$and","newFilterQuery","map","i","index","withEncodedUserParams","deepEncodeQueryValues","page","Content","style","Box","padding","Form","method","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","placeholder","operators","getFilterList","opt","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleRemove","nextFilters","_","_Fragment","queryFilter","details","AttributeTag","onRemove","String","formatDate","formatTime","formatNumber","handleEdit","undefined","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","operatorLabel","content","Tag","onClick","icon","Cross","tag","cursor","Filters"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport {\n deepEncodeQueryValues,\n useQueryParams,\n withEncodedUserParams,\n} from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\nconst EMPTY_OPTIONS: NonNullable<RootProps['options']> = [];\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string | boolean | null;\n}\n\n/**\n * Carries the position in the `$and` array so we replace that exact entry, not every entry\n * sharing the same `(name, operator, value)`.\n */\ninterface EditingFilter extends FilterFormData {\n index: number;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n editingFilter: EditingFilter | null;\n setEditingFilter: (filter: EditingFilter | null) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\nconst getFilterDetails = (\n filterEntry: Record<string, unknown>,\n options: Filters.Filter[]\n): { name: string; operator: string; value: unknown } | null => {\n const [name] = Object.keys(filterEntry);\n const option = options.find((o) => o.name === name);\n if (!option) {\n return null;\n }\n\n const operatorObj =\n option.type === 'relation'\n ? (filterEntry[name] as Record<string, unknown>)?.[option.mainField?.name ?? 'id']\n : filterEntry[name];\n\n if (typeof operatorObj !== 'object' || operatorObj === null) {\n return null;\n }\n\n const [operator] = Object.keys(operatorObj as Record<string, unknown>);\n if (!operator) {\n return null;\n }\n\n return { name, operator, value: (operatorObj as Record<string, unknown>)[operator] };\n};\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options'>>, Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = EMPTY_OPTIONS,\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const [editingFilter, setEditingFilter] = React.useState<EditingFilter | null>(null);\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n React.useEffect(() => {\n if (!open) {\n setEditingFilter(null);\n }\n }, [open]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n editingFilter={editingFilter}\n setEditingFilter={setEditingFilter}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const editingFilter = useFilters('Popover', ({ editingFilter }) => editingFilter);\n const setEditingFilter = useFilters('Popover', ({ setEditingFilter }) => setEditingFilter);\n\n const initialValues = React.useMemo(() => {\n return editingFilter ?? { name: options[0]?.name, filter: BASE_FILTERS[0].value };\n }, [editingFilter, options]);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n const type = fieldOptions.mainField?.type ?? fieldOptions.type;\n\n /**\n * An untouched boolean toggle is `undefined` but renders as `false`, and `false` itself is falsy,\n * so it has to be stringified before the emptiness check below.\n * A cleared toggle (`null`) stays empty.\n */\n const rawValue = data.value === undefined && type === 'boolean' ? false : (data.value ?? '');\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter) ? 'true' : String(rawValue);\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange({ ...data, value: rawValue });\n }\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterEntry = {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n };\n\n const existingFilters = query.filters?.$and ?? [];\n\n const newFilterQuery = editingFilter\n ? {\n ...query.filters,\n $and: existingFilters.map((filter, i) =>\n i === editingFilter.index ? newFilterEntry : filter\n ),\n }\n : {\n ...query.filters,\n $and: [...existingFilters, newFilterEntry],\n };\n\n setQuery(\n withEncodedUserParams(query, { filters: deepEncodeQueryValues(newFilterQuery), page: 1 }),\n 'push',\n true\n );\n setOpen(false);\n setEditingFilter(null);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={initialValues}\n onSubmit={handleSubmit}\n key={\n editingFilter\n ? `edit-${editingFilter.index}-${editingFilter.name}-${editingFilter.filter}-${editingFilter.value ?? 'empty'}`\n : 'create'\n }\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n !FILTERS_WITH_NO_VALUE.includes(formValues.filter) ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {editingFilter\n ? formatMessage({\n id: 'app.utils.update-filter',\n defaultMessage: 'Update filter',\n })\n : formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n const queryFilters = query?.filters?.$and ?? [];\n /**\n * One stable key per list slot, kept in a ref. The write happens during\n * render, but it is driven by the list length and not by the number of render\n * calls, so a repeat invocation (the StrictMode double render) finds the\n * lengths already equal and changes nothing. A content-derived key is not an\n * option: identical filters are a legal query, so a key would still need an\n * occurrence counter on top of the content.\n */\n const filterKeyPrefix = React.useId();\n const nextFilterKey = React.useRef(0);\n const filterKeys = React.useRef<string[]>([]);\n\n while (filterKeys.current.length < queryFilters.length) {\n filterKeys.current.push(`${filterKeyPrefix}-${nextFilterKey.current}`);\n nextFilterKey.current += 1;\n }\n /**\n * Truncation drops keys from the tail. `handleRemove` splices the removed\n * slot out first, so removal through this component stays correct. A list\n * that shrinks by any other route (browser history, an external `setQuery`,\n * a clear all) shifts the remaining keys and falls back to the index-key\n * behaviour this replaced. Accepted limit, not a bug to chase.\n */\n filterKeys.current.length = queryFilters.length;\n\n const filtersWithKeys = queryFilters.map((queryFilter, index) => ({\n queryFilter,\n index,\n key: filterKeys.current[index],\n }));\n\n /**\n * Removed by position: identical filters are a legal query, so matching on\n * `(name, operator, value)` would drop every copy at once.\n */\n const handleRemove = (index: number) => {\n const nextFilters = queryFilters.filter((_, i) => i !== index);\n\n filterKeys.current.splice(index, 1);\n setQuery(\n withEncodedUserParams(query, {\n filters: deepEncodeQueryValues({ $and: nextFilters }),\n page: 1,\n })\n );\n };\n\n if (queryFilters.length === 0) {\n return null;\n }\n\n return (\n <>\n {filtersWithKeys.map(({ queryFilter, index, key }) => {\n const details = getFilterDetails(queryFilter, options);\n if (!details || typeof details.value === 'object') {\n return null;\n }\n\n const filter = options.find(({ name }) => name === details.name);\n if (!filter) {\n return null;\n }\n /**\n * `index` is the position in the raw `$and` array — entries skipped above still count.\n * Never cache it: `qs` re-indexes on removal, so dropping entry 0 of [0, 1, 2]\n * leaves [0, 1] and any held index goes stale.\n */\n return (\n <AttributeTag\n key={key}\n {...filter}\n index={index}\n onRemove={handleRemove}\n operator={details.operator}\n value={String(details.value)}\n />\n );\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n /**\n * Position in the `$and` array. An explicit prop rather than a closure bound at the call\n * site, so it stays part of the props comparison if this ever gets memoised.\n */\n index: number;\n onRemove: (index: number) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n index,\n input,\n label,\n mainField,\n name,\n onRemove,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n const setOpen = useFilters('AttributeTag', ({ setOpen }) => setOpen);\n const setEditingFilter = useFilters('AttributeTag', ({ setEditingFilter }) => setEditingFilter);\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n const getEditValue = () => {\n if (FILTERS_WITH_NO_VALUE.includes(operator)) {\n return undefined;\n }\n\n // the query holds `'true'`/`'false'`, the toggle needs a real boolean\n return type === 'boolean' ? value === 'true' : value;\n };\n\n const handleEdit = () => {\n setEditingFilter({\n name,\n filter: operator,\n index,\n value: getEditValue(),\n });\n setOpen(true);\n };\n\n const handleRemove = () => {\n onRemove(index);\n };\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const operatorLabel = formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n });\n\n const content = FILTERS_WITH_NO_VALUE.includes(operator)\n ? `${label} ${operatorLabel}`\n : `${label} ${operatorLabel} ${formattedValue}`;\n\n return (\n <Tag padding={1} onClick={handleRemove} icon={<Cross />} label={content}>\n <Box tag=\"span\" cursor=\"pointer\" onClick={handleEdit}>\n {content}\n </Box>\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n _q?: string;\n }\n}\n\nexport { Filters };\n"],"names":["EMPTY_OPTIONS","FiltersProvider","useFilters","createContext","getFilterDetails","filterEntry","options","name","Object","keys","option","find","o","operatorObj","type","mainField","operator","value","Root","children","disabled","onChange","onOpenChange","open","openProp","defaultOpen","restProps","editingFilter","setEditingFilter","React","useState","handleChange","data","setOpen","useControllableState","prop","defaultProp","useEffect","_jsx","Popover","Trigger","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","initialValues","useMemo","filter","BASE_FILTERS","length","handleSubmit","fieldOptions","rawValue","undefined","FILTERS_WITH_NO_VALUE","includes","String","operatorValuePairing","newFilterEntry","existingFilters","filters","$and","newFilterQuery","map","i","index","withEncodedUserParams","deepEncodeQueryValues","page","Content","style","Box","padding","Form","method","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","placeholder","operators","getFilterList","opt","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","queryFilters","filterKeyPrefix","useId","nextFilterKey","useRef","filterKeys","current","push","filtersWithKeys","queryFilter","key","handleRemove","nextFilters","_","splice","_Fragment","details","AttributeTag","onRemove","formatDate","formatTime","formatNumber","getEditValue","handleEdit","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","operatorLabel","content","Tag","onClick","icon","Cross","tag","cursor","Filters"],"mappings":"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"}
@@ -37,6 +37,8 @@ function _interopNamespace(e) {
37
37
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
38
38
  var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
39
39
 
40
+ const DEFAULT_ON_PROCEED = ()=>{};
41
+ const DEFAULT_ON_CANCEL = ()=>{};
40
42
  const isArrayLikeOptions = (options)=>{
41
43
  return typeof options === 'object' && options !== null && 'length' in options;
42
44
  };
@@ -540,7 +542,7 @@ const isErrorMessageDescriptor = (object)=>{
540
542
  };
541
543
  /* -------------------------------------------------------------------------------------------------
542
544
  * Blocker
543
- * -----------------------------------------------------------------------------------------------*/ const Blocker = ({ onProceed = ()=>{}, onCancel = ()=>{} })=>{
545
+ * -----------------------------------------------------------------------------------------------*/ const Blocker = ({ onProceed = DEFAULT_ON_PROCEED, onCancel = DEFAULT_ON_CANCEL })=>{
544
546
  const { formatMessage } = reactIntl.useIntl();
545
547
  const modified = useForm('Blocker', (state)=>state.modified);
546
548
  const isSubmitting = useForm('Blocker', (state)=>state.isSubmitting);
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce, type Draft } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { useRegisterUnsavedChanges } from '../hooks/useRegisterUnsavedChanges';\nimport { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges';\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ntype FormFieldValue = unknown;\ntype FormValues = object;\ntype FormFieldTarget = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype FormFieldEvent = React.ChangeEvent<FormFieldTarget>;\ntype FormFieldEventWithFallbackTarget = Omit<FormFieldEvent, 'target' | 'currentTarget'> & {\n target?: (FormFieldTarget & { id?: string; name?: string }) | undefined;\n currentTarget?: (FormFieldTarget & { id?: string; name?: string }) | undefined;\n};\ntype MultipleSelectTarget = FormFieldTarget & {\n multiple: true;\n options: ArrayLike<HTMLOptionElement>;\n};\ntype FormFieldRowValue = Record<string, unknown>;\ntype FormFieldRowValueWithKey = FormFieldRowValue & { __temp_key__?: string };\n\nconst isArrayLikeOptions = (options: unknown): options is ArrayLike<HTMLOptionElement> => {\n return typeof options === 'object' && options !== null && 'length' in options;\n};\n\nconst isMultipleSelectTarget = (target: FormFieldTarget): target is MultipleSelectTarget => {\n return (\n 'multiple' in target &&\n target.multiple === true &&\n 'options' in target &&\n isArrayLikeOptions(target.options)\n );\n};\n\ninterface FormContextValue<TFormValues extends FormValues = FormValues>\n extends FormState<TFormValues> {\n disabled: boolean;\n getValues: () => TFormValues;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: FormFieldRowValue, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: FormFieldEvent | string, value?: FormFieldValue) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n getValues: () => {\n throw new Error(ERR_MSG);\n },\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues>\n extends Pick<FormContextValue<TFormValues>, 'setErrors' | 'setValues' | 'resetForm'> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<TFormValues>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n // Keep a ref to the latest form values so `getValues()` can always return fresh data.\n // We expose `getValues` as a stable callback so consumers (e.g. conditional/rules logic)\n // can call it without causing extra rerenders from changing function references.\n const valuesRef = React.useRef(state.values);\n /**\n * Keep the ref aligned with `state.values` during render (not only in an effect) so\n * `getValues()` / `validate()` always see the latest committed values. Effects run too late\n * for back-to-back user actions (e.g. fast e2e) where the next handler runs before the\n * effect has fired.\n */\n valuesRef.current = state.values;\n\n const getValues = React.useCallback(() => valuesRef.current, []);\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n const valuesToValidate = valuesRef.current;\n\n if (!props.validationSchema && !props.validate) {\n return { data: valuesToValidate };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(valuesToValidate, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(valuesToValidate, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const { target: eventTarget, currentTarget } =\n eventOrPath as FormFieldEventWithFallbackTarget;\n const target = eventTarget ?? currentTarget;\n\n if (target === undefined) {\n return;\n }\n\n const { type, name, id, value } = target;\n let field = name;\n\n if (field === undefined || field === '') {\n field = id;\n }\n\n if ((field === undefined || field === '') && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n if (field === undefined || field === '') {\n return;\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (isMultipleSelectTarget(target)) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(target.options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n getValues={getValues}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: unknown): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends unknown[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\nconst setDraftValues = <TFormValues extends FormValues>(\n draft: Draft<FormState<TFormValues>>,\n values: TFormValues\n) => {\n draft.values = values as Draft<TFormValues>;\n};\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: FormFieldValue } }\n | {\n type: 'ADD_FIELD_ROW';\n payload: { field: string; value: FormFieldRowValue; addAtIndex?: number };\n }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n setDraftValues(draft, action.payload);\n break;\n case 'SET_VALUES':\n setDraftValues(draft, action.payload);\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n setDraftValues(draft, setIn(state.values, action.payload.field, action.payload.value));\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(\n state.values,\n action.payload.field,\n []\n ) as FormFieldRowValueWithKey[];\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n // Collect all existing keys to ensure uniqueness.\n // Keys may be out of order after drag-and-drop moves, so we can't rely\n // on fractional indexing alone to avoid collisions.\n const existingKeys = new Set(\n currentField\n .map((item) => item.__temp_key__)\n .filter((key): key is string => key !== undefined && key !== '')\n );\n\n // Generate a unique key, retrying if there's a collision\n let key: string;\n let lowerBound = existingKeys.size > 0 ? Array.from(existingKeys).sort().pop() : null;\n do {\n [key] = generateNKeysBetween(lowerBound, null, 1);\n // If collision, advance the lower bound so the next iteration\n // generates a key strictly after this one.\n if (existingKeys.has(key)) {\n lowerBound = key;\n }\n } while (existingKeys.has(key));\n\n setDraftValues(\n draft,\n setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n )\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as FormFieldRowValueWithKey[])];\n const currentRow = currentField[fromIndex];\n\n // Preserve the original __temp_key__ to maintain stable identity during drag-and-drop.\n // The array order determines display order, so fractional key ordering isn't needed.\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, currentRow);\n\n setDraftValues(draft, setIn(state.values, field, currentField));\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(\n state.values,\n action.payload.field,\n []\n ) as FormFieldRowValueWithKey[];\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n setDraftValues(\n draft,\n setIn(state.values, action.payload.field, newValue.length > 0 ? newValue : [])\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n setDraftValues(draft, action.payload.values);\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = unknown> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: FormFieldEvent | string, value?: TValue) => void;\n value: TValue;\n rawError?: unknown;\n}\n\nfunction useField<TValue = unknown>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object: unknown): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({ onProceed = () => {}, onCancel = () => {} }: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n const registrationId = React.useId();\n const hasUnsavedEdits = modified && !isSubmitting;\n\n /**\n * Deliberately `modified` rather than `hasUnsavedEdits`: the navigation\n * guards below ignore an in-flight submit because it is about to reset the\n * form, but a session that dies mid-save leaves the edits unsaved — that is\n * exactly when the user needs the warning.\n */\n useRegisterUnsavedChanges(registrationId, modified);\n\n // this is trigering a native browser prompt on page unload\n // We aren't able to use our Dialog component in that scenario\n // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser\n // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario\n useWarnIfUnsavedChanges(hasUnsavedEdits);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n hasUnsavedEdits &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["isArrayLikeOptions","options","isMultipleSelectTarget","target","multiple","ERR_MSG","FormProvider","useForm","createContext","disabled","errors","getValues","Error","initialValues","isSubmitting","modified","addFieldRow","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","valuesRef","current","useCallback","useEffect","isEqual","type","payload","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","valuesToValidate","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","eventTarget","currentTarget","undefined","name","id","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","setDraftValues","draft","action","produce","currentField","position","existingKeys","Set","item","__temp_key__","key","lowerBound","size","sort","pop","generateNKeysBetween","has","toSpliced","currentRow","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","registrationId","useId","hasUnsavedEdits","useRegisterUnsavedChanges","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","textAlign","Footer","Cancel","Button","variant","fullWidth","onClick","proceed"],"mappings":"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"}
1
+ {"version":3,"file":"Form.js","sources":["../../../../../admin/src/components/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n type BoxProps,\n Button,\n Dialog,\n useCallbackRef,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport { produce, type Draft } from 'immer';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl, type MessageDescriptor, type PrimitiveType } from 'react-intl';\nimport { useBlocker } from 'react-router-dom';\n\nimport { useRegisterUnsavedChanges } from '../hooks/useRegisterUnsavedChanges';\nimport { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges';\nimport { getIn, setIn } from '../utils/objects';\n\nimport { createContext } from './Context';\n\nimport type {\n InputProps as InputPropsImpl,\n StringProps,\n EnumerationProps,\n} from './FormInputs/types';\nimport type * as Yup from 'yup';\n\nconst DEFAULT_ON_PROCEED: NonNullable<BlockerProps['onProceed']> = () => {};\nconst DEFAULT_ON_CANCEL: NonNullable<BlockerProps['onCancel']> = () => {};\n\n/* -------------------------------------------------------------------------------------------------\n * FormContext\n * -----------------------------------------------------------------------------------------------*/\ntype InputProps = InputPropsImpl | StringProps | EnumerationProps;\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ntype FormFieldValue = unknown;\ntype FormValues = object;\ntype FormFieldTarget = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype FormFieldEvent = React.ChangeEvent<FormFieldTarget>;\ntype FormFieldEventWithFallbackTarget = Omit<FormFieldEvent, 'target' | 'currentTarget'> & {\n target?: (FormFieldTarget & { id?: string; name?: string }) | undefined;\n currentTarget?: (FormFieldTarget & { id?: string; name?: string }) | undefined;\n};\ntype MultipleSelectTarget = FormFieldTarget & {\n multiple: true;\n options: ArrayLike<HTMLOptionElement>;\n};\ntype FormFieldRowValue = Record<string, unknown>;\ntype FormFieldRowValueWithKey = FormFieldRowValue & { __temp_key__?: string };\n\nconst isArrayLikeOptions = (options: unknown): options is ArrayLike<HTMLOptionElement> => {\n return typeof options === 'object' && options !== null && 'length' in options;\n};\n\nconst isMultipleSelectTarget = (target: FormFieldTarget): target is MultipleSelectTarget => {\n return (\n 'multiple' in target &&\n target.multiple === true &&\n 'options' in target &&\n isArrayLikeOptions(target.options)\n );\n};\n\ninterface FormContextValue<\n TFormValues extends FormValues = FormValues,\n> extends FormState<TFormValues> {\n disabled: boolean;\n getValues: () => TFormValues;\n initialValues: TFormValues;\n modified: boolean;\n /**\n * The default behaviour is to add the row to the end of the array, if you want to add it to a\n * specific index you can pass the index.\n */\n addFieldRow: (field: string, value: FormFieldRowValue, addAtIndex?: number) => void;\n moveFieldRow: (field: string, fromIndex: number, toIndex: number) => void;\n onChange: (eventOrPath: FormFieldEvent | string, value?: FormFieldValue) => void;\n /*\n * The default behaviour is to remove the last row, if you want to remove a specific index you can\n * pass the index.\n */\n removeFieldRow: (field: string, removeAtIndex?: number) => void;\n resetForm: (newInitialValues?: TFormValues) => void;\n setErrors: (errors: FormErrors<TFormValues>) => void;\n setSubmitting: (isSubmitting: boolean) => void;\n setValues: (values: TFormValues) => void;\n validate: (\n shouldSetErrors?: boolean,\n options?: Record<string, string>\n ) => Promise<\n { data: TFormValues; errors?: never } | { data?: never; errors: FormErrors<TFormValues> }\n >;\n}\n\n/**\n * @internal\n * @description We use this just to warn people that they're using the useForm\n * methods outside of a Form component, but we don't want to throw an error\n * because otherwise the DocumentActions list cannot be rendered in our list-view.\n */\nconst ERR_MSG =\n 'The Form Component has not been initialised, ensure you are using this hook within a Form component';\n\nconst [FormProvider, useForm] = createContext<FormContextValue>('Form', {\n disabled: false,\n errors: {},\n getValues: () => {\n throw new Error(ERR_MSG);\n },\n initialValues: {},\n isSubmitting: false,\n modified: false,\n addFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n moveFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n onChange: () => {\n throw new Error(ERR_MSG);\n },\n removeFieldRow: () => {\n throw new Error(ERR_MSG);\n },\n resetForm: () => {\n throw new Error(ERR_MSG);\n },\n setErrors: () => {\n throw new Error(ERR_MSG);\n },\n setValues: () => {\n throw new Error(ERR_MSG);\n },\n setSubmitting: () => {\n throw new Error(ERR_MSG);\n },\n validate: async () => {\n throw new Error(ERR_MSG);\n },\n values: {},\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Form\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormHelpers<TFormValues extends FormValues = FormValues> extends Pick<\n FormContextValue<TFormValues>,\n 'setErrors' | 'setValues' | 'resetForm'\n> {}\n\ninterface FormProps<TFormValues extends FormValues = FormValues>\n extends\n Partial<Pick<FormContextValue<TFormValues>, 'disabled' | 'initialValues'>>,\n Pick<BoxProps, 'width' | 'height'> {\n children:\n | React.ReactNode\n | ((\n props: Pick<\n FormContextValue<TFormValues>,\n | 'disabled'\n | 'errors'\n | 'isSubmitting'\n | 'modified'\n | 'values'\n | 'resetForm'\n | 'onChange'\n | 'setErrors'\n >\n ) => React.ReactNode);\n method: 'POST' | 'PUT';\n onSubmit?: (values: TFormValues, helpers: FormHelpers<TFormValues>) => Promise<void> | void;\n // TODO: type the return value for a validation schema func from Yup.\n validationSchema?: Yup.AnySchema;\n initialErrors?: FormErrors<TFormValues>;\n validate?: (values: TFormValues, options: Record<string, string>) => Promise<TFormValues>;\n}\n\n/**\n * @alpha\n * @description A form component that handles form state, validation and submission.\n * It can additionally handle nested fields and arrays. To access the data you can either\n * use the generic useForm hook or the useField hook when providing the name of your field.\n */\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ disabled = false, method, onSubmit, initialErrors, ...props }, ref) => {\n const formRef = React.useRef<HTMLFormElement>(null!);\n const initialValues = React.useRef(props.initialValues ?? {});\n const [state, dispatch] = React.useReducer(reducer, {\n errors: initialErrors ?? {},\n isSubmitting: false,\n values: props.initialValues ?? {},\n });\n\n // Keep a ref to the latest form values so `getValues()` can always return fresh data.\n // We expose `getValues` as a stable callback so consumers (e.g. conditional/rules logic)\n // can call it without causing extra rerenders from changing function references.\n const valuesRef = React.useRef(state.values);\n /**\n * Keep the ref aligned with `state.values` during render (not only in an effect) so\n * `getValues()` / `validate()` always see the latest committed values. Effects run too late\n * for back-to-back user actions (e.g. fast e2e) where the next handler runs before the\n * effect has fired.\n */\n valuesRef.current = state.values;\n\n const getValues = React.useCallback(() => valuesRef.current, []);\n\n React.useEffect(() => {\n /**\n * ONLY update the initialValues if the prop has changed.\n */\n if (!isEqual(initialValues.current, props.initialValues)) {\n initialValues.current = props.initialValues ?? {};\n\n dispatch({\n type: 'SET_INITIAL_VALUES',\n payload: props.initialValues ?? {},\n });\n }\n }, [props.initialValues]);\n\n const setErrors = React.useCallback((errors: FormErrors) => {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors,\n });\n }, []);\n\n const setValues = React.useCallback((values: FormValues) => {\n dispatch({\n type: 'SET_VALUES',\n payload: values,\n });\n }, []);\n\n React.useEffect(() => {\n if (Object.keys(state.errors).length === 0) return;\n\n /**\n * Small timeout to ensure the form has been\n * rendered before we try to focus on the first\n */\n const ref = setTimeout(() => {\n const [firstError] = formRef.current.querySelectorAll('[data-strapi-field-error]');\n\n if (firstError) {\n const errorId = firstError.getAttribute('id');\n const formElementInError = formRef.current.querySelector(\n `[aria-describedby=\"${errorId}\"]`\n );\n\n if (formElementInError && formElementInError instanceof HTMLElement) {\n formElementInError.focus();\n }\n }\n });\n\n return () => clearTimeout(ref);\n }, [state.errors]);\n\n /**\n * Uses the provided validation schema\n */\n const validate = React.useCallback(\n async (shouldSetErrors: boolean = true, options: Record<string, string> = {}) => {\n setErrors({});\n\n const valuesToValidate = valuesRef.current;\n\n if (!props.validationSchema && !props.validate) {\n return { data: valuesToValidate };\n }\n\n try {\n let data;\n if (props.validationSchema) {\n data = await props.validationSchema.validate(valuesToValidate, { abortEarly: false });\n } else if (props.validate) {\n data = await props.validate(valuesToValidate, options);\n } else {\n throw new Error('No validation schema or validate function provided');\n }\n\n return { data };\n } catch (err) {\n if (isErrorYupValidationError(err)) {\n const errors = getYupValidationErrors(err);\n\n if (shouldSetErrors) {\n setErrors(errors);\n }\n\n return { errors };\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: An unhandled error was caught during validation in <Form validationSchema />`,\n err\n );\n }\n\n throw err;\n }\n }\n },\n [props, setErrors]\n );\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!onSubmit) {\n return;\n }\n\n dispatch({\n type: 'SUBMIT_ATTEMPT',\n });\n\n try {\n const { data, errors } = await validate();\n\n if (errors) {\n setErrors(errors);\n\n throw new Error('Submission failed');\n }\n\n await onSubmit(data, {\n setErrors,\n setValues,\n resetForm,\n });\n\n dispatch({\n type: 'SUBMIT_SUCCESS',\n });\n } catch (err) {\n dispatch({\n type: 'SUBMIT_FAILURE',\n });\n\n if (err instanceof Error && err.message === 'Submission failed') {\n return;\n }\n }\n };\n\n const modified = React.useMemo(\n () => !isEqual(initialValues.current, state.values),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.values, initialValues.current]\n );\n\n const handleChange: FormContextValue['onChange'] = useCallbackRef((eventOrPath, v) => {\n if (typeof eventOrPath === 'string') {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: eventOrPath,\n value: v,\n },\n });\n\n return;\n }\n\n const { target: eventTarget, currentTarget } =\n eventOrPath as FormFieldEventWithFallbackTarget;\n const target = eventTarget ?? currentTarget;\n\n if (target === undefined) {\n return;\n }\n\n const { type, name, id, value } = target;\n let field = name;\n\n if (field === undefined || field === '') {\n field = id;\n }\n\n if ((field === undefined || field === '') && process.env.NODE_ENV !== 'production') {\n console.warn(\n `\\`onChange\\` was called with an event, but you forgot to pass a \\`name\\` or \\`id'\\` attribute to your input. The field to update cannot be determined`\n );\n }\n\n if (field === undefined || field === '') {\n return;\n }\n\n /**\n * Because we handle any field from this function, we run through a series\n * of checks to understand how to use the value.\n */\n let val;\n\n if (/number|range/.test(type)) {\n const parsed = parseFloat(value);\n // If the value isn't a number for whatever reason, don't let it through because that will break the API.\n val = isNaN(parsed) ? '' : parsed;\n } else if (/checkbox/.test(type)) {\n // Get & invert the current value of the checkbox.\n val = !getIn(state.values, field);\n } else if (isMultipleSelectTarget(target)) {\n // This will handle native select elements incl. ones with mulitple options.\n val = Array.from<HTMLOptionElement>(target.options)\n .filter((el) => el.selected)\n .map((el) => el.value);\n } else {\n // NOTE: reset value to null so it failes required checks.\n // The API only considers a required field invalid if the value is null|undefined, to differentiate from min 1\n if (value === '') {\n val = null;\n } else {\n val = value;\n }\n }\n\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field,\n value: val,\n },\n });\n });\n\n const addFieldRow: FormContextValue['addFieldRow'] = React.useCallback(\n (field, value, addAtIndex) => {\n dispatch({\n type: 'ADD_FIELD_ROW',\n payload: {\n field,\n value,\n addAtIndex,\n },\n });\n },\n []\n );\n\n const removeFieldRow: FormContextValue['removeFieldRow'] = React.useCallback(\n (field, removeAtIndex) => {\n dispatch({\n type: 'REMOVE_FIELD_ROW',\n payload: {\n field,\n removeAtIndex,\n },\n });\n },\n []\n );\n\n const moveFieldRow: FormContextValue['moveFieldRow'] = React.useCallback(\n (field, fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD_ROW',\n payload: {\n field,\n fromIndex,\n toIndex,\n },\n });\n },\n []\n );\n\n const resetForm: FormContextValue['resetForm'] = React.useCallback((newInitialValues) => {\n if (newInitialValues) {\n initialValues.current = newInitialValues;\n }\n dispatch({\n type: 'RESET_FORM',\n payload: {\n errors: {},\n isSubmitting: false,\n values: initialValues.current,\n },\n });\n }, []);\n\n const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n }, []);\n\n const composedRefs = useComposedRefs(formRef, ref);\n\n return (\n <Box\n tag=\"form\"\n ref={composedRefs}\n method={method}\n noValidate\n onSubmit={handleSubmit}\n width={props.width}\n height={props.height}\n >\n <FormProvider\n disabled={disabled}\n getValues={getValues}\n onChange={handleChange}\n initialValues={initialValues.current}\n modified={modified}\n addFieldRow={addFieldRow}\n moveFieldRow={moveFieldRow}\n removeFieldRow={removeFieldRow}\n resetForm={resetForm}\n setErrors={setErrors}\n setValues={setValues}\n setSubmitting={setSubmitting}\n validate={validate}\n {...state}\n >\n {typeof props.children === 'function'\n ? props.children({\n modified,\n disabled,\n onChange: handleChange,\n ...state,\n setErrors,\n resetForm,\n })\n : props.children}\n </FormProvider>\n </Box>\n );\n }\n) as <TFormValues extends FormValues>(\n p: FormProps<TFormValues> & { ref?: React.Ref<HTMLFormElement> }\n) => React.ReactElement; // we've cast this because we need the generic to infer the type of the form values.\n\n/**\n * @internal\n * @description Checks if the error is a Yup validation error.\n */\nconst isErrorYupValidationError = (err: unknown): err is Yup.ValidationError =>\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n typeof err.name === 'string' &&\n err.name === 'ValidationError';\n\n/* -------------------------------------------------------------------------------------------------\n * getYupValidationErrors\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description handy utility to convert a yup validation error into a form\n * error object. To be used elsewhere.\n */\nconst getYupValidationErrors = (err: Yup.ValidationError): FormErrors => {\n let errors: FormErrors = {};\n\n if (err.inner) {\n if (err.inner.length === 0) {\n return setIn(errors, err.path!, err.message);\n }\n for (const error of err.inner) {\n if (!getIn(errors, error.path!)) {\n errors = setIn(errors, error.path!, error.message);\n }\n }\n }\n\n return errors;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ntype FormErrors<TFormValues extends FormValues = FormValues> = {\n // is it a repeatable component or dynamic zone?\n [Key in keyof TFormValues]?: TFormValues[Key] extends unknown[]\n ? TFormValues[Key][number] extends object\n ? FormErrors<TFormValues[Key][number]>[] | string | string[]\n : string // this would let us support errors for the dynamic zone or repeatable component not the components within.\n : TFormValues[Key] extends object // is it a regular component?\n ? FormErrors<TFormValues[Key]> // handles nested components\n : string | TranslationMessage; // otherwise its just a field or a translation message.\n};\n\ninterface FormState<TFormValues extends FormValues = FormValues> {\n /**\n * TODO: make this a better type explaining errors could be nested because it follows the same\n * structure as the values.\n */\n errors: FormErrors<TFormValues>;\n isSubmitting: boolean;\n values: TFormValues;\n}\n\nconst setDraftValues = <TFormValues extends FormValues>(\n draft: Draft<FormState<TFormValues>>,\n values: TFormValues\n) => {\n draft.values = values as Draft<TFormValues>;\n};\n\ntype FormActions<TFormValues extends FormValues = FormValues> =\n | { type: 'SUBMIT_ATTEMPT' }\n | { type: 'SUBMIT_FAILURE' }\n | { type: 'SUBMIT_SUCCESS' }\n | { type: 'SET_FIELD_VALUE'; payload: { field: string; value: FormFieldValue } }\n | {\n type: 'ADD_FIELD_ROW';\n payload: { field: string; value: FormFieldRowValue; addAtIndex?: number };\n }\n | { type: 'REMOVE_FIELD_ROW'; payload: { field: string; removeAtIndex?: number } }\n | { type: 'MOVE_FIELD_ROW'; payload: { field: string; fromIndex: number; toIndex: number } }\n | { type: 'SET_ERRORS'; payload: FormErrors<TFormValues> }\n | { type: 'SET_ISSUBMITTING'; payload: boolean }\n | { type: 'SET_INITIAL_VALUES'; payload: TFormValues }\n | { type: 'SET_VALUES'; payload: TFormValues }\n | { type: 'RESET_FORM'; payload: FormState<TFormValues> };\n\nconst reducer = <TFormValues extends FormValues = FormValues>(\n state: FormState<TFormValues>,\n action: FormActions<TFormValues>\n) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'SET_INITIAL_VALUES':\n setDraftValues(draft, action.payload);\n break;\n case 'SET_VALUES':\n setDraftValues(draft, action.payload);\n break;\n case 'SUBMIT_ATTEMPT':\n draft.isSubmitting = true;\n break;\n case 'SUBMIT_FAILURE':\n draft.isSubmitting = false;\n break;\n case 'SUBMIT_SUCCESS':\n draft.isSubmitting = false;\n break;\n case 'SET_FIELD_VALUE':\n setDraftValues(draft, setIn(state.values, action.payload.field, action.payload.value));\n break;\n case 'ADD_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(\n state.values,\n action.payload.field,\n []\n ) as FormFieldRowValueWithKey[];\n\n let position = action.payload.addAtIndex;\n\n if (position === undefined) {\n position = currentField.length;\n } else if (position < 0) {\n position = 0;\n }\n\n // Collect all existing keys to ensure uniqueness.\n // Keys may be out of order after drag-and-drop moves, so we can't rely\n // on fractional indexing alone to avoid collisions.\n const existingKeys = new Set(\n currentField\n .map((item) => item.__temp_key__)\n .filter((key): key is string => key !== undefined && key !== '')\n );\n\n // Generate a unique key, retrying if there's a collision\n let key: string;\n let lowerBound = existingKeys.size > 0 ? Array.from(existingKeys).sort().pop() : null;\n do {\n [key] = generateNKeysBetween(lowerBound, null, 1);\n // If collision, advance the lower bound so the next iteration\n // generates a key strictly after this one.\n if (existingKeys.has(key)) {\n lowerBound = key;\n }\n } while (existingKeys.has(key));\n\n setDraftValues(\n draft,\n setIn(\n state.values,\n action.payload.field,\n currentField.toSpliced(position, 0, {\n ...action.payload.value,\n __temp_key__: key,\n })\n )\n );\n\n break;\n }\n case 'MOVE_FIELD_ROW': {\n const { field, fromIndex, toIndex } = action.payload;\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = [...(getIn(state.values, field, []) as FormFieldRowValueWithKey[])];\n const currentRow = currentField[fromIndex];\n\n // Preserve the original __temp_key__ to maintain stable identity during drag-and-drop.\n // The array order determines display order, so fractional key ordering isn't needed.\n currentField.splice(fromIndex, 1);\n currentField.splice(toIndex, 0, currentRow);\n\n setDraftValues(draft, setIn(state.values, field, currentField));\n\n break;\n }\n case 'REMOVE_FIELD_ROW': {\n /**\n * TODO: add check for if the field is an array?\n */\n const currentField = getIn(\n state.values,\n action.payload.field,\n []\n ) as FormFieldRowValueWithKey[];\n\n let position = action.payload.removeAtIndex;\n\n if (position === undefined) {\n position = currentField.length - 1;\n } else if (position < 0) {\n position = 0;\n }\n\n /**\n * filter out empty values from the array, the setIn function only deletes the value\n * when we pass undefined as opposed to \"removing\" it from said array.\n */\n const newValue = setIn(currentField, position.toString(), undefined).filter(\n (val: unknown) => val\n );\n\n setDraftValues(\n draft,\n setIn(state.values, action.payload.field, newValue.length > 0 ? newValue : [])\n );\n\n break;\n }\n case 'SET_ERRORS':\n if (!isEqual(state.errors, action.payload)) {\n // @ts-expect-error – TODO: figure out why this fails a TS check.\n draft.errors = action.payload;\n }\n break;\n case 'SET_ISSUBMITTING':\n draft.isSubmitting = action.payload;\n break;\n case 'RESET_FORM':\n setDraftValues(draft, action.payload.values);\n // @ts-expect-error – TODO: figure out why this fails ts.\n draft.errors = action.payload.errors;\n draft.isSubmitting = action.payload.isSubmitting;\n break;\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * useField\n * -----------------------------------------------------------------------------------------------*/\ninterface FieldValue<TValue = unknown> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: FormFieldEvent | string, value?: TValue) => void;\n value: TValue;\n rawError?: unknown;\n}\n\nfunction useField<TValue = unknown>(path: string): FieldValue<TValue | undefined> {\n const { formatMessage } = useIntl();\n\n const initialValue = useForm(\n 'useField',\n (state) => getIn(state.initialValues, path) as FieldValue<TValue>['initialValue']\n );\n\n const value = useForm(\n 'useField',\n (state) => getIn(state.values, path) as FieldValue<TValue>['value']\n );\n\n const handleChange = useForm('useField', (state) => state.onChange);\n\n const rawError = useForm('useField', (state) => getIn(state.errors, path));\n\n const error = useForm('useField', (state) => {\n const error = getIn(state.errors, path);\n\n if (isErrorMessageDescriptor(error)) {\n const { values, ...message } = error;\n return formatMessage(message, values);\n }\n\n return error;\n });\n\n return {\n initialValue,\n /**\n * Errors can be a string, or a MessageDescriptor, so we need to handle both cases.\n * If it's anything else, we don't return it.\n */\n rawError,\n error: isErrorMessageDescriptor(error)\n ? formatMessage(\n {\n id: error.id,\n defaultMessage: error.defaultMessage,\n },\n error.values\n )\n : typeof error === 'string'\n ? error\n : undefined,\n onChange: handleChange,\n value: value,\n };\n}\n\nconst isErrorMessageDescriptor = (object: unknown): object is TranslationMessage => {\n return (\n typeof object === 'object' &&\n object !== null &&\n !Array.isArray(object) &&\n 'id' in object &&\n 'defaultMessage' in object\n );\n};\n\n/**\n * Props for the Blocker component.\n * @param onProceed Function to be called when the user confirms the action that triggered the blocker.\n * @param onCancel Function to be called when the user cancels the action that triggered the blocker.\n */\ninterface BlockerProps {\n onProceed?: () => void;\n onCancel?: () => void;\n}\n/* -------------------------------------------------------------------------------------------------\n * Blocker\n * -----------------------------------------------------------------------------------------------*/\nconst Blocker = ({\n onProceed = DEFAULT_ON_PROCEED,\n onCancel = DEFAULT_ON_CANCEL,\n}: BlockerProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Blocker', (state) => state.modified);\n const isSubmitting = useForm('Blocker', (state) => state.isSubmitting);\n const registrationId = React.useId();\n const hasUnsavedEdits = modified && !isSubmitting;\n\n /**\n * Deliberately `modified` rather than `hasUnsavedEdits`: the navigation\n * guards below ignore an in-flight submit because it is about to reset the\n * form, but a session that dies mid-save leaves the edits unsaved — that is\n * exactly when the user needs the warning.\n */\n useRegisterUnsavedChanges(registrationId, modified);\n\n // this is trigering a native browser prompt on page unload\n // We aren't able to use our Dialog component in that scenario\n // so we fallback to the native browser one when the user is trying to close/refresh the tab/browser\n // This hook will be triggered on dev mode because of the live reloads but it's fine as it's only for that scenario\n useWarnIfUnsavedChanges(hasUnsavedEdits);\n\n const blocker = useBlocker(({ currentLocation, nextLocation }) => {\n return (\n hasUnsavedEdits &&\n (currentLocation.pathname !== nextLocation.pathname ||\n currentLocation.search !== nextLocation.search)\n );\n });\n\n if (blocker.state === 'blocked') {\n const handleCancel = (isOpen: boolean) => {\n if (!isOpen) {\n onCancel();\n blocker.reset();\n }\n };\n\n return (\n <Dialog.Root open onOpenChange={handleCancel}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: 'global.prompt.unsaved',\n defaultMessage: 'You have unsaved changes, are you sure you want to leave?',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Dialog.Cancel>\n <Button\n onClick={() => {\n onProceed();\n blocker.proceed();\n }}\n variant=\"danger\"\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n }\n\n return null;\n};\n\nexport { Form, Blocker, useField, useForm, getYupValidationErrors };\nexport type {\n FormErrors,\n FormHelpers,\n FormProps,\n FormValues,\n FormContextValue,\n FormState,\n FieldValue,\n InputProps,\n};\n"],"names":["DEFAULT_ON_PROCEED","DEFAULT_ON_CANCEL","isArrayLikeOptions","options","isMultipleSelectTarget","target","multiple","ERR_MSG","FormProvider","useForm","createContext","disabled","errors","getValues","Error","initialValues","isSubmitting","modified","addFieldRow","moveFieldRow","onChange","removeFieldRow","resetForm","setErrors","setValues","setSubmitting","validate","values","Form","React","forwardRef","method","onSubmit","initialErrors","props","ref","formRef","useRef","state","dispatch","useReducer","reducer","valuesRef","current","useCallback","useEffect","isEqual","type","payload","Object","keys","length","setTimeout","firstError","querySelectorAll","errorId","getAttribute","formElementInError","querySelector","HTMLElement","focus","clearTimeout","shouldSetErrors","valuesToValidate","validationSchema","data","abortEarly","err","isErrorYupValidationError","getYupValidationErrors","process","env","NODE_ENV","console","warn","handleSubmit","e","stopPropagation","preventDefault","message","useMemo","handleChange","useCallbackRef","eventOrPath","v","field","value","eventTarget","currentTarget","undefined","name","id","val","test","parsed","parseFloat","isNaN","getIn","Array","from","filter","el","selected","map","addAtIndex","removeAtIndex","fromIndex","toIndex","newInitialValues","composedRefs","useComposedRefs","_jsx","Box","tag","noValidate","width","height","children","inner","setIn","path","error","setDraftValues","draft","action","produce","currentField","position","existingKeys","Set","item","__temp_key__","key","lowerBound","size","sort","pop","generateNKeysBetween","has","toSpliced","currentRow","splice","newValue","toString","useField","formatMessage","useIntl","initialValue","rawError","isErrorMessageDescriptor","defaultMessage","object","isArray","Blocker","onProceed","onCancel","registrationId","useId","hasUnsavedEdits","useRegisterUnsavedChanges","useWarnIfUnsavedChanges","blocker","useBlocker","currentLocation","nextLocation","pathname","search","handleCancel","isOpen","reset","Dialog","Root","open","onOpenChange","_jsxs","Content","Header","Body","icon","WarningCircle","fill","textAlign","Footer","Cancel","Button","variant","fullWidth","onClick","proceed"],"mappings":"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"}
@@ -12,6 +12,8 @@ import { useWarnIfUnsavedChanges } from '../hooks/useWarnIfUnsavedChanges.mjs';
12
12
  import { getIn, setIn } from '../utils/objects.mjs';
13
13
  import { createContext } from './Context.mjs';
14
14
 
15
+ const DEFAULT_ON_PROCEED = ()=>{};
16
+ const DEFAULT_ON_CANCEL = ()=>{};
15
17
  const isArrayLikeOptions = (options)=>{
16
18
  return typeof options === 'object' && options !== null && 'length' in options;
17
19
  };
@@ -515,7 +517,7 @@ const isErrorMessageDescriptor = (object)=>{
515
517
  };
516
518
  /* -------------------------------------------------------------------------------------------------
517
519
  * Blocker
518
- * -----------------------------------------------------------------------------------------------*/ const Blocker = ({ onProceed = ()=>{}, onCancel = ()=>{} })=>{
520
+ * -----------------------------------------------------------------------------------------------*/ const Blocker = ({ onProceed = DEFAULT_ON_PROCEED, onCancel = DEFAULT_ON_CANCEL })=>{
519
521
  const { formatMessage } = useIntl();
520
522
  const modified = useForm('Blocker', (state)=>state.modified);
521
523
  const isSubmitting = useForm('Blocker', (state)=>state.isSubmitting);