@payloadcms/ui 3.74.0-internal.8fd38f1 → 3.74.0-internal.b0ecd5c

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 (53) hide show
  1. package/dist/elements/DocumentControls/index.d.ts +1 -0
  2. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  3. package/dist/elements/DocumentControls/index.js +6 -2
  4. package/dist/elements/DocumentControls/index.js.map +1 -1
  5. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  6. package/dist/elements/EditMany/DrawerContent.js +1 -5
  7. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  8. package/dist/elements/FolderView/FolderTypeField/index.d.ts.map +1 -1
  9. package/dist/elements/FolderView/FolderTypeField/index.js.map +1 -1
  10. package/dist/elements/Link/index.d.ts.map +1 -1
  11. package/dist/elements/Pill/index.d.ts.map +1 -1
  12. package/dist/elements/Pill/index.js +101 -31
  13. package/dist/elements/Pill/index.js.map +1 -1
  14. package/dist/elements/Popup/index.d.ts +11 -0
  15. package/dist/elements/Popup/index.d.ts.map +1 -1
  16. package/dist/elements/Popup/index.js +6 -1
  17. package/dist/elements/Popup/index.js.map +1 -1
  18. package/dist/elements/PublishButton/index.d.ts +3 -1
  19. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  20. package/dist/elements/PublishButton/index.js +1 -1
  21. package/dist/elements/PublishButton/index.js.map +1 -1
  22. package/dist/elements/UnpublishButton/index.d.ts +4 -1
  23. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  24. package/dist/elements/UnpublishButton/index.js +15 -4
  25. package/dist/elements/UnpublishButton/index.js.map +1 -1
  26. package/dist/exports/client/{CodeEditor-6KT2JS6X.js → CodeEditor-X3UZSEEZ.js} +2 -2
  27. package/dist/exports/client/{DatePicker-TDXLCEZV.js → DatePicker-GT6CXMEH.js} +2 -2
  28. package/dist/exports/client/{chunk-TBYRZYQJ.js → chunk-J46CQZ3T.js} +4 -4
  29. package/dist/exports/client/{chunk-TBYRZYQJ.js.map → chunk-J46CQZ3T.js.map} +3 -3
  30. package/dist/exports/client/{chunk-UN66UDCU.js → chunk-USMS5YRL.js} +1 -1
  31. package/dist/exports/client/{chunk-UN66UDCU.js.map → chunk-USMS5YRL.js.map} +1 -1
  32. package/dist/exports/client/index.d.ts +1 -0
  33. package/dist/exports/client/index.d.ts.map +1 -1
  34. package/dist/exports/client/index.js +12 -12
  35. package/dist/exports/client/index.js.map +4 -4
  36. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  37. package/dist/fields/Checkbox/Input.js +63 -47
  38. package/dist/fields/Checkbox/Input.js.map +1 -1
  39. package/dist/providers/Config/index.js +2 -2
  40. package/dist/providers/Config/index.js.map +1 -1
  41. package/dist/providers/Selection/index.d.ts.map +1 -1
  42. package/dist/providers/Selection/index.js +12 -1
  43. package/dist/providers/Selection/index.js.map +1 -1
  44. package/dist/utilities/buildFormState.d.ts +1 -1
  45. package/dist/utilities/buildFormState.d.ts.map +1 -1
  46. package/dist/utilities/buildFormState.js.map +1 -1
  47. package/dist/views/Edit/index.d.ts +1 -1
  48. package/dist/views/Edit/index.d.ts.map +1 -1
  49. package/dist/views/Edit/index.js +4 -2
  50. package/dist/views/Edit/index.js.map +1 -1
  51. package/package.json +6 -6
  52. /package/dist/exports/client/{CodeEditor-6KT2JS6X.js.map → CodeEditor-X3UZSEEZ.js.map} +0 -0
  53. /package/dist/exports/client/{DatePicker-TDXLCEZV.js.map → DatePicker-GT6CXMEH.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Checkbox/Input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAgB,MAAM,OAAO,CAAA;AAOpC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IACvE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAE9C,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA8DtD,CAAA"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Checkbox/Input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAqC,MAAM,OAAO,CAAA;AAOzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IACvE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAE9C,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAsEtD,CAAA"}
@@ -2,14 +2,14 @@
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
- import React, { useId } from 'react';
5
+ import React, { useEffect, useId, useState } from 'react';
6
6
  import { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js';
7
7
  import { FieldLabel } from '../../fields/FieldLabel/index.js';
8
8
  import { CheckIcon } from '../../icons/Check/index.js';
9
9
  import { LineIcon } from '../../icons/Line/index.js';
10
10
  export const inputBaseClass = 'checkbox-input';
11
11
  export const CheckboxInput = t0 => {
12
- const $ = _c(22);
12
+ const $ = _c(24);
13
13
  const {
14
14
  id: idFromProps,
15
15
  name,
@@ -23,55 +23,71 @@ export const CheckboxInput = t0 => {
23
23
  localized,
24
24
  onToggle,
25
25
  partialChecked,
26
- readOnly,
26
+ readOnly: readOnlyFromProps,
27
27
  required
28
28
  } = t0;
29
+ const [isHydrated, setIsHydrated] = useState(false);
29
30
  const fallbackID = useId();
30
31
  const id = idFromProps || fallbackID;
31
- const t1 = checked && `${inputBaseClass}--checked`;
32
- const t2 = readOnly && `${inputBaseClass}--read-only`;
33
- let t3;
34
- if ($[0] !== className || $[1] !== t1 || $[2] !== t2) {
35
- t3 = [className, inputBaseClass, t1, t2].filter(Boolean);
36
- $[0] = className;
37
- $[1] = t1;
38
- $[2] = t2;
32
+ let t1;
33
+ let t2;
34
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
35
+ t1 = () => {
36
+ setIsHydrated(true);
37
+ };
38
+ t2 = [];
39
+ $[0] = t1;
40
+ $[1] = t2;
41
+ } else {
42
+ t1 = $[0];
43
+ t2 = $[1];
44
+ }
45
+ useEffect(t1, t2);
46
+ const readOnly = readOnlyFromProps || !isHydrated;
47
+ const t3 = checked && `${inputBaseClass}--checked`;
48
+ const t4 = readOnly && `${inputBaseClass}--read-only`;
49
+ let t5;
50
+ if ($[2] !== className || $[3] !== t3 || $[4] !== t4) {
51
+ t5 = [className, inputBaseClass, t3, t4].filter(Boolean);
52
+ $[2] = className;
39
53
  $[3] = t3;
54
+ $[4] = t4;
55
+ $[5] = t5;
40
56
  } else {
41
- t3 = $[3];
57
+ t5 = $[5];
42
58
  }
43
- const t4 = t3.join(" ");
44
- const t5 = Boolean(checked);
45
- let t6;
46
- if ($[4] !== AfterInput || $[5] !== BeforeInput || $[6] !== Label || $[7] !== checked || $[8] !== id || $[9] !== inputRef || $[10] !== label || $[11] !== localized || $[12] !== name || $[13] !== onToggle || $[14] !== partialChecked || $[15] !== readOnly || $[16] !== required || $[17] !== t4 || $[18] !== t5) {
47
- const t7 = _jsx("input", {
59
+ const t6 = t5.join(" ");
60
+ const t7 = Boolean(checked);
61
+ let t8;
62
+ if ($[6] !== AfterInput || $[7] !== BeforeInput || $[8] !== Label || $[9] !== checked || $[10] !== id || $[11] !== inputRef || $[12] !== label || $[13] !== localized || $[14] !== name || $[15] !== onToggle || $[16] !== partialChecked || $[17] !== readOnly || $[18] !== required || $[19] !== t6 || $[20] !== t7) {
63
+ const t9 = _jsx("input", {
48
64
  "aria-label": "",
49
65
  "aria-labelledby": name,
50
- defaultChecked: t5,
66
+ checked: t7,
51
67
  disabled: readOnly,
52
68
  id,
53
69
  name,
54
- onInput: onToggle,
70
+ onChange: onToggle,
55
71
  ref: inputRef,
56
72
  required,
57
73
  title: name,
58
74
  type: "checkbox"
59
75
  });
60
- const t8 = !checked && partialChecked ? "partial" : "check";
61
- let t9;
62
- if ($[20] !== t8) {
63
- t9 = [`${inputBaseClass}__icon`, t8].filter(Boolean);
64
- $[20] = t8;
65
- $[21] = t9;
76
+ const t10 = !checked && partialChecked ? "partial" : "check";
77
+ let t11;
78
+ if ($[22] !== t10) {
79
+ t11 = [`${inputBaseClass}__icon`, t10].filter(Boolean);
80
+ $[22] = t10;
81
+ $[23] = t11;
66
82
  } else {
67
- t9 = $[21];
83
+ t11 = $[23];
68
84
  }
69
- t6 = _jsxs("div", {
70
- className: t4,
85
+ t8 = _jsxs("div", {
86
+ className: t6,
71
87
  children: [_jsxs("div", {
72
88
  className: `${inputBaseClass}__input`,
73
- children: [BeforeInput, t7, _jsxs("span", {
74
- className: t9.join(" "),
89
+ children: [BeforeInput, t9, _jsxs("span", {
90
+ className: t11.join(" "),
75
91
  children: [checked && _jsx(CheckIcon, {}), !checked && partialChecked && _jsx(LineIcon, {})]
76
92
  }), AfterInput]
77
93
  }), _jsx(RenderCustomComponent, {
@@ -84,25 +100,25 @@ export const CheckboxInput = t0 => {
84
100
  })
85
101
  })]
86
102
  });
87
- $[4] = AfterInput;
88
- $[5] = BeforeInput;
89
- $[6] = Label;
90
- $[7] = checked;
91
- $[8] = id;
92
- $[9] = inputRef;
93
- $[10] = label;
94
- $[11] = localized;
95
- $[12] = name;
96
- $[13] = onToggle;
97
- $[14] = partialChecked;
98
- $[15] = readOnly;
99
- $[16] = required;
100
- $[17] = t4;
101
- $[18] = t5;
103
+ $[6] = AfterInput;
104
+ $[7] = BeforeInput;
105
+ $[8] = Label;
106
+ $[9] = checked;
107
+ $[10] = id;
108
+ $[11] = inputRef;
109
+ $[12] = label;
110
+ $[13] = localized;
111
+ $[14] = name;
112
+ $[15] = onToggle;
113
+ $[16] = partialChecked;
114
+ $[17] = readOnly;
115
+ $[18] = required;
102
116
  $[19] = t6;
117
+ $[20] = t7;
118
+ $[21] = t8;
103
119
  } else {
104
- t6 = $[19];
120
+ t8 = $[21];
105
121
  }
106
- return t6;
122
+ return t8;
107
123
  };
108
124
  //# sourceMappingURL=Input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","names":["c","_c","React","useId","RenderCustomComponent","FieldLabel","CheckIcon","LineIcon","inputBaseClass","CheckboxInput","t0","$","id","idFromProps","name","AfterInput","BeforeInput","checked","className","inputRef","Label","label","localized","onToggle","partialChecked","readOnly","required","fallbackID","t1","t2","t3","filter","Boolean","t4","join","t5","t6","t7","_jsx","defaultChecked","disabled","onInput","ref","title","type","t8","t9","_jsxs","children","CustomComponent","Fallback","htmlFor"],"sources":["../../../src/fields/Checkbox/Input.tsx"],"sourcesContent":["'use client'\nimport type { StaticLabel } from 'payload'\n\nimport React, { useId } from 'react'\n\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { CheckIcon } from '../../icons/Check/index.js'\nimport { LineIcon } from '../../icons/Line/index.js'\n\nexport type CheckboxInputProps = {\n readonly AfterInput?: React.ReactNode\n readonly BeforeInput?: React.ReactNode\n readonly checked?: boolean\n readonly className?: string\n readonly id?: string\n readonly inputRef?: React.RefObject<HTMLInputElement | null>\n readonly Label?: React.ReactNode\n readonly label?: StaticLabel\n readonly localized?: boolean\n readonly name?: string\n readonly onToggle: (event: React.ChangeEvent<HTMLInputElement>) => void\n readonly partialChecked?: boolean\n readonly readOnly?: boolean\n readonly required?: boolean\n}\n\nexport const inputBaseClass = 'checkbox-input'\n\nexport const CheckboxInput: React.FC<CheckboxInputProps> = ({\n id: idFromProps,\n name,\n AfterInput,\n BeforeInput,\n checked,\n className,\n inputRef,\n Label,\n label,\n localized,\n onToggle,\n partialChecked,\n readOnly,\n required,\n}) => {\n const fallbackID = useId()\n const id = idFromProps || fallbackID\n return (\n <div\n className={[\n className,\n inputBaseClass,\n checked && `${inputBaseClass}--checked`,\n readOnly && `${inputBaseClass}--read-only`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${inputBaseClass}__input`}>\n {BeforeInput}\n <input\n aria-label=\"\"\n aria-labelledby={name}\n defaultChecked={Boolean(checked)}\n disabled={readOnly}\n id={id}\n name={name}\n onInput={onToggle}\n ref={inputRef}\n required={required}\n title={name}\n type=\"checkbox\"\n />\n <span\n className={[`${inputBaseClass}__icon`, !checked && partialChecked ? 'partial' : 'check']\n .filter(Boolean)\n .join(' ')}\n >\n {checked && <CheckIcon />}\n {!checked && partialChecked && <LineIcon />}\n </span>\n {AfterInput}\n </div>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel htmlFor={id} label={label} localized={localized} required={required} />\n }\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Input.js","names":["c","_c","React","useEffect","useId","useState","RenderCustomComponent","FieldLabel","CheckIcon","LineIcon","inputBaseClass","CheckboxInput","t0","$","id","idFromProps","name","AfterInput","BeforeInput","checked","className","inputRef","Label","label","localized","onToggle","partialChecked","readOnly","readOnlyFromProps","required","isHydrated","setIsHydrated","fallbackID","t1","t2","Symbol","for","t3","t4","t5","filter","Boolean","t6","join","t7","t8","t9","_jsx","disabled","onChange","ref","title","type","t10","t11","_jsxs","children","CustomComponent","Fallback","htmlFor"],"sources":["../../../src/fields/Checkbox/Input.tsx"],"sourcesContent":["'use client'\nimport type { StaticLabel } from 'payload'\n\nimport React, { useEffect, useId, useState } from 'react'\n\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { CheckIcon } from '../../icons/Check/index.js'\nimport { LineIcon } from '../../icons/Line/index.js'\n\nexport type CheckboxInputProps = {\n readonly AfterInput?: React.ReactNode\n readonly BeforeInput?: React.ReactNode\n readonly checked?: boolean\n readonly className?: string\n readonly id?: string\n readonly inputRef?: React.RefObject<HTMLInputElement | null>\n readonly Label?: React.ReactNode\n readonly label?: StaticLabel\n readonly localized?: boolean\n readonly name?: string\n readonly onToggle: (event: React.ChangeEvent<HTMLInputElement>) => void\n readonly partialChecked?: boolean\n readonly readOnly?: boolean\n readonly required?: boolean\n}\n\nexport const inputBaseClass = 'checkbox-input'\n\nexport const CheckboxInput: React.FC<CheckboxInputProps> = ({\n id: idFromProps,\n name,\n AfterInput,\n BeforeInput,\n checked,\n className,\n inputRef,\n Label,\n label,\n localized,\n onToggle,\n partialChecked,\n readOnly: readOnlyFromProps,\n required,\n}) => {\n const [isHydrated, setIsHydrated] = useState(false)\n const fallbackID = useId()\n const id = idFromProps || fallbackID\n\n useEffect(() => {\n setIsHydrated(true)\n }, [])\n\n const readOnly = readOnlyFromProps || !isHydrated\n\n return (\n <div\n className={[\n className,\n inputBaseClass,\n checked && `${inputBaseClass}--checked`,\n readOnly && `${inputBaseClass}--read-only`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${inputBaseClass}__input`}>\n {BeforeInput}\n <input\n aria-label=\"\"\n aria-labelledby={name}\n checked={Boolean(checked)}\n disabled={readOnly}\n id={id}\n name={name}\n onChange={onToggle}\n ref={inputRef}\n required={required}\n title={name}\n type=\"checkbox\"\n />\n <span\n className={[`${inputBaseClass}__icon`, !checked && partialChecked ? 'partial' : 'check']\n .filter(Boolean)\n .join(' ')}\n >\n {checked && <CheckIcon />}\n {!checked && partialChecked && <LineIcon />}\n </span>\n {AfterInput}\n </div>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel htmlFor={id} label={label} localized={localized} required={required} />\n }\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -33,10 +33,10 @@ export const ConfigProvider = ({
33
33
  };
34
34
  }, [config]);
35
35
  const getEntityConfig = useCallback(args => {
36
- if ('collectionSlug' in args) {
36
+ if ('collectionSlug' in args && args.collectionSlug) {
37
37
  return collectionsBySlug_0[args.collectionSlug] ?? null;
38
38
  }
39
- if ('globalSlug' in args) {
39
+ if ('globalSlug' in args && args.globalSlug) {
40
40
  return globalsBySlug_0[args.globalSlug] ?? null;
41
41
  }
42
42
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","createContext","use","useCallback","useEffect","useMemo","useControllableState","RootConfigContext","undefined","ConfigProvider","children","config","configFromProps","setConfig","collectionsBySlug","globalsBySlug","collection","collections","slug","global","globals","getEntityConfig","args","collectionSlug","globalSlug","value","_jsx","useConfig","PageConfigProvider","t0","$","rootConfig","setRootConfig","t1","t2","unauthenticated","t3"],"sources":["../../../src/providers/Config/index.tsx"],"sourcesContent":["/* eslint-disable perfectionist/sort-object-types */ // Need to disable this rule because the order of the overloads is important\n'use client'\nimport type {\n ClientCollectionConfig,\n ClientConfig,\n ClientGlobalConfig,\n CollectionSlug,\n GlobalSlug,\n} from 'payload'\n\nimport React, { createContext, use, useCallback, useEffect, useMemo } from 'react'\n\nimport { useControllableState } from '../../hooks/useControllableState.js'\n\ntype GetEntityConfigFn = {\n // Overload #1: collectionSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug: {} | CollectionSlug; globalSlug?: never }): ClientCollectionConfig\n\n // Overload #2: globalSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug?: never; globalSlug: {} | GlobalSlug }): ClientGlobalConfig\n\n // Overload #3: both/none (fall back to union | null)\n (args: {\n collectionSlug?: {} | CollectionSlug\n globalSlug?: {} | GlobalSlug\n }): ClientCollectionConfig | ClientGlobalConfig | null\n}\n\nexport type ClientConfigContext = {\n config: ClientConfig\n /**\n * Get a collection or global config by its slug. This is preferred over\n * using `config.collections.find` or `config.globals.find`, because\n * getEntityConfig uses a lookup map for O(1) lookups.\n */\n getEntityConfig: GetEntityConfigFn\n setConfig: (config: ClientConfig) => void\n}\n\nconst RootConfigContext = createContext<ClientConfigContext | undefined>(undefined)\n\nexport const ConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n // Need to update local config state if config from props changes, for HMR.\n // That way, config changes will be updated in the UI immediately without needing a refresh.\n // useControllableState handles this for us.\n const [config, setConfig] = useControllableState<ClientConfig>(configFromProps)\n\n // Build lookup maps for collections and globals so we can do O(1) lookups by slug\n const { collectionsBySlug, globalsBySlug } = useMemo(() => {\n const collectionsBySlug: Record<string, ClientCollectionConfig> = {}\n const globalsBySlug: Record<string, ClientGlobalConfig> = {}\n\n for (const collection of config.collections) {\n collectionsBySlug[collection.slug] = collection\n }\n\n for (const global of config.globals) {\n globalsBySlug[global.slug] = global\n }\n\n return { collectionsBySlug, globalsBySlug }\n }, [config])\n\n const getEntityConfig = useCallback<GetEntityConfigFn>(\n (args) => {\n if ('collectionSlug' in args) {\n return collectionsBySlug[args.collectionSlug] ?? null\n }\n\n if ('globalSlug' in args) {\n return globalsBySlug[args.globalSlug] ?? null\n }\n\n return null as any\n },\n [collectionsBySlug, globalsBySlug],\n )\n\n const value = useMemo(\n () => ({ config, getEntityConfig, setConfig }),\n [config, getEntityConfig, setConfig],\n )\n\n return <RootConfigContext value={value}>{children}</RootConfigContext>\n}\n\nexport const useConfig = (): ClientConfigContext => use(RootConfigContext)\n\n/**\n * This provider shadows the `ConfigProvider` on the _page_ level, allowing us to\n * update the config when needed, e.g. after authentication.\n * The layout `ConfigProvider` is not updated on page navigation / authentication,\n * as the layout does not re-render in those cases.\n *\n * If the config here has the same reference as the config from the layout, we\n * simply reuse the context from the layout to avoid unnecessary re-renders.\n *\n * @experimental This component is experimental and may change or be removed in future releases. Use at your own risk.\n */\nexport const PageConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n const { config: rootConfig, setConfig: setRootConfig } = useConfig()\n\n /**\n * This `useEffect` is required in order for the _page_ to be able to refresh the client config,\n * which may have been cached on the _layout_ level, where the `ConfigProvider` is managed.\n * Since the layout does not re-render on page navigation / authentication, we need to manually\n * update the config, as the user may have been authenticated in the process, which affects the client config.\n */\n useEffect(() => {\n setRootConfig(configFromProps)\n }, [configFromProps, setRootConfig])\n\n // If this component receives a different config than what is in context from the layout, it is stale.\n // While stale, we instantiate a new context provider that provides the new config until the root context is updated.\n // Unfortunately, referential equality alone does not work bc the reference is lost during server/client serialization,\n // so we need to also compare the `unauthenticated` property.\n if (\n rootConfig !== configFromProps &&\n rootConfig.unauthenticated !== configFromProps.unauthenticated\n ) {\n return <ConfigProvider config={configFromProps}>{children}</ConfigProvider>\n }\n\n return children\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","createContext","use","useCallback","useEffect","useMemo","useControllableState","RootConfigContext","undefined","ConfigProvider","children","config","configFromProps","setConfig","collectionsBySlug","globalsBySlug","collection","collections","slug","global","globals","getEntityConfig","args","collectionSlug","globalSlug","value","_jsx","useConfig","PageConfigProvider","t0","$","rootConfig","setRootConfig","t1","t2","unauthenticated","t3"],"sources":["../../../src/providers/Config/index.tsx"],"sourcesContent":["/* eslint-disable perfectionist/sort-object-types */ // Need to disable this rule because the order of the overloads is important\n'use client'\nimport type {\n ClientCollectionConfig,\n ClientConfig,\n ClientGlobalConfig,\n CollectionSlug,\n GlobalSlug,\n} from 'payload'\n\nimport React, { createContext, use, useCallback, useEffect, useMemo } from 'react'\n\nimport { useControllableState } from '../../hooks/useControllableState.js'\n\ntype GetEntityConfigFn = {\n // Overload #1: collectionSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug: {} | CollectionSlug; globalSlug?: never }): ClientCollectionConfig\n\n // Overload #2: globalSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug?: never; globalSlug: {} | GlobalSlug }): ClientGlobalConfig\n\n // Overload #3: both/none (fall back to union | null)\n (args: {\n collectionSlug?: {} | CollectionSlug\n globalSlug?: {} | GlobalSlug\n }): ClientCollectionConfig | ClientGlobalConfig | null\n}\n\nexport type ClientConfigContext = {\n config: ClientConfig\n /**\n * Get a collection or global config by its slug. This is preferred over\n * using `config.collections.find` or `config.globals.find`, because\n * getEntityConfig uses a lookup map for O(1) lookups.\n */\n getEntityConfig: GetEntityConfigFn\n setConfig: (config: ClientConfig) => void\n}\n\nconst RootConfigContext = createContext<ClientConfigContext | undefined>(undefined)\n\nexport const ConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n // Need to update local config state if config from props changes, for HMR.\n // That way, config changes will be updated in the UI immediately without needing a refresh.\n // useControllableState handles this for us.\n const [config, setConfig] = useControllableState<ClientConfig>(configFromProps)\n\n // Build lookup maps for collections and globals so we can do O(1) lookups by slug\n const { collectionsBySlug, globalsBySlug } = useMemo(() => {\n const collectionsBySlug: Record<string, ClientCollectionConfig> = {}\n const globalsBySlug: Record<string, ClientGlobalConfig> = {}\n\n for (const collection of config.collections) {\n collectionsBySlug[collection.slug] = collection\n }\n\n for (const global of config.globals) {\n globalsBySlug[global.slug] = global\n }\n\n return { collectionsBySlug, globalsBySlug }\n }, [config])\n\n const getEntityConfig = useCallback<GetEntityConfigFn>(\n (args) => {\n if ('collectionSlug' in args && args.collectionSlug) {\n return collectionsBySlug[args.collectionSlug] ?? null\n }\n\n if ('globalSlug' in args && args.globalSlug) {\n return globalsBySlug[args.globalSlug] ?? null\n }\n\n return null as any\n },\n [collectionsBySlug, globalsBySlug],\n )\n\n const value = useMemo(\n () => ({ config, getEntityConfig, setConfig }),\n [config, getEntityConfig, setConfig],\n )\n\n return <RootConfigContext value={value}>{children}</RootConfigContext>\n}\n\nexport const useConfig = (): ClientConfigContext => use(RootConfigContext)\n\n/**\n * This provider shadows the `ConfigProvider` on the _page_ level, allowing us to\n * update the config when needed, e.g. after authentication.\n * The layout `ConfigProvider` is not updated on page navigation / authentication,\n * as the layout does not re-render in those cases.\n *\n * If the config here has the same reference as the config from the layout, we\n * simply reuse the context from the layout to avoid unnecessary re-renders.\n *\n * @experimental This component is experimental and may change or be removed in future releases. Use at your own risk.\n */\nexport const PageConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n const { config: rootConfig, setConfig: setRootConfig } = useConfig()\n\n /**\n * This `useEffect` is required in order for the _page_ to be able to refresh the client config,\n * which may have been cached on the _layout_ level, where the `ConfigProvider` is managed.\n * Since the layout does not re-render on page navigation / authentication, we need to manually\n * update the config, as the user may have been authenticated in the process, which affects the client config.\n */\n useEffect(() => {\n setRootConfig(configFromProps)\n }, [configFromProps, setRootConfig])\n\n // If this component receives a different config than what is in context from the layout, it is stale.\n // While stale, we instantiate a new context provider that provides the new config until the root context is updated.\n // Unfortunately, referential equality alone does not work bc the reference is lost during server/client serialization,\n // so we need to also compare the `unauthenticated` property.\n if (\n rootConfig !== configFromProps &&\n rootConfig.unauthenticated !== configFromProps.unauthenticated\n ) {\n return <ConfigProvider config={configFromProps}>{children}</ConfigProvider>\n }\n\n return children\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Selection/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAgF,MAAM,OAAO,CAAA;AAOpG,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,EAAE,CAAC,gBAAgB,CAAC,EAAE,KAAK,KAAK,MAAM,CAAA;IACpD,cAAc,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzC,SAAS,EAAE,eAAe,CAAA;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAChC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAcD,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAElC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAcD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuL7C,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,gBAAgC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Selection/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAgF,MAAM,OAAO,CAAA;AAOpG,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,EAAE,CAAC,gBAAgB,CAAC,EAAE,KAAK,KAAK,MAAM,CAAA;IACpD,cAAc,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzC,SAAS,EAAE,eAAe,CAAA;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAChC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAcD,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAElC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAcD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAoM7C,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,gBAAgC,CAAA"}
@@ -80,15 +80,26 @@ export const SelectionProvider = ({
80
80
  selectAll === "allAvailable" || selectAll === "allInPage") {
81
81
  setSelectAll("none");
82
82
  } else {
83
+ const shouldSelect = selectAll !== "some";
83
84
  docs.forEach(({
84
85
  id: id_1,
85
86
  _isLocked: _isLocked_0,
86
87
  _userEditing: _userEditing_0
87
88
  }) => {
88
89
  if (!_isLocked_0 || _userEditing_0?.id === user?.id) {
89
- rows_0.set(id_1, selectAll !== "some");
90
+ rows_0.set(id_1, shouldSelect);
90
91
  }
91
92
  });
93
+ // Set selectAll synchronously to avoid race conditions with useEffect
94
+ if (shouldSelect && rows_0.size > 0) {
95
+ if (rows_0.size === docs.length) {
96
+ setSelectAll("allInPage");
97
+ } else {
98
+ setSelectAll("some");
99
+ }
100
+ } else {
101
+ setSelectAll("none");
102
+ }
92
103
  }
93
104
  setSelected(rows_0);
94
105
  }, [docs, selectAll, user?.id]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useSearchParams","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","parseSearchParams","useAuth","useListQuery","useLocale","SelectAllStatus","Context","count","undefined","getQueryParams","additionalParams","getSelectedIds","selectAll","selected","Map","selectedIDs","setSelection","id","toggleAll","totalDocs","reduceActiveSelections","ids","key","value","push","SelectionProvider","children","docs","contextRef","user","code","locale","setSelected","rows","forEach","set","setSelectAll","setCount","searchParams","query","allAvailable","_isLocked","_userEditing","doc","find","existingValue","get","isSelected","newMap","additionalWhereParams","where","params","not_equals","in","and","stringify","addQueryPrefix","some","all","size","_","length","newCount","current","_jsx","useSelection"],"sources":["../../../src/providers/Selection/index.tsx"],"sourcesContent":["'use client'\nimport type { Where } from 'payload'\n\nimport { useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useAuth } from '../Auth/index.js'\nimport { useListQuery } from '../ListQuery/index.js'\nimport { useLocale } from '../Locale/index.js'\n\nexport enum SelectAllStatus {\n AllAvailable = 'allAvailable',\n AllInPage = 'allInPage',\n None = 'none',\n Some = 'some',\n}\n\ntype SelectionContext = {\n count: number\n disableBulkDelete?: boolean\n disableBulkEdit?: boolean\n getQueryParams: (additionalParams?: Where) => string\n getSelectedIds: () => (number | string)[]\n selectAll: SelectAllStatus\n selected: Map<number | string, boolean>\n selectedIDs: (number | string)[]\n setSelection: (id: number | string) => void\n /**\n * Selects all rows on the current page within the current query.\n * If `allAvailable` is true, does not select specific IDs so that the query itself affects all rows across all pages.\n */\n toggleAll: (allAvailable?: boolean) => void\n totalDocs: number\n}\n\nconst Context = createContext({\n count: undefined,\n getQueryParams: (additionalParams?: Where) => '',\n getSelectedIds: () => [],\n selectAll: undefined,\n selected: new Map(),\n selectedIDs: [],\n setSelection: (id: number | string) => {},\n toggleAll: (toggleAll: boolean) => {},\n totalDocs: undefined,\n} satisfies SelectionContext)\n\ntype Props = {\n readonly children: React.ReactNode\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly docs: any[]\n readonly totalDocs: number\n}\n\nconst reduceActiveSelections = (selected: Map<number | string, boolean>): (number | string)[] => {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n return ids\n}\n\nexport const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalDocs }) => {\n const contextRef = useRef({} as SelectionContext)\n const { user } = useAuth()\n\n const { code: locale } = useLocale()\n\n const [selected, setSelected] = useState<SelectionContext['selected']>(() => {\n const rows = new Map()\n\n docs.forEach(({ id }) => {\n rows.set(id, false)\n })\n\n return rows\n })\n\n const [selectAll, setSelectAll] = useState<SelectAllStatus>(SelectAllStatus.None)\n const [count, setCount] = useState(0)\n const searchParams = useSearchParams()\n const { query } = useListQuery()\n\n const toggleAll: SelectionContext['toggleAll'] = useCallback(\n (allAvailable = false) => {\n const rows = new Map()\n if (allAvailable) {\n setSelectAll(SelectAllStatus.AllAvailable)\n\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, true)\n }\n })\n } else if (\n // Reset back to `None` if we previously had any type of selection\n selectAll === SelectAllStatus.AllAvailable ||\n selectAll === SelectAllStatus.AllInPage\n ) {\n setSelectAll(SelectAllStatus.None)\n } else {\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, selectAll !== SelectAllStatus.Some)\n }\n })\n }\n\n setSelected(rows)\n },\n [docs, selectAll, user?.id],\n )\n\n const setSelection: SelectionContext['setSelection'] = useCallback(\n (id) => {\n const doc = docs.find((doc) => doc.id === id)\n\n if (doc?._isLocked && user?.id !== doc?._userEditing.id) {\n return // Prevent selection if the document is locked\n }\n\n const existingValue = selected.get(id)\n const isSelected = typeof existingValue === 'boolean' ? !existingValue : true\n\n const newMap = new Map(selected.set(id, isSelected))\n\n // If previously selected all and now deselecting, adjust status\n if (selectAll === SelectAllStatus.AllAvailable && !isSelected) {\n setSelectAll(SelectAllStatus.Some)\n }\n\n setSelected(newMap)\n },\n [selected, docs, selectAll, user?.id],\n )\n\n const getQueryParams = useCallback(\n (additionalWhereParams?: Where): string => {\n let where: Where\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n const params = parseSearchParams(searchParams)?.where as Where\n\n where = params || {\n id: {\n not_equals: '',\n },\n }\n } else {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n where = {\n id: {\n in: ids,\n },\n }\n }\n\n if (additionalWhereParams) {\n where = {\n and: [{ ...additionalWhereParams }, where],\n }\n }\n\n return qs.stringify(\n {\n locale,\n where,\n },\n { addQueryPrefix: true },\n )\n },\n [selectAll, selected, locale, searchParams],\n )\n\n const getSelectedIds = useCallback(() => reduceActiveSelections(selected), [selected])\n\n useEffect(() => {\n if (selectAll === SelectAllStatus.AllAvailable) {\n return\n }\n let some = false\n let all = true\n\n if (!selected.size) {\n all = false\n some = false\n } else {\n for (const [_, value] of selected) {\n all = all && value\n some = some || value\n }\n }\n\n if (all && selected.size === docs.length) {\n setSelectAll(SelectAllStatus.AllInPage)\n } else if (some) {\n setSelectAll(SelectAllStatus.Some)\n } else {\n setSelectAll(SelectAllStatus.None)\n }\n }, [selectAll, selected, totalDocs, docs])\n\n useEffect(() => {\n let newCount = 0\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n newCount = totalDocs\n } else {\n for (const [_, value] of selected) {\n if (value) {\n newCount++\n }\n }\n }\n\n setCount(newCount)\n }, [selectAll, selected, totalDocs])\n\n useEffect(() => {\n setSelectAll(SelectAllStatus.None)\n setSelected(new Map())\n }, [query])\n\n const selectedIDs = useMemo(() => reduceActiveSelections(selected), [selected])\n\n contextRef.current = {\n count,\n getQueryParams,\n getSelectedIds,\n selectAll,\n selected,\n selectedIDs,\n setSelection,\n toggleAll,\n totalDocs,\n }\n\n return <Context value={contextRef.current}>{children}</Context>\n}\n\nexport const useSelection = (): SelectionContext => use(Context)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useSearchParams","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","parseSearchParams","useAuth","useListQuery","useLocale","SelectAllStatus","Context","count","undefined","getQueryParams","additionalParams","getSelectedIds","selectAll","selected","Map","selectedIDs","setSelection","id","toggleAll","totalDocs","reduceActiveSelections","ids","key","value","push","SelectionProvider","children","docs","contextRef","user","code","locale","setSelected","rows","forEach","set","setSelectAll","setCount","searchParams","query","allAvailable","_isLocked","_userEditing","shouldSelect","size","length","doc","find","existingValue","get","isSelected","newMap","additionalWhereParams","where","params","not_equals","in","and","stringify","addQueryPrefix","some","all","_","newCount","current","_jsx","useSelection"],"sources":["../../../src/providers/Selection/index.tsx"],"sourcesContent":["'use client'\nimport type { Where } from 'payload'\n\nimport { useSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useAuth } from '../Auth/index.js'\nimport { useListQuery } from '../ListQuery/index.js'\nimport { useLocale } from '../Locale/index.js'\n\nexport enum SelectAllStatus {\n AllAvailable = 'allAvailable',\n AllInPage = 'allInPage',\n None = 'none',\n Some = 'some',\n}\n\ntype SelectionContext = {\n count: number\n disableBulkDelete?: boolean\n disableBulkEdit?: boolean\n getQueryParams: (additionalParams?: Where) => string\n getSelectedIds: () => (number | string)[]\n selectAll: SelectAllStatus\n selected: Map<number | string, boolean>\n selectedIDs: (number | string)[]\n setSelection: (id: number | string) => void\n /**\n * Selects all rows on the current page within the current query.\n * If `allAvailable` is true, does not select specific IDs so that the query itself affects all rows across all pages.\n */\n toggleAll: (allAvailable?: boolean) => void\n totalDocs: number\n}\n\nconst Context = createContext({\n count: undefined,\n getQueryParams: (additionalParams?: Where) => '',\n getSelectedIds: () => [],\n selectAll: undefined,\n selected: new Map(),\n selectedIDs: [],\n setSelection: (id: number | string) => {},\n toggleAll: (toggleAll: boolean) => {},\n totalDocs: undefined,\n} satisfies SelectionContext)\n\ntype Props = {\n readonly children: React.ReactNode\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly docs: any[]\n readonly totalDocs: number\n}\n\nconst reduceActiveSelections = (selected: Map<number | string, boolean>): (number | string)[] => {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n return ids\n}\n\nexport const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalDocs }) => {\n const contextRef = useRef({} as SelectionContext)\n const { user } = useAuth()\n\n const { code: locale } = useLocale()\n\n const [selected, setSelected] = useState<SelectionContext['selected']>(() => {\n const rows = new Map()\n\n docs.forEach(({ id }) => {\n rows.set(id, false)\n })\n\n return rows\n })\n\n const [selectAll, setSelectAll] = useState<SelectAllStatus>(SelectAllStatus.None)\n const [count, setCount] = useState(0)\n const searchParams = useSearchParams()\n const { query } = useListQuery()\n\n const toggleAll: SelectionContext['toggleAll'] = useCallback(\n (allAvailable = false) => {\n const rows = new Map()\n if (allAvailable) {\n setSelectAll(SelectAllStatus.AllAvailable)\n\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, true)\n }\n })\n } else if (\n // Reset back to `None` if we previously had any type of selection\n selectAll === SelectAllStatus.AllAvailable ||\n selectAll === SelectAllStatus.AllInPage\n ) {\n setSelectAll(SelectAllStatus.None)\n } else {\n const shouldSelect = selectAll !== SelectAllStatus.Some\n\n docs.forEach(({ id, _isLocked, _userEditing }) => {\n if (!_isLocked || _userEditing?.id === user?.id) {\n rows.set(id, shouldSelect)\n }\n })\n\n // Set selectAll synchronously to avoid race conditions with useEffect\n if (shouldSelect && rows.size > 0) {\n if (rows.size === docs.length) {\n setSelectAll(SelectAllStatus.AllInPage)\n } else {\n setSelectAll(SelectAllStatus.Some)\n }\n } else {\n setSelectAll(SelectAllStatus.None)\n }\n }\n\n setSelected(rows)\n },\n [docs, selectAll, user?.id],\n )\n\n const setSelection: SelectionContext['setSelection'] = useCallback(\n (id) => {\n const doc = docs.find((doc) => doc.id === id)\n\n if (doc?._isLocked && user?.id !== doc?._userEditing.id) {\n return // Prevent selection if the document is locked\n }\n\n const existingValue = selected.get(id)\n const isSelected = typeof existingValue === 'boolean' ? !existingValue : true\n\n const newMap = new Map(selected.set(id, isSelected))\n\n // If previously selected all and now deselecting, adjust status\n if (selectAll === SelectAllStatus.AllAvailable && !isSelected) {\n setSelectAll(SelectAllStatus.Some)\n }\n\n setSelected(newMap)\n },\n [selected, docs, selectAll, user?.id],\n )\n\n const getQueryParams = useCallback(\n (additionalWhereParams?: Where): string => {\n let where: Where\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n const params = parseSearchParams(searchParams)?.where as Where\n\n where = params || {\n id: {\n not_equals: '',\n },\n }\n } else {\n const ids = []\n\n for (const [key, value] of selected) {\n if (value) {\n ids.push(key)\n }\n }\n\n where = {\n id: {\n in: ids,\n },\n }\n }\n\n if (additionalWhereParams) {\n where = {\n and: [{ ...additionalWhereParams }, where],\n }\n }\n\n return qs.stringify(\n {\n locale,\n where,\n },\n { addQueryPrefix: true },\n )\n },\n [selectAll, selected, locale, searchParams],\n )\n\n const getSelectedIds = useCallback(() => reduceActiveSelections(selected), [selected])\n\n useEffect(() => {\n if (selectAll === SelectAllStatus.AllAvailable) {\n return\n }\n let some = false\n let all = true\n\n if (!selected.size) {\n all = false\n some = false\n } else {\n for (const [_, value] of selected) {\n all = all && value\n some = some || value\n }\n }\n\n if (all && selected.size === docs.length) {\n setSelectAll(SelectAllStatus.AllInPage)\n } else if (some) {\n setSelectAll(SelectAllStatus.Some)\n } else {\n setSelectAll(SelectAllStatus.None)\n }\n }, [selectAll, selected, totalDocs, docs])\n\n useEffect(() => {\n let newCount = 0\n\n if (selectAll === SelectAllStatus.AllAvailable) {\n newCount = totalDocs\n } else {\n for (const [_, value] of selected) {\n if (value) {\n newCount++\n }\n }\n }\n\n setCount(newCount)\n }, [selectAll, selected, totalDocs])\n\n useEffect(() => {\n setSelectAll(SelectAllStatus.None)\n setSelected(new Map())\n }, [query])\n\n const selectedIDs = useMemo(() => reduceActiveSelections(selected), [selected])\n\n contextRef.current = {\n count,\n getQueryParams,\n getSelectedIds,\n selectAll,\n selected,\n selectedIDs,\n setSelection,\n toggleAll,\n totalDocs,\n }\n\n return <Context value={contextRef.current}>{children}</Context>\n}\n\nexport const useSelection = (): SelectionContext => use(Context)\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@ import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormSta
2
2
  export type LockedState = {
3
3
  isLocked: boolean;
4
4
  lastEditedAt: string;
5
- user: ClientUser | number | string;
5
+ user?: ClientUser | number | string;
6
6
  };
7
7
  type BuildFormStateSuccessResult = {
8
8
  clientConfig?: ClientConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAA;AAchB,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;CACnC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,cAAc,CAAC,EAAE,KAAK,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,2BAA2B,CAAA;AAE1F,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAChD,kBAAkB,EAClB,OAAO,CAAC,oBAAoB,CAAC,CAwB9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CAoMrC,CAAA"}
1
+ {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAA;AAchB,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;CACpC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,cAAc,CAAC,EAAE,KAAK,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,2BAA2B,CAAA;AAE1F,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAChD,kBAAkB,EAClB,OAAO,CAAC,oBAAoB,CAAC,CAwB9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CAoMrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.js","names":["canAccessAdmin","formatErrors","UnauthorizedError","getSelectMode","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","handleLivePreview","handlePreview","buildFormStateHandler","args","req","res","buildFormState","err","payload","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","documentFormState","formState","globalSlug","initialBlockData","initialBlockFormState","mockRSCs","operation","readOnly","renderAllFields","i18n","config","returnLivePreviewURL","returnLockStatus","returnPreviewURL","schemaPath","select","skipClientConfigAuth","skipValidation","updateLastEdited","selectMode","undefined","Error","schemaMap","clientSchemaMap","importMap","user","fieldOrEntityConfig","get","fields","length","type","documentData","blockData","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","collections","upload","file","lockedStateResult","lockedState","state","livePreviewURL","previewURL"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type {\n BuildFormStateArgs,\n ClientConfig,\n ClientUser,\n ErrorResult,\n FormState,\n ServerFunction,\n} from 'payload'\n\nimport { canAccessAdmin, formatErrors, UnauthorizedError } from 'payload'\nimport { getSelectMode, reduceFieldsToValues } from 'payload/shared'\n\nimport { fieldSchemasToFormState } from '../forms/fieldSchemasToFormState/index.js'\nimport { renderField } from '../forms/fieldSchemasToFormState/renderField.js'\nimport { getClientConfig } from './getClientConfig.js'\nimport { getClientSchemaMap } from './getClientSchemaMap.js'\nimport { getSchemaMap } from './getSchemaMap.js'\nimport { handleFormStateLocking } from './handleFormStateLocking.js'\nimport { handleLivePreview } from './handleLivePreview.js'\nimport { handlePreview } from './handlePreview.js'\n\nexport type LockedState = {\n isLocked: boolean\n lastEditedAt: string\n user: ClientUser | number | string\n}\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n livePreviewURL?: string\n lockedState?: LockedState\n previewURL?: string\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n livePreviewURL?: never\n lockedState?: never\n previewURL?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler: ServerFunction<\n BuildFormStateArgs,\n Promise<BuildFormStateResult>\n> = async (args) => {\n const { req } = args\n\n try {\n await canAccessAdmin({ req })\n const res = await buildFormState(args)\n\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n throw new UnauthorizedError()\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildFormState = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateSuccessResult> => {\n const {\n id: idFromArgs,\n collectionSlug,\n data: incomingData,\n docPermissions,\n docPreferences,\n documentFormState,\n formState,\n globalSlug,\n initialBlockData,\n initialBlockFormState,\n mockRSCs,\n operation,\n readOnly,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLivePreviewURL,\n returnLockStatus,\n returnPreviewURL,\n schemaPath = collectionSlug || globalSlug,\n select,\n skipClientConfigAuth,\n skipValidation,\n updateLastEdited,\n } = args\n\n const selectMode = select ? getSelectMode(select) : undefined\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n const schemaMap = getSchemaMap({\n collectionSlug,\n config,\n globalSlug,\n i18n,\n })\n\n const clientSchemaMap = getClientSchemaMap({\n collectionSlug,\n config: getClientConfig({\n config,\n i18n,\n importMap: req.payload.importMap,\n user: skipClientConfigAuth ? true : req.user,\n }),\n globalSlug,\n i18n,\n payload,\n schemaMap,\n })\n\n const id = collectionSlug ? idFromArgs : undefined\n const fieldOrEntityConfig = schemaMap.get(schemaPath)\n\n if (!fieldOrEntityConfig) {\n throw new Error(`Could not find \"${schemaPath}\" in the fieldSchemaMap`)\n }\n\n if (\n (!('fields' in fieldOrEntityConfig) ||\n !fieldOrEntityConfig.fields ||\n !fieldOrEntityConfig.fields.length) &&\n 'type' in fieldOrEntityConfig &&\n fieldOrEntityConfig.type !== 'blocks'\n ) {\n throw new Error(\n `The field found in fieldSchemaMap for \"${schemaPath}\" does not contain any subfields.`,\n )\n }\n\n // If there is form state but no data, deduce data from that form state, e.g. on initial load\n // Otherwise, use the incoming data as the source of truth, e.g. on subsequent saves\n const data = incomingData || reduceFieldsToValues(formState, true)\n\n let documentData = undefined\n\n if (documentFormState) {\n documentData = reduceFieldsToValues(documentFormState, true)\n }\n\n let blockData = initialBlockData\n\n if (initialBlockFormState) {\n blockData = reduceFieldsToValues(initialBlockFormState, true)\n }\n\n /**\n * When building state for sub schemas we need to adjust:\n * - `fields`\n * - `parentSchemaPath`\n * - `parentPath`\n *\n * Type assertion is fine because we wrap sub schemas in an array\n * so we can safely map over them within `fieldSchemasToFormState`\n */\n const fields = Array.isArray(fieldOrEntityConfig)\n ? fieldOrEntityConfig\n : 'fields' in fieldOrEntityConfig\n ? fieldOrEntityConfig.fields\n : [fieldOrEntityConfig]\n\n // Ensure data.id is present during form state requests, where the data\n // is passed from the client as an argument, without the ID\n if (!data.id && id) {\n data.id = id\n }\n\n const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n documentData,\n fields,\n fieldSchemaMap: schemaMap,\n initialBlockData: blockData,\n mockRSCs,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n readOnly,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\n select,\n selectMode,\n skipValidation,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (payload.collections[collectionSlug]?.config?.upload && formState.file) {\n formStateResult.file = formState.file\n }\n }\n\n let lockedStateResult\n\n if (returnLockStatus) {\n lockedStateResult = await handleFormStateLocking({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n })\n }\n\n const res: BuildFormStateSuccessResult = {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n\n if (returnLivePreviewURL) {\n const { livePreviewURL } = await handleLivePreview({\n collectionSlug,\n config,\n data,\n globalSlug,\n req,\n })\n\n // Important: only set this when not undefined,\n // Otherwise it will travel through the network as `$undefined`\n if (livePreviewURL) {\n res.livePreviewURL = livePreviewURL\n }\n }\n\n if (returnPreviewURL) {\n const { previewURL } = await handlePreview({\n collectionSlug,\n config,\n data,\n globalSlug,\n req,\n })\n\n // Important: only set this when not undefined,\n // Otherwise it will travel through the network as `$undefined`\n if (previewURL) {\n res.previewURL = previewURL\n }\n }\n\n return res\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"buildFormState.js","names":["canAccessAdmin","formatErrors","UnauthorizedError","getSelectMode","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","handleLivePreview","handlePreview","buildFormStateHandler","args","req","res","buildFormState","err","payload","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","documentFormState","formState","globalSlug","initialBlockData","initialBlockFormState","mockRSCs","operation","readOnly","renderAllFields","i18n","config","returnLivePreviewURL","returnLockStatus","returnPreviewURL","schemaPath","select","skipClientConfigAuth","skipValidation","updateLastEdited","selectMode","undefined","Error","schemaMap","clientSchemaMap","importMap","user","fieldOrEntityConfig","get","fields","length","type","documentData","blockData","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","collections","upload","file","lockedStateResult","lockedState","state","livePreviewURL","previewURL"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type {\n BuildFormStateArgs,\n ClientConfig,\n ClientUser,\n ErrorResult,\n FormState,\n ServerFunction,\n} from 'payload'\n\nimport { canAccessAdmin, formatErrors, UnauthorizedError } from 'payload'\nimport { getSelectMode, reduceFieldsToValues } from 'payload/shared'\n\nimport { fieldSchemasToFormState } from '../forms/fieldSchemasToFormState/index.js'\nimport { renderField } from '../forms/fieldSchemasToFormState/renderField.js'\nimport { getClientConfig } from './getClientConfig.js'\nimport { getClientSchemaMap } from './getClientSchemaMap.js'\nimport { getSchemaMap } from './getSchemaMap.js'\nimport { handleFormStateLocking } from './handleFormStateLocking.js'\nimport { handleLivePreview } from './handleLivePreview.js'\nimport { handlePreview } from './handlePreview.js'\n\nexport type LockedState = {\n isLocked: boolean\n lastEditedAt: string\n user?: ClientUser | number | string\n}\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n livePreviewURL?: string\n lockedState?: LockedState\n previewURL?: string\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n livePreviewURL?: never\n lockedState?: never\n previewURL?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler: ServerFunction<\n BuildFormStateArgs,\n Promise<BuildFormStateResult>\n> = async (args) => {\n const { req } = args\n\n try {\n await canAccessAdmin({ req })\n const res = await buildFormState(args)\n\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n throw new UnauthorizedError()\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildFormState = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateSuccessResult> => {\n const {\n id: idFromArgs,\n collectionSlug,\n data: incomingData,\n docPermissions,\n docPreferences,\n documentFormState,\n formState,\n globalSlug,\n initialBlockData,\n initialBlockFormState,\n mockRSCs,\n operation,\n readOnly,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLivePreviewURL,\n returnLockStatus,\n returnPreviewURL,\n schemaPath = collectionSlug || globalSlug,\n select,\n skipClientConfigAuth,\n skipValidation,\n updateLastEdited,\n } = args\n\n const selectMode = select ? getSelectMode(select) : undefined\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n const schemaMap = getSchemaMap({\n collectionSlug,\n config,\n globalSlug,\n i18n,\n })\n\n const clientSchemaMap = getClientSchemaMap({\n collectionSlug,\n config: getClientConfig({\n config,\n i18n,\n importMap: req.payload.importMap,\n user: skipClientConfigAuth ? true : req.user,\n }),\n globalSlug,\n i18n,\n payload,\n schemaMap,\n })\n\n const id = collectionSlug ? idFromArgs : undefined\n const fieldOrEntityConfig = schemaMap.get(schemaPath)\n\n if (!fieldOrEntityConfig) {\n throw new Error(`Could not find \"${schemaPath}\" in the fieldSchemaMap`)\n }\n\n if (\n (!('fields' in fieldOrEntityConfig) ||\n !fieldOrEntityConfig.fields ||\n !fieldOrEntityConfig.fields.length) &&\n 'type' in fieldOrEntityConfig &&\n fieldOrEntityConfig.type !== 'blocks'\n ) {\n throw new Error(\n `The field found in fieldSchemaMap for \"${schemaPath}\" does not contain any subfields.`,\n )\n }\n\n // If there is form state but no data, deduce data from that form state, e.g. on initial load\n // Otherwise, use the incoming data as the source of truth, e.g. on subsequent saves\n const data = incomingData || reduceFieldsToValues(formState, true)\n\n let documentData = undefined\n\n if (documentFormState) {\n documentData = reduceFieldsToValues(documentFormState, true)\n }\n\n let blockData = initialBlockData\n\n if (initialBlockFormState) {\n blockData = reduceFieldsToValues(initialBlockFormState, true)\n }\n\n /**\n * When building state for sub schemas we need to adjust:\n * - `fields`\n * - `parentSchemaPath`\n * - `parentPath`\n *\n * Type assertion is fine because we wrap sub schemas in an array\n * so we can safely map over them within `fieldSchemasToFormState`\n */\n const fields = Array.isArray(fieldOrEntityConfig)\n ? fieldOrEntityConfig\n : 'fields' in fieldOrEntityConfig\n ? fieldOrEntityConfig.fields\n : [fieldOrEntityConfig]\n\n // Ensure data.id is present during form state requests, where the data\n // is passed from the client as an argument, without the ID\n if (!data.id && id) {\n data.id = id\n }\n\n const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n documentData,\n fields,\n fieldSchemaMap: schemaMap,\n initialBlockData: blockData,\n mockRSCs,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n readOnly,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\n select,\n selectMode,\n skipValidation,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (payload.collections[collectionSlug]?.config?.upload && formState.file) {\n formStateResult.file = formState.file\n }\n }\n\n let lockedStateResult\n\n if (returnLockStatus) {\n lockedStateResult = await handleFormStateLocking({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n })\n }\n\n const res: BuildFormStateSuccessResult = {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n\n if (returnLivePreviewURL) {\n const { livePreviewURL } = await handleLivePreview({\n collectionSlug,\n config,\n data,\n globalSlug,\n req,\n })\n\n // Important: only set this when not undefined,\n // Otherwise it will travel through the network as `$undefined`\n if (livePreviewURL) {\n res.livePreviewURL = livePreviewURL\n }\n }\n\n if (returnPreviewURL) {\n const { previewURL } = await handlePreview({\n collectionSlug,\n config,\n data,\n globalSlug,\n req,\n })\n\n // Important: only set this when not undefined,\n // Otherwise it will travel through the network as `$undefined`\n if (previewURL) {\n res.previewURL = previewURL\n }\n }\n\n return res\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,5 +5,5 @@ export type OnSaveContext = {
5
5
  getDocPermissions?: boolean;
6
6
  incrementVersionCount?: boolean;
7
7
  };
8
- export declare function DefaultEditView({ BeforeDocumentControls, Description, EditMenuItems, LivePreview: CustomLivePreview, PreviewButton, PublishButton, SaveButton, SaveDraftButton, Status, Upload: CustomUpload, UploadControls, }: DocumentViewClientProps): React.JSX.Element;
8
+ export declare function DefaultEditView({ BeforeDocumentControls, Description, EditMenuItems, LivePreview: CustomLivePreview, PreviewButton, PublishButton, SaveButton, SaveDraftButton, Status, UnpublishButton, Upload: CustomUpload, UploadControls, }: DocumentViewClientProps): React.JSX.Element;
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAIlE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAoC1F,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAKD,wBAAgB,eAAe,CAAC,EAC9B,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,MAAM,EACN,MAAM,EAAE,YAAY,EACpB,cAAc,GACf,EAAE,uBAAuB,qBAsrBzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAIlE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAoC1F,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAKD,wBAAgB,eAAe,CAAC,EAC9B,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,MAAM,EACN,eAAe,EACf,MAAM,EAAE,YAAY,EACpB,cAAc,GACf,EAAE,uBAAuB,qBAurBzB"}
@@ -50,6 +50,7 @@ export function DefaultEditView({
50
50
  SaveButton,
51
51
  SaveDraftButton,
52
52
  Status,
53
+ UnpublishButton,
53
54
  Upload: CustomUpload,
54
55
  UploadControls
55
56
  }) {
@@ -186,7 +187,7 @@ export function DefaultEditView({
186
187
  const handleDocumentLocking = useCallback(lockedState => {
187
188
  setDocumentIsLocked(true);
188
189
  const previousOwnerID = typeof documentLockState.current?.user === 'object' ? documentLockState.current?.user?.id : documentLockState.current?.user;
189
- if (lockedState) {
190
+ if (lockedState && lockedState.user) {
190
191
  const lockedUserID = typeof lockedState.user === 'string' || typeof lockedState.user === 'number' ? lockedState.user : lockedState.user.id;
191
192
  if (!documentLockState.current || lockedUserID !== previousOwnerID) {
192
193
  if (previousOwnerID === user.id && lockedUserID !== user.id) {
@@ -481,7 +482,8 @@ export function DefaultEditView({
481
482
  PublishButton,
482
483
  SaveButton,
483
484
  SaveDraftButton,
484
- Status
485
+ Status,
486
+ UnpublishButton
485
487
  },
486
488
  data: data,
487
489
  disableActions: disableActions || isFolderCollection || isTrashed,