@payloadcms/ui 3.74.0-internal.8fd38f1 → 3.74.0-internal.bc57c0d
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.
- package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +1 -5
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/FolderView/FolderTypeField/index.d.ts.map +1 -1
- package/dist/elements/FolderView/FolderTypeField/index.js.map +1 -1
- package/dist/elements/Link/index.d.ts.map +1 -1
- package/dist/elements/Pill/index.d.ts.map +1 -1
- package/dist/elements/Pill/index.js +101 -31
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
- package/dist/elements/UnpublishButton/index.js +11 -2
- package/dist/elements/UnpublishButton/index.js.map +1 -1
- package/dist/exports/client/{CodeEditor-6KT2JS6X.js → CodeEditor-X3UZSEEZ.js} +2 -2
- package/dist/exports/client/{DatePicker-TDXLCEZV.js → DatePicker-GT6CXMEH.js} +2 -2
- package/dist/exports/client/{chunk-TBYRZYQJ.js → chunk-J46CQZ3T.js} +4 -4
- package/dist/exports/client/{chunk-TBYRZYQJ.js.map → chunk-J46CQZ3T.js.map} +3 -3
- package/dist/exports/client/{chunk-UN66UDCU.js → chunk-USMS5YRL.js} +1 -1
- package/dist/exports/client/{chunk-UN66UDCU.js.map → chunk-USMS5YRL.js.map} +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js +63 -47
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/providers/Config/index.js +2 -2
- package/dist/providers/Config/index.js.map +1 -1
- package/dist/providers/Selection/index.d.ts.map +1 -1
- package/dist/providers/Selection/index.js +12 -1
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/utilities/buildFormState.d.ts +1 -1
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/views/Edit/index.js +1 -1
- package/dist/views/Edit/index.js.map +1 -1
- package/package.json +6 -6
- /package/dist/exports/client/{CodeEditor-6KT2JS6X.js.map → CodeEditor-X3UZSEEZ.js.map} +0 -0
- /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,
|
|
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(
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
$[
|
|
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
|
-
|
|
57
|
+
t5 = $[5];
|
|
42
58
|
}
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
let
|
|
46
|
-
if ($[
|
|
47
|
-
const
|
|
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
|
-
|
|
66
|
+
checked: t7,
|
|
51
67
|
disabled: readOnly,
|
|
52
68
|
id,
|
|
53
69
|
name,
|
|
54
|
-
|
|
70
|
+
onChange: onToggle,
|
|
55
71
|
ref: inputRef,
|
|
56
72
|
required,
|
|
57
73
|
title: name,
|
|
58
74
|
type: "checkbox"
|
|
59
75
|
});
|
|
60
|
-
const
|
|
61
|
-
let
|
|
62
|
-
if ($[
|
|
63
|
-
|
|
64
|
-
$[
|
|
65
|
-
$[
|
|
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
|
-
|
|
83
|
+
t11 = $[23];
|
|
68
84
|
}
|
|
69
|
-
|
|
70
|
-
className:
|
|
85
|
+
t8 = _jsxs("div", {
|
|
86
|
+
className: t6,
|
|
71
87
|
children: [_jsxs("div", {
|
|
72
88
|
className: `${inputBaseClass}__input`,
|
|
73
|
-
children: [BeforeInput,
|
|
74
|
-
className:
|
|
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
|
-
$[
|
|
88
|
-
$[
|
|
89
|
-
$[
|
|
90
|
-
$[
|
|
91
|
-
$[
|
|
92
|
-
$[
|
|
93
|
-
$[
|
|
94
|
-
$[
|
|
95
|
-
$[
|
|
96
|
-
$[
|
|
97
|
-
$[
|
|
98
|
-
$[
|
|
99
|
-
$[
|
|
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
|
-
|
|
120
|
+
t8 = $[21];
|
|
105
121
|
}
|
|
106
|
-
return
|
|
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","
|
|
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":"AAAA,sDAAsD;AACtD;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AASA,OAAOC,KAAA,IAASC,aAAa,EAAEC,GAAG,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ;AAE3E,SAASC,oBAAoB,QAAQ;AA6BrC,MAAMC,iBAAA,gBAAoBN,aAAA,CAA+CO,SAAA;AAEzE,OAAO,MAAMC,cAAA,GAGRA,CAAC;EAAEC,QAAQ;EAAEC,MAAA,EAAQC;AAAe,CAAE;EACzC;EACA;EACA;EACA,MAAM,CAACD,MAAA,EAAQE,SAAA,CAAU,GAAGP,oBAAA,CAAmCM,eAAA;EAE/D;EACA,MAAM;IAAEE,iBAAiB,EAAjBA,mBAAiB;IAAEC,aAAa,EAAbA;EAAa,CAAE,GAAGV,OAAA,CAAQ;IACnD,MAAMS,iBAAA,GAA4D,CAAC;IACnE,MAAMC,aAAA,GAAoD,CAAC;IAE3D,KAAK,MAAMC,UAAA,IAAcL,MAAA,CAAOM,WAAW,EAAE;MAC3CH,iBAAiB,CAACE,UAAA,CAAWE,IAAI,CAAC,GAAGF,UAAA;IACvC;IAEA,KAAK,MAAMG,MAAA,IAAUR,MAAA,CAAOS,OAAO,EAAE;MACnCL,aAAa,CAACI,MAAA,CAAOD,IAAI,CAAC,GAAGC,MAAA;IAC/B;IAEA,OAAO;MAAEL,iBAAA;MAAmBC;IAAc;EAC5C,GAAG,CAACJ,MAAA,CAAO;EAEX,MAAMU,eAAA,GAAkBlB,WAAA,CACrBmB,IAAA;IACC,IAAI,oBAAoBA,IAAA,
|
|
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,
|
|
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,
|
|
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":"AAAA;;;AAGA,SAASA,eAAe,QAAQ;AAChC,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,aAAa,EAAEC,GAAG,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAE7F,SAASC,iBAAiB,QAAQ;AAClC,SAASC,OAAO,QAAQ;AACxB,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAE1B,OAAO,IAAAC,eAAK,0BAAAA,eAAA;;;;;SAAAA,eAAA;;AAyBZ,MAAMC,OAAA,gBAAUZ,aAAA,CAAc;EAC5Ba,KAAA,EAAOC,SAAA;EACPC,cAAA,EAAiBC,gBAAA,IAA6B;EAC9CC,cAAA,EAAgBA,CAAA,KAAM,EAAE;EACxBC,SAAA,EAAWJ,SAAA;EACXK,QAAA,EAAU,IAAIC,GAAA;EACdC,WAAA,EAAa,EAAE;EACfC,YAAA,EAAeC,EAAA,KAAyB;EACxCC,SAAA,EAAYA,SAAA,KAAwB;EACpCC,SAAA,EAAWX;AACb;AASA,MAAMY,sBAAA,GAA0BP,QAAA;EAC9B,MAAMQ,GAAA,GAAM,EAAE;EAEd,KAAK,MAAM,CAACC,GAAA,EAAKC,KAAA,CAAM,IAAIV,QAAA,EAAU;IACnC,IAAIU,KAAA,EAAO;MACTF,GAAA,CAAIG,IAAI,CAACF,GAAA;IACX;EACF;EAEA,OAAOD,GAAA;AACT;AAEA,OAAO,MAAMI,iBAAA,GAAqCA,CAAC;EAAEC,QAAQ;EAAEC,IAAA,GAAO,EAAE;EAAER;AAAS,CAAE;EACnF,MAAMS,UAAA,GAAa7B,MAAA,CAAO,CAAC;EAC3B,MAAM;IAAE8B;EAAI,CAAE,GAAG3B,OAAA;EAEjB,MAAM;IAAE4B,IAAA,EAAMC;EAAM,CAAE,GAAG3B,SAAA;EAEzB,MAAM,CAACS,QAAA,EAAUmB,WAAA,CAAY,GAAGhC,QAAA,CAAuC;IACrE,MAAMiC,IAAA,GAAO,IAAInB,GAAA;IAEjBa,IAAA,CAAKO,OAAO,CAAC,CAAC;MAAEjB;IAAE,CAAE;MAClBgB,IAAA,CAAKE,GAAG,CAAClB,EAAA,EAAI;IACf;IAEA,OAAOgB,IAAA;EACT;EAEA,MAAM,CAACrB,SAAA,EAAWwB,YAAA,CAAa,GAAGpC,QAAA;EAClC,MAAM,CAACO,KAAA,EAAO8B,QAAA,CAAS,GAAGrC,QAAA,CAAS;EACnC,MAAMsC,YAAA,GAAe/C,eAAA;EACrB,MAAM;IAAEgD;EAAK,CAAE,GAAGpC,YAAA;EAElB,MAAMe,SAAA,GAA2CtB,WAAA,CAC/C,CAAC4C,YAAA,GAAe,KAAK;IACnB,MAAMP,MAAA,GAAO,IAAInB,GAAA;IACjB,IAAI0B,YAAA,EAAc;MAChBJ,YAAA;MAEAT,IAAA,CAAKO,OAAO,CAAC,CAAC;QAAEjB,EAAE,EAAFA,IAAE;QAAEwB,SAAS;QAAEC;MAAY,CAAE;QAC3C,IAAI,CAACD,SAAA,IAAaC,YAAA,EAAczB,EAAA,KAAOY,IAAA,EAAMZ,EAAA,EAAI;UAC/CgB,MAAA,CAAKE,GAAG,CAAClB,IAAA,EAAI;QACf;MACF;IACF,OAAO;IACL;IACAL,SAAA,uBACAA,SAAA,kBACA;MACAwB,YAAA;IACF,OAAO;MACLT,IAAA,CAAKO,OAAO,CAAC,CAAC;QAAEjB,EAAE,EAAFA,IAAE;QAAEwB,SAAS,EAATA,WAAS;QAAEC,YAAY,EAAZA;MAAY,CAAE;QAC3C,IAAI,CAACD,WAAA,IAAaC,cAAA,EAAczB,EAAA,KAAOY,IAAA,EAAMZ,EAAA,EAAI;UAC/CgB,MAAA,CAAKE,GAAG,CAAClB,IAAA,EAAIL,SAAA;QACf;MACF;IACF;IAEAoB,WAAA,CAAYC,MAAA;EACd,GACA,CAACN,IAAA,EAAMf,SAAA,EAAWiB,IAAA,EAAMZ,EAAA,CAAG;EAG7B,MAAMD,YAAA,GAAiDpB,WAAA,CACpDqB,IAAA;IACC,MAAM0B,KAAA,GAAMhB,IAAA,CAAKiB,IAAI,CAAED,GAAA,IAAQA,GAAA,CAAI1B,EAAE,KAAKA,IAAA;IAE1C,IAAI0B,KAAA,EAAKF,SAAA,IAAaZ,IAAA,EAAMZ,EAAA,KAAO0B,KAAA,EAAKD,YAAA,CAAazB,EAAA,EAAI;MACvD,QAAO;IACT;IAEA,MAAM4B,aAAA,GAAgBhC,QAAA,CAASiC,GAAG,CAAC7B,IAAA;IACnC,MAAM8B,UAAA,GAAa,OAAOF,aAAA,KAAkB,YAAY,CAACA,aAAA,GAAgB;IAEzE,MAAMG,MAAA,GAAS,IAAIlC,GAAA,CAAID,QAAA,CAASsB,GAAG,CAAClB,IAAA,EAAI8B,UAAA;IAExC;IACA,IAAInC,SAAA,uBAA8C,CAACmC,UAAA,EAAY;MAC7DX,YAAA;IACF;IAEAJ,WAAA,CAAYgB,MAAA;EACd,GACA,CAACnC,QAAA,EAAUc,IAAA,EAAMf,SAAA,EAAWiB,IAAA,EAAMZ,EAAA,CAAG;EAGvC,MAAMR,cAAA,GAAiBb,WAAA,CACpBqD,qBAAA;IACC,IAAIC,KAAA;IAEJ,IAAItC,SAAA,qBAA4C;MAC9C,MAAMuC,MAAA,GAASlD,iBAAA,CAAkBqC,YAAA,GAAeY,KAAA;MAEhDA,KAAA,GAAQC,MAAA,IAAU;QAChBlC,EAAA,EAAI;UACFmC,UAAA,EAAY;QACd;MACF;IACF,OAAO;MACL,MAAM/B,GAAA,GAAM,EAAE;MAEd,KAAK,MAAM,CAACC,GAAA,EAAKC,KAAA,CAAM,IAAIV,QAAA,EAAU;QACnC,IAAIU,KAAA,EAAO;UACTF,GAAA,CAAIG,IAAI,CAACF,GAAA;QACX;MACF;MAEA4B,KAAA,GAAQ;QACNjC,EAAA,EAAI;UACFoC,EAAA,EAAIhC;QACN;MACF;IACF;IAEA,IAAI4B,qBAAA,EAAuB;MACzBC,KAAA,GAAQ;QACNI,GAAA,EAAK,CAAC;UAAE,GAAGL;QAAsB,GAAGC,KAAA;MACtC;IACF;IAEA,OAAO1D,EAAA,CAAG+D,SAAS,CACjB;MACExB,MAAA;MACAmB;IACF,GACA;MAAEM,cAAA,EAAgB;IAAK;EAE3B,GACA,CAAC5C,SAAA,EAAWC,QAAA,EAAUkB,MAAA,EAAQO,YAAA,CAAa;EAG7C,MAAM3B,cAAA,GAAiBf,WAAA,CAAY,MAAMwB,sBAAA,CAAuBP,QAAA,GAAW,CAACA,QAAA,CAAS;EAErFhB,SAAA,CAAU;IACR,IAAIe,SAAA,qBAA4C;MAC9C;IACF;IACA,IAAI6C,IAAA,GAAO;IACX,IAAIC,GAAA,GAAM;IAEV,IAAI,CAAC7C,QAAA,CAAS8C,IAAI,EAAE;MAClBD,GAAA,GAAM;MACND,IAAA,GAAO;IACT,OAAO;MACL,KAAK,MAAM,CAACG,CAAA,EAAGrC,OAAA,CAAM,IAAIV,QAAA,EAAU;QACjC6C,GAAA,GAAMA,GAAA,IAAOnC,OAAA;QACbkC,IAAA,GAAOA,IAAA,IAAQlC,OAAA;MACjB;IACF;IAEA,IAAImC,GAAA,IAAO7C,QAAA,CAAS8C,IAAI,KAAKhC,IAAA,CAAKkC,MAAM,EAAE;MACxCzB,YAAA;IACF,OAAO,IAAIqB,IAAA,EAAM;MACfrB,YAAA;IACF,OAAO;MACLA,YAAA;IACF;EACF,GAAG,CAACxB,SAAA,EAAWC,QAAA,EAAUM,SAAA,EAAWQ,IAAA,CAAK;EAEzC9B,SAAA,CAAU;IACR,IAAIiE,QAAA,GAAW;IAEf,IAAIlD,SAAA,qBAA4C;MAC9CkD,QAAA,GAAW3C,SAAA;IACb,OAAO;MACL,KAAK,MAAM,CAACyC,GAAA,EAAGrC,OAAA,CAAM,IAAIV,QAAA,EAAU;QACjC,IAAIU,OAAA,EAAO;UACTuC,QAAA;QACF;MACF;IACF;IAEAzB,QAAA,CAASyB,QAAA;EACX,GAAG,CAAClD,SAAA,EAAWC,QAAA,EAAUM,SAAA,CAAU;EAEnCtB,SAAA,CAAU;IACRuC,YAAA;IACAJ,WAAA,CAAY,IAAIlB,GAAA;EAClB,GAAG,CAACyB,KAAA,CAAM;EAEV,MAAMxB,WAAA,GAAcjB,OAAA,CAAQ,MAAMsB,sBAAA,CAAuBP,QAAA,GAAW,CAACA,QAAA,CAAS;EAE9Ee,UAAA,CAAWmC,OAAO,GAAG;IACnBxD,KAAA;IACAE,cAAA;IACAE,cAAA;IACAC,SAAA;IACAC,QAAA;IACAE,WAAA;IACAC,YAAA;IACAE,SAAA;IACAC;EACF;EAEA,oBAAO6C,IAAA,CAAC1D,OAAA;IAAQiB,KAAA,EAAOK,UAAA,CAAWmC,OAAO;cAAGrC;;AAC9C;AAEA,OAAO,MAAMuC,YAAA,GAAeA,CAAA,KAAwBtE,GAAA,CAAIW,OAAA","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
|
|
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;
|
|
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":"AASA,SAASA,cAAc,EAAEC,YAAY,EAAEC,iBAAiB,QAAQ;AAChE,SAASC,aAAa,EAAEC,oBAAoB,QAAQ;AAEpD,SAASC,uBAAuB,QAAQ;AACxC,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,YAAY,QAAQ;AAC7B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,iBAAiB,QAAQ;AAClC,SAASC,aAAa,QAAQ;AAgC9B,OAAO,MAAMC,qBAAA,GAGT,MAAOC,IAAA;EACT,MAAM;IAAEC;EAAG,CAAE,GAAGD,IAAA;EAEhB,IAAI;IACF,MAAMd,cAAA,CAAe;MAAEe;IAAI;IAC3B,MAAMC,GAAA,GAAM,MAAMC,cAAA,CAAeH,IAAA;IAEjC,OAAOE,GAAA;EACT,EAAE,OAAOE,GAAA,EAAK;IACZH,GAAA,CAAII,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;MAAEH,GAAA;MAAKI,GAAA,EAAK;IAAyC;IAE9E,IAAIJ,GAAA,CAAIK,OAAO,KAAK,8CAA8C;MAChE,OAAO;QACLA,OAAA,EAASL,GAAA,CAAIK;MACf;IACF;IAEA,IAAIL,GAAA,CAAIK,OAAO,KAAK,gBAAgB;MAClC,MAAM,IAAIrB,iBAAA;IACZ;IAEA,OAAOD,YAAA,CAAaiB,GAAA;EACtB;AACF;AAEA,OAAO,MAAMD,cAAA,GAAiB,MAC5BH,IAAA;EAEA,MAAM;IACJU,EAAA,EAAIC,UAAU;IACdC,cAAc;IACdC,IAAA,EAAMC,YAAY;IAClBC,cAAc;IACdC,cAAc;IACdC,iBAAiB;IACjBC,SAAS;IACTC,UAAU;IACVC,gBAAgB;IAChBC,qBAAqB;IACrBC,QAAQ;IACRC,SAAS;IACTC,QAAQ;IACRC,eAAe;IACfxB,GAAG;IACHA,GAAA,EAAK;MACHyB,IAAI;MACJrB,OAAO;MACPA,OAAA,EAAS;QAAEsB;MAAM;IAAE,CACpB;IACDC,oBAAoB;IACpBC,gBAAgB;IAChBC,gBAAgB;IAChBC,UAAA,GAAanB,cAAA,IAAkBO,UAAU;IACzCa,MAAM;IACNC,oBAAoB;IACpBC,cAAc;IACdC;EAAgB,CACjB,GAAGnC,IAAA;EAEJ,MAAMoC,UAAA,GAAaJ,MAAA,GAAS3C,aAAA,CAAc2C,MAAA,IAAUK,SAAA;EAEpD,IAAI,CAACzB,cAAA,IAAkB,CAACO,UAAA,EAAY;IAClC,MAAM,IAAImB,KAAA,CAAM;EAClB;EAEA,MAAMC,SAAA,GAAY5C,YAAA,CAAa;IAC7BiB,cAAA;IACAe,MAAA;IACAR,UAAA;IACAO;EACF;EAEA,MAAMc,eAAA,GAAkB9C,kBAAA,CAAmB;IACzCkB,cAAA;IACAe,MAAA,EAAQlC,eAAA,CAAgB;MACtBkC,MAAA;MACAD,IAAA;MACAe,SAAA,EAAWxC,GAAA,CAAII,OAAO,CAACoC,SAAS;MAChCC,IAAA,EAAMT,oBAAA,GAAuB,OAAOhC,GAAA,CAAIyC;IAC1C;IACAvB,UAAA;IACAO,IAAA;IACArB,OAAA;IACAkC;EACF;EAEA,MAAM7B,EAAA,GAAKE,cAAA,GAAiBD,UAAA,GAAa0B,SAAA;EACzC,MAAMM,mBAAA,GAAsBJ,SAAA,CAAUK,GAAG,CAACb,UAAA;EAE1C,IAAI,CAACY,mBAAA,EAAqB;IACxB,MAAM,IAAIL,KAAA,CAAM,mBAAmBP,UAAA,yBAAmC;EACxE;EAEA,IACE,CAAC,EAAE,YAAYY,mBAAkB,KAC/B,CAACA,mBAAA,CAAoBE,MAAM,IAC3B,CAACF,mBAAA,CAAoBE,MAAM,CAACC,MAAM,KACpC,UAAUH,mBAAA,IACVA,mBAAA,CAAoBI,IAAI,KAAK,UAC7B;IACA,MAAM,IAAIT,KAAA,CACR,0CAA0CP,UAAA,mCAA6C;EAE3F;EAEA;EACA;EACA,MAAMlB,IAAA,GAAOC,YAAA,IAAgBxB,oBAAA,CAAqB4B,SAAA,EAAW;EAE7D,IAAI8B,YAAA,GAAeX,SAAA;EAEnB,IAAIpB,iBAAA,EAAmB;IACrB+B,YAAA,GAAe1D,oBAAA,CAAqB2B,iBAAA,EAAmB;EACzD;EAEA,IAAIgC,SAAA,GAAY7B,gBAAA;EAEhB,IAAIC,qBAAA,EAAuB;IACzB4B,SAAA,GAAY3D,oBAAA,CAAqB+B,qBAAA,EAAuB;EAC1D;EAEA;;;;;;;;;EASA,MAAMwB,MAAA,GAASK,KAAA,CAAMC,OAAO,CAACR,mBAAA,IACzBA,mBAAA,GACA,YAAYA,mBAAA,GACVA,mBAAA,CAAoBE,MAAM,GAC1B,CAACF,mBAAA,CAAoB;EAE3B;EACA;EACA,IAAI,CAAC9B,IAAA,CAAKH,EAAE,IAAIA,EAAA,EAAI;IAClBG,IAAA,CAAKH,EAAE,GAAGA,EAAA;EACZ;EAEA,MAAM0C,eAAA,GAAkB,MAAM7D,uBAAA,CAAwB;IACpDmB,EAAA;IACA2C,oBAAA,EAAsBb,eAAA;IACtB5B,cAAA;IACAC,IAAA;IACAmC,YAAA;IACAH,MAAA;IACAS,cAAA,EAAgBf,SAAA;IAChBnB,gBAAA,EAAkB6B,SAAA;IAClB3B,QAAA;IACAC,SAAA;IACAgC,WAAA,EAAaxC,cAAA,EAAgB8B,MAAA,IAAU,CAAC;IACxCW,WAAA,EAAaxC,cAAA,IAAkB;MAAE6B,MAAA,EAAQ,CAAC;IAAE;IAC5CY,iBAAA,EAAmBvC,SAAA;IACnBM,QAAA;IACAC,eAAA;IACAiC,aAAA,EAAelE,WAAA;IACfS,GAAA;IACA8B,UAAA;IACAC,MAAA;IACAI,UAAA;IACAF;EACF;EAEA;EACA,IAAItB,cAAA,IAAkBM,SAAA,EAAW;IAC/B,IAAIb,OAAA,CAAQsD,WAAW,CAAC/C,cAAA,CAAe,EAAEe,MAAA,EAAQiC,MAAA,IAAU1C,SAAA,CAAU2C,IAAI,EAAE;MACzET,eAAA,CAAgBS,IAAI,GAAG3C,SAAA,CAAU2C,IAAI;IACvC;EACF;EAEA,IAAIC,iBAAA;EAEJ,IAAIjC,gBAAA,EAAkB;IACpBiC,iBAAA,GAAoB,MAAMlE,sBAAA,CAAuB;MAC/Cc,EAAA;MACAE,cAAA;MACAO,UAAA;MACAlB,GAAA;MACAkC;IACF;EACF;EAEA,MAAMjC,GAAA,GAAmC;IACvC6D,WAAA,EAAaD,iBAAA;IACbE,KAAA,EAAOZ;EACT;EAEA,IAAIxB,oBAAA,EAAsB;IACxB,MAAM;MAAEqC;IAAc,CAAE,GAAG,MAAMpE,iBAAA,CAAkB;MACjDe,cAAA;MACAe,MAAA;MACAd,IAAA;MACAM,UAAA;MACAlB;IACF;IAEA;IACA;IACA,IAAIgE,cAAA,EAAgB;MAClB/D,GAAA,CAAI+D,cAAc,GAAGA,cAAA;IACvB;EACF;EAEA,IAAInC,gBAAA,EAAkB;IACpB,MAAM;MAAEoC;IAAU,CAAE,GAAG,MAAMpE,aAAA,CAAc;MACzCc,cAAA;MACAe,MAAA;MACAd,IAAA;MACAM,UAAA;MACAlB;IACF;IAEA;IACA;IACA,IAAIiE,UAAA,EAAY;MACdhE,GAAA,CAAIgE,UAAU,GAAGA,UAAA;IACnB;EACF;EAEA,OAAOhE,GAAA;AACT","ignoreList":[]}
|
package/dist/views/Edit/index.js
CHANGED
|
@@ -186,7 +186,7 @@ export function DefaultEditView({
|
|
|
186
186
|
const handleDocumentLocking = useCallback(lockedState => {
|
|
187
187
|
setDocumentIsLocked(true);
|
|
188
188
|
const previousOwnerID = typeof documentLockState.current?.user === 'object' ? documentLockState.current?.user?.id : documentLockState.current?.user;
|
|
189
|
-
if (lockedState) {
|
|
189
|
+
if (lockedState && lockedState.user) {
|
|
190
190
|
const lockedUserID = typeof lockedState.user === 'string' || typeof lockedState.user === 'number' ? lockedState.user : lockedState.user.id;
|
|
191
191
|
if (!documentLockState.current || lockedUserID !== previousOwnerID) {
|
|
192
192
|
if (previousOwnerID === user.id && lockedUserID !== user.id) {
|