@payloadcms/ui 3.0.0-beta.107 → 3.0.0-beta.109

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 (288) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +1 -3
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/BulkUpload/ActionsBar/index.js +2 -2
  5. package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
  6. package/dist/elements/BulkUpload/EditForm/index.js +3 -1
  7. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  8. package/dist/elements/BulkUpload/FormsManager/index.js +3 -1
  9. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  10. package/dist/elements/Button/index.d.ts.map +1 -1
  11. package/dist/elements/Button/index.js +1 -0
  12. package/dist/elements/Button/index.js.map +1 -1
  13. package/dist/elements/Button/types.d.ts +6 -0
  14. package/dist/elements/Button/types.d.ts.map +1 -1
  15. package/dist/elements/Button/types.js.map +1 -1
  16. package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
  17. package/dist/elements/CodeEditor/CodeEditor.js +51 -25
  18. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  19. package/dist/elements/CodeEditor/index.d.ts.map +1 -1
  20. package/dist/elements/CodeEditor/index.js +2 -8
  21. package/dist/elements/CodeEditor/index.js.map +1 -1
  22. package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
  23. package/dist/elements/ColumnSelector/index.js +14 -2
  24. package/dist/elements/ColumnSelector/index.js.map +1 -1
  25. package/dist/elements/DocumentControls/index.d.ts +4 -1
  26. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  27. package/dist/elements/DocumentControls/index.js +42 -6
  28. package/dist/elements/DocumentControls/index.js.map +1 -1
  29. package/dist/elements/DocumentControls/index.scss +8 -0
  30. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  31. package/dist/elements/DocumentDrawer/DrawerContent.js +23 -17
  32. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  33. package/dist/elements/DocumentDrawer/types.d.ts +4 -1
  34. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  35. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  36. package/dist/elements/EditMany/index.d.ts.map +1 -1
  37. package/dist/elements/EditMany/index.js +235 -124
  38. package/dist/elements/EditMany/index.js.map +1 -1
  39. package/dist/elements/Hamburger/index.scss +4 -0
  40. package/dist/elements/ListControls/index.d.ts.map +1 -1
  41. package/dist/elements/ListControls/index.js +9 -5
  42. package/dist/elements/ListControls/index.js.map +1 -1
  43. package/dist/elements/ListControls/index.scss +0 -6
  44. package/dist/elements/ListDrawer/DrawerContent.d.ts +2 -0
  45. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  46. package/dist/elements/ListDrawer/DrawerContent.js +3 -3
  47. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  48. package/dist/elements/ListDrawer/index.d.ts.map +1 -1
  49. package/dist/elements/ListDrawer/index.js +18 -15
  50. package/dist/elements/ListDrawer/index.js.map +1 -1
  51. package/dist/elements/ListDrawer/types.d.ts +2 -0
  52. package/dist/elements/ListDrawer/types.d.ts.map +1 -1
  53. package/dist/elements/ListDrawer/types.js.map +1 -1
  54. package/dist/elements/Localizer/LocalizerLabel/index.d.ts.map +1 -1
  55. package/dist/elements/Localizer/LocalizerLabel/index.js +9 -5
  56. package/dist/elements/Localizer/LocalizerLabel/index.js.map +1 -1
  57. package/dist/elements/Localizer/LocalizerLabel/index.scss +7 -3
  58. package/dist/elements/Locked/index.d.ts +8 -0
  59. package/dist/elements/Locked/index.d.ts.map +1 -0
  60. package/dist/elements/Locked/index.js +72 -0
  61. package/dist/elements/Locked/index.js.map +1 -0
  62. package/dist/elements/Locked/index.scss +14 -0
  63. package/dist/elements/Pagination/index.d.ts.map +1 -1
  64. package/dist/elements/Pagination/index.js +1 -1
  65. package/dist/elements/Pagination/index.js.map +1 -1
  66. package/dist/elements/PerPage/index.d.ts +5 -5
  67. package/dist/elements/PerPage/index.d.ts.map +1 -1
  68. package/dist/elements/PerPage/index.js +2 -1
  69. package/dist/elements/PerPage/index.js.map +1 -1
  70. package/dist/elements/Pill/index.scss +3 -1
  71. package/dist/elements/Popup/PopupTrigger/index.d.ts +1 -0
  72. package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
  73. package/dist/elements/Popup/PopupTrigger/index.js +3 -2
  74. package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
  75. package/dist/elements/Popup/PopupTrigger/index.scss +12 -0
  76. package/dist/elements/Popup/index.d.ts +1 -0
  77. package/dist/elements/Popup/index.d.ts.map +1 -1
  78. package/dist/elements/Popup/index.js +6 -3
  79. package/dist/elements/Popup/index.js.map +1 -1
  80. package/dist/elements/Popup/index.scss +18 -1
  81. package/dist/elements/PreviewButton/usePreviewURL.d.ts.map +1 -1
  82. package/dist/elements/PreviewButton/usePreviewURL.js +11 -3
  83. package/dist/elements/PreviewButton/usePreviewURL.js.map +1 -1
  84. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  85. package/dist/elements/PublishButton/index.js +97 -46
  86. package/dist/elements/PublishButton/index.js.map +1 -1
  87. package/dist/elements/PublishMany/index.js +2 -1
  88. package/dist/elements/PublishMany/index.js.map +1 -1
  89. package/dist/elements/ReactSelect/index.scss +4 -0
  90. package/dist/elements/RelationshipTable/TableWrapper.d.ts +8 -0
  91. package/dist/elements/RelationshipTable/TableWrapper.d.ts.map +1 -0
  92. package/dist/elements/RelationshipTable/TableWrapper.js +69 -0
  93. package/dist/elements/RelationshipTable/TableWrapper.js.map +1 -0
  94. package/dist/elements/RelationshipTable/cells/DrawerLink/index.d.ts +8 -0
  95. package/dist/elements/RelationshipTable/cells/DrawerLink/index.d.ts.map +1 -0
  96. package/dist/elements/RelationshipTable/cells/DrawerLink/index.js +82 -0
  97. package/dist/elements/RelationshipTable/cells/DrawerLink/index.js.map +1 -0
  98. package/dist/elements/RelationshipTable/cells/DrawerLink/index.scss +4 -0
  99. package/dist/elements/RelationshipTable/index.d.ts +15 -0
  100. package/dist/elements/RelationshipTable/index.d.ts.map +1 -0
  101. package/dist/elements/RelationshipTable/index.js +445 -0
  102. package/dist/elements/RelationshipTable/index.js.map +1 -0
  103. package/dist/elements/RelationshipTable/index.scss +26 -0
  104. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  105. package/dist/elements/SelectRow/index.js +60 -29
  106. package/dist/elements/SelectRow/index.js.map +1 -1
  107. package/dist/elements/SortColumn/index.d.ts +1 -0
  108. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  109. package/dist/elements/SortColumn/index.js +29 -17
  110. package/dist/elements/SortColumn/index.js.map +1 -1
  111. package/dist/elements/SortColumn/index.scss +10 -1
  112. package/dist/elements/Status/index.js +1 -1
  113. package/dist/elements/Status/index.js.map +1 -1
  114. package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts +2 -3
  115. package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts.map +1 -1
  116. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +43 -40
  117. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  118. package/dist/elements/Table/DefaultCell/fields/Relationship/index.scss +0 -3
  119. package/dist/elements/Table/DefaultCell/fields/index.d.ts +1 -0
  120. package/dist/elements/Table/DefaultCell/fields/index.d.ts.map +1 -1
  121. package/dist/elements/Table/DefaultCell/fields/index.js +1 -0
  122. package/dist/elements/Table/DefaultCell/fields/index.js.map +1 -1
  123. package/dist/elements/Table/RenderCell.d.ts +11 -0
  124. package/dist/elements/Table/RenderCell.d.ts.map +1 -0
  125. package/dist/elements/Table/RenderCell.js +30 -0
  126. package/dist/elements/Table/RenderCell.js.map +1 -0
  127. package/dist/elements/Table/index.d.ts +3 -6
  128. package/dist/elements/Table/index.d.ts.map +1 -1
  129. package/dist/elements/Table/index.js +36 -31
  130. package/dist/elements/Table/index.js.map +1 -1
  131. package/dist/elements/Table/index.scss +50 -0
  132. package/dist/elements/TableColumns/buildColumnState.d.ts +5 -2
  133. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  134. package/dist/elements/TableColumns/buildColumnState.js +35 -22
  135. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  136. package/dist/elements/TableColumns/index.d.ts +5 -0
  137. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  138. package/dist/elements/TableColumns/index.js +107 -74
  139. package/dist/elements/TableColumns/index.js.map +1 -1
  140. package/dist/elements/Tooltip/index.d.ts +1 -0
  141. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  142. package/dist/elements/Tooltip/index.js +15 -13
  143. package/dist/elements/Tooltip/index.js.map +1 -1
  144. package/dist/elements/Tooltip/index.scss +2 -2
  145. package/dist/elements/UnpublishMany/index.js +2 -1
  146. package/dist/elements/UnpublishMany/index.js.map +1 -1
  147. package/dist/elements/WhereBuilder/Condition/index.js +32 -30
  148. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  149. package/dist/exports/client/{CodeEditor-CHKRX3U2.js → CodeEditor-FARZ6UIX.js} +6 -4
  150. package/dist/exports/client/CodeEditor-FARZ6UIX.js.map +8 -0
  151. package/dist/exports/client/{DatePicker-OLRZVTAD.js → DatePicker-NBYDOP2X.js} +2 -2
  152. package/dist/exports/client/chunk-6IWEPNUV.js +14 -0
  153. package/dist/exports/client/chunk-6IWEPNUV.js.map +8 -0
  154. package/dist/exports/client/{chunk-JINNHJP7.js → chunk-6MRITTMD.js} +3 -3
  155. package/dist/exports/client/{chunk-JINNHJP7.js.map → chunk-6MRITTMD.js.map} +4 -4
  156. package/dist/exports/client/index.d.ts +1 -0
  157. package/dist/exports/client/index.d.ts.map +1 -1
  158. package/dist/exports/client/index.js +19 -19
  159. package/dist/exports/client/index.js.map +4 -4
  160. package/dist/exports/shared/index.d.ts +3 -0
  161. package/dist/exports/shared/index.d.ts.map +1 -1
  162. package/dist/exports/shared/index.js +2 -2
  163. package/dist/exports/shared/index.js.map +4 -4
  164. package/dist/fields/Array/ArrayRow.js +2 -2
  165. package/dist/fields/Array/ArrayRow.js.map +1 -1
  166. package/dist/fields/Blocks/BlockRow.js +2 -2
  167. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  168. package/dist/fields/Collapsible/index.d.ts +16 -16
  169. package/dist/fields/Collapsible/index.d.ts.map +1 -1
  170. package/dist/fields/Group/index.js +2 -2
  171. package/dist/fields/Group/index.js.map +1 -1
  172. package/dist/fields/Join/index.d.ts +9 -0
  173. package/dist/fields/Join/index.d.ts.map +1 -0
  174. package/dist/fields/Join/index.js +75 -0
  175. package/dist/fields/Join/index.js.map +1 -0
  176. package/dist/fields/Number/index.js +1 -1
  177. package/dist/fields/Number/index.js.map +1 -1
  178. package/dist/fields/Password/index.js +29 -25
  179. package/dist/fields/Password/index.js.map +1 -1
  180. package/dist/fields/Relationship/select-components/SingleValue/index.d.ts.map +1 -1
  181. package/dist/fields/Relationship/select-components/SingleValue/index.js +11 -13
  182. package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
  183. package/dist/fields/Row/index.scss +3 -0
  184. package/dist/fields/Textarea/index.d.ts.map +1 -1
  185. package/dist/fields/Textarea/index.js +2 -0
  186. package/dist/fields/Textarea/index.js.map +1 -1
  187. package/dist/fields/Upload/RelationshipContent/index.js +28 -29
  188. package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
  189. package/dist/fields/Upload/UploadCard/index.scss +0 -1
  190. package/dist/fields/index.d.ts.map +1 -1
  191. package/dist/fields/index.js +2 -0
  192. package/dist/fields/index.js.map +1 -1
  193. package/dist/forms/Form/index.js +6 -2
  194. package/dist/forms/Form/index.js.map +1 -1
  195. package/dist/forms/NullifyField/index.d.ts.map +1 -1
  196. package/dist/forms/NullifyField/index.js +1 -0
  197. package/dist/forms/NullifyField/index.js.map +1 -1
  198. package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
  199. package/dist/forms/RenderFields/RenderField.js +3 -1
  200. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  201. package/dist/forms/RenderFields/index.d.ts.map +1 -1
  202. package/dist/forms/RenderFields/index.js +18 -15
  203. package/dist/forms/RenderFields/index.js.map +1 -1
  204. package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  205. package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +3 -4
  206. package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
  207. package/dist/forms/buildStateFromSchema/index.d.ts +2 -0
  208. package/dist/forms/buildStateFromSchema/index.d.ts.map +1 -1
  209. package/dist/forms/buildStateFromSchema/index.js.map +1 -1
  210. package/dist/forms/useField/index.js +203 -111
  211. package/dist/forms/useField/index.js.map +1 -1
  212. package/dist/hooks/useDelay.js +48 -15
  213. package/dist/hooks/useDelay.js.map +1 -1
  214. package/dist/hooks/useDelayedRender.js +71 -32
  215. package/dist/hooks/useDelayedRender.js.map +1 -1
  216. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  217. package/dist/hooks/usePayloadAPI.js.map +1 -1
  218. package/dist/icons/Chevron/index.d.ts +3 -3
  219. package/dist/icons/Chevron/index.d.ts.map +1 -1
  220. package/dist/icons/Chevron/index.js +4 -4
  221. package/dist/icons/Chevron/index.js.map +1 -1
  222. package/dist/icons/Chevron/index.scss +9 -1
  223. package/dist/icons/Lock/index.d.ts +6 -0
  224. package/dist/icons/Lock/index.d.ts.map +1 -0
  225. package/dist/icons/Lock/index.js +27 -0
  226. package/dist/icons/Lock/index.js.map +1 -0
  227. package/dist/icons/Lock/index.scss +8 -0
  228. package/dist/providers/Config/createClientConfig/collections.d.ts.map +1 -1
  229. package/dist/providers/Config/createClientConfig/collections.js +11 -1
  230. package/dist/providers/Config/createClientConfig/collections.js.map +1 -1
  231. package/dist/providers/Config/createClientConfig/fields.d.ts.map +1 -1
  232. package/dist/providers/Config/createClientConfig/fields.js +3 -0
  233. package/dist/providers/Config/createClientConfig/fields.js.map +1 -1
  234. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  235. package/dist/providers/DocumentInfo/index.js +101 -6
  236. package/dist/providers/DocumentInfo/index.js.map +1 -1
  237. package/dist/providers/DocumentInfo/types.d.ts +32 -27
  238. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  239. package/dist/providers/DocumentInfo/types.js.map +1 -1
  240. package/dist/providers/ListQuery/index.d.ts +5 -5
  241. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  242. package/dist/providers/ListQuery/index.js.map +1 -1
  243. package/dist/providers/Preferences/index.js +3 -1
  244. package/dist/providers/Preferences/index.js.map +1 -1
  245. package/dist/providers/Root/index.d.ts.map +1 -1
  246. package/dist/providers/Root/index.js +2 -2
  247. package/dist/providers/Root/index.js.map +1 -1
  248. package/dist/providers/Selection/index.d.ts +2 -1
  249. package/dist/providers/Selection/index.d.ts.map +1 -1
  250. package/dist/providers/Selection/index.js +23 -8
  251. package/dist/providers/Selection/index.js.map +1 -1
  252. package/dist/providers/Theme/index.d.ts +0 -1
  253. package/dist/providers/Theme/index.d.ts.map +1 -1
  254. package/dist/providers/Theme/index.js +29 -21
  255. package/dist/providers/Theme/index.js.map +1 -1
  256. package/dist/providers/Translation/index.d.ts.map +1 -1
  257. package/dist/providers/Translation/index.js +5 -7
  258. package/dist/providers/Translation/index.js.map +1 -1
  259. package/dist/styles.css +1 -1
  260. package/dist/utilities/buildFormState.d.ts +9 -3
  261. package/dist/utilities/buildFormState.d.ts.map +1 -1
  262. package/dist/utilities/buildFormState.js +82 -4
  263. package/dist/utilities/buildFormState.js.map +1 -1
  264. package/dist/utilities/deepMerge.d.ts +12 -0
  265. package/dist/utilities/deepMerge.d.ts.map +1 -0
  266. package/dist/utilities/deepMerge.js +25 -0
  267. package/dist/utilities/deepMerge.js.map +1 -0
  268. package/dist/utilities/getFormState.d.ts +8 -2
  269. package/dist/utilities/getFormState.d.ts.map +1 -1
  270. package/dist/utilities/getFormState.js +3 -1
  271. package/dist/utilities/getFormState.js.map +1 -1
  272. package/dist/utilities/handleBackToDashboard.d.ts +8 -0
  273. package/dist/utilities/handleBackToDashboard.d.ts.map +1 -0
  274. package/dist/utilities/handleBackToDashboard.js +12 -0
  275. package/dist/utilities/handleBackToDashboard.js.map +1 -0
  276. package/dist/utilities/handleGoBack.d.ts +9 -0
  277. package/dist/utilities/handleGoBack.d.ts.map +1 -0
  278. package/dist/utilities/handleGoBack.js +13 -0
  279. package/dist/utilities/handleGoBack.js.map +1 -0
  280. package/dist/utilities/handleTakeOver.d.ts +7 -0
  281. package/dist/utilities/handleTakeOver.d.ts.map +1 -0
  282. package/dist/utilities/handleTakeOver.js +27 -0
  283. package/dist/utilities/handleTakeOver.js.map +1 -0
  284. package/package.json +14 -14
  285. package/dist/exports/client/CodeEditor-CHKRX3U2.js.map +0 -8
  286. package/dist/exports/client/chunk-BGA6EPOL.js +0 -14
  287. package/dist/exports/client/chunk-BGA6EPOL.js.map +0 -8
  288. /package/dist/exports/client/{DatePicker-OLRZVTAD.js.map → DatePicker-NBYDOP2X.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { useCallback, useMemo, useRef } from 'react';
4
5
  import { useThrottledEffect } from '../../hooks/useThrottledEffect.js';
5
6
  import { useAuth } from '../../providers/Auth/index.js';
@@ -15,18 +16,19 @@ import { useForm, useFormFields, useFormInitializing, useFormModified, useFormPr
15
16
  * @see https://payloadcms.com/docs/admin/hooks#usefield
16
17
  */
17
18
  export const useField = options => {
19
+ const $ = _c(59);
18
20
  const {
19
- disableFormData = false,
21
+ disableFormData: t0,
20
22
  hasRows,
21
23
  validate
22
24
  } = options;
25
+ const disableFormData = t0 === undefined ? false : t0;
23
26
  const {
24
27
  path: pathFromContext,
25
28
  permissions,
26
29
  readOnly,
27
30
  schemaPath
28
31
  } = useFieldProps();
29
- // Prioritize passed in path over context path. If the context path should be prioritized (which is the case for top-level useField calls in fields), it should be passed in as the options path.
30
32
  const path = options.path || pathFromContext;
31
33
  const submitted = useFormSubmitted();
32
34
  const processing = useFormProcessing();
@@ -39,13 +41,24 @@ export const useField = options => {
39
41
  collectionSlug
40
42
  } = useDocumentInfo();
41
43
  const operation = useOperation();
44
+ let t1;
45
+ if ($[0] !== path) {
46
+ t1 = t2 => {
47
+ const [fields, dispatch] = t2;
48
+ return {
49
+ dispatchField: dispatch,
50
+ field: fields && fields?.[path] || null
51
+ };
52
+ };
53
+ $[0] = path;
54
+ $[1] = t1;
55
+ } else {
56
+ t1 = $[1];
57
+ }
42
58
  const {
43
59
  dispatchField,
44
60
  field
45
- } = useFormFields(([fields, dispatch]) => ({
46
- dispatchField: dispatch,
47
- field: fields && fields?.[path] || null
48
- }));
61
+ } = useFormFields(t1);
49
62
  const {
50
63
  t
51
64
  } = useTranslation();
@@ -62,120 +75,199 @@ export const useField = options => {
62
75
  const filterOptions = field?.filterOptions;
63
76
  const value = field?.value;
64
77
  const initialValue = field?.initialValue;
65
- const valid = typeof field?.valid === 'boolean' ? field.valid : true;
78
+ const valid = typeof field?.valid === "boolean" ? field.valid : true;
66
79
  const showError = valid === false && submitted;
67
80
  const prevValid = useRef(valid);
68
81
  const prevErrorMessage = useRef(field?.errorMessage);
69
- // Method to return from `useField`, used to
70
- // update field values from field component(s)
71
- const setValue = useCallback((e, disableModifyingForm = false) => {
72
- const val = e && e.target ? e.target.value : e;
73
- dispatchField({
74
- type: 'UPDATE',
75
- disableFormData: disableFormData || hasRows && val > 0,
76
- path,
77
- value: val
78
- });
79
- if (!disableModifyingForm) {
80
- if (typeof setModified === 'function') {
81
- // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:
82
- // 1. Text field: someone types in it in an unmodified form
83
- // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!
84
- // 3. Type something in text field
85
- // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)
86
- // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, "saved successfully" toast appears
87
- // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way
88
- // until a NEW change happens. Due to this, the "Leave without saving" modal appears even though it should not when leaving the page fast immediately after saving the document.
89
- // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run
90
- // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster
91
- // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.
92
- // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.
93
- // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.
94
- if (modified === false) {
95
- // Update modified state after field value comes back
96
- // to avoid cursor jump caused by state value / DOM mismatch
97
- setTimeout(() => {
98
- setModified(true);
99
- }, 10);
82
+ let t2;
83
+ if ($[2] !== dispatchField || $[3] !== disableFormData || $[4] !== hasRows || $[5] !== path || $[6] !== setModified || $[7] !== modified) {
84
+ t2 = (e, t3) => {
85
+ const disableModifyingForm = t3 === undefined ? false : t3;
86
+ const val = e && e.target ? e.target.value : e;
87
+ dispatchField({
88
+ type: "UPDATE",
89
+ disableFormData: disableFormData || hasRows && val > 0,
90
+ path,
91
+ value: val
92
+ });
93
+ if (!disableModifyingForm) {
94
+ if (typeof setModified === "function") {
95
+ if (modified === false) {
96
+ setTimeout(() => {
97
+ setModified(true);
98
+ }, 10);
99
+ }
100
100
  }
101
101
  }
102
- }
103
- }, [setModified, path, dispatchField, disableFormData, hasRows, modified]);
104
- // Store result from hook as ref
105
- // to prevent unnecessary rerenders
106
- const result = useMemo(() => ({
107
- errorMessage: field?.errorMessage,
108
- errorPaths: field?.errorPaths || [],
109
- filterOptions,
110
- formInitializing: initializing,
111
- formProcessing: processing,
112
- formSubmitted: submitted,
113
- initialValue,
114
- path,
115
- permissions,
116
- readOnly: readOnly || false,
117
- rows: field?.rows,
118
- schemaPath,
119
- setValue,
120
- showError,
121
- valid: field?.valid,
122
- value
123
- }), [field?.errorMessage, field?.rows, field?.valid, field?.errorPaths, processing, setValue, showError, submitted, value, initialValue, path, schemaPath, readOnly, permissions, filterOptions, initializing]);
124
- // Throttle the validate function
125
- useThrottledEffect(() => {
126
- const validateField = async () => {
127
- let valueToValidate = value;
128
- if (field?.rows && Array.isArray(field.rows)) {
129
- valueToValidate = getDataByPath(path);
130
- }
131
- let errorMessage = prevErrorMessage.current;
132
- let valid_0 = prevValid.current;
133
- const isValid = typeof validate === 'function' ? await validate(valueToValidate, {
134
- id,
135
- collectionSlug,
136
- data: getData(),
137
- operation,
138
- preferences: {},
139
- req: {
140
- payload: {
141
- config
102
+ };
103
+ $[2] = dispatchField;
104
+ $[3] = disableFormData;
105
+ $[4] = hasRows;
106
+ $[5] = path;
107
+ $[6] = setModified;
108
+ $[7] = modified;
109
+ $[8] = t2;
110
+ } else {
111
+ t2 = $[8];
112
+ }
113
+ const setValue = t2;
114
+ field?.errorMessage;
115
+ field?.rows;
116
+ field?.valid;
117
+ field?.errorPaths;
118
+ let t3;
119
+ const t4 = field?.errorMessage;
120
+ let t5;
121
+ if ($[9] !== field?.errorPaths) {
122
+ t5 = field?.errorPaths || [];
123
+ $[9] = field?.errorPaths;
124
+ $[10] = t5;
125
+ } else {
126
+ t5 = $[10];
127
+ }
128
+ const t6 = readOnly || false;
129
+ const t7 = field?.rows;
130
+ const t8 = field?.valid;
131
+ let t9;
132
+ if ($[11] !== t4 || $[12] !== t5 || $[13] !== filterOptions || $[14] !== initializing || $[15] !== processing || $[16] !== submitted || $[17] !== initialValue || $[18] !== path || $[19] !== permissions || $[20] !== t6 || $[21] !== t7 || $[22] !== schemaPath || $[23] !== setValue || $[24] !== showError || $[25] !== t8 || $[26] !== value) {
133
+ t9 = {
134
+ errorMessage: t4,
135
+ errorPaths: t5,
136
+ filterOptions,
137
+ formInitializing: initializing,
138
+ formProcessing: processing,
139
+ formSubmitted: submitted,
140
+ initialValue,
141
+ path,
142
+ permissions,
143
+ readOnly: t6,
144
+ rows: t7,
145
+ schemaPath,
146
+ setValue,
147
+ showError,
148
+ valid: t8,
149
+ value
150
+ };
151
+ $[11] = t4;
152
+ $[12] = t5;
153
+ $[13] = filterOptions;
154
+ $[14] = initializing;
155
+ $[15] = processing;
156
+ $[16] = submitted;
157
+ $[17] = initialValue;
158
+ $[18] = path;
159
+ $[19] = permissions;
160
+ $[20] = t6;
161
+ $[21] = t7;
162
+ $[22] = schemaPath;
163
+ $[23] = setValue;
164
+ $[24] = showError;
165
+ $[25] = t8;
166
+ $[26] = value;
167
+ $[27] = t9;
168
+ } else {
169
+ t9 = $[27];
170
+ }
171
+ t3 = t9;
172
+ const result = t3;
173
+ let t10;
174
+ if ($[28] !== value || $[29] !== field || $[30] !== getDataByPath || $[31] !== path || $[32] !== validate || $[33] !== id || $[34] !== collectionSlug || $[35] !== getData || $[36] !== operation || $[37] !== config || $[38] !== t || $[39] !== user || $[40] !== getSiblingData || $[41] !== disableFormData || $[42] !== hasRows || $[43] !== dispatchField) {
175
+ t10 = () => {
176
+ const validateField = async () => {
177
+ let valueToValidate = value;
178
+ if (field?.rows && Array.isArray(field.rows)) {
179
+ valueToValidate = getDataByPath(path);
180
+ }
181
+ let errorMessage = prevErrorMessage.current;
182
+ let valid_0 = prevValid.current;
183
+ const isValid = typeof validate === "function" ? await validate(valueToValidate, {
184
+ id,
185
+ collectionSlug,
186
+ data: getData(),
187
+ operation,
188
+ preferences: {},
189
+ req: {
190
+ payload: {
191
+ config
192
+ },
193
+ t,
194
+ user
142
195
  },
143
- t,
144
- user
145
- },
146
- siblingData: getSiblingData(path)
147
- }) : true;
148
- if (typeof isValid === 'string') {
149
- valid_0 = false;
150
- errorMessage = isValid;
151
- } else if (typeof isValid === 'boolean') {
152
- valid_0 = isValid;
153
- errorMessage = undefined;
154
- }
155
- // Only dispatch if the validation result has changed
156
- // This will prevent unnecessary rerenders
157
- if (valid_0 !== prevValid.current || errorMessage !== prevErrorMessage.current) {
158
- prevValid.current = valid_0;
159
- prevErrorMessage.current = errorMessage;
160
- const update = {
161
- type: 'UPDATE',
162
- errorMessage,
163
- path,
164
- rows: field?.rows,
165
- valid: valid_0,
166
- validate,
167
- value
168
- };
169
- if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {
170
- update.disableFormData = true;
196
+ siblingData: getSiblingData(path)
197
+ }) : true;
198
+ if (typeof isValid === "string") {
199
+ valid_0 = false;
200
+ errorMessage = isValid;
201
+ } else {
202
+ if (typeof isValid === "boolean") {
203
+ valid_0 = isValid;
204
+ errorMessage = undefined;
205
+ }
171
206
  }
172
- if (typeof dispatchField === 'function') {
173
- dispatchField(update);
207
+ if (valid_0 !== prevValid.current || errorMessage !== prevErrorMessage.current) {
208
+ prevValid.current = valid_0;
209
+ prevErrorMessage.current = errorMessage;
210
+ const update = {
211
+ type: "UPDATE",
212
+ errorMessage,
213
+ path,
214
+ rows: field?.rows,
215
+ valid: valid_0,
216
+ validate,
217
+ value
218
+ };
219
+ if (disableFormData || (hasRows ? typeof value === "number" && value > 0 : false)) {
220
+ update.disableFormData = true;
221
+ }
222
+ if (typeof dispatchField === "function") {
223
+ dispatchField(update);
224
+ }
174
225
  }
175
- }
226
+ };
227
+ validateField();
176
228
  };
177
- void validateField();
178
- }, 150, [value, disableFormData, dispatchField, getData, getSiblingData, getDataByPath, id, operation, path, user, validate, field?.rows, collectionSlug]);
229
+ $[28] = value;
230
+ $[29] = field;
231
+ $[30] = getDataByPath;
232
+ $[31] = path;
233
+ $[32] = validate;
234
+ $[33] = id;
235
+ $[34] = collectionSlug;
236
+ $[35] = getData;
237
+ $[36] = operation;
238
+ $[37] = config;
239
+ $[38] = t;
240
+ $[39] = user;
241
+ $[40] = getSiblingData;
242
+ $[41] = disableFormData;
243
+ $[42] = hasRows;
244
+ $[43] = dispatchField;
245
+ $[44] = t10;
246
+ } else {
247
+ t10 = $[44];
248
+ }
249
+ const t11 = field?.rows;
250
+ let t12;
251
+ if ($[45] !== value || $[46] !== disableFormData || $[47] !== dispatchField || $[48] !== getData || $[49] !== getSiblingData || $[50] !== getDataByPath || $[51] !== id || $[52] !== operation || $[53] !== path || $[54] !== user || $[55] !== validate || $[56] !== t11 || $[57] !== collectionSlug) {
252
+ t12 = [value, disableFormData, dispatchField, getData, getSiblingData, getDataByPath, id, operation, path, user, validate, t11, collectionSlug];
253
+ $[45] = value;
254
+ $[46] = disableFormData;
255
+ $[47] = dispatchField;
256
+ $[48] = getData;
257
+ $[49] = getSiblingData;
258
+ $[50] = getDataByPath;
259
+ $[51] = id;
260
+ $[52] = operation;
261
+ $[53] = path;
262
+ $[54] = user;
263
+ $[55] = validate;
264
+ $[56] = t11;
265
+ $[57] = collectionSlug;
266
+ $[58] = t12;
267
+ } else {
268
+ t12 = $[58];
269
+ }
270
+ useThrottledEffect(t10, 150, t12);
179
271
  return result;
180
272
  };
181
273
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useMemo","useRef","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useOperation","useTranslation","useFieldProps","useForm","useFormFields","useFormInitializing","useFormModified","useFormProcessing","useFormSubmitted","useField","options","disableFormData","hasRows","validate","path","pathFromContext","permissions","readOnly","schemaPath","submitted","processing","initializing","user","id","collectionSlug","operation","dispatchField","field","fields","dispatch","t","config","getData","getDataByPath","getSiblingData","setModified","modified","filterOptions","value","initialValue","valid","showError","prevValid","prevErrorMessage","errorMessage","setValue","e","disableModifyingForm","val","target","type","setTimeout","result","errorPaths","formInitializing","formProcessing","formSubmitted","rows","validateField","valueToValidate","Array","isArray","current","isValid","data","preferences","req","payload","siblingData","undefined","update"],"sources":["../../../src/forms/useField/index.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest } from 'payload'\n\nimport { useCallback, useMemo, useRef } from 'react'\n\nimport type { UPDATE } from '../Form/types.js'\nimport type { FieldType, Options } from './types.js'\n\nexport type { FieldType, Options }\n\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useFieldProps } from '../FieldPropsProvider/index.js'\nimport {\n useForm,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../Form/context.js'\n\n/**\n * Get and set the value of a form field.\n *\n * @see https://payloadcms.com/docs/admin/hooks#usefield\n */\nexport const useField = <T,>(options: Options): FieldType<T> => {\n const { disableFormData = false, hasRows, validate } = options\n\n const { path: pathFromContext, permissions, readOnly, schemaPath } = useFieldProps()\n\n // Prioritize passed in path over context path. If the context path should be prioritized (which is the case for top-level useField calls in fields), it should be passed in as the options path.\n const path = options.path || pathFromContext\n\n const submitted = useFormSubmitted()\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n const { user } = useAuth()\n const { id, collectionSlug } = useDocumentInfo()\n const operation = useOperation()\n\n const { dispatchField, field } = useFormFields(([fields, dispatch]) => ({\n dispatchField: dispatch,\n field: (fields && fields?.[path]) || null,\n }))\n\n const { t } = useTranslation()\n const { config } = useConfig()\n\n const { getData, getDataByPath, getSiblingData, setModified } = useForm()\n const modified = useFormModified()\n\n const filterOptions = field?.filterOptions\n const value = field?.value as T\n const initialValue = field?.initialValue as T\n const valid = typeof field?.valid === 'boolean' ? field.valid : true\n const showError = valid === false && submitted\n\n const prevValid = useRef(valid)\n const prevErrorMessage = useRef(field?.errorMessage)\n\n // Method to return from `useField`, used to\n // update field values from field component(s)\n const setValue = useCallback(\n (e, disableModifyingForm = false) => {\n const val = e && e.target ? e.target.value : e\n\n dispatchField({\n type: 'UPDATE',\n disableFormData: disableFormData || (hasRows && val > 0),\n path,\n value: val,\n })\n\n if (!disableModifyingForm) {\n if (typeof setModified === 'function') {\n // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:\n // 1. Text field: someone types in it in an unmodified form\n // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!\n // 3. Type something in text field\n // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)\n // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, \"saved successfully\" toast appears\n // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way\n // until a NEW change happens. Due to this, the \"Leave without saving\" modal appears even though it should not when leaving the page fast immediately after saving the document.\n // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run\n // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster\n // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.\n // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.\n // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.\n if (modified === false) {\n // Update modified state after field value comes back\n // to avoid cursor jump caused by state value / DOM mismatch\n setTimeout(() => {\n setModified(true)\n }, 10)\n }\n }\n }\n },\n [setModified, path, dispatchField, disableFormData, hasRows, modified],\n )\n\n // Store result from hook as ref\n // to prevent unnecessary rerenders\n const result: FieldType<T> = useMemo(\n () => ({\n errorMessage: field?.errorMessage,\n errorPaths: field?.errorPaths || [],\n filterOptions,\n formInitializing: initializing,\n formProcessing: processing,\n formSubmitted: submitted,\n initialValue,\n path,\n permissions,\n readOnly: readOnly || false,\n rows: field?.rows,\n schemaPath,\n setValue,\n showError,\n valid: field?.valid,\n value,\n }),\n [\n field?.errorMessage,\n field?.rows,\n field?.valid,\n field?.errorPaths,\n processing,\n setValue,\n showError,\n submitted,\n value,\n initialValue,\n path,\n schemaPath,\n readOnly,\n permissions,\n filterOptions,\n initializing,\n ],\n )\n\n // Throttle the validate function\n useThrottledEffect(\n () => {\n const validateField = async () => {\n let valueToValidate = value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = getDataByPath(path)\n }\n\n let errorMessage: string | undefined = prevErrorMessage.current\n let valid: boolean | string = prevValid.current\n\n const isValid =\n typeof validate === 'function'\n ? await validate(valueToValidate, {\n id,\n collectionSlug,\n data: getData(),\n operation,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: getSiblingData(path),\n })\n : true\n\n if (typeof isValid === 'string') {\n valid = false\n errorMessage = isValid\n } else if (typeof isValid === 'boolean') {\n valid = isValid\n errorMessage = undefined\n }\n\n // Only dispatch if the validation result has changed\n // This will prevent unnecessary rerenders\n if (valid !== prevValid.current || errorMessage !== prevErrorMessage.current) {\n prevValid.current = valid\n prevErrorMessage.current = errorMessage\n\n const update: UPDATE = {\n type: 'UPDATE',\n errorMessage,\n path,\n rows: field?.rows,\n valid,\n validate,\n value,\n }\n\n if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {\n update.disableFormData = true\n }\n\n if (typeof dispatchField === 'function') {\n dispatchField(update)\n }\n }\n }\n\n void validateField()\n },\n 150,\n [\n value,\n disableFormData,\n dispatchField,\n getData,\n getSiblingData,\n getDataByPath,\n id,\n operation,\n path,\n user,\n validate,\n field?.rows,\n collectionSlug,\n ],\n )\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useCallback","useMemo","useRef","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useOperation","useTranslation","useFieldProps","useForm","useFormFields","useFormInitializing","useFormModified","useFormProcessing","useFormSubmitted","useField","options","$","disableFormData","t0","hasRows","validate","undefined","path","pathFromContext","permissions","readOnly","schemaPath","submitted","processing","initializing","user","id","collectionSlug","operation","t1","t2","fields","dispatch","dispatchField","field","t","config","getData","getDataByPath","getSiblingData","setModified","modified","filterOptions","value","initialValue","valid","showError","prevValid","prevErrorMessage","errorMessage","e","t3","disableModifyingForm","val","target","type","setTimeout","setValue","rows","errorPaths","t4","t5","t6","t7","t8","t9","formInitializing","formProcessing","formSubmitted","result","t10","validateField","valueToValidate","Array","isArray","current","valid_0","isValid","data","preferences","req","payload","siblingData","update","t11","t12"],"sources":["../../../src/forms/useField/index.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest } from 'payload'\n\nimport { useCallback, useMemo, useRef } from 'react'\n\nimport type { UPDATE } from '../Form/types.js'\nimport type { FieldType, Options } from './types.js'\n\nexport type { FieldType, Options }\n\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useFieldProps } from '../FieldPropsProvider/index.js'\nimport {\n useForm,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../Form/context.js'\n\n/**\n * Get and set the value of a form field.\n *\n * @see https://payloadcms.com/docs/admin/hooks#usefield\n */\nexport const useField = <T,>(options: Options): FieldType<T> => {\n const { disableFormData = false, hasRows, validate } = options\n\n const { path: pathFromContext, permissions, readOnly, schemaPath } = useFieldProps()\n\n // Prioritize passed in path over context path. If the context path should be prioritized (which is the case for top-level useField calls in fields), it should be passed in as the options path.\n const path = options.path || pathFromContext\n\n const submitted = useFormSubmitted()\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n const { user } = useAuth()\n const { id, collectionSlug } = useDocumentInfo()\n const operation = useOperation()\n\n const { dispatchField, field } = useFormFields(([fields, dispatch]) => ({\n dispatchField: dispatch,\n field: (fields && fields?.[path]) || null,\n }))\n\n const { t } = useTranslation()\n const { config } = useConfig()\n\n const { getData, getDataByPath, getSiblingData, setModified } = useForm()\n const modified = useFormModified()\n\n const filterOptions = field?.filterOptions\n const value = field?.value as T\n const initialValue = field?.initialValue as T\n const valid = typeof field?.valid === 'boolean' ? field.valid : true\n const showError = valid === false && submitted\n\n const prevValid = useRef(valid)\n const prevErrorMessage = useRef(field?.errorMessage)\n\n // Method to return from `useField`, used to\n // update field values from field component(s)\n const setValue = useCallback(\n (e, disableModifyingForm = false) => {\n const val = e && e.target ? e.target.value : e\n\n dispatchField({\n type: 'UPDATE',\n disableFormData: disableFormData || (hasRows && val > 0),\n path,\n value: val,\n })\n\n if (!disableModifyingForm) {\n if (typeof setModified === 'function') {\n // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:\n // 1. Text field: someone types in it in an unmodified form\n // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!\n // 3. Type something in text field\n // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)\n // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, \"saved successfully\" toast appears\n // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way\n // until a NEW change happens. Due to this, the \"Leave without saving\" modal appears even though it should not when leaving the page fast immediately after saving the document.\n // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run\n // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster\n // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.\n // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.\n // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.\n if (modified === false) {\n // Update modified state after field value comes back\n // to avoid cursor jump caused by state value / DOM mismatch\n setTimeout(() => {\n setModified(true)\n }, 10)\n }\n }\n }\n },\n [setModified, path, dispatchField, disableFormData, hasRows, modified],\n )\n\n // Store result from hook as ref\n // to prevent unnecessary rerenders\n const result: FieldType<T> = useMemo(\n () => ({\n errorMessage: field?.errorMessage,\n errorPaths: field?.errorPaths || [],\n filterOptions,\n formInitializing: initializing,\n formProcessing: processing,\n formSubmitted: submitted,\n initialValue,\n path,\n permissions,\n readOnly: readOnly || false,\n rows: field?.rows,\n schemaPath,\n setValue,\n showError,\n valid: field?.valid,\n value,\n }),\n [\n field?.errorMessage,\n field?.rows,\n field?.valid,\n field?.errorPaths,\n processing,\n setValue,\n showError,\n submitted,\n value,\n initialValue,\n path,\n schemaPath,\n readOnly,\n permissions,\n filterOptions,\n initializing,\n ],\n )\n\n // Throttle the validate function\n useThrottledEffect(\n () => {\n const validateField = async () => {\n let valueToValidate = value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = getDataByPath(path)\n }\n\n let errorMessage: string | undefined = prevErrorMessage.current\n let valid: boolean | string = prevValid.current\n\n const isValid =\n typeof validate === 'function'\n ? await validate(valueToValidate, {\n id,\n collectionSlug,\n data: getData(),\n operation,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: getSiblingData(path),\n })\n : true\n\n if (typeof isValid === 'string') {\n valid = false\n errorMessage = isValid\n } else if (typeof isValid === 'boolean') {\n valid = isValid\n errorMessage = undefined\n }\n\n // Only dispatch if the validation result has changed\n // This will prevent unnecessary rerenders\n if (valid !== prevValid.current || errorMessage !== prevErrorMessage.current) {\n prevValid.current = valid\n prevErrorMessage.current = errorMessage\n\n const update: UPDATE = {\n type: 'UPDATE',\n errorMessage,\n path,\n rows: field?.rows,\n valid,\n validate,\n value,\n }\n\n if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {\n update.disableFormData = true\n }\n\n if (typeof dispatchField === 'function') {\n dispatchField(update)\n }\n }\n }\n\n void validateField()\n },\n 150,\n [\n value,\n disableFormData,\n dispatchField,\n getData,\n getSiblingData,\n getDataByPath,\n id,\n operation,\n path,\n user,\n validate,\n field?.rows,\n collectionSlug,\n ],\n )\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,24 +1,57 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import * as React from 'react';
4
- export const useDelay = (delay, triggerOnMount = false) => {
5
+ export const useDelay = (delay, t0) => {
6
+ const $ = _c(9);
7
+ const triggerOnMount = t0 === undefined ? false : t0;
5
8
  const [hasDelayed, setHasDelayed] = React.useState(false);
6
9
  const triggerTimeoutRef = React.useRef(undefined);
7
- const triggerDelay = React.useCallback(() => {
8
- setHasDelayed(false);
9
- clearTimeout(triggerTimeoutRef.current);
10
- triggerTimeoutRef.current = setTimeout(() => {
11
- setHasDelayed(true);
12
- }, delay);
13
- return () => {
10
+ let t1;
11
+ if ($[0] !== delay) {
12
+ t1 = () => {
13
+ setHasDelayed(false);
14
14
  clearTimeout(triggerTimeoutRef.current);
15
+ triggerTimeoutRef.current = setTimeout(() => {
16
+ setHasDelayed(true);
17
+ }, delay);
18
+ return () => {
19
+ clearTimeout(triggerTimeoutRef.current);
20
+ };
15
21
  };
16
- }, [delay]);
17
- React.useEffect(() => {
18
- if (triggerOnMount) {
19
- triggerDelay();
20
- }
21
- }, [triggerDelay, triggerOnMount]);
22
- return [hasDelayed, triggerDelay];
22
+ $[0] = delay;
23
+ $[1] = t1;
24
+ } else {
25
+ t1 = $[1];
26
+ }
27
+ const triggerDelay = t1;
28
+ let t2;
29
+ let t3;
30
+ if ($[2] !== triggerOnMount || $[3] !== triggerDelay) {
31
+ t2 = () => {
32
+ if (triggerOnMount) {
33
+ triggerDelay();
34
+ }
35
+ };
36
+ t3 = [triggerDelay, triggerOnMount];
37
+ $[2] = triggerOnMount;
38
+ $[3] = triggerDelay;
39
+ $[4] = t2;
40
+ $[5] = t3;
41
+ } else {
42
+ t2 = $[4];
43
+ t3 = $[5];
44
+ }
45
+ React.useEffect(t2, t3);
46
+ let t4;
47
+ if ($[6] !== hasDelayed || $[7] !== triggerDelay) {
48
+ t4 = [hasDelayed, triggerDelay];
49
+ $[6] = hasDelayed;
50
+ $[7] = triggerDelay;
51
+ $[8] = t4;
52
+ } else {
53
+ t4 = $[8];
54
+ }
55
+ return t4;
23
56
  };
24
57
  //# sourceMappingURL=useDelay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDelay.js","names":["React","useDelay","delay","triggerOnMount","hasDelayed","setHasDelayed","useState","triggerTimeoutRef","useRef","undefined","triggerDelay","useCallback","clearTimeout","current","setTimeout","useEffect"],"sources":["../../src/hooks/useDelay.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\ntype Result = [boolean, () => void]\nexport const useDelay = (delay: number, triggerOnMount = false): Result => {\n const [hasDelayed, setHasDelayed] = React.useState(false)\n const triggerTimeoutRef = React.useRef<NodeJS.Timeout>(undefined)\n\n const triggerDelay = React.useCallback(() => {\n setHasDelayed(false)\n clearTimeout(triggerTimeoutRef.current)\n triggerTimeoutRef.current = setTimeout(() => {\n setHasDelayed(true)\n }, delay)\n\n return () => {\n clearTimeout(triggerTimeoutRef.current)\n }\n }, [delay])\n\n React.useEffect(() => {\n if (triggerOnMount) {\n triggerDelay()\n }\n }, [triggerDelay, triggerOnMount])\n\n return [hasDelayed, triggerDelay]\n}\n"],"mappings":"AAAA;;AACA,YAAYA,KAAA,MAAW;AAGvB,OAAO,MAAMC,QAAA,GAAWA,CAACC,KAAA,EAAeC,cAAA,GAAiB,KAAK;EAC5D,MAAM,CAACC,UAAA,EAAYC,aAAA,CAAc,GAAGL,KAAA,CAAMM,QAAQ,CAAC;EACnD,MAAMC,iBAAA,GAAoBP,KAAA,CAAMQ,MAAM,CAAiBC,SAAA;EAEvD,MAAMC,YAAA,GAAeV,KAAA,CAAMW,WAAW,CAAC;IACrCN,aAAA,CAAc;IACdO,YAAA,CAAaL,iBAAA,CAAkBM,OAAO;IACtCN,iBAAA,CAAkBM,OAAO,GAAGC,UAAA,CAAW;MACrCT,aAAA,CAAc;IAChB,GAAGH,KAAA;IAEH,OAAO;MACLU,YAAA,CAAaL,iBAAA,CAAkBM,OAAO;IACxC;EACF,GAAG,CAACX,KAAA,CAAM;EAEVF,KAAA,CAAMe,SAAS,CAAC;IACd,IAAIZ,cAAA,EAAgB;MAClBO,YAAA;IACF;EACF,GAAG,CAACA,YAAA,EAAcP,cAAA,CAAe;EAEjC,OAAO,CAACC,UAAA,EAAYM,YAAA,CAAa;AACnC","ignoreList":[]}
1
+ {"version":3,"file":"useDelay.js","names":["c","_c","React","useDelay","delay","t0","$","triggerOnMount","undefined","hasDelayed","setHasDelayed","useState","triggerTimeoutRef","useRef","t1","clearTimeout","current","setTimeout","triggerDelay","t2","t3","useEffect","t4"],"sources":["../../src/hooks/useDelay.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\ntype Result = [boolean, () => void]\nexport const useDelay = (delay: number, triggerOnMount = false): Result => {\n const [hasDelayed, setHasDelayed] = React.useState(false)\n const triggerTimeoutRef = React.useRef<NodeJS.Timeout>(undefined)\n\n const triggerDelay = React.useCallback(() => {\n setHasDelayed(false)\n clearTimeout(triggerTimeoutRef.current)\n triggerTimeoutRef.current = setTimeout(() => {\n setHasDelayed(true)\n }, delay)\n\n return () => {\n clearTimeout(triggerTimeoutRef.current)\n }\n }, [delay])\n\n React.useEffect(() => {\n if (triggerOnMount) {\n triggerDelay()\n }\n }, [triggerDelay, triggerOnMount])\n\n return [hasDelayed, triggerDelay]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,YAAYC,KAAA,MAAW;AAGvB,OAAO,MAAMC,QAAA,GAAWA,CAAAC,KAAA,EAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAL,EAAA;EAAgB,MAAAM,cAAA,GAAAF,EAAsB,KAAAG,SAAA,WAAtBH,EAAsB;EAC5D,OAAAI,UAAA,EAAAC,aAAA,IAAoCR,KAAA,CAAAS,QAAA,MAAe;EACnD,MAAAC,iBAAA,GAA0BV,KAAA,CAAAW,MAAA,CAAAL,SAA6B;EAAA,IAAAM,EAAA;EAAA,IAAAR,CAAA,QAAAF,KAAA;IAEhBU,EAAA,GAAAA,CAAA;MACrCJ,aAAA,MAAc;MACdK,YAAA,CAAaH,iBAAA,CAAAI,OAAyB;MACtCJ,iBAAA,CAAAI,OAAA,GAA4BC,UAAA;QAC1BP,aAAA,KAAc;MAAA,GACbN,KAAA;MAAA;QAGDW,YAAA,CAAaH,iBAAA,CAAAI,OAAyB;MAAA;IAAA;IAE1CV,CAAA,MAAAF,KAAA;IAAAE,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAVA,MAAAY,YAAA,GAAqBJ,EAUX;EAAA,IAAAK,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAd,CAAA,QAAAC,cAAA,IAAAD,CAAA,QAAAY,YAAA;IAEMC,EAAA,GAAAA,CAAA;MAAA,IACVZ,cAAA;QACFW,YAAA;MAAA;IAAA;IAEDE,EAAA,IAACF,YAAA,EAAcX,cAAA;IAAeD,CAAA,MAAAC,cAAA;IAAAD,CAAA,MAAAY,YAAA;IAAAZ,CAAA,MAAAa,EAAA;IAAAb,CAAA,MAAAc,EAAA;EAAA;IAAAD,EAAA,GAAAb,CAAA;IAAAc,EAAA,GAAAd,CAAA;EAAA;EAJjCJ,KAAA,CAAAmB,SAAA,CAAgBF,EAIhB,EAAGC,EAA8B;EAAA,IAAAE,EAAA;EAAA,IAAAhB,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAY,YAAA;IAE1BI,EAAA,IAACb,UAAA,EAAYS,YAAA;IAAaZ,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAY,YAAA;IAAAZ,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAAA,OAA1BgB,EAA0B;AAAA,CACnC","ignoreList":[]}
@@ -1,44 +1,83 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import * as React from 'react';
4
5
  import { useDelay } from './useDelay.js';
5
- export const useDelayedRender = ({
6
- delayBeforeShow,
7
- inTimeout,
8
- minShowTime,
9
- outTimeout,
10
- show
11
- }) => {
6
+ export const useDelayedRender = t0 => {
7
+ const $ = _c(13);
8
+ const {
9
+ delayBeforeShow,
10
+ inTimeout,
11
+ minShowTime,
12
+ outTimeout,
13
+ show
14
+ } = t0;
12
15
  const totalMountTime = inTimeout + minShowTime + outTimeout;
13
16
  const [hasDelayed, triggerDelay] = useDelay(delayBeforeShow);
14
17
  const [isMounted, setIsMounted] = React.useState(false);
15
18
  const [isUnmounting, setIsUnmounting] = React.useState(false);
16
19
  const onMountTimestampRef = React.useRef(0);
17
20
  const unmountTimeoutRef = React.useRef(undefined);
18
- const unmount = React.useCallback(() => {
19
- setIsUnmounting(true);
20
- unmountTimeoutRef.current = setTimeout(() => {
21
- setIsMounted(false);
22
- setIsUnmounting(false);
23
- }, outTimeout);
24
- }, [setIsUnmounting, outTimeout]);
25
- React.useEffect(() => {
26
- const shouldMount = hasDelayed && !isMounted && show;
27
- const shouldUnmount = isMounted && !show;
28
- if (shouldMount) {
29
- onMountTimestampRef.current = Date.now();
30
- setIsMounted(true);
31
- } else if (shouldUnmount) {
32
- const totalTimeMounted = Date.now() - onMountTimestampRef.current;
33
- const remainingTime = totalMountTime - totalTimeMounted;
34
- clearTimeout(unmountTimeoutRef.current);
35
- unmountTimeoutRef.current = setTimeout(unmount, Math.max(0, remainingTime));
36
- }
37
- }, [isMounted, show, unmount, totalMountTime, hasDelayed]);
38
- return {
39
- isMounted,
40
- isUnmounting,
41
- triggerDelayedRender: triggerDelay
42
- };
21
+ let t1;
22
+ if ($[0] !== outTimeout) {
23
+ t1 = () => {
24
+ setIsUnmounting(true);
25
+ unmountTimeoutRef.current = setTimeout(() => {
26
+ setIsMounted(false);
27
+ setIsUnmounting(false);
28
+ }, outTimeout);
29
+ };
30
+ $[0] = outTimeout;
31
+ $[1] = t1;
32
+ } else {
33
+ t1 = $[1];
34
+ }
35
+ const unmount = t1;
36
+ let t2;
37
+ let t3;
38
+ if ($[2] !== hasDelayed || $[3] !== isMounted || $[4] !== show || $[5] !== totalMountTime || $[6] !== unmount) {
39
+ t2 = () => {
40
+ const shouldMount = hasDelayed && !isMounted && show;
41
+ const shouldUnmount = isMounted && !show;
42
+ if (shouldMount) {
43
+ onMountTimestampRef.current = Date.now();
44
+ setIsMounted(true);
45
+ } else {
46
+ if (shouldUnmount) {
47
+ const totalTimeMounted = Date.now() - onMountTimestampRef.current;
48
+ const remainingTime = totalMountTime - totalTimeMounted;
49
+ clearTimeout(unmountTimeoutRef.current);
50
+ unmountTimeoutRef.current = setTimeout(unmount, Math.max(0, remainingTime));
51
+ }
52
+ }
53
+ };
54
+ t3 = [isMounted, show, unmount, totalMountTime, hasDelayed];
55
+ $[2] = hasDelayed;
56
+ $[3] = isMounted;
57
+ $[4] = show;
58
+ $[5] = totalMountTime;
59
+ $[6] = unmount;
60
+ $[7] = t2;
61
+ $[8] = t3;
62
+ } else {
63
+ t2 = $[7];
64
+ t3 = $[8];
65
+ }
66
+ React.useEffect(t2, t3);
67
+ let t4;
68
+ if ($[9] !== isMounted || $[10] !== isUnmounting || $[11] !== triggerDelay) {
69
+ t4 = {
70
+ isMounted,
71
+ isUnmounting,
72
+ triggerDelayedRender: triggerDelay
73
+ };
74
+ $[9] = isMounted;
75
+ $[10] = isUnmounting;
76
+ $[11] = triggerDelay;
77
+ $[12] = t4;
78
+ } else {
79
+ t4 = $[12];
80
+ }
81
+ return t4;
43
82
  };
44
83
  //# sourceMappingURL=useDelayedRender.js.map