@payloadcms/ui 3.2.2-canary.6fb5cd8 → 3.2.2-canary.a11698b

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 (40) hide show
  1. package/dist/elements/AnimateHeight/index.d.ts.map +1 -1
  2. package/dist/elements/AnimateHeight/index.js +2 -0
  3. package/dist/elements/AnimateHeight/index.js.map +1 -1
  4. package/dist/elements/AnimateHeight/usePatchAnimateHeight.d.ts.map +1 -1
  5. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +80 -44
  6. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
  7. package/dist/elements/Button/types.d.ts +8 -0
  8. package/dist/elements/Button/types.d.ts.map +1 -1
  9. package/dist/elements/Button/types.js.map +1 -1
  10. package/dist/elements/DocumentDrawer/Provider.d.ts +2 -2
  11. package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
  12. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  13. package/dist/exports/client/index.js +10 -10
  14. package/dist/exports/client/index.js.map +3 -3
  15. package/dist/forms/Form/index.d.ts.map +1 -1
  16. package/dist/forms/Form/index.js +11 -1
  17. package/dist/forms/Form/index.js.map +1 -1
  18. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  19. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  20. package/dist/forms/Form/types.d.ts +1 -1
  21. package/dist/forms/Form/types.d.ts.map +1 -1
  22. package/dist/forms/Form/types.js.map +1 -1
  23. package/dist/forms/Submit/index.d.ts.map +1 -1
  24. package/dist/forms/Submit/index.js +6 -4
  25. package/dist/forms/Submit/index.js.map +1 -1
  26. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  27. package/dist/providers/ListQuery/index.js +5 -6
  28. package/dist/providers/ListQuery/index.js.map +1 -1
  29. package/dist/providers/SearchParams/index.d.ts +2 -0
  30. package/dist/providers/SearchParams/index.d.ts.map +1 -1
  31. package/dist/providers/SearchParams/index.js +24 -28
  32. package/dist/providers/SearchParams/index.js.map +1 -1
  33. package/dist/utilities/buildFormState.d.ts +6 -5
  34. package/dist/utilities/buildFormState.d.ts.map +1 -1
  35. package/dist/utilities/buildFormState.js.map +1 -1
  36. package/dist/views/Edit/index.d.ts +1 -1
  37. package/dist/views/Edit/index.d.ts.map +1 -1
  38. package/dist/views/Edit/index.js +76 -51
  39. package/dist/views/Edit/index.js.map +1 -1
  40. package/package.json +4 -4
@@ -10,35 +10,31 @@ const initialContext = {
10
10
  stringifyParams: () => ''
11
11
  };
12
12
  const Context = /*#__PURE__*/createContext(initialContext);
13
- function createParams(search) {
13
+ export function createParams(params) {
14
+ const search = params.toString();
14
15
  return qs.parse(search, {
15
16
  depth: 10,
16
17
  ignoreQueryPrefix: true
17
18
  });
18
19
  }
19
- // TODO: abstract the `next/navigation` dependency out from this provider so that it can be used in other contexts
20
+ // TODO: this provider should likely be marked as deprecated and then removed in the next major release
20
21
  export const SearchParamsProvider = t0 => {
21
- const $ = _c(12);
22
+ const $ = _c(11);
22
23
  const {
23
24
  children
24
25
  } = t0;
25
26
  const nextSearchParams = useNextSearchParams();
26
27
  let t1;
27
- let searchString;
28
28
  if ($[0] !== nextSearchParams) {
29
- searchString = nextSearchParams.toString();
30
- t1 = createParams(searchString);
29
+ t1 = () => createParams(nextSearchParams);
31
30
  $[0] = nextSearchParams;
32
31
  $[1] = t1;
33
- $[2] = searchString;
34
32
  } else {
35
33
  t1 = $[1];
36
- searchString = $[2];
37
34
  }
38
- const initialParams = t1;
39
- const [searchParams, setSearchParams] = React.useState(initialParams);
35
+ const [searchParams, setSearchParams] = React.useState(t1);
40
36
  let t2;
41
- if ($[3] !== searchParams) {
37
+ if ($[2] !== searchParams) {
42
38
  t2 = t3 => {
43
39
  const {
44
40
  params,
@@ -52,29 +48,29 @@ export const SearchParamsProvider = t0 => {
52
48
  addQueryPrefix: true
53
49
  });
54
50
  };
55
- $[3] = searchParams;
56
- $[4] = t2;
51
+ $[2] = searchParams;
52
+ $[3] = t2;
57
53
  } else {
58
- t2 = $[4];
54
+ t2 = $[3];
59
55
  }
60
56
  const stringifyParams = t2;
61
57
  let t3;
62
58
  let t4;
63
- if ($[5] !== searchString) {
59
+ if ($[4] !== nextSearchParams) {
64
60
  t3 = () => {
65
- setSearchParams(createParams(searchString));
61
+ setSearchParams(createParams(nextSearchParams));
66
62
  };
67
- t4 = [searchString];
68
- $[5] = searchString;
69
- $[6] = t3;
70
- $[7] = t4;
63
+ t4 = [nextSearchParams];
64
+ $[4] = nextSearchParams;
65
+ $[5] = t3;
66
+ $[6] = t4;
71
67
  } else {
72
- t3 = $[6];
73
- t4 = $[7];
68
+ t3 = $[5];
69
+ t4 = $[6];
74
70
  }
75
71
  React.useEffect(t3, t4);
76
72
  let t5;
77
- if ($[8] !== searchParams || $[9] !== stringifyParams || $[10] !== children) {
73
+ if ($[7] !== searchParams || $[8] !== stringifyParams || $[9] !== children) {
78
74
  t5 = _jsx(Context.Provider, {
79
75
  value: {
80
76
  searchParams,
@@ -82,12 +78,12 @@ export const SearchParamsProvider = t0 => {
82
78
  },
83
79
  children
84
80
  });
85
- $[8] = searchParams;
86
- $[9] = stringifyParams;
87
- $[10] = children;
88
- $[11] = t5;
81
+ $[7] = searchParams;
82
+ $[8] = stringifyParams;
83
+ $[9] = children;
84
+ $[10] = t5;
89
85
  } else {
90
- t5 = $[11];
86
+ t5 = $[10];
91
87
  }
92
88
  return t5;
93
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useSearchParams","useNextSearchParams","qs","React","createContext","useContext","initialContext","searchParams","stringifyParams","Context","createParams","search","parse","depth","ignoreQueryPrefix","SearchParamsProvider","t0","$","children","nextSearchParams","t1","searchString","toString","initialParams","setSearchParams","useState","t2","t3","params","replace","t4","undefined","stringify","addQueryPrefix","useEffect","t5","_jsx","Provider","value"],"sources":["../../../src/providers/SearchParams/index.tsx"],"sourcesContent":["'use client'\nimport { useSearchParams as useNextSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useContext } from 'react'\n\nexport type SearchParamsContext = {\n searchParams: qs.ParsedQs\n stringifyParams: ({ params, replace }: { params: State; replace?: boolean }) => string\n}\n\nexport type State = qs.ParsedQs\n\nconst initialContext: SearchParamsContext = {\n searchParams: {},\n stringifyParams: () => '',\n}\n\nconst Context = createContext(initialContext)\n\nfunction createParams(search: string) {\n return qs.parse(search, {\n depth: 10,\n ignoreQueryPrefix: true,\n })\n}\n\n// TODO: abstract the `next/navigation` dependency out from this provider so that it can be used in other contexts\nexport const SearchParamsProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => {\n const nextSearchParams = useNextSearchParams()\n const searchString = nextSearchParams.toString()\n const initialParams = createParams(searchString)\n\n const [searchParams, setSearchParams] = React.useState(initialParams)\n\n const stringifyParams = React.useCallback(\n ({ params, replace = false }: { params: State; replace?: boolean }) => {\n return qs.stringify(\n {\n ...(replace ? {} : searchParams),\n ...params,\n },\n { addQueryPrefix: true },\n )\n },\n [searchParams],\n )\n\n React.useEffect(() => {\n setSearchParams(createParams(searchString))\n }, [searchString])\n\n return <Context.Provider value={{ searchParams, stringifyParams }}>{children}</Context.Provider>\n}\n\nexport const useSearchParams = (): SearchParamsContext => useContext(Context)\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,eAAA,IAAmBC,mBAAmB,QAAQ;AACvD,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,aAAa,EAAEC,UAAU,QAAQ;AASjD,MAAMC,cAAA,GAAsC;EAC1CC,YAAA,EAAc,CAAC;EACfC,eAAA,EAAiBA,CAAA,KAAM;AACzB;AAEA,MAAMC,OAAA,gBAAUL,aAAA,CAAcE,cAAA;AAE9B,SAASI,aAAaC,MAAc;EAClC,OAAOT,EAAA,CAAGU,KAAK,CAACD,MAAA,EAAQ;IACtBE,KAAA,EAAO;IACPC,iBAAA,EAAmB;EACrB;AACF;AAEA;AACA,OAAO,MAAMC,oBAAA,GAAiEC,EAAA;EAAA,MAAAC,CAAA,GAAAlB,EAAA;EAAC;IAAAmB;EAAA,IAAAF,EAAY;EACzF,MAAAG,gBAAA,GAAyBlB,mBAAA;EAAA,IAAAmB,EAAA;EAAA,IAAAC,YAAA;EAAA,IAAAJ,CAAA,QAAAE,gBAAA;IACzBE,YAAA,GAAqBF,gBAAA,CAAAG,QAAA,CAAyB;IACxBF,EAAA,GAAAV,YAAA,CAAaW,YAAA;IAAAJ,CAAA,MAAAE,gBAAA;IAAAF,CAAA,MAAAG,EAAA;IAAAH,CAAA,MAAAI,YAAA;EAAA;IAAAD,EAAA,GAAAH,CAAA;IAAAI,YAAA,GAAAJ,CAAA;EAAA;EAAnC,MAAAM,aAAA,GAAsBH,EAAa;EAEnC,OAAAb,YAAA,EAAAiB,eAAA,IAAwCrB,KAAA,CAAAsB,QAAA,CAAeF,aAAA;EAAA,IAAAG,EAAA;EAAA,IAAAT,CAAA,QAAAV,YAAA;IAGrDmB,EAAA,GAAAC,EAAA;MAAC;QAAAC,MAAA;QAAAC,OAAA,EAAAC;MAAA,IAAAH,EAAiE;MAAvD,MAAAE,OAAA,GAAAC,EAAe,KAAAC,SAAA,WAAfD,EAAe;MAAA,OACjB5B,EAAA,CAAA8B,SAAA;QAAA,IAECH,OAAA,QAAetB,YAAY;QAAA,GAC5BqB;MAAM;QAAAK,cAAA;MAAA,CAEY;IAAA;IAE3BhB,CAAA,MAAAV,YAAA;IAAAU,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EATF,MAAAT,eAAA,GAAwBkB,EAUR;EAAA,IAAAC,EAAA;EAAA,IAAAG,EAAA;EAAA,IAAAb,CAAA,QAAAI,YAAA;IAGAM,EAAA,GAAAA,CAAA;MACdH,eAAA,CAAgBd,YAAA,CAAaW,YAAA;IAAA;IAC5BS,EAAA,IAACT,YAAA;IAAaJ,CAAA,MAAAI,YAAA;IAAAJ,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAa,EAAA;EAAA;IAAAH,EAAA,GAAAV,CAAA;IAAAa,EAAA,GAAAb,CAAA;EAAA;EAFjBd,KAAA,CAAA+B,SAAA,CAAgBP,EAEhB,EAAGG,EAAc;EAAA,IAAAK,EAAA;EAAA,IAAAlB,CAAA,QAAAV,YAAA,IAAAU,CAAA,QAAAT,eAAA,IAAAS,CAAA,SAAAC,QAAA;IAEViB,EAAA,GAAAC,IAAA,CAAA3B,OAAA,CAAA4B,QAAA;MAAAC,KAAA;QAAA/B,YAAA;QAAAC;MAAA;MAAAU;IAAA,C;;;;;;;;SAAAiB,E;CACT;AAEA,OAAO,MAAMnC,eAAA,GAAkBA,CAAA;EAAA,OAA2BK,UAAA,CAAAI,OAAW;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useSearchParams","useNextSearchParams","qs","React","createContext","useContext","initialContext","searchParams","stringifyParams","Context","createParams","params","search","toString","parse","depth","ignoreQueryPrefix","SearchParamsProvider","t0","$","children","nextSearchParams","t1","setSearchParams","useState","t2","t3","replace","t4","undefined","stringify","addQueryPrefix","useEffect","t5","_jsx","Provider","value"],"sources":["../../../src/providers/SearchParams/index.tsx"],"sourcesContent":["'use client'\nimport type { ReadonlyURLSearchParams } from 'next/navigation.js'\n\nimport { useSearchParams as useNextSearchParams } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useContext } from 'react'\n\nexport type SearchParamsContext = {\n searchParams: qs.ParsedQs\n stringifyParams: ({ params, replace }: { params: State; replace?: boolean }) => string\n}\n\nexport type State = qs.ParsedQs\n\nconst initialContext: SearchParamsContext = {\n searchParams: {},\n stringifyParams: () => '',\n}\n\nconst Context = createContext(initialContext)\n\nexport function createParams(params: ReadonlyURLSearchParams): State {\n const search = params.toString()\n\n return qs.parse(search, {\n depth: 10,\n ignoreQueryPrefix: true,\n })\n}\n\n// TODO: this provider should likely be marked as deprecated and then removed in the next major release\nexport const SearchParamsProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => {\n const nextSearchParams = useNextSearchParams()\n\n const [searchParams, setSearchParams] = React.useState(() => createParams(nextSearchParams))\n\n const stringifyParams = React.useCallback(\n ({ params, replace = false }: { params: State; replace?: boolean }) => {\n return qs.stringify(\n {\n ...(replace ? {} : searchParams),\n ...params,\n },\n { addQueryPrefix: true },\n )\n },\n [searchParams],\n )\n\n React.useEffect(() => {\n setSearchParams(createParams(nextSearchParams))\n }, [nextSearchParams])\n\n return <Context.Provider value={{ searchParams, stringifyParams }}>{children}</Context.Provider>\n}\n\nexport const useSearchParams = (): SearchParamsContext => useContext(Context)\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,eAAA,IAAmBC,mBAAmB,QAAQ;AACvD,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,aAAa,EAAEC,UAAU,QAAQ;AASjD,MAAMC,cAAA,GAAsC;EAC1CC,YAAA,EAAc,CAAC;EACfC,eAAA,EAAiBA,CAAA,KAAM;AACzB;AAEA,MAAMC,OAAA,gBAAUL,aAAA,CAAcE,cAAA;AAE9B,OAAO,SAASI,aAAaC,MAA+B;EAC1D,MAAMC,MAAA,GAASD,MAAA,CAAOE,QAAQ;EAE9B,OAAOX,EAAA,CAAGY,KAAK,CAACF,MAAA,EAAQ;IACtBG,KAAA,EAAO;IACPC,iBAAA,EAAmB;EACrB;AACF;AAEA;AACA,OAAO,MAAMC,oBAAA,GAAiEC,EAAA;EAAA,MAAAC,CAAA,GAAApB,EAAA;EAAC;IAAAqB;EAAA,IAAAF,EAAY;EACzF,MAAAG,gBAAA,GAAyBpB,mBAAA;EAAA,IAAAqB,EAAA;EAAA,IAAAH,CAAA,QAAAE,gBAAA;IAE8BC,EAAA,GAAAA,CAAA,KAAMZ,YAAA,CAAaW,gBAAA;IAAAF,CAAA,MAAAE,gBAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAA1E,OAAAZ,YAAA,EAAAgB,eAAA,IAAwCpB,KAAA,CAAAqB,QAAA,CAAeF,EAAmB;EAAA,IAAAG,EAAA;EAAA,IAAAN,CAAA,QAAAZ,YAAA;IAGxEkB,EAAA,GAAAC,EAAA;MAAC;QAAAf,MAAA;QAAAgB,OAAA,EAAAC;MAAA,IAAAF,EAAiE;MAAvD,MAAAC,OAAA,GAAAC,EAAe,KAAAC,SAAA,WAAfD,EAAe;MAAA,OACjB1B,EAAA,CAAA4B,SAAA;QAAA,IAECH,OAAA,QAAepB,YAAY;QAAA,GAC5BI;MAAM;QAAAoB,cAAA;MAAA,CAEY;IAAA;IAE3BZ,CAAA,MAAAZ,YAAA;IAAAY,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EATF,MAAAX,eAAA,GAAwBiB,EAUR;EAAA,IAAAC,EAAA;EAAA,IAAAE,EAAA;EAAA,IAAAT,CAAA,QAAAE,gBAAA;IAGAK,EAAA,GAAAA,CAAA;MACdH,eAAA,CAAgBb,YAAA,CAAaW,gBAAA;IAAA;IAC5BO,EAAA,IAACP,gBAAA;IAAiBF,CAAA,MAAAE,gBAAA;IAAAF,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAS,EAAA;EAAA;IAAAF,EAAA,GAAAP,CAAA;IAAAS,EAAA,GAAAT,CAAA;EAAA;EAFrBhB,KAAA,CAAA6B,SAAA,CAAgBN,EAEhB,EAAGE,EAAkB;EAAA,IAAAK,EAAA;EAAA,IAAAd,CAAA,QAAAZ,YAAA,IAAAY,CAAA,QAAAX,eAAA,IAAAW,CAAA,QAAAC,QAAA;IAEda,EAAA,GAAAC,IAAA,CAAAzB,OAAA,CAAA0B,QAAA;MAAAC,KAAA;QAAA7B,YAAA;QAAAC;MAAA;MAAAY;IAAA,C;;;;;;;;SAAAa,E;CACT;AAEA,OAAO,MAAMjC,eAAA,GAAkBA,CAAA;EAAA,OAA2BK,UAAA,CAAAI,OAAW;AAAA","ignoreList":[]}
@@ -1,13 +1,14 @@
1
1
  import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload';
2
+ export type LockedState = {
3
+ isLocked: boolean;
4
+ lastEditedAt: string;
5
+ user: ClientUser | number | string;
6
+ };
2
7
  type BuildFormStateSuccessResult = {
3
8
  clientConfig?: ClientConfig;
4
9
  errors?: never;
5
10
  indexPath?: string;
6
- lockedState?: {
7
- isLocked: boolean;
8
- lastEditedAt: string;
9
- user: ClientUser | number | string;
10
- };
11
+ lockedState?: LockedState;
11
12
  state: FormState;
12
13
  };
13
14
  type BuildFormStateErrorResult = {
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAYnG,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAC7F,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,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,SAC1B,kBAAkB,KACvB,OAAO,CAAC,oBAAoB,CAqD9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CA4HrC,CAAA"}
1
+ {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAYnG,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,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,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,SAC1B,kBAAkB,KACvB,OAAO,CAAC,oBAAoB,CAqD9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CA4HrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.js","names":["formatErrors","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","buildFormStateHandler","args","req","incomingUserSlug","user","collection","adminUserSlug","payload","config","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","res","buildFormState","err","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","formState","globalSlug","operation","renderAllFields","i18n","returnLockStatus","schemaPath","updateLastEdited","schemaMap","clientSchemaMap","importMap","undefined","fieldOrEntityConfig","get","fields","type","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","upload","file","lockedStateResult","lockedState","state"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { 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'\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n lockedState?: { isLocked: boolean; lastEditedAt: string; user: ClientUser | number | string }\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n lockedState?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateResult> => {\n const { req } = args\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n try {\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const res = await buildFormState(args)\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 return null\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 formState,\n globalSlug,\n operation,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLockStatus,\n schemaPath = collectionSlug || globalSlug,\n updateLastEdited,\n } = args\n\n let data = incomingData\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({ config, i18n, importMap: req.payload.importMap }),\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 a form state,\n // then we can deduce data from that form state\n if (formState) {\n data = reduceFieldsToValues(formState, 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 const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n fields,\n fieldSchemaMap: schemaMap,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\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 return {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"buildFormState.js","names":["formatErrors","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","buildFormStateHandler","args","req","incomingUserSlug","user","collection","adminUserSlug","payload","config","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","res","buildFormState","err","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","formState","globalSlug","operation","renderAllFields","i18n","returnLockStatus","schemaPath","updateLastEdited","schemaMap","clientSchemaMap","importMap","undefined","fieldOrEntityConfig","get","fields","type","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","upload","file","lockedStateResult","lockedState","state"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { 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'\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 lockedState?: LockedState\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n lockedState?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateResult> => {\n const { req } = args\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n try {\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const res = await buildFormState(args)\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 return null\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 formState,\n globalSlug,\n operation,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLockStatus,\n schemaPath = collectionSlug || globalSlug,\n updateLastEdited,\n } = args\n\n let data = incomingData\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({ config, i18n, importMap: req.payload.importMap }),\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 a form state,\n // then we can deduce data from that form state\n if (formState) {\n data = reduceFieldsToValues(formState, 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 const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n fields,\n fieldSchemaMap: schemaMap,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\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 return {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n}\n"],"mappings":"AAEA,SAASA,YAAY,QAAQ;AAC7B,SAASC,oBAAoB,QAAQ;AAErC,SAASC,uBAAuB,QAAQ;AACxC,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,YAAY,QAAQ;AAC7B,SAASC,sBAAsB,QAAQ;AA4BvC,OAAO,MAAMC,qBAAA,GAAwB,MACnCC,IAAA;EAEA,MAAM;IAAEC;EAAG,CAAE,GAAGD,IAAA;EAEhB,MAAME,gBAAA,GAAmBD,GAAA,CAAIE,IAAI,EAAEC,UAAA;EACnC,MAAMC,aAAA,GAAgBJ,GAAA,CAAIK,OAAO,CAACC,MAAM,CAACC,KAAK,CAACL,IAAI;EAEnD,IAAI;IACF;IACA,IAAID,gBAAA,EAAkB;MACpB,MAAMO,mBAAA,GAAsBR,GAAA,CAAIK,OAAO,CAACI,WAAW,CAACR,gBAAA,CAAiB,CAACK,MAAM,CAACI,MAAM,EAAEH,KAAA;MAErF;MACA,IAAIC,mBAAA,EAAqB;QACvB,MAAMG,cAAA,GAAiB,MAAMH,mBAAA,CAAoB;UAAER;QAAI;QAEvD,IAAI,CAACW,cAAA,EAAgB;UACnB,MAAM,IAAIC,KAAA,CAAM;QAClB;QACA;MACF,OAAO,IAAIR,aAAA,KAAkBH,gBAAA,EAAkB;QAC7C,MAAM,IAAIW,KAAA,CAAM;MAClB;IACF,OAAO;MACL,MAAMC,QAAA,GAAW,MAAMb,GAAA,CAAIK,OAAO,CAACS,IAAI,CAAC;QACtCX,UAAA,EAAYC,aAAA;QACZW,KAAA,EAAO;QACPC,KAAA,EAAO;QACPC,UAAA,EAAY;MACd;MAEA;MACA,IAAIJ,QAAA,CAASK,IAAI,CAACC,MAAM,EAAE;QACxB,MAAM,IAAIP,KAAA,CAAM;MAClB;IACF;IAEA,MAAMQ,GAAA,GAAM,MAAMC,cAAA,CAAetB,IAAA;IACjC,OAAOqB,GAAA;EACT,EAAE,OAAOE,GAAA,EAAK;IACZtB,GAAA,CAAIK,OAAO,CAACkB,MAAM,CAACC,KAAK,CAAC;MAAEF,GAAA;MAAKG,GAAA,EAAK;IAAyC;IAE9E,IAAIH,GAAA,CAAII,OAAO,KAAK,8CAA8C;MAChE,OAAO;QACLA,OAAA,EAASJ,GAAA,CAAII;MACf;IACF;IAEA,IAAIJ,GAAA,CAAII,OAAO,KAAK,gBAAgB;MAClC,OAAO;IACT;IAEA,OAAOpC,YAAA,CAAagC,GAAA;EACtB;AACF;AAEA,OAAO,MAAMD,cAAA,GAAiB,MAC5BtB,IAAA;EAEA,MAAM;IACJ4B,EAAA,EAAIC,UAAU;IACdC,cAAc;IACdC,IAAA,EAAMC,YAAY;IAClBC,cAAc;IACdC,cAAc;IACdC,SAAS;IACTC,UAAU;IACVC,SAAS;IACTC,eAAe;IACfrC,GAAG;IACHA,GAAA,EAAK;MACHsC,IAAI;MACJjC,OAAO;MACPA,OAAA,EAAS;QAAEC;MAAM;IAAE,CACpB;IACDiC,gBAAgB;IAChBC,UAAA,GAAaX,cAAA,IAAkBM,UAAU;IACzCM;EAAgB,CACjB,GAAG1C,IAAA;EAEJ,IAAI+B,IAAA,GAAOC,YAAA;EAEX,IAAI,CAACF,cAAA,IAAkB,CAACM,UAAA,EAAY;IAClC,MAAM,IAAIvB,KAAA,CAAM;EAClB;EAEA,MAAM8B,SAAA,GAAY9C,YAAA,CAAa;IAC7BiC,cAAA;IACAvB,MAAA;IACA6B,UAAA;IACAG;EACF;EAEA,MAAMK,eAAA,GAAkBhD,kBAAA,CAAmB;IACzCkC,cAAA;IACAvB,MAAA,EAAQZ,eAAA,CAAgB;MAAEY,MAAA;MAAQgC,IAAA;MAAMM,SAAA,EAAW5C,GAAA,CAAIK,OAAO,CAACuC;IAAU;IACzET,UAAA;IACAG,IAAA;IACAjC,OAAA;IACAqC;EACF;EAEA,MAAMf,EAAA,GAAKE,cAAA,GAAiBD,UAAA,GAAaiB,SAAA;EACzC,MAAMC,mBAAA,GAAsBJ,SAAA,CAAUK,GAAG,CAACP,UAAA;EAE1C,IAAI,CAACM,mBAAA,EAAqB;IACxB,MAAM,IAAIlC,KAAA,CAAM,mBAAmB4B,UAAA,yBAAmC;EACxE;EAEA,IACE,CAAC,EAAE,YAAYM,mBAAkB,KAC/B,CAACA,mBAAA,CAAoBE,MAAM,IAC3B,CAACF,mBAAA,CAAoBE,MAAM,CAAC7B,MAAM,KACpC,UAAU2B,mBAAA,IACVA,mBAAA,CAAoBG,IAAI,KAAK,UAC7B;IACA,MAAM,IAAIrC,KAAA,CACR,0CAA0C4B,UAAA,mCAA6C;EAE3F;EAEA;EACA;EACA,IAAIN,SAAA,EAAW;IACbJ,IAAA,GAAOvC,oBAAA,CAAqB2C,SAAA,EAAW;EACzC;EAEA;;;;;;;;;EASA,MAAMc,MAAA,GAASE,KAAA,CAAMC,OAAO,CAACL,mBAAA,IACzBA,mBAAA,GACA,YAAYA,mBAAA,GACVA,mBAAA,CAAoBE,MAAM,GAC1B,CAACF,mBAAA,CAAoB;EAE3B,MAAMM,eAAA,GAAkB,MAAM5D,uBAAA,CAAwB;IACpDmC,EAAA;IACA0B,oBAAA,EAAsBV,eAAA;IACtBd,cAAA;IACAC,IAAA;IACAkB,MAAA;IACAM,cAAA,EAAgBZ,SAAA;IAChBN,SAAA;IACAmB,WAAA,EAAavB,cAAA,EAAgBgB,MAAA,IAAU,CAAC;IACxCQ,WAAA,EAAavB,cAAA,IAAkB;MAAEe,MAAA,EAAQ,CAAC;IAAE;IAC5CS,iBAAA,EAAmBvB,SAAA;IACnBG,eAAA;IACAqB,aAAA,EAAejE,WAAA;IACfO,GAAA;IACAwC;EACF;EAEA;EACA,IAAIX,cAAA,IAAkBK,SAAA,EAAW;IAC/B,IAAI7B,OAAA,CAAQI,WAAW,CAACoB,cAAA,CAAe,EAAEvB,MAAA,EAAQqD,MAAA,IAAUzB,SAAA,CAAU0B,IAAI,EAAE;MACzER,eAAA,CAAgBQ,IAAI,GAAG1B,SAAA,CAAU0B,IAAI;IACvC;EACF;EAEA,IAAIC,iBAAA;EAEJ,IAAItB,gBAAA,EAAkB;IACpBsB,iBAAA,GAAoB,MAAMhE,sBAAA,CAAuB;MAC/C8B,EAAA;MACAE,cAAA;MACAM,UAAA;MACAnC,GAAA;MACAyC;IACF;EACF;EAEA,OAAO;IACLqB,WAAA,EAAaD,iBAAA;IACbE,KAAA,EAAOX;EACT;AACF","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { type ClientSideEditViewProps } from 'payload';
1
+ import type { ClientSideEditViewProps } from 'payload';
2
2
  import React from 'react';
3
3
  import './index.scss';
4
4
  export declare const DefaultEditView: React.FC<ClientSideEditViewProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,SAAS,CAAA;AAChB,OAAO,KAA6D,MAAM,OAAO,CAAA;AA2BjF,OAAO,cAAc,CAAA;AASrB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAygB7D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,uBAAuB,EAGxB,MAAM,SAAS,CAAA;AAGhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AA8BjF,OAAO,cAAc,CAAA;AAOrB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAsiB7D,CAAA"}
@@ -26,9 +26,9 @@ import { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'
26
26
  import { handleGoBack } from '../../utilities/handleGoBack.js';
27
27
  import { handleTakeOver } from '../../utilities/handleTakeOver.js';
28
28
  import { Auth } from './Auth/index.js';
29
- import './index.scss';
30
29
  import { SetDocumentStepNav } from './SetDocumentStepNav/index.js';
31
30
  import { SetDocumentTitle } from './SetDocumentTitle/index.js';
31
+ import './index.scss';
32
32
  const baseClass = 'collection-edit';
33
33
  // This component receives props only on _pages_
34
34
  // When rendered within a drawer, props are empty
@@ -117,6 +117,7 @@ export const DefaultEditView = ({
117
117
  getFormState
118
118
  } = useServerFunctions();
119
119
  const onChangeAbortControllerRef = useRef(null);
120
+ const onSaveAbortControllerRef = useRef(null);
120
121
  const locale = params.get('locale');
121
122
  const entitySlug = collectionConfig?.slug || globalConfig?.slug;
122
123
  const operation = collectionSlug && !id ? 'create' : 'update';
@@ -130,10 +131,13 @@ export const DefaultEditView = ({
130
131
  const lockDuration = typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault;
131
132
  const lockDurationInMilliseconds = lockDuration * 1000;
132
133
  let preventLeaveWithoutSaving = true;
134
+ let autosaveEnabled = false;
133
135
  if (collectionConfig) {
134
- preventLeaveWithoutSaving = !(collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave);
136
+ autosaveEnabled = Boolean(collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave);
137
+ preventLeaveWithoutSaving = !autosaveEnabled;
135
138
  } else if (globalConfig) {
136
- preventLeaveWithoutSaving = !(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave);
139
+ autosaveEnabled = Boolean(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave);
140
+ preventLeaveWithoutSaving = !autosaveEnabled;
137
141
  } else if (typeof disableLeaveWithoutSaving !== 'undefined') {
138
142
  preventLeaveWithoutSaving = !disableLeaveWithoutSaving;
139
143
  }
@@ -166,6 +170,25 @@ export const DefaultEditView = ({
166
170
  }
167
171
  return false;
168
172
  });
173
+ const handleDocumentLocking = useCallback(lockedState => {
174
+ setDocumentIsLocked(true);
175
+ const previousOwnerId = typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id : documentLockStateRef.current?.user;
176
+ if (lockedState) {
177
+ const lockedUserID = typeof lockedState.user === 'string' || typeof lockedState.user === 'number' ? lockedState.user : lockedState.user.id;
178
+ if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {
179
+ if (previousOwnerId === user.id && lockedUserID !== user.id) {
180
+ setShowTakeOverModal(true);
181
+ documentLockStateRef.current.hasShownLockedModal = true;
182
+ }
183
+ documentLockStateRef.current = {
184
+ hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,
185
+ isLocked: true,
186
+ user: lockedState.user
187
+ };
188
+ setCurrentEditor(lockedState.user);
189
+ }
190
+ }
191
+ }, [setCurrentEditor, setDocumentIsLocked, user.id]);
169
192
  const onSave = useCallback(async json => {
170
193
  reportUpdate({
171
194
  id,
@@ -187,10 +210,6 @@ export const DefaultEditView = ({
187
210
  operation: id ? 'update' : 'create'
188
211
  });
189
212
  }
190
- // Unlock the document after save
191
- if ((id || globalSlug) && isLockingEnabled) {
192
- setDocumentIsLocked(false);
193
- }
194
213
  if (!isEditing && depth < 2) {
195
214
  // Redirect to the same locale if it's been set
196
215
  const redirectRoute = formatAdminURL({
@@ -202,13 +221,39 @@ export const DefaultEditView = ({
202
221
  resetUploadEdits();
203
222
  }
204
223
  await getDocPermissions(json);
205
- }, [updateSavedDocumentData, reportUpdate, id, entitySlug, user, collectionSlug, userSlug, incrementVersionCount, onSaveFromContext, globalSlug, isLockingEnabled, isEditing, depth, getDocPermissions, refreshCookieAsync, setDocumentIsLocked, adminRoute, locale, router, resetUploadEdits]);
224
+ if ((id || globalSlug) && !autosaveEnabled) {
225
+ abortAndIgnore(onSaveAbortControllerRef.current);
226
+ const controller = new AbortController();
227
+ onSaveAbortControllerRef.current = controller;
228
+ const docPreferences = await getDocPreferences();
229
+ const {
230
+ state
231
+ } = await getFormState({
232
+ id,
233
+ collectionSlug,
234
+ data: json?.doc,
235
+ docPermissions,
236
+ docPreferences,
237
+ globalSlug,
238
+ operation,
239
+ renderAllFields: true,
240
+ returnLockStatus: false,
241
+ schemaPath: schemaPathSegments.join('.'),
242
+ signal: controller.signal
243
+ });
244
+ // Unlock the document after save
245
+ if (isLockingEnabled) {
246
+ setDocumentIsLocked(false);
247
+ }
248
+ return state;
249
+ }
250
+ }, [adminRoute, collectionSlug, depth, docPermissions, entitySlug, getDocPermissions, getDocPreferences, getFormState, globalSlug, id, incrementVersionCount, isEditing, isLockingEnabled, locale, onSaveFromContext, operation, refreshCookieAsync, reportUpdate, resetUploadEdits, router, schemaPathSegments, setDocumentIsLocked, updateSavedDocumentData, user, userSlug, autosaveEnabled]);
206
251
  const onChange = useCallback(async ({
207
252
  formState: prevFormState
208
253
  }) => {
209
254
  abortAndIgnore(onChangeAbortControllerRef.current);
210
- const controller = new AbortController();
211
- onChangeAbortControllerRef.current = controller;
255
+ const controller_0 = new AbortController();
256
+ onChangeAbortControllerRef.current = controller_0;
212
257
  const currentTime = Date.now();
213
258
  const timeSinceLastUpdate = currentTime - editSessionStartTime;
214
259
  const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds
@@ -216,65 +261,44 @@ export const DefaultEditView = ({
216
261
  if (updateLastEdited) {
217
262
  setEditSessionStartTime(currentTime);
218
263
  }
219
- const docPreferences = await getDocPreferences();
264
+ const docPreferences_0 = await getDocPreferences();
220
265
  const {
221
- lockedState,
222
- state
266
+ lockedState: lockedState_0,
267
+ state: state_0
223
268
  } = await getFormState({
224
269
  id,
225
270
  collectionSlug,
226
271
  docPermissions,
227
- docPreferences,
272
+ docPreferences: docPreferences_0,
228
273
  formState: prevFormState,
229
274
  globalSlug,
230
275
  operation,
231
276
  // Performance optimization: Setting it to false ensure that only fields that have explicit requireRender set in the form state will be rendered (e.g. new array rows).
232
- // We only wanna render ALL fields on initial render, not in onChange.
277
+ // We only want to render ALL fields on initial render, not in onChange.
233
278
  renderAllFields: false,
234
- returnLockStatus: isLockingEnabled ? true : false,
279
+ returnLockStatus: isLockingEnabled,
235
280
  schemaPath: schemaPathSegments.join('.'),
236
- signal: controller.signal,
281
+ signal: controller_0.signal,
237
282
  updateLastEdited
238
283
  });
239
- setDocumentIsLocked(true);
240
284
  if (isLockingEnabled) {
241
- const previousOwnerId = typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id : documentLockStateRef.current?.user;
242
- if (lockedState) {
243
- const lockedUserID = typeof lockedState.user === 'string' || typeof lockedState.user === 'number' ? lockedState.user : lockedState.user.id;
244
- if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {
245
- if (previousOwnerId === user.id && lockedUserID !== user.id) {
246
- setShowTakeOverModal(true);
247
- documentLockStateRef.current.hasShownLockedModal = true;
248
- }
249
- documentLockStateRef.current = documentLockStateRef.current = {
250
- hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,
251
- isLocked: true,
252
- user: lockedState.user
253
- };
254
- setCurrentEditor(lockedState.user);
255
- }
256
- }
285
+ handleDocumentLocking(lockedState_0);
257
286
  }
258
- return state;
259
- }, [editSessionStartTime, isLockingEnabled, getDocPreferences, getFormState, id, collectionSlug, docPermissions, globalSlug, operation, schemaPathSegments, setDocumentIsLocked, user.id, setCurrentEditor]);
287
+ return state_0;
288
+ }, [id, collectionSlug, getDocPreferences, getFormState, globalSlug, handleDocumentLocking, isLockingEnabled, operation, schemaPathSegments, docPermissions, editSessionStartTime]);
260
289
  // Clean up when the component unmounts or when the document is unlocked
261
290
  useEffect(() => {
262
291
  return () => {
263
- if (!isLockingEnabled) {
264
- return;
265
- }
266
- const currentPath = window.location.pathname;
267
- const documentId = id || globalSlug;
268
- // Routes where we do NOT want to unlock the document
269
- const stayWithinDocumentPaths = ['preview', 'api', 'versions'];
270
- const isStayingWithinDocument = stayWithinDocumentPaths.some(path => currentPath.includes(path));
271
- // Unlock the document only if we're actually navigating away from the document
272
- if (documentId && documentIsLocked && !isStayingWithinDocument) {
273
- // Check if this user is still the current editor
274
- if (typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id === user?.id : documentLockStateRef.current?.user === user?.id) {
275
- void unlockDocument(id, collectionSlug ?? globalSlug);
276
- setDocumentIsLocked(false);
277
- setCurrentEditor(null);
292
+ if (isLockingEnabled && documentIsLocked && (id || globalSlug)) {
293
+ // Only retain the lock if the user is still viewing the document
294
+ const shouldUnlockDocument = !['preview', 'api', 'versions'].some(path => window.location.pathname.includes(path));
295
+ if (shouldUnlockDocument) {
296
+ // Check if this user is still the current editor
297
+ if (typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id === user?.id : documentLockStateRef.current?.user === user?.id) {
298
+ void unlockDocument(id, collectionSlug ?? globalSlug);
299
+ setDocumentIsLocked(false);
300
+ setCurrentEditor(null);
301
+ }
278
302
  }
279
303
  }
280
304
  setShowTakeOverModal(false);
@@ -283,6 +307,7 @@ export const DefaultEditView = ({
283
307
  useEffect(() => {
284
308
  return () => {
285
309
  abortAndIgnore(onChangeAbortControllerRef.current);
310
+ abortAndIgnore(onSaveAbortControllerRef.current);
286
311
  };
287
312
  }, []);
288
313
  const shouldShowDocumentLockedModal = documentIsLocked && currentEditor && (typeof currentEditor === 'object' ? currentEditor.id !== user?.id : currentEditor !== user?.id) && !isReadOnlyForIncomingUser && !showTakeOverModal && !documentLockStateRef.current?.hasShownLockedModal && !isLockExpired;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useRouter","useSearchParams","React","Fragment","useCallback","useEffect","useRef","useState","DocumentControls","DocumentDrawerHeader","useDocumentDrawerContext","DocumentFields","DocumentLocked","DocumentTakeOver","LeaveWithoutSaving","Upload","Form","useAuth","useConfig","useDocumentEvents","useDocumentInfo","useEditDepth","OperationProvider","useServerFunctions","useUploadEdits","abortAndIgnore","formatAdminURL","handleBackToDashboard","handleGoBack","handleTakeOver","Auth","SetDocumentStepNav","SetDocumentTitle","baseClass","DefaultEditView","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","CustomUpload","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","disableActions","disableCreate","disableLeaveWithoutSaving","docPermissions","documentIsLocked","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialState","isEditing","isInitializing","lastUpdateTime","redirectAfterDelete","redirectAfterDuplicate","savedDocumentData","setCurrentEditor","setDocumentIsLocked","unlockDocument","updateDocumentEditor","updateSavedDocumentData","clearDoc","drawerSlug","onDelete","onDuplicate","onSave","onSaveFromContext","isInDrawer","Boolean","refreshCookieAsync","user","config","admin","userSlug","routes","adminRoute","getEntityConfig","collectionConfig","globalConfig","depth","router","params","reportUpdate","resetUploadEdits","getFormState","onChangeAbortControllerRef","locale","get","entitySlug","slug","operation","auth","undefined","upload","docConfig","lockDocumentsProp","lockDocuments","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","preventLeaveWithoutSaving","versions","drafts","autosave","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","documentLockStateRef","hasShownLockedModal","isLocked","classes","push","schemaPathSegments","setSchemaPathSegments","disableLocalStrategy","validateBeforeSubmit","setValidateBeforeSubmit","json","updatedAt","result","toISOString","doc","redirectRoute","path","onChange","formState","prevFormState","current","controller","AbortController","currentTime","timeSinceLastUpdate","updateLastEdited","docPreferences","lockedState","state","renderAllFields","returnLockStatus","schemaPath","join","signal","previousOwnerId","lockedUserID","currentPath","window","location","pathname","documentId","stayWithinDocumentPaths","isStayingWithinDocument","some","includes","shouldShowDocumentLockedModal","_jsx","className","filter","_jsxs","disabled","disableValidationOnSubmit","method","onSuccess","isActive","onReadOnly","onTakeOver","pluralLabel","labels","plural","useAsTitle","fallback","toString","customComponents","data","onDrawerCreateNew","permissions","readOnlyForIncomingUser","email","loginWithUsername","readOnly","requirePassword","useAPIKey","username","verify","uploadConfig","fields"],"sources":["../../../src/views/Edit/index.tsx"],"sourcesContent":["'use client'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport {\n type ClientCollectionConfig,\n type ClientGlobalConfig,\n type ClientSideEditViewProps,\n type ClientUser,\n} from 'payload'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\n\nimport { DocumentControls } from '../../elements/DocumentControls/index.js'\nimport { DocumentDrawerHeader } from '../../elements/DocumentDrawer/DrawerHeader/index.js'\nimport { useDocumentDrawerContext } from '../../elements/DocumentDrawer/Provider.js'\nimport { DocumentFields } from '../../elements/DocumentFields/index.js'\nimport { DocumentLocked } from '../../elements/DocumentLocked/index.js'\nimport { DocumentTakeOver } from '../../elements/DocumentTakeOver/index.js'\nimport { LeaveWithoutSaving } from '../../elements/LeaveWithoutSaving/index.js'\nimport { Upload } from '../../elements/Upload/index.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { OperationProvider } from '../../providers/Operation/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { abortAndIgnore } from '../../utilities/abortAndIgnore.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'\nimport { handleGoBack } from '../../utilities/handleGoBack.js'\nimport { handleTakeOver } from '../../utilities/handleTakeOver.js'\nimport { Auth } from './Auth/index.js'\nimport './index.scss'\nimport { SetDocumentStepNav } from './SetDocumentStepNav/index.js'\nimport { SetDocumentTitle } from './SetDocumentTitle/index.js'\n\nconst baseClass = 'collection-edit'\n\n// This component receives props only on _pages_\n// When rendered within a drawer, props are empty\n// This is solely to support custom edit views which get server-rendered\nexport const DefaultEditView: React.FC<ClientSideEditViewProps> = ({\n Description,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Upload: CustomUpload,\n}) => {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n disableActions,\n disableCreate,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialState,\n isEditing,\n isInitializing,\n lastUpdateTime,\n redirectAfterDelete,\n redirectAfterDuplicate,\n savedDocumentData,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n updateDocumentEditor,\n updateSavedDocumentData,\n } = useDocumentInfo()\n\n const {\n clearDoc,\n drawerSlug,\n onDelete,\n onDuplicate,\n onSave: onSaveFromContext,\n } = useDocumentDrawerContext()\n\n const isInDrawer = Boolean(drawerSlug)\n\n const { refreshCookieAsync, user } = useAuth()\n\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n const globalConfig = getEntityConfig({ globalSlug }) as ClientGlobalConfig\n\n const depth = useEditDepth()\n\n const router = useRouter()\n const params = useSearchParams()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n\n const onChangeAbortControllerRef = useRef<AbortController>(null)\n\n const locale = params.get('locale')\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const operation = collectionSlug && !id ? 'create' : 'update'\n\n const auth = collectionConfig ? collectionConfig.auth : undefined\n const upload = collectionConfig ? collectionConfig.upload : undefined\n\n const docConfig = collectionConfig || globalConfig\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n let preventLeaveWithoutSaving = true\n\n if (collectionConfig) {\n preventLeaveWithoutSaving = !(\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave\n )\n } else if (globalConfig) {\n preventLeaveWithoutSaving = !(\n globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave\n )\n } else if (typeof disableLeaveWithoutSaving !== 'undefined') {\n preventLeaveWithoutSaving = !disableLeaveWithoutSaving\n }\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n\n const isLockExpired = Date.now() > lockExpiryTime\n\n const documentLockStateRef = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: ClientUser | number | string\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const classes = [baseClass, (id || globalSlug) && `${baseClass}--is-editing`]\n\n if (globalSlug) {\n classes.push(`global-edit--${globalSlug}`)\n }\n\n if (collectionSlug) {\n classes.push(`collection-edit--${collectionSlug}`)\n }\n\n const [schemaPathSegments, setSchemaPathSegments] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return [`_${entitySlug}`, 'auth']\n }\n\n return [entitySlug]\n })\n\n const [validateBeforeSubmit, setValidateBeforeSubmit] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return true\n }\n\n return false\n })\n\n const onSave = useCallback(\n async (json) => {\n reportUpdate({\n id,\n entitySlug,\n updatedAt: json?.result?.updatedAt || new Date().toISOString(),\n })\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n incrementVersionCount()\n\n if (typeof updateSavedDocumentData === 'function') {\n void updateSavedDocumentData(json?.doc || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n void onSaveFromContext({\n ...json,\n operation: id ? 'update' : 'create',\n })\n }\n\n // Unlock the document after save\n if ((id || globalSlug) && isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n if (!isEditing && depth < 2) {\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${json?.doc?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n router.push(redirectRoute)\n } else {\n resetUploadEdits()\n }\n\n await getDocPermissions(json)\n },\n [\n updateSavedDocumentData,\n reportUpdate,\n id,\n entitySlug,\n user,\n collectionSlug,\n userSlug,\n incrementVersionCount,\n onSaveFromContext,\n globalSlug,\n isLockingEnabled,\n isEditing,\n depth,\n getDocPermissions,\n refreshCookieAsync,\n setDocumentIsLocked,\n adminRoute,\n locale,\n router,\n resetUploadEdits,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const { lockedState, state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n // Performance optimization: Setting it to false ensure that only fields that have explicit requireRender set in the form state will be rendered (e.g. new array rows).\n // We only wanna render ALL fields on initial render, not in onChange.\n renderAllFields: false,\n returnLockStatus: isLockingEnabled ? true : false,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n updateLastEdited,\n })\n\n setDocumentIsLocked(true)\n\n if (isLockingEnabled) {\n const previousOwnerId =\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id\n : documentLockStateRef.current?.user\n\n if (lockedState) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {\n if (previousOwnerId === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockStateRef.current.hasShownLockedModal = true\n }\n\n documentLockStateRef.current = documentLockStateRef.current = {\n hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n setCurrentEditor(lockedState.user as ClientUser)\n }\n }\n }\n\n return state\n },\n [\n editSessionStartTime,\n isLockingEnabled,\n getDocPreferences,\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n operation,\n schemaPathSegments,\n setDocumentIsLocked,\n user.id,\n setCurrentEditor,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n if (!isLockingEnabled) {\n return\n }\n\n const currentPath = window.location.pathname\n\n const documentId = id || globalSlug\n\n // Routes where we do NOT want to unlock the document\n const stayWithinDocumentPaths = ['preview', 'api', 'versions']\n\n const isStayingWithinDocument = stayWithinDocumentPaths.some((path) =>\n currentPath.includes(path),\n )\n\n // Unlock the document only if we're actually navigating away from the document\n if (documentId && documentIsLocked && !isStayingWithinDocument) {\n // Check if this user is still the current editor\n if (\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id === user?.id\n : documentLockStateRef.current?.user === user?.id\n ) {\n void unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n }\n }\n\n setShowTakeOverModal(false)\n }\n }, [\n collectionSlug,\n globalSlug,\n id,\n unlockDocument,\n user,\n setCurrentEditor,\n isLockingEnabled,\n documentIsLocked,\n setDocumentIsLocked,\n ])\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n !documentLockStateRef.current?.hasShownLockedModal &&\n !isLockExpired\n\n return (\n <main className={classes.filter(Boolean).join(' ')}>\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || isInitializing || !hasSavePermission}\n disableValidationOnSubmit={!validateBeforeSubmit}\n initialState={!isInitializing && initialState}\n isInitializing={isInitializing}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isInDrawer && <DocumentDrawerHeader drawerSlug={drawerSlug} />}\n {isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n false,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n )\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {!isReadOnlyForIncomingUser && preventLeaveWithoutSaving && <LeaveWithoutSaving />}\n <SetDocumentStepNav\n collectionSlug={collectionConfig?.slug}\n globalSlug={globalConfig?.slug}\n id={id}\n pluralLabel={collectionConfig?.labels?.plural}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={depth <= 1 ? id?.toString() : undefined}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n }}\n data={savedDocumentData}\n disableActions={disableActions}\n disableCreate={disableCreate}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n onDelete={onDelete}\n onDrawerCreateNew={clearDoc}\n onDuplicate={onDuplicate}\n onSave={onSave}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n true,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n setIsReadOnlyForIncomingUser,\n )\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={\n BeforeFields || (\n <Fragment>\n {auth && (\n <Auth\n className={`${baseClass}__auth`}\n collectionSlug={collectionConfig.slug}\n disableLocalStrategy={collectionConfig.auth?.disableLocalStrategy}\n email={savedDocumentData?.email}\n loginWithUsername={auth?.loginWithUsername}\n operation={operation}\n readOnly={!hasSavePermission}\n requirePassword={!id}\n setSchemaPathSegments={setSchemaPathSegments}\n setValidateBeforeSubmit={setValidateBeforeSubmit}\n useAPIKey={auth.useAPIKey}\n username={savedDocumentData?.username}\n verify={auth.verify}\n />\n )}\n {upload && (\n <React.Fragment>\n {CustomUpload || (\n <Upload\n collectionSlug={collectionConfig.slug}\n initialState={initialState}\n uploadConfig={upload}\n />\n )}\n </React.Fragment>\n )}\n </Fragment>\n )\n }\n Description={Description}\n docPermissions={docPermissions}\n fields={docConfig.fields}\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission}\n schemaPathSegments={schemaPathSegments}\n />\n {AfterDocument}\n </Form>\n </OperationProvider>\n </main>\n )\n}\n"],"mappings":"AAAA;;;AAEA,SAASA,SAAS,EAAEC,eAAe,QAAQ;AAO3C,OAAOC,KAAA,IAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAI1E,SAASC,gBAAgB,QAAQ;AACjC,SAASC,oBAAoB,QAAQ;AACrC,SAASC,wBAAwB,QAAQ;AACzC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,MAAM,QAAQ;AACvB,SAASC,IAAI,QAAQ;AACrB,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,eAAe,QAAQ;AAChC,SAASC,YAAY,QAAQ;AAC7B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAC/B,SAASC,qBAAqB,QAAQ;AACtC,SAASC,YAAY,QAAQ;AAC7B,SAASC,cAAc,QAAQ;AAC/B,SAASC,IAAI,QAAQ;AACrB,OAAO;AACP,SAASC,kBAAkB,QAAQ;AACnC,SAASC,gBAAgB,QAAQ;AAEjC,MAAMC,SAAA,GAAY;AAElB;AACA;AACA;AACA,OAAO,MAAMC,eAAA,GAAqDA,CAAC;EACjEC,WAAW;EACXC,aAAa;EACbC,aAAa;EACbC,UAAU;EACVC,eAAe;EACfxB,MAAA,EAAQyB;AAAY,CACrB;EACC,MAAM;IACJC,EAAE;IACFC,MAAM;IACNC,aAAa;IACbC,WAAW;IACXC,MAAM;IACNC,YAAY;IACZC,cAAc;IACdC,aAAa;IACbC,cAAc;IACdC,aAAa;IACbC,yBAAyB;IACzBC,cAAc;IACdC,gBAAgB;IAChBC,iBAAiB;IACjBC,iBAAiB;IACjBC,UAAU;IACVC,oBAAoB;IACpBC,iBAAiB;IACjBC,qBAAqB;IACrBC,YAAY;IACZC,SAAS;IACTC,cAAc;IACdC,cAAc;IACdC,mBAAmB;IACnBC,sBAAsB;IACtBC,iBAAiB;IACjBC,gBAAgB;IAChBC,mBAAmB;IACnBC,cAAc;IACdC,oBAAoB;IACpBC;EAAuB,CACxB,GAAGnD,eAAA;EAEJ,MAAM;IACJoD,QAAQ;IACRC,UAAU;IACVC,QAAQ;IACRC,WAAW;IACXC,MAAA,EAAQC;EAAiB,CAC1B,GAAGnE,wBAAA;EAEJ,MAAMoE,UAAA,GAAaC,OAAA,CAAQN,UAAA;EAE3B,MAAM;IAAEO,kBAAkB;IAAEC;EAAI,CAAE,GAAGhE,OAAA;EAErC,MAAM;IACJiE,MAAM;IACNA,MAAA,EAAQ;MACNC,KAAA,EAAO;QAAEF,IAAA,EAAMG;MAAQ,CAAE;MACzBC,MAAA,EAAQ;QAAEF,KAAA,EAAOG;MAAU;IAAE,CAC9B;IACDC;EAAe,CAChB,GAAGrE,SAAA;EAEJ,MAAMsE,gBAAA,GAAmBD,eAAA,CAAgB;IAAExC;EAAe;EAC1D,MAAM0C,YAAA,GAAeF,eAAA,CAAgB;IAAE/B;EAAW;EAElD,MAAMkC,KAAA,GAAQrE,YAAA;EAEd,MAAMsE,MAAA,GAAS3F,SAAA;EACf,MAAM4F,MAAA,GAAS3F,eAAA;EACf,MAAM;IAAE4F;EAAY,CAAE,GAAG1E,iBAAA;EACzB,MAAM;IAAE2E;EAAgB,CAAE,GAAGtE,cAAA;EAC7B,MAAM;IAAEuE;EAAY,CAAE,GAAGxE,kBAAA;EAEzB,MAAMyE,0BAAA,GAA6B1F,MAAA,CAAwB;EAE3D,MAAM2F,MAAA,GAASL,MAAA,CAAOM,GAAG,CAAC;EAE1B,MAAMC,UAAA,GAAaX,gBAAA,EAAkBY,IAAA,IAAQX,YAAA,EAAcW,IAAA;EAE3D,MAAMC,SAAA,GAAYtD,cAAA,IAAkB,CAACN,EAAA,GAAK,WAAW;EAErD,MAAM6D,IAAA,GAAOd,gBAAA,GAAmBA,gBAAA,CAAiBc,IAAI,GAAGC,SAAA;EACxD,MAAMC,MAAA,GAAShB,gBAAA,GAAmBA,gBAAA,CAAiBgB,MAAM,GAAGD,SAAA;EAE5D,MAAME,SAAA,GAAYjB,gBAAA,IAAoBC,YAAA;EAEtC,MAAMiB,iBAAA,GAAoBD,SAAA,EAAWE,aAAA,KAAkBJ,SAAA,GAAYE,SAAA,EAAWE,aAAA,GAAgB;EAC9F,MAAMC,gBAAA,GAAmBF,iBAAA,KAAsB;EAE/C,MAAMG,mBAAA,GAAsB,IAAI;EAAA;EAChC,MAAMC,YAAA,GACJ,OAAOJ,iBAAA,KAAsB,WAAWA,iBAAA,CAAkBK,QAAQ,GAAGF,mBAAA;EACvE,MAAMG,0BAAA,GAA6BF,YAAA,GAAe;EAElD,IAAIG,yBAAA,GAA4B;EAEhC,IAAIzB,gBAAA,EAAkB;IACpByB,yBAAA,GAA4B,EAC1BzB,gBAAA,EAAkB0B,QAAA,EAAUC,MAAA,IAAU3B,gBAAA,EAAkB0B,QAAA,EAAUC,MAAA,EAAQC,QAAO;EAErF,OAAO,IAAI3B,YAAA,EAAc;IACvBwB,yBAAA,GAA4B,EAC1BxB,YAAA,EAAcyB,QAAA,EAAUC,MAAA,IAAU1B,YAAA,EAAcyB,QAAA,EAAUC,MAAA,EAAQC,QAAO;EAE7E,OAAO,IAAI,OAAOjE,yBAAA,KAA8B,aAAa;IAC3D8D,yBAAA,GAA4B,CAAC9D,yBAAA;EAC/B;EAEA,MAAM,CAACkE,yBAAA,EAA2BC,4BAAA,CAA6B,GAAG/G,QAAA,CAAS;EAC3E,MAAM,CAACgH,iBAAA,EAAmBC,oBAAA,CAAqB,GAAGjH,QAAA,CAAS;EAE3D,MAAM,CAACkH,oBAAA,EAAsBC,uBAAA,CAAwB,GAAGnH,QAAA,CAASoH,IAAA,CAAKC,GAAG;EAEzE,MAAMC,cAAA,GAAiB9D,cAAA,GAAiBiD,0BAAA;EAExC,MAAMc,aAAA,GAAgBH,IAAA,CAAKC,GAAG,KAAKC,cAAA;EAEnC,MAAME,oBAAA,GAAuBzH,MAAA,CAInB;IACR0H,mBAAA,EAAqB;IACrBC,QAAA,EAAU;IACVhD,IAAA,EAAM;EACR;EAEA,MAAMiD,OAAA,GAAU,CAACjG,SAAA,EAAY,CAAAQ,EAAA,IAAMe,UAAS,KAAM,GAAGvB,SAAA,cAAuB,CAAC;EAE7E,IAAIuB,UAAA,EAAY;IACd0E,OAAA,CAAQC,IAAI,CAAC,gBAAgB3E,UAAA,EAAY;EAC3C;EAEA,IAAIT,cAAA,EAAgB;IAClBmF,OAAA,CAAQC,IAAI,CAAC,oBAAoBpF,cAAA,EAAgB;EACnD;EAEA,MAAM,CAACqF,kBAAA,EAAoBC,qBAAA,CAAsB,GAAG9H,QAAA,CAAS;IAC3D,IAAI8F,SAAA,KAAc,YAAYC,IAAA,IAAQ,CAACA,IAAA,CAAKgC,oBAAoB,EAAE;MAChE,OAAO,CAAC,IAAInC,UAAA,EAAY,EAAE,OAAO;IACnC;IAEA,OAAO,CAACA,UAAA,CAAW;EACrB;EAEA,MAAM,CAACoC,oBAAA,EAAsBC,uBAAA,CAAwB,GAAGjI,QAAA,CAAS;IAC/D,IAAI8F,SAAA,KAAc,YAAYC,IAAA,IAAQ,CAACA,IAAA,CAAKgC,oBAAoB,EAAE;MAChE,OAAO;IACT;IAEA,OAAO;EACT;EAEA,MAAM1D,MAAA,GAASxE,WAAA,CACb,MAAOqI,IAAA;IACL5C,YAAA,CAAa;MACXpD,EAAA;MACA0D,UAAA;MACAuC,SAAA,EAAWD,IAAA,EAAME,MAAA,EAAQD,SAAA,IAAa,IAAIf,IAAA,GAAOiB,WAAW;IAC9D;IAEA;IACA;IACA,IAAI3D,IAAA,IAAQlC,cAAA,KAAmBqC,QAAA,IAAY3C,EAAA,KAAOwC,IAAA,CAAKxC,EAAE,EAAE;MACzD,KAAKuC,kBAAA;IACP;IAEArB,qBAAA;IAEA,IAAI,OAAOY,uBAAA,KAA4B,YAAY;MACjD,KAAKA,uBAAA,CAAwBkE,IAAA,EAAMI,GAAA,IAAO,CAAC;IAC7C;IAEA,IAAI,OAAOhE,iBAAA,KAAsB,YAAY;MAC3C,KAAKA,iBAAA,CAAkB;QACrB,GAAG4D,IAAI;QACPpC,SAAA,EAAW5D,EAAA,GAAK,WAAW;MAC7B;IACF;IAEA;IACA,IAAI,CAACA,EAAA,IAAMe,UAAS,KAAMoD,gBAAA,EAAkB;MAC1CxC,mBAAA,CAAoB;IACtB;IAEA,IAAI,CAACP,SAAA,IAAa6B,KAAA,GAAQ,GAAG;MAC3B;MACA,MAAMoD,aAAA,GAAgBpH,cAAA,CAAe;QACnC4D,UAAA;QACAyD,IAAA,EAAM,gBAAgBhG,cAAA,IAAkB0F,IAAA,EAAMI,GAAA,EAAKpG,EAAA,GAAKwD,MAAA,GAAS,WAAWA,MAAA,EAAQ,GAAG;MACzF;MACAN,MAAA,CAAOwC,IAAI,CAACW,aAAA;IACd,OAAO;MACLhD,gBAAA;IACF;IAEA,MAAMxC,iBAAA,CAAkBmF,IAAA;EAC1B,GACA,CACElE,uBAAA,EACAsB,YAAA,EACApD,EAAA,EACA0D,UAAA,EACAlB,IAAA,EACAlC,cAAA,EACAqC,QAAA,EACAzB,qBAAA,EACAkB,iBAAA,EACArB,UAAA,EACAoD,gBAAA,EACA/C,SAAA,EACA6B,KAAA,EACApC,iBAAA,EACA0B,kBAAA,EACAZ,mBAAA,EACAkB,UAAA,EACAW,MAAA,EACAN,MAAA,EACAG,gBAAA,CACD;EAGH,MAAMkD,QAAA,GAAqC5I,WAAA,CACzC,OAAO;IAAE6I,SAAA,EAAWC;EAAa,CAAE;IACjCzH,cAAA,CAAeuE,0BAAA,CAA2BmD,OAAO;IAEjD,MAAMC,UAAA,GAAa,IAAIC,eAAA;IACvBrD,0BAAA,CAA2BmD,OAAO,GAAGC,UAAA;IAErC,MAAME,WAAA,GAAc3B,IAAA,CAAKC,GAAG;IAC5B,MAAM2B,mBAAA,GAAsBD,WAAA,GAAc7B,oBAAA;IAE1C,MAAM+B,gBAAA,GAAmB5C,gBAAA,IAAoB2C,mBAAA,IAAuB,MAAM;IAAA;IAE1E,IAAIC,gBAAA,EAAkB;MACpB9B,uBAAA,CAAwB4B,WAAA;IAC1B;IAEA,MAAMG,cAAA,GAAiB,MAAMlG,iBAAA;IAE7B,MAAM;MAAEmG,WAAW;MAAEC;IAAK,CAAE,GAAG,MAAM5D,YAAA,CAAa;MAChDtD,EAAA;MACAM,cAAA;MACAK,cAAA;MACAqG,cAAA;MACAR,SAAA,EAAWC,aAAA;MACX1F,UAAA;MACA6C,SAAA;MACA;MACA;MACAuD,eAAA,EAAiB;MACjBC,gBAAA,EAAkBjD,gBAAA,GAAmB,OAAO;MAC5CkD,UAAA,EAAY1B,kBAAA,CAAmB2B,IAAI,CAAC;MACpCC,MAAA,EAAQZ,UAAA,CAAWY,MAAM;MACzBR;IACF;IAEApF,mBAAA,CAAoB;IAEpB,IAAIwC,gBAAA,EAAkB;MACpB,MAAMqD,eAAA,GACJ,OAAOlC,oBAAA,CAAqBoB,OAAO,EAAElE,IAAA,KAAS,WAC1C8C,oBAAA,CAAqBoB,OAAO,EAAElE,IAAA,EAAMxC,EAAA,GACpCsF,oBAAA,CAAqBoB,OAAO,EAAElE,IAAA;MAEpC,IAAIyE,WAAA,EAAa;QACf,MAAMQ,YAAA,GACJ,OAAOR,WAAA,CAAYzE,IAAI,KAAK,YAAY,OAAOyE,WAAA,CAAYzE,IAAI,KAAK,WAChEyE,WAAA,CAAYzE,IAAI,GAChByE,WAAA,CAAYzE,IAAI,CAACxC,EAAE;QAEzB,IAAI,CAACsF,oBAAA,CAAqBoB,OAAO,IAAIe,YAAA,KAAiBD,eAAA,EAAiB;UACrE,IAAIA,eAAA,KAAoBhF,IAAA,CAAKxC,EAAE,IAAIyH,YAAA,KAAiBjF,IAAA,CAAKxC,EAAE,EAAE;YAC3D+E,oBAAA,CAAqB;YACrBO,oBAAA,CAAqBoB,OAAO,CAACnB,mBAAmB,GAAG;UACrD;UAEAD,oBAAA,CAAqBoB,OAAO,GAAGpB,oBAAA,CAAqBoB,OAAO,GAAG;YAC5DnB,mBAAA,EAAqBD,oBAAA,CAAqBoB,OAAO,EAAEnB,mBAAA,IAAuB;YAC1EC,QAAA,EAAU;YACVhD,IAAA,EAAMyE,WAAA,CAAYzE;UACpB;UACAd,gBAAA,CAAiBuF,WAAA,CAAYzE,IAAI;QACnC;MACF;IACF;IAEA,OAAO0E,KAAA;EACT,GACA,CACElC,oBAAA,EACAb,gBAAA,EACArD,iBAAA,EACAwC,YAAA,EACAtD,EAAA,EACAM,cAAA,EACAK,cAAA,EACAI,UAAA,EACA6C,SAAA,EACA+B,kBAAA,EACAhE,mBAAA,EACAa,IAAA,CAAKxC,EAAE,EACP0B,gBAAA,CACD;EAGH;EACA9D,SAAA,CAAU;IACR,OAAO;MACL,IAAI,CAACuG,gBAAA,EAAkB;QACrB;MACF;MAEA,MAAMuD,WAAA,GAAcC,MAAA,CAAOC,QAAQ,CAACC,QAAQ;MAE5C,MAAMC,UAAA,GAAa9H,EAAA,IAAMe,UAAA;MAEzB;MACA,MAAMgH,uBAAA,GAA0B,CAAC,WAAW,OAAO,WAAW;MAE9D,MAAMC,uBAAA,GAA0BD,uBAAA,CAAwBE,IAAI,CAAE3B,IAAA,IAC5DoB,WAAA,CAAYQ,QAAQ,CAAC5B,IAAA;MAGvB;MACA,IAAIwB,UAAA,IAAclH,gBAAA,IAAoB,CAACoH,uBAAA,EAAyB;QAC9D;QACA,IACE,OAAO1C,oBAAA,CAAqBoB,OAAO,EAAElE,IAAA,KAAS,WAC1C8C,oBAAA,CAAqBoB,OAAO,EAAElE,IAAA,EAAMxC,EAAA,KAAOwC,IAAA,EAAMxC,EAAA,GACjDsF,oBAAA,CAAqBoB,OAAO,EAAElE,IAAA,KAASA,IAAA,EAAMxC,EAAA,EACjD;UACA,KAAK4B,cAAA,CAAe5B,EAAA,EAAIM,cAAA,IAAkBS,UAAA;UAC1CY,mBAAA,CAAoB;UACpBD,gBAAA,CAAiB;QACnB;MACF;MAEAqD,oBAAA,CAAqB;IACvB;EACF,GAAG,CACDzE,cAAA,EACAS,UAAA,EACAf,EAAA,EACA4B,cAAA,EACAY,IAAA,EACAd,gBAAA,EACAyC,gBAAA,EACAvD,gBAAA,EACAe,mBAAA,CACD;EAED/D,SAAA,CAAU;IACR,OAAO;MACLoB,cAAA,CAAeuE,0BAAA,CAA2BmD,OAAO;IACnD;EACF,GAAG,EAAE;EAEL,MAAMyB,6BAAA,GACJvH,gBAAA,IACAL,aAAA,KACC,OAAOA,aAAA,KAAkB,WACtBA,aAAA,CAAcP,EAAE,KAAKwC,IAAA,EAAMxC,EAAA,GAC3BO,aAAA,KAAkBiC,IAAA,EAAMxC,EAAC,KAC7B,CAAC4E,yBAAA,IACD,CAACE,iBAAA,IACD,CAACQ,oBAAA,CAAqBoB,OAAO,EAAEnB,mBAAA,IAC/B,CAACF,aAAA;EAEH,oBACE+C,IAAA,CAAC;IAAKC,SAAA,EAAW5C,OAAA,CAAQ6C,MAAM,CAAChG,OAAA,EAASgF,IAAI,CAAC;cAC5C,aAAAc,IAAA,CAACvJ,iBAAA;MAAkB+E,SAAA,EAAWA,SAAA;gBAC5B,aAAA2E,KAAA,CAAChK,IAAA;QACC0B,MAAA,EAAQA,MAAA;QACRoI,SAAA,EAAW,GAAG7I,SAAA,QAAiB;QAC/BgJ,QAAA,EAAU5D,yBAAA,IAA6BvD,cAAA,IAAkB,CAACJ,iBAAA;QAC1DwH,yBAAA,EAA2B,CAAC3C,oBAAA;QAC5B3E,YAAA,EAAc,CAACE,cAAA,IAAkBF,YAAA;QACjCE,cAAA,EAAgBA,cAAA;QAChBqH,MAAA,EAAQ1I,EAAA,GAAK,UAAU;QACvBuG,QAAA,EAAU,CAACA,QAAA,CAAS;QACpBoC,SAAA,EAAWxG,MAAA;mBAEVE,UAAA,iBAAc+F,IAAA,CAACpK,oBAAA;UAAqBgE,UAAA,EAAYA;YAChDmC,gBAAA,IAAoBgE,6BAAA,IAAiC,CAACvD,yBAAA,iBACrDwD,IAAA,CAACjK,cAAA;UACCgB,YAAA,EAAcA,CAAA,KAAMA,YAAA,CAAa;YAAE0D,UAAA;YAAYvC,cAAA;YAAgB4C;UAAO;UACtE0F,QAAA,EAAUT,6BAAA;UACVU,UAAA,EAAYA,CAAA;YACVhE,4BAAA,CAA6B;YAC7BE,oBAAA,CAAqB;UACvB;UACA+D,UAAA,EAAYA,CAAA,KACV1J,cAAA,CACEY,EAAA,EACAM,cAAA,EACAS,UAAA,EACAyB,IAAA,EACA,OACAX,oBAAA,EACAH,gBAAA,EACA4D,oBAAA,EACAnB,gBAAA;UAGJ8B,SAAA,EAAW3E,cAAA;UACXkB,IAAA,EAAMjC;YAGT4D,gBAAA,IAAoBW,iBAAA,iBACnBsD,IAAA,CAAChK,gBAAA;UACCc,qBAAA,EAAuBA,CAAA,KAAMA,qBAAA,CAAsB;YAAE2D,UAAA;YAAYK;UAAO;UACxE0F,QAAA,EAAU9D,iBAAA;UACV+D,UAAA,EAAYA,CAAA;YACVhE,4BAAA,CAA6B;YAC7BE,oBAAA,CAAqB;UACvB;YAGH,CAACH,yBAAA,IAA6BJ,yBAAA,iBAA6B4D,IAAA,CAAC/J,kBAAA,O,aAC7D+J,IAAA,CAAC9I,kBAAA;UACCgB,cAAA,EAAgByC,gBAAA,EAAkBY,IAAA;UAClC5C,UAAA,EAAYiC,YAAA,EAAcW,IAAA;UAC1B3D,EAAA,EAAIA,EAAA;UACJ+I,WAAA,EAAahG,gBAAA,EAAkBiG,MAAA,EAAQC,MAAA;UACvCC,UAAA,EAAYnG,gBAAA,EAAkBL,KAAA,EAAOwG;yBAEvCd,IAAA,CAAC7I,gBAAA;UACCwD,gBAAA,EAAkBA,gBAAA;UAClBN,MAAA,EAAQA,MAAA;UACR0G,QAAA,EAAUlG,KAAA,IAAS,IAAIjD,EAAA,EAAIoJ,QAAA,KAAatF,SAAA;UACxCd,YAAA,EAAcA;yBAEhBoF,IAAA,CAACrK,gBAAA;UACCqC,MAAA,EAAQA,MAAA;UACRiJ,gBAAA,EAAkB;YAChB1J,aAAA;YACAC,aAAA;YACAC,UAAA;YACAC;UACF;UACAwJ,IAAA,EAAM7H,iBAAA;UACNjB,cAAA,EAAgBA,cAAA;UAChBC,aAAA,EAAeA,aAAA;UACfO,oBAAA,EAAsBA,oBAAA;UACtBC,iBAAA,EAAmBA,iBAAA;UACnBjB,EAAA,EAAIA,EAAA;UACJoB,SAAA,EAAWA,SAAA;UACXa,QAAA,EAAUA,QAAA;UACVsH,iBAAA,EAAmBxH,QAAA;UACnBG,WAAA,EAAaA,WAAA;UACbC,MAAA,EAAQA,MAAA;UACR2G,UAAA,EAAYA,CAAA,KACV1J,cAAA,CACEY,EAAA,EACAM,cAAA,EACAS,UAAA,EACAyB,IAAA,EACA,MACAX,oBAAA,EACAH,gBAAA,EACA4D,oBAAA,EACAnB,gBAAA,EACAU,4BAAA;UAGJ2E,WAAA,EAAa7I,cAAA;UACb8I,uBAAA,EAAyB7E,yBAAA;UACzBrD,mBAAA,EAAqBA,mBAAA;UACrBC,sBAAA,EAAwBA,sBAAA;UACxBmC,IAAA,EAAMZ,gBAAA,EAAkBY,IAAA,IAAQX,YAAA,EAAcW,IAAA;UAC9CnB,IAAA,EAAMjC;yBAER6H,IAAA,CAAClK,cAAA;UACCiC,WAAA,EAAaA,WAAA;UACbE,YAAA,EACEA,YAAA,iBACEkI,KAAA,CAAC7K,QAAA;uBACEmG,IAAA,iBACCuE,IAAA,CAAC/I,IAAA;cACCgJ,SAAA,EAAW,GAAG7I,SAAA,QAAiB;cAC/Bc,cAAA,EAAgByC,gBAAA,CAAiBY,IAAI;cACrCkC,oBAAA,EAAsB9C,gBAAA,CAAiBc,IAAI,EAAEgC,oBAAA;cAC7C6D,KAAA,EAAOjI,iBAAA,EAAmBiI,KAAA;cAC1BC,iBAAA,EAAmB9F,IAAA,EAAM8F,iBAAA;cACzB/F,SAAA,EAAWA,SAAA;cACXgG,QAAA,EAAU,CAAC3I,iBAAA;cACX4I,eAAA,EAAiB,CAAC7J,EAAA;cAClB4F,qBAAA,EAAuBA,qBAAA;cACvBG,uBAAA,EAAyBA,uBAAA;cACzB+D,SAAA,EAAWjG,IAAA,CAAKiG,SAAS;cACzBC,QAAA,EAAUtI,iBAAA,EAAmBsI,QAAA;cAC7BC,MAAA,EAAQnG,IAAA,CAAKmG;gBAGhBjG,MAAA,iBACCqE,IAAA,CAAC3K,KAAA,CAAMC,QAAQ;wBACZqC,YAAA,iBACCqI,IAAA,CAAC9J,MAAA;gBACCgC,cAAA,EAAgByC,gBAAA,CAAiBY,IAAI;gBACrCxC,YAAA,EAAcA,YAAA;gBACd8I,YAAA,EAAclG;;;;UAQ5BrE,WAAA,EAAaA,WAAA;UACbiB,cAAA,EAAgBA,cAAA;UAChBuJ,MAAA,EAAQlG,SAAA,CAAUkG,MAAM;UACxBN,QAAA,EAAUhF,yBAAA,IAA6B,CAAC3D,iBAAA;UACxC0E,kBAAA,EAAoBA;YAErBzF,aAAA;;;;AAKX","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useRouter","useSearchParams","React","Fragment","useCallback","useEffect","useRef","useState","DocumentControls","DocumentDrawerHeader","useDocumentDrawerContext","DocumentFields","DocumentLocked","DocumentTakeOver","LeaveWithoutSaving","Upload","Form","useAuth","useConfig","useDocumentEvents","useDocumentInfo","useEditDepth","OperationProvider","useServerFunctions","useUploadEdits","abortAndIgnore","formatAdminURL","handleBackToDashboard","handleGoBack","handleTakeOver","Auth","SetDocumentStepNav","SetDocumentTitle","baseClass","DefaultEditView","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","CustomUpload","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","disableActions","disableCreate","disableLeaveWithoutSaving","docPermissions","documentIsLocked","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialState","isEditing","isInitializing","lastUpdateTime","redirectAfterDelete","redirectAfterDuplicate","savedDocumentData","setCurrentEditor","setDocumentIsLocked","unlockDocument","updateDocumentEditor","updateSavedDocumentData","clearDoc","drawerSlug","onDelete","onDuplicate","onSave","onSaveFromContext","isInDrawer","Boolean","refreshCookieAsync","user","config","admin","userSlug","routes","adminRoute","getEntityConfig","collectionConfig","globalConfig","depth","router","params","reportUpdate","resetUploadEdits","getFormState","onChangeAbortControllerRef","onSaveAbortControllerRef","locale","get","entitySlug","slug","operation","auth","undefined","upload","docConfig","lockDocumentsProp","lockDocuments","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","preventLeaveWithoutSaving","autosaveEnabled","versions","drafts","autosave","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","documentLockStateRef","hasShownLockedModal","isLocked","classes","push","schemaPathSegments","setSchemaPathSegments","disableLocalStrategy","validateBeforeSubmit","setValidateBeforeSubmit","handleDocumentLocking","lockedState","previousOwnerId","current","lockedUserID","json","updatedAt","result","toISOString","doc","redirectRoute","path","controller","AbortController","docPreferences","state","data","renderAllFields","returnLockStatus","schemaPath","join","signal","onChange","formState","prevFormState","currentTime","timeSinceLastUpdate","updateLastEdited","shouldUnlockDocument","some","window","location","pathname","includes","shouldShowDocumentLockedModal","_jsx","className","filter","_jsxs","disabled","disableValidationOnSubmit","method","onSuccess","isActive","onReadOnly","onTakeOver","pluralLabel","labels","plural","useAsTitle","fallback","toString","customComponents","onDrawerCreateNew","permissions","readOnlyForIncomingUser","email","loginWithUsername","readOnly","requirePassword","useAPIKey","username","verify","uploadConfig","fields"],"sources":["../../../src/views/Edit/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientCollectionConfig,\n ClientGlobalConfig,\n ClientSideEditViewProps,\n ClientUser,\n FormState,\n} from 'payload'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { LockedState } from '../../utilities/buildFormState.js'\n\nimport { DocumentControls } from '../../elements/DocumentControls/index.js'\nimport { DocumentDrawerHeader } from '../../elements/DocumentDrawer/DrawerHeader/index.js'\nimport { useDocumentDrawerContext } from '../../elements/DocumentDrawer/Provider.js'\nimport { DocumentFields } from '../../elements/DocumentFields/index.js'\nimport { DocumentLocked } from '../../elements/DocumentLocked/index.js'\nimport { DocumentTakeOver } from '../../elements/DocumentTakeOver/index.js'\nimport { LeaveWithoutSaving } from '../../elements/LeaveWithoutSaving/index.js'\nimport { Upload } from '../../elements/Upload/index.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { OperationProvider } from '../../providers/Operation/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { abortAndIgnore } from '../../utilities/abortAndIgnore.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'\nimport { handleGoBack } from '../../utilities/handleGoBack.js'\nimport { handleTakeOver } from '../../utilities/handleTakeOver.js'\nimport { Auth } from './Auth/index.js'\nimport { SetDocumentStepNav } from './SetDocumentStepNav/index.js'\nimport { SetDocumentTitle } from './SetDocumentTitle/index.js'\nimport './index.scss'\n\nconst baseClass = 'collection-edit'\n\n// This component receives props only on _pages_\n// When rendered within a drawer, props are empty\n// This is solely to support custom edit views which get server-rendered\nexport const DefaultEditView: React.FC<ClientSideEditViewProps> = ({\n Description,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Upload: CustomUpload,\n}) => {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n disableActions,\n disableCreate,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialState,\n isEditing,\n isInitializing,\n lastUpdateTime,\n redirectAfterDelete,\n redirectAfterDuplicate,\n savedDocumentData,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n updateDocumentEditor,\n updateSavedDocumentData,\n } = useDocumentInfo()\n\n const {\n clearDoc,\n drawerSlug,\n onDelete,\n onDuplicate,\n onSave: onSaveFromContext,\n } = useDocumentDrawerContext()\n\n const isInDrawer = Boolean(drawerSlug)\n\n const { refreshCookieAsync, user } = useAuth()\n\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n const globalConfig = getEntityConfig({ globalSlug }) as ClientGlobalConfig\n\n const depth = useEditDepth()\n\n const router = useRouter()\n const params = useSearchParams()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n\n const onChangeAbortControllerRef = useRef<AbortController>(null)\n const onSaveAbortControllerRef = useRef<AbortController>(null)\n\n const locale = params.get('locale')\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const operation = collectionSlug && !id ? 'create' : 'update'\n\n const auth = collectionConfig ? collectionConfig.auth : undefined\n const upload = collectionConfig ? collectionConfig.upload : undefined\n\n const docConfig = collectionConfig || globalConfig\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n let preventLeaveWithoutSaving = true\n let autosaveEnabled = false\n\n if (collectionConfig) {\n autosaveEnabled = Boolean(\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave,\n )\n preventLeaveWithoutSaving = !autosaveEnabled\n } else if (globalConfig) {\n autosaveEnabled = Boolean(\n globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave,\n )\n preventLeaveWithoutSaving = !autosaveEnabled\n } else if (typeof disableLeaveWithoutSaving !== 'undefined') {\n preventLeaveWithoutSaving = !disableLeaveWithoutSaving\n }\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n\n const isLockExpired = Date.now() > lockExpiryTime\n\n const documentLockStateRef = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: ClientUser | number | string\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const classes = [baseClass, (id || globalSlug) && `${baseClass}--is-editing`]\n\n if (globalSlug) {\n classes.push(`global-edit--${globalSlug}`)\n }\n\n if (collectionSlug) {\n classes.push(`collection-edit--${collectionSlug}`)\n }\n\n const [schemaPathSegments, setSchemaPathSegments] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return [`_${entitySlug}`, 'auth']\n }\n\n return [entitySlug]\n })\n\n const [validateBeforeSubmit, setValidateBeforeSubmit] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return true\n }\n\n return false\n })\n\n const handleDocumentLocking = useCallback(\n (lockedState: LockedState) => {\n setDocumentIsLocked(true)\n const previousOwnerId =\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id\n : documentLockStateRef.current?.user\n\n if (lockedState) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {\n if (previousOwnerId === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockStateRef.current.hasShownLockedModal = true\n }\n\n documentLockStateRef.current = {\n hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n setCurrentEditor(lockedState.user as ClientUser)\n }\n }\n },\n [setCurrentEditor, setDocumentIsLocked, user.id],\n )\n\n const onSave = useCallback(\n async (json): Promise<FormState> => {\n reportUpdate({\n id,\n entitySlug,\n updatedAt: json?.result?.updatedAt || new Date().toISOString(),\n })\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n incrementVersionCount()\n\n if (typeof updateSavedDocumentData === 'function') {\n void updateSavedDocumentData(json?.doc || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n void onSaveFromContext({\n ...json,\n operation: id ? 'update' : 'create',\n })\n }\n\n if (!isEditing && depth < 2) {\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${json?.doc?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n router.push(redirectRoute)\n } else {\n resetUploadEdits()\n }\n\n await getDocPermissions(json)\n\n if ((id || globalSlug) && !autosaveEnabled) {\n abortAndIgnore(onSaveAbortControllerRef.current)\n const controller = new AbortController()\n onSaveAbortControllerRef.current = controller\n\n const docPreferences = await getDocPreferences()\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: json?.doc,\n docPermissions,\n docPreferences,\n globalSlug,\n operation,\n renderAllFields: true,\n returnLockStatus: false,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n })\n\n // Unlock the document after save\n if (isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n return state\n }\n },\n [\n adminRoute,\n collectionSlug,\n depth,\n docPermissions,\n entitySlug,\n getDocPermissions,\n getDocPreferences,\n getFormState,\n globalSlug,\n id,\n incrementVersionCount,\n isEditing,\n isLockingEnabled,\n locale,\n onSaveFromContext,\n operation,\n refreshCookieAsync,\n reportUpdate,\n resetUploadEdits,\n router,\n schemaPathSegments,\n setDocumentIsLocked,\n updateSavedDocumentData,\n user,\n userSlug,\n autosaveEnabled,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const { lockedState, state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n // Performance optimization: Setting it to false ensure that only fields that have explicit requireRender set in the form state will be rendered (e.g. new array rows).\n // We only want to render ALL fields on initial render, not in onChange.\n renderAllFields: false,\n returnLockStatus: isLockingEnabled,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n updateLastEdited,\n })\n\n if (isLockingEnabled) {\n handleDocumentLocking(lockedState)\n }\n\n return state\n },\n [\n id,\n collectionSlug,\n getDocPreferences,\n getFormState,\n globalSlug,\n handleDocumentLocking,\n isLockingEnabled,\n operation,\n schemaPathSegments,\n docPermissions,\n editSessionStartTime,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n if (isLockingEnabled && documentIsLocked && (id || globalSlug)) {\n // Only retain the lock if the user is still viewing the document\n const shouldUnlockDocument = !['preview', 'api', 'versions'].some((path) =>\n window.location.pathname.includes(path),\n )\n if (shouldUnlockDocument) {\n // Check if this user is still the current editor\n if (\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id === user?.id\n : documentLockStateRef.current?.user === user?.id\n ) {\n void unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n }\n }\n }\n\n setShowTakeOverModal(false)\n }\n }, [\n collectionSlug,\n globalSlug,\n id,\n unlockDocument,\n user,\n setCurrentEditor,\n isLockingEnabled,\n documentIsLocked,\n setDocumentIsLocked,\n ])\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n abortAndIgnore(onSaveAbortControllerRef.current)\n }\n }, [])\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n !documentLockStateRef.current?.hasShownLockedModal &&\n !isLockExpired\n\n return (\n <main className={classes.filter(Boolean).join(' ')}>\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || isInitializing || !hasSavePermission}\n disableValidationOnSubmit={!validateBeforeSubmit}\n initialState={!isInitializing && initialState}\n isInitializing={isInitializing}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isInDrawer && <DocumentDrawerHeader drawerSlug={drawerSlug} />}\n {isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n false,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n )\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {!isReadOnlyForIncomingUser && preventLeaveWithoutSaving && <LeaveWithoutSaving />}\n <SetDocumentStepNav\n collectionSlug={collectionConfig?.slug}\n globalSlug={globalConfig?.slug}\n id={id}\n pluralLabel={collectionConfig?.labels?.plural}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={depth <= 1 ? id?.toString() : undefined}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n }}\n data={savedDocumentData}\n disableActions={disableActions}\n disableCreate={disableCreate}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n onDelete={onDelete}\n onDrawerCreateNew={clearDoc}\n onDuplicate={onDuplicate}\n onSave={onSave}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n true,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n setIsReadOnlyForIncomingUser,\n )\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={\n BeforeFields || (\n <Fragment>\n {auth && (\n <Auth\n className={`${baseClass}__auth`}\n collectionSlug={collectionConfig.slug}\n disableLocalStrategy={collectionConfig.auth?.disableLocalStrategy}\n email={savedDocumentData?.email}\n loginWithUsername={auth?.loginWithUsername}\n operation={operation}\n readOnly={!hasSavePermission}\n requirePassword={!id}\n setSchemaPathSegments={setSchemaPathSegments}\n setValidateBeforeSubmit={setValidateBeforeSubmit}\n useAPIKey={auth.useAPIKey}\n username={savedDocumentData?.username}\n verify={auth.verify}\n />\n )}\n {upload && (\n <React.Fragment>\n {CustomUpload || (\n <Upload\n collectionSlug={collectionConfig.slug}\n initialState={initialState}\n uploadConfig={upload}\n />\n )}\n </React.Fragment>\n )}\n </Fragment>\n )\n }\n Description={Description}\n docPermissions={docPermissions}\n fields={docConfig.fields}\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission}\n schemaPathSegments={schemaPathSegments}\n />\n {AfterDocument}\n </Form>\n </OperationProvider>\n </main>\n )\n}\n"],"mappings":"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","ignoreList":[]}