@payloadcms/ui 3.55.0-internal.92d1d86 → 3.55.0-internal.a030723

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/elements/FieldSelect/reduceFieldOptions.js +1 -1
  2. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  3. package/dist/elements/ListControls/index.d.ts.map +1 -1
  4. package/dist/elements/ListControls/index.js +78 -69
  5. package/dist/elements/ListControls/index.js.map +1 -1
  6. package/dist/elements/ListControls/index.scss +82 -2
  7. package/dist/elements/LivePreview/Window/index.d.ts.map +1 -1
  8. package/dist/elements/LivePreview/Window/index.js +64 -74
  9. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  10. package/dist/elements/SearchBar/index.d.ts +3 -2
  11. package/dist/elements/SearchBar/index.d.ts.map +1 -1
  12. package/dist/elements/SearchBar/index.js +3 -2
  13. package/dist/elements/SearchBar/index.js.map +1 -1
  14. package/dist/elements/SearchBar/index.scss +7 -56
  15. package/dist/elements/SearchFilter/index.d.ts +33 -2
  16. package/dist/elements/SearchFilter/index.d.ts.map +1 -1
  17. package/dist/elements/SearchFilter/index.js +5 -7
  18. package/dist/elements/SearchFilter/index.js.map +1 -1
  19. package/dist/elements/Status/index.d.ts.map +1 -1
  20. package/dist/elements/Status/index.js +1 -1
  21. package/dist/elements/Status/index.js.map +1 -1
  22. package/dist/exports/client/index.js +24 -24
  23. package/dist/exports/client/index.js.map +4 -4
  24. package/dist/forms/RenderFields/index.d.ts.map +1 -1
  25. package/dist/forms/RenderFields/index.js +1 -1
  26. package/dist/forms/RenderFields/index.js.map +1 -1
  27. package/dist/forms/RowLabel/Context/index.d.ts.map +1 -1
  28. package/dist/forms/RowLabel/Context/index.js +31 -17
  29. package/dist/forms/RowLabel/Context/index.js.map +1 -1
  30. package/dist/providers/Auth/index.d.ts +1 -2
  31. package/dist/providers/Auth/index.d.ts.map +1 -1
  32. package/dist/providers/Auth/index.js +83 -74
  33. package/dist/providers/Auth/index.js.map +1 -1
  34. package/dist/providers/LivePreview/context.d.ts +2 -0
  35. package/dist/providers/LivePreview/context.d.ts.map +1 -1
  36. package/dist/providers/LivePreview/context.js +1 -0
  37. package/dist/providers/LivePreview/context.js.map +1 -1
  38. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  39. package/dist/providers/LivePreview/index.js +12 -0
  40. package/dist/providers/LivePreview/index.js.map +1 -1
  41. package/dist/styles.css +1 -1
  42. package/dist/views/BrowseByFolder/index.js +1 -1
  43. package/dist/views/BrowseByFolder/index.js.map +1 -1
  44. package/dist/views/CollectionFolder/index.js +1 -1
  45. package/dist/views/CollectionFolder/index.js.map +1 -1
  46. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  47. package/dist/views/Edit/Auth/index.js +1 -1
  48. package/dist/views/Edit/Auth/index.js.map +1 -1
  49. package/package.json +4 -4
  50. package/dist/elements/SearchFilter/types.d.ts +0 -33
  51. package/dist/elements/SearchFilter/types.d.ts.map +0 -1
  52. package/dist/elements/SearchFilter/types.js +0 -2
  53. package/dist/elements/SearchFilter/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/RenderFields/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAInD,OAAO,cAAc,CAAA;AAMrB,OAAO,EAAE,iBAAiB,IAAI,KAAK,EAAE,CAAA;AAErC,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgGpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/RenderFields/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAKnD,OAAO,cAAc,CAAA;AAKrB,OAAO,EAAE,iBAAiB,IAAI,KAAK,EAAE,CAAA;AAErC,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgGpD,CAAA"}
@@ -6,8 +6,8 @@ import { fieldIsHiddenOrDisabled, getFieldPaths, getFieldPermissions } from 'pay
6
6
  import React from 'react';
7
7
  import { RenderIfInViewport } from '../../elements/RenderIfInViewport/index.js';
8
8
  import { useOperation } from '../../providers/Operation/index.js';
9
- import './index.scss';
10
9
  import { FieldPathContext } from './context.js';
10
+ import './index.scss';
11
11
  import { RenderField } from './RenderField.js';
12
12
  const baseClass = 'render-fields';
13
13
  export const RenderFields = props => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","fieldIsHiddenOrDisabled","getFieldPaths","getFieldPermissions","React","RenderIfInViewport","useOperation","FieldPathContext","RenderField","baseClass","RenderFields","props","$","className","fields","forceRender","margins","parentIndexPath","parentPath","parentSchemaPath","permissions","readOnly","readOnlyFromParent","operation","length","t0","t1","t2","filter","Boolean","t3","join","t4","t5","field","i","hasOperationPermission","fieldPermissions","read","hasReadPermission","parentName","includes","split","isReadOnly","admin","indexPath","path","schemaPath","index","_jsx","value","children","clientFieldConfig","map"],"sources":["../../../src/forms/RenderFields/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedFieldPermissions } from 'payload'\n\nimport { fieldIsHiddenOrDisabled, getFieldPaths, getFieldPermissions } from 'payload/shared'\nimport React from 'react'\n\nimport type { RenderFieldsProps } from './types.js'\n\nimport { RenderIfInViewport } from '../../elements/RenderIfInViewport/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport './index.scss'\nimport { FieldPathContext } from './context.js'\nimport { RenderField } from './RenderField.js'\n\nconst baseClass = 'render-fields'\n\nexport { RenderFieldsProps as Props }\n\nexport const RenderFields: React.FC<RenderFieldsProps> = (props) => {\n const {\n className,\n fields,\n forceRender,\n margins,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n permissions,\n readOnly: readOnlyFromParent,\n } = props\n\n const operation = useOperation()\n\n if (fields && fields.length > 0) {\n return (\n <RenderIfInViewport\n className={[\n baseClass,\n className,\n margins && `${baseClass}--margins-${margins}`,\n margins === false && `${baseClass}--margins-none`,\n ]\n .filter(Boolean)\n .join(' ')}\n forceRender={forceRender}\n >\n {fields.map((field, i) => {\n // For sidebar fields in the main fields array, `field` will be `null`, and visa versa\n // This is to keep the order of the fields consistent and maintain the correct index paths for the main fields (i)\n if (!field || fieldIsHiddenOrDisabled(field)) {\n return null\n }\n\n const {\n operation: hasOperationPermission,\n permissions: fieldPermissions,\n read: hasReadPermission,\n } = getFieldPermissions({\n field,\n operation,\n parentName: parentPath?.includes('.')\n ? parentPath.split('.')[parentPath.split('.').length - 1]\n : parentPath,\n permissions,\n })\n\n // If the user cannot read the field, then filter it out\n // This is different from `admin.readOnly` which is executed based on `operation`\n if ('name' in field && !hasReadPermission) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n let isReadOnly = readOnlyFromParent || field?.admin?.readOnly\n\n // If parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (isReadOnly && field.admin?.readOnly === false) {\n isReadOnly = false\n }\n\n // If the user does not have access at the operation level, to begin with, force it to be read-only\n if ('name' in field && !hasOperationPermission) {\n isReadOnly = true\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: i,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n return (\n <FieldPathContext key={`${path}-${i}`} value={path}>\n <RenderField\n clientFieldConfig={field}\n forceRender={forceRender}\n indexPath={indexPath}\n parentPath={parentPath}\n parentSchemaPath={parentSchemaPath}\n path={path}\n permissions={fieldPermissions as SanitizedFieldPermissions}\n readOnly={isReadOnly}\n schemaPath={schemaPath}\n />\n </FieldPathContext>\n )\n })}\n </RenderIfInViewport>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","fieldIsHiddenOrDisabled","getFieldPaths","getFieldPermissions","React","RenderIfInViewport","useOperation","FieldPathContext","RenderField","baseClass","RenderFields","props","$","className","fields","forceRender","margins","parentIndexPath","parentPath","parentSchemaPath","permissions","readOnly","readOnlyFromParent","operation","length","t0","t1","t2","filter","Boolean","t3","join","t4","t5","field","i","hasOperationPermission","fieldPermissions","read","hasReadPermission","parentName","includes","split","isReadOnly","admin","indexPath","path","schemaPath","index","_jsx","value","children","clientFieldConfig","map"],"sources":["../../../src/forms/RenderFields/index.tsx"],"sourcesContent":["'use client'\n\nimport { fieldIsHiddenOrDisabled, getFieldPaths, getFieldPermissions } from 'payload/shared'\nimport React from 'react'\n\nimport type { RenderFieldsProps } from './types.js'\n\nimport { RenderIfInViewport } from '../../elements/RenderIfInViewport/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { FieldPathContext } from './context.js'\nimport './index.scss'\nimport { RenderField } from './RenderField.js'\n\nconst baseClass = 'render-fields'\n\nexport { RenderFieldsProps as Props }\n\nexport const RenderFields: React.FC<RenderFieldsProps> = (props) => {\n const {\n className,\n fields,\n forceRender,\n margins,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n permissions,\n readOnly: readOnlyFromParent,\n } = props\n\n const operation = useOperation()\n\n if (fields && fields.length > 0) {\n return (\n <RenderIfInViewport\n className={[\n baseClass,\n className,\n margins && `${baseClass}--margins-${margins}`,\n margins === false && `${baseClass}--margins-none`,\n ]\n .filter(Boolean)\n .join(' ')}\n forceRender={forceRender}\n >\n {fields.map((field, i) => {\n // For sidebar fields in the main fields array, `field` will be `null`, and visa versa\n // This is to keep the order of the fields consistent and maintain the correct index paths for the main fields (i)\n if (!field || fieldIsHiddenOrDisabled(field)) {\n return null\n }\n\n const {\n operation: hasOperationPermission,\n permissions: fieldPermissions,\n read: hasReadPermission,\n } = getFieldPermissions({\n field,\n operation,\n parentName: parentPath?.includes('.')\n ? parentPath.split('.')[parentPath.split('.').length - 1]\n : parentPath,\n permissions,\n })\n\n // If the user cannot read the field, then filter it out\n // This is different from `admin.readOnly` which is executed based on `operation`\n if ('name' in field && !hasReadPermission) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n let isReadOnly = readOnlyFromParent || field?.admin?.readOnly\n\n // If parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (isReadOnly && field.admin?.readOnly === false) {\n isReadOnly = false\n }\n\n // If the user does not have access at the operation level, to begin with, force it to be read-only\n if ('name' in field && !hasOperationPermission) {\n isReadOnly = true\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: i,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n return (\n <FieldPathContext key={`${path}-${i}`} value={path}>\n <RenderField\n clientFieldConfig={field}\n forceRender={forceRender}\n indexPath={indexPath}\n parentPath={parentPath}\n parentSchemaPath={parentSchemaPath}\n path={path}\n permissions={fieldPermissions}\n readOnly={isReadOnly}\n schemaPath={schemaPath}\n />\n </FieldPathContext>\n )\n })}\n </RenderIfInViewport>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/RowLabel/Context/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,KAAK,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAQD,KAAK,KAAK,CAAC,CAAC,IAAI;IACd,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AAEjC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAUrD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,OACG,YAAY,CAAC,CAAC,CAC7C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/RowLabel/Context/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,KAAK,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAQD,KAAK,KAAK,CAAC,CAAC,IAAI;IACd,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AAEjC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAQrD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,OACG,YAAY,CAAC,CAAC,CAC7C,CAAA"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
4
5
  import React from 'react';
5
6
  import { useWatchForm } from '../../Form/context.js';
@@ -8,27 +9,40 @@ const RowLabel = /*#__PURE__*/React.createContext({
8
9
  path: '',
9
10
  rowNumber: undefined
10
11
  });
11
- export const RowLabelProvider = ({
12
- children,
13
- path,
14
- rowNumber
15
- }) => {
12
+ export const RowLabelProvider = t0 => {
13
+ const $ = _c(6);
14
+ const {
15
+ children,
16
+ path,
17
+ rowNumber
18
+ } = t0;
16
19
  const {
17
20
  getDataByPath,
18
21
  getSiblingData
19
22
  } = useWatchForm();
20
- const collapsibleData = getSiblingData(path);
21
- const arrayData = getDataByPath(path);
22
- const data = arrayData || collapsibleData;
23
- const contextValue = React.useMemo(() => ({
24
- data,
25
- path,
26
- rowNumber
27
- }), [data, path, rowNumber]);
28
- return /*#__PURE__*/_jsx(RowLabel, {
29
- value: contextValue,
30
- children: children
31
- });
23
+ let t1;
24
+ if ($[0] !== children || $[1] !== getDataByPath || $[2] !== getSiblingData || $[3] !== path || $[4] !== rowNumber) {
25
+ const collapsibleData = getSiblingData(path);
26
+ const arrayData = getDataByPath(path);
27
+ const data = arrayData || collapsibleData;
28
+ t1 = _jsx(RowLabel, {
29
+ value: {
30
+ data,
31
+ path,
32
+ rowNumber
33
+ },
34
+ children
35
+ });
36
+ $[0] = children;
37
+ $[1] = getDataByPath;
38
+ $[2] = getSiblingData;
39
+ $[3] = path;
40
+ $[4] = rowNumber;
41
+ $[5] = t1;
42
+ } else {
43
+ t1 = $[5];
44
+ }
45
+ return t1;
32
46
  };
33
47
  export const useRowLabel = () => {
34
48
  return React.use(RowLabel);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useWatchForm","RowLabel","createContext","data","path","rowNumber","undefined","RowLabelProvider","children","getDataByPath","getSiblingData","collapsibleData","arrayData","contextValue","useMemo","_jsx","value","useRowLabel","use"],"sources":["../../../../src/forms/RowLabel/Context/index.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { useWatchForm } from '../../Form/context.js'\n\ntype RowLabelType<T = unknown> = {\n readonly data: T\n readonly path: string\n readonly rowNumber?: number\n}\n\nconst RowLabel = React.createContext<RowLabelType>({\n data: {},\n path: '',\n rowNumber: undefined,\n})\n\ntype Props<T> = {\n readonly children: React.ReactNode\n} & Omit<RowLabelType<T>, 'data'>\n\nexport const RowLabelProvider: React.FC<Props<unknown>> = ({ children, path, rowNumber }) => {\n const { getDataByPath, getSiblingData } = useWatchForm()\n const collapsibleData = getSiblingData(path)\n const arrayData = getDataByPath(path)\n\n const data = arrayData || collapsibleData\n\n const contextValue = React.useMemo(() => ({ data, path, rowNumber }), [data, path, rowNumber])\n\n return <RowLabel value={contextValue}>{children}</RowLabel>\n}\n\nexport const useRowLabel = <T,>() => {\n return React.use(RowLabel) as RowLabelType<T>\n}\n"],"mappings":"AAAA;;;AAEA,OAAOA,KAAA,MAAW;AAElB,SAASC,YAAY,QAAQ;AAQ7B,MAAMC,QAAA,gBAAWF,KAAA,CAAMG,aAAa,CAAe;EACjDC,IAAA,EAAM,CAAC;EACPC,IAAA,EAAM;EACNC,SAAA,EAAWC;AACb;AAMA,OAAO,MAAMC,gBAAA,GAA6CA,CAAC;EAAEC,QAAQ;EAAEJ,IAAI;EAAEC;AAAS,CAAE;EACtF,MAAM;IAAEI,aAAa;IAAEC;EAAc,CAAE,GAAGV,YAAA;EAC1C,MAAMW,eAAA,GAAkBD,cAAA,CAAeN,IAAA;EACvC,MAAMQ,SAAA,GAAYH,aAAA,CAAcL,IAAA;EAEhC,MAAMD,IAAA,GAAOS,SAAA,IAAaD,eAAA;EAE1B,MAAME,YAAA,GAAed,KAAA,CAAMe,OAAO,CAAC,OAAO;IAAEX,IAAA;IAAMC,IAAA;IAAMC;EAAU,IAAI,CAACF,IAAA,EAAMC,IAAA,EAAMC,SAAA,CAAU;EAE7F,oBAAOU,IAAA,CAACd,QAAA;IAASe,KAAA,EAAOH,YAAA;cAAeL;;AACzC;AAEA,OAAO,MAAMS,WAAA,GAAcA,CAAA;EACzB,OAAOlB,KAAA,CAAMmB,GAAG,CAACjB,QAAA;AACnB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","useWatchForm","RowLabel","createContext","data","path","rowNumber","undefined","RowLabelProvider","t0","$","children","getDataByPath","getSiblingData","t1","collapsibleData","arrayData","_jsx","value","useRowLabel","use"],"sources":["../../../../src/forms/RowLabel/Context/index.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { useWatchForm } from '../../Form/context.js'\n\ntype RowLabelType<T = unknown> = {\n readonly data: T\n readonly path: string\n readonly rowNumber?: number\n}\n\nconst RowLabel = React.createContext<RowLabelType>({\n data: {},\n path: '',\n rowNumber: undefined,\n})\n\ntype Props<T> = {\n readonly children: React.ReactNode\n} & Omit<RowLabelType<T>, 'data'>\n\nexport const RowLabelProvider: React.FC<Props<unknown>> = ({ children, path, rowNumber }) => {\n const { getDataByPath, getSiblingData } = useWatchForm()\n const collapsibleData = getSiblingData(path)\n const arrayData = getDataByPath(path)\n\n const data = arrayData || collapsibleData\n\n return <RowLabel value={{ data, path, rowNumber }}>{children}</RowLabel>\n}\n\nexport const useRowLabel = <T,>() => {\n return React.use(RowLabel) as RowLabelType<T>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,YAAY,QAAQ;AAQ7B,MAAMC,QAAA,gBAAWF,KAAA,CAAMG,aAAa,CAAe;EACjDC,IAAA,EAAM,CAAC;EACPC,IAAA,EAAM;EACNC,SAAA,EAAWC;AACb;AAMA,OAAO,MAAMC,gBAAA,GAA6CC,EAAA;EAAA,MAAAC,CAAA,GAAAX,EAAA;EAAC;IAAAY,QAAA;IAAAN,IAAA;IAAAC;EAAA,IAAAG,EAA6B;EACtF;IAAAG,aAAA;IAAAC;EAAA,IAA0CZ,YAAA;EAAA,IAAAa,EAAA;EAAA,IAAAJ,CAAA,QAAAC,QAAA,IAAAD,CAAA,QAAAE,aAAA,IAAAF,CAAA,QAAAG,cAAA,IAAAH,CAAA,QAAAL,IAAA,IAAAK,CAAA,QAAAJ,SAAA;IAC1C,MAAAS,eAAA,GAAwBF,cAAA,CAAeR,IAAA;IACvC,MAAAW,SAAA,GAAkBJ,aAAA,CAAcP,IAAA;IAEhC,MAAAD,IAAA,GAAaY,SAAA,IAAaD,eAAA;IAEnBD,EAAA,GAAAG,IAAA,CAAAf,QAAA;MAAAgB,KAAA;QAAAd,IAAA;QAAAC,IAAA;QAAAC;MAAA;MAAAK;IAAA,C;;;;;;;;;;SAAAG,E;CACT;AAEA,OAAO,MAAMK,WAAA,GAAcA,CAAA;EACzB,OAAOnB,KAAA,CAAMoB,GAAG,CAAClB,QAAA;AACnB","ignoreList":[]}
@@ -1,7 +1,6 @@
1
1
  import type { ClientUser, SanitizedPermissions, TypedUser } from 'payload';
2
2
  import React from 'react';
3
3
  export type UserWithToken<T = ClientUser> = {
4
- /** seconds until expiration */
5
4
  exp: number;
6
5
  token: string;
7
6
  user: T;
@@ -17,7 +16,7 @@ export type AuthContext<T = ClientUser> = {
17
16
  setUser: (user: null | UserWithToken<T>) => void;
18
17
  strategy?: string;
19
18
  token?: string;
20
- tokenExpirationMs?: number;
19
+ tokenExpiration?: number;
21
20
  user?: null | T;
22
21
  };
23
22
  type Props = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAM1E,OAAO,KAA+D,MAAM,OAAO,CAAA;AAUnF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,UAAU,IAAI;IAC1C,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,CAAA;CACR,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;IAC9C,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC3D,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBA6RP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAAmC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAM1E,OAAO,KAA+D,MAAM,OAAO,CAAA;AAWnF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,UAAU,IAAI;IAC1C,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,CAAA;CACR,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;IAC9C,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC3D,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBA2RP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAAmC,CAAA"}
@@ -8,18 +8,22 @@ import * as qs from 'qs-esm';
8
8
  import React, { createContext, use, useCallback, useEffect, useState } from 'react';
9
9
  import { toast } from 'sonner';
10
10
  import { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js';
11
+ import { useDebounce } from '../../hooks/useDebounce.js';
11
12
  import { useEffectEvent } from '../../hooks/useEffectEvent.js';
12
13
  import { useTranslation } from '../../providers/Translation/index.js';
13
14
  import { requests } from '../../utilities/api.js';
14
15
  import { useConfig } from '../Config/index.js';
15
16
  import { useRouteTransition } from '../RouteTransition/index.js';
16
17
  const Context = /*#__PURE__*/createContext({});
17
- const maxTimeoutMs = 2147483647;
18
+ const maxTimeoutTime = 2147483647;
18
19
  export function AuthProvider({
19
20
  children,
20
21
  permissions: initialPermissions,
21
22
  user: initialUser
22
23
  }) {
24
+ const [user, setUserInMemory] = useState(initialUser);
25
+ const [tokenInMemory, setTokenInMemory] = useState();
26
+ const [tokenExpiration, setTokenExpiration] = useState();
23
27
  const pathname = usePathname();
24
28
  const router = useRouter();
25
29
  const {
@@ -27,7 +31,6 @@ export function AuthProvider({
27
31
  } = useConfig();
28
32
  const {
29
33
  admin: {
30
- autoRefresh,
31
34
  routes: {
32
35
  inactivity: logoutInactivityRoute
33
36
  },
@@ -39,6 +42,7 @@ export function AuthProvider({
39
42
  },
40
43
  serverURL
41
44
  } = config;
45
+ const [permissions, setPermissions] = useState(initialPermissions);
42
46
  const {
43
47
  i18n
44
48
  } = useTranslation();
@@ -46,18 +50,12 @@ export function AuthProvider({
46
50
  closeAllModals,
47
51
  openModal
48
52
  } = useModal();
53
+ const [lastLocationChange, setLastLocationChange] = useState(0);
54
+ const debouncedLocationChange = useDebounce(lastLocationChange, 10000);
55
+ const refreshTokenTimeoutRef = React.useRef(null);
49
56
  const {
50
57
  startRouteTransition
51
58
  } = useRouteTransition();
52
- const [user, setUserInMemory] = useState(initialUser);
53
- const [tokenInMemory, setTokenInMemory] = useState();
54
- const [tokenExpirationMs, setTokenExpirationMs] = useState();
55
- const [permissions, setPermissions] = useState(initialPermissions);
56
- const [forceLogoutBufferMs, setForceLogoutBufferMs] = useState(120_000);
57
- const [fetchedUserOnMount, setFetchedUserOnMount] = useState(false);
58
- const refreshTokenTimeoutRef = React.useRef(null);
59
- const reminderTimeoutRef = React.useRef(null);
60
- const forceLogOutTimeoutRef = React.useRef(null);
61
59
  const id = user?.id;
62
60
  const redirectToInactivityRoute = useCallback(() => {
63
61
  startRouteTransition(() => router.replace(formatAdminURL({
@@ -67,65 +65,50 @@ export function AuthProvider({
67
65
  closeAllModals();
68
66
  }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition]);
69
67
  const revokeTokenAndExpire = useCallback(() => {
70
- setUserInMemory(null);
71
68
  setTokenInMemory(undefined);
72
- setTokenExpirationMs(undefined);
69
+ setTokenExpiration(undefined);
73
70
  clearTimeout(refreshTokenTimeoutRef.current);
74
71
  }, []);
75
72
  const setNewUser = useCallback(userResponse => {
76
- clearTimeout(reminderTimeoutRef.current);
77
- clearTimeout(forceLogOutTimeoutRef.current);
78
73
  if (userResponse?.user) {
79
74
  setUserInMemory(userResponse.user);
80
75
  setTokenInMemory(userResponse.token);
81
- setTokenExpirationMs(userResponse.exp * 1000);
82
- const expiresInMs = Math.max(0, Math.min((userResponse.exp ?? 0) * 1000 - Date.now(), maxTimeoutMs));
83
- if (expiresInMs) {
84
- const nextForceLogoutBufferMs = Math.min(60_000, expiresInMs / 2);
85
- setForceLogoutBufferMs(nextForceLogoutBufferMs);
86
- reminderTimeoutRef.current = setTimeout(() => {
87
- if (autoRefresh) {
88
- refreshCookieEvent();
89
- } else {
90
- openModal(stayLoggedInModalSlug);
91
- }
92
- }, Math.max(expiresInMs - nextForceLogoutBufferMs, 0));
93
- forceLogOutTimeoutRef.current = setTimeout(() => {
94
- revokeTokenAndExpire();
95
- redirectToInactivityRoute();
96
- }, expiresInMs);
97
- }
76
+ setTokenExpiration(userResponse.exp);
98
77
  } else {
78
+ setUserInMemory(null);
99
79
  revokeTokenAndExpire();
100
80
  }
101
- }, [autoRefresh, redirectToInactivityRoute, revokeTokenAndExpire, openModal]);
81
+ }, [revokeTokenAndExpire]);
102
82
  const refreshCookie = useCallback(forceRefresh => {
103
- if (!id) {
104
- return;
105
- }
106
- const expiresInMs_0 = Math.max(0, (tokenExpirationMs ?? 0) - Date.now());
107
- if (forceRefresh || tokenExpirationMs && expiresInMs_0 < forceLogoutBufferMs * 2) {
108
- clearTimeout(refreshTokenTimeoutRef.current);
109
- refreshTokenTimeoutRef.current = setTimeout(async () => {
110
- try {
111
- const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`, {
112
- headers: {
113
- 'Accept-Language': i18n.language
83
+ const now = Math.round(new Date().getTime() / 1000);
84
+ const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now;
85
+ if (forceRefresh || tokenExpiration && remainingTime < 120) {
86
+ refreshTokenTimeoutRef.current = setTimeout(() => {
87
+ async function refresh() {
88
+ try {
89
+ const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`, {
90
+ headers: {
91
+ 'Accept-Language': i18n.language
92
+ }
93
+ });
94
+ if (request.status === 200) {
95
+ const json = await request.json();
96
+ setNewUser(json);
97
+ } else {
98
+ setNewUser(null);
99
+ redirectToInactivityRoute();
114
100
  }
115
- });
116
- if (request.status === 200) {
117
- const json = await request.json();
118
- setNewUser(json);
119
- } else {
120
- setNewUser(null);
121
- redirectToInactivityRoute();
101
+ } catch (e) {
102
+ toast.error(e.message);
122
103
  }
123
- } catch (e) {
124
- toast.error(e.message);
125
104
  }
105
+ void refresh();
126
106
  }, 1000);
127
107
  }
128
- }, [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, tokenExpirationMs, userSlug, forceLogoutBufferMs, id]);
108
+ return () => {
109
+ clearTimeout(refreshTokenTimeoutRef.current);
110
+ };
111
+ }, [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, tokenExpiration, userSlug]);
129
112
  const refreshCookieAsync = useCallback(async skipSetUser => {
130
113
  try {
131
114
  const request_0 = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {
@@ -144,10 +127,11 @@ export function AuthProvider({
144
127
  setNewUser(null);
145
128
  redirectToInactivityRoute();
146
129
  }
130
+ return null;
147
131
  } catch (e_0) {
148
132
  toast.error(`Refreshing token failed: ${e_0.message}`);
133
+ return null;
149
134
  }
150
- return null;
151
135
  }, [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug, user]);
152
136
  const logOut = useCallback(async () => {
153
137
  try {
@@ -194,36 +178,62 @@ export function AuthProvider({
194
178
  });
195
179
  if (request_2.status === 200) {
196
180
  const json_2 = await request_2.json();
181
+ const user_0 = null;
197
182
  setNewUser(json_2);
198
- return json_2?.user || null;
183
+ return user_0;
199
184
  }
200
185
  } catch (e_2) {
201
186
  toast.error(`Fetching user failed: ${e_2.message}`);
202
187
  }
203
188
  return null;
204
189
  }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser]);
205
- const refreshCookieEvent = useEffectEvent(refreshCookie);
190
+ const fetchFullUserEvent = useEffectEvent(fetchFullUser);
191
+ // On mount, get user and set
192
+ useEffect(() => {
193
+ void fetchFullUserEvent();
194
+ }, []);
195
+ const refreshCookieEvent = useEffectEvent(() => {
196
+ if (id) {
197
+ refreshCookie();
198
+ }
199
+ });
200
+ // When location changes, refresh cookie
206
201
  useEffect(() => {
207
- // when location changes, refresh cookie
208
202
  refreshCookieEvent();
203
+ }, [debouncedLocationChange]);
204
+ useEffect(() => {
205
+ setLastLocationChange(Date.now());
209
206
  }, [pathname]);
210
- const fetchFullUserEvent = useEffectEvent(fetchFullUser);
211
207
  useEffect(() => {
212
- async function fetchUserOnMount() {
213
- await fetchFullUserEvent();
214
- setFetchedUserOnMount(true);
208
+ let reminder;
209
+ let forceLogOut;
210
+ const now_0 = Math.round(new Date().getTime() / 1000);
211
+ const remainingTime_0 = typeof tokenExpiration === 'number' ? tokenExpiration - now_0 : 0;
212
+ const remindInTimeFromNow = Math.max(Math.min((remainingTime_0 - 60) * 1000, maxTimeoutTime), 0);
213
+ const forceLogOutInTimeFromNow = Math.max(Math.min(remainingTime_0 * 1000, maxTimeoutTime), 0);
214
+ if (!user) {
215
+ clearTimeout(reminder);
216
+ clearTimeout(forceLogOut);
217
+ return;
215
218
  }
216
- void fetchUserOnMount();
217
- }, []);
218
- useEffect(() => () => {
219
- // remove all timeouts on unmount
220
- clearTimeout(refreshTokenTimeoutRef.current);
221
- clearTimeout(reminderTimeoutRef.current);
222
- clearTimeout(forceLogOutTimeoutRef.current);
223
- }, []);
224
- if (!user && !fetchedUserOnMount) {
225
- return null;
226
- }
219
+ if (remainingTime_0 > 0) {
220
+ reminder = setTimeout(() => {
221
+ openModal(stayLoggedInModalSlug);
222
+ }, remindInTimeFromNow);
223
+ forceLogOut = setTimeout(() => {
224
+ setNewUser(null);
225
+ redirectToInactivityRoute();
226
+ }, forceLogOutInTimeFromNow);
227
+ }
228
+ return () => {
229
+ if (reminder) {
230
+ clearTimeout(reminder);
231
+ }
232
+ if (forceLogOut) {
233
+ clearTimeout(forceLogOut);
234
+ }
235
+ };
236
+ }, [tokenExpiration, openModal, i18n, setNewUser, user, redirectToInactivityRoute]);
227
237
  return /*#__PURE__*/_jsx(Context, {
228
238
  value: {
229
239
  fetchFullUser,
@@ -235,7 +245,6 @@ export function AuthProvider({
235
245
  setPermissions,
236
246
  setUser: setNewUser,
237
247
  token: tokenInMemory,
238
- tokenExpirationMs,
239
248
  user
240
249
  },
241
250
  children: children
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useState","toast","stayLoggedInModalSlug","useEffectEvent","useTranslation","requests","useConfig","useRouteTransition","Context","maxTimeoutMs","AuthProvider","children","permissions","initialPermissions","user","initialUser","pathname","router","config","admin","autoRefresh","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","i18n","closeAllModals","openModal","startRouteTransition","setUserInMemory","tokenInMemory","setTokenInMemory","tokenExpirationMs","setTokenExpirationMs","setPermissions","forceLogoutBufferMs","setForceLogoutBufferMs","fetchedUserOnMount","setFetchedUserOnMount","refreshTokenTimeoutRef","useRef","reminderTimeoutRef","forceLogOutTimeoutRef","id","redirectToInactivityRoute","replace","path","window","location","startsWith","encodeURIComponent","revokeTokenAndExpire","undefined","clearTimeout","current","setNewUser","userResponse","token","exp","expiresInMs","Math","max","min","Date","now","nextForceLogoutBufferMs","setTimeout","refreshCookieEvent","refreshCookie","forceRefresh","request","post","headers","language","status","json","e","error","message","refreshCookieAsync","skipSetUser","logOut","collection","_","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","fetchFullUserEvent","fetchUserOnMount","_jsx","value","setUser","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, SanitizedPermissions, TypedUser } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nexport type UserWithToken<T = ClientUser> = {\n /** seconds until expiration */\n exp: number\n token: string\n user: T\n}\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | TypedUser>\n logOut: () => Promise<boolean>\n permissions?: SanitizedPermissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: SanitizedPermissions) => void\n setUser: (user: null | UserWithToken<T>) => void\n strategy?: string\n token?: string\n tokenExpirationMs?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutMs = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: SanitizedPermissions\n user?: ClientUser | null\n}\n\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const pathname = usePathname()\n const router = useRouter()\n\n const { config } = useConfig()\n\n const {\n admin: {\n autoRefresh,\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const { startRouteTransition } = useRouteTransition()\n\n const [user, setUserInMemory] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpirationMs, setTokenExpirationMs] = useState<number>()\n const [permissions, setPermissions] = useState<SanitizedPermissions>(initialPermissions)\n const [forceLogoutBufferMs, setForceLogoutBufferMs] = useState<number>(120_000)\n const [fetchedUserOnMount, setFetchedUserOnMount] = useState(false)\n\n const refreshTokenTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const reminderTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const forceLogOutTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n startRouteTransition(() =>\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${window.location.pathname.startsWith(adminRoute) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : ''}`,\n }),\n ),\n )\n\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition])\n\n const revokeTokenAndExpire = useCallback(() => {\n setUserInMemory(null)\n setTokenInMemory(undefined)\n setTokenExpirationMs(undefined)\n clearTimeout(refreshTokenTimeoutRef.current)\n }, [])\n\n const setNewUser = useCallback(\n (userResponse: null | UserWithToken) => {\n clearTimeout(reminderTimeoutRef.current)\n clearTimeout(forceLogOutTimeoutRef.current)\n\n if (userResponse?.user) {\n setUserInMemory(userResponse.user)\n setTokenInMemory(userResponse.token)\n setTokenExpirationMs(userResponse.exp * 1000)\n\n const expiresInMs = Math.max(\n 0,\n Math.min((userResponse.exp ?? 0) * 1000 - Date.now(), maxTimeoutMs),\n )\n\n if (expiresInMs) {\n const nextForceLogoutBufferMs = Math.min(60_000, expiresInMs / 2)\n setForceLogoutBufferMs(nextForceLogoutBufferMs)\n\n reminderTimeoutRef.current = setTimeout(\n () => {\n if (autoRefresh) {\n refreshCookieEvent()\n } else {\n openModal(stayLoggedInModalSlug)\n }\n },\n Math.max(expiresInMs - nextForceLogoutBufferMs, 0),\n )\n\n forceLogOutTimeoutRef.current = setTimeout(() => {\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n }, expiresInMs)\n }\n } else {\n revokeTokenAndExpire()\n }\n },\n [autoRefresh, redirectToInactivityRoute, revokeTokenAndExpire, openModal],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n if (!id) {\n return\n }\n\n const expiresInMs = Math.max(0, (tokenExpirationMs ?? 0) - Date.now())\n\n if (forceRefresh || (tokenExpirationMs && expiresInMs < forceLogoutBufferMs * 2)) {\n clearTimeout(refreshTokenTimeoutRef.current)\n refreshTokenTimeoutRef.current = setTimeout(async () => {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n setNewUser(json)\n } else {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }, 1000)\n }\n },\n [\n apiRoute,\n i18n.language,\n redirectToInactivityRoute,\n serverURL,\n setNewUser,\n tokenExpirationMs,\n userSlug,\n forceLogoutBufferMs,\n id,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n if (!skipSetUser) {\n setNewUser(json)\n }\n return json.user\n }\n\n if (user) {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n }\n return null\n },\n [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug, user],\n )\n\n const logOut = useCallback(async () => {\n try {\n if (user && user.collection) {\n setNewUser(null)\n await requests.post(`${serverURL}${apiRoute}/${user.collection}/logout`)\n }\n } catch (_) {\n // fail silently and log the user out in state\n }\n\n return true\n }, [apiRoute, serverURL, setNewUser, user])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: SanitizedPermissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n setNewUser(json)\n return json?.user || null\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser])\n\n const refreshCookieEvent = useEffectEvent(refreshCookie)\n useEffect(() => {\n // when location changes, refresh cookie\n refreshCookieEvent()\n }, [pathname])\n\n const fetchFullUserEvent = useEffectEvent(fetchFullUser)\n useEffect(() => {\n async function fetchUserOnMount() {\n await fetchFullUserEvent()\n setFetchedUserOnMount(true)\n }\n\n void fetchUserOnMount()\n }, [])\n\n useEffect(\n () => () => {\n // remove all timeouts on unmount\n clearTimeout(refreshTokenTimeoutRef.current)\n clearTimeout(reminderTimeoutRef.current)\n clearTimeout(forceLogOutTimeoutRef.current)\n },\n [],\n )\n\n if (!user && !fetchedUserOnMount) {\n return null\n }\n\n return (\n <Context\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser: setNewUser,\n token: tokenInMemory,\n tokenExpirationMs,\n user,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => use(Context) as AuthContext<T>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useEffectEvent","useTranslation","requests","useConfig","useRouteTransition","Context","maxTimeoutTime","AuthProvider","children","permissions","initialPermissions","user","initialUser","setUserInMemory","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","refreshTokenTimeoutRef","useRef","startRouteTransition","id","redirectToInactivityRoute","replace","path","window","location","startsWith","encodeURIComponent","revokeTokenAndExpire","undefined","clearTimeout","current","setNewUser","userResponse","token","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","json","e","error","message","refreshCookieAsync","skipSetUser","logOut","collection","_","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","fetchFullUserEvent","refreshCookieEvent","reminder","forceLogOut","remindInTimeFromNow","max","min","forceLogOutInTimeFromNow","_jsx","value","setUser","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, SanitizedPermissions, TypedUser } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nexport type UserWithToken<T = ClientUser> = {\n exp: number\n token: string\n user: T\n}\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | TypedUser>\n logOut: () => Promise<boolean>\n permissions?: SanitizedPermissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: SanitizedPermissions) => void\n setUser: (user: null | UserWithToken<T>) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: SanitizedPermissions\n user?: ClientUser | null\n}\n\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const [user, setUserInMemory] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n\n const { config } = useConfig()\n\n const {\n admin: {\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<SanitizedPermissions>(initialPermissions)\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n const refreshTokenTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const { startRouteTransition } = useRouteTransition()\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n startRouteTransition(() =>\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${window.location.pathname.startsWith(adminRoute) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : ''}`,\n }),\n ),\n )\n\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n clearTimeout(refreshTokenTimeoutRef.current)\n }, [])\n\n const setNewUser = useCallback(\n (userResponse: null | UserWithToken) => {\n if (userResponse?.user) {\n setUserInMemory(userResponse.user)\n setTokenInMemory(userResponse.token)\n setTokenExpiration(userResponse.exp)\n } else {\n setUserInMemory(null)\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n refreshTokenTimeoutRef.current = setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setNewUser(json)\n } else {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n\n return () => {\n clearTimeout(refreshTokenTimeoutRef.current)\n }\n },\n [\n apiRoute,\n i18n.language,\n redirectToInactivityRoute,\n serverURL,\n setNewUser,\n tokenExpiration,\n userSlug,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setNewUser(json)\n }\n return json.user\n }\n\n if (user) {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug, user],\n )\n\n const logOut = useCallback(async () => {\n try {\n if (user && user.collection) {\n setNewUser(null)\n await requests.post(`${serverURL}${apiRoute}/${user.collection}/logout`)\n }\n } catch (_) {\n // fail silently and log the user out in state\n }\n\n return true\n }, [apiRoute, serverURL, setNewUser, user])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: SanitizedPermissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n const user = null\n\n setNewUser(json)\n return user\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser])\n\n const fetchFullUserEvent = useEffectEvent(fetchFullUser)\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUserEvent()\n }, [])\n\n const refreshCookieEvent = useEffectEvent(() => {\n if (id) {\n refreshCookie()\n }\n })\n\n // When location changes, refresh cookie\n useEffect(() => {\n refreshCookieEvent()\n }, [debouncedLocationChange])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n const remindInTimeFromNow = Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime), 0)\n const forceLogOutInTimeFromNow = Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0)\n\n if (!user) {\n clearTimeout(reminder)\n clearTimeout(forceLogOut)\n return\n }\n\n if (remainingTime > 0) {\n reminder = setTimeout(() => {\n openModal(stayLoggedInModalSlug)\n }, remindInTimeFromNow)\n\n forceLogOut = setTimeout(() => {\n setNewUser(null)\n redirectToInactivityRoute()\n }, forceLogOutInTimeFromNow)\n }\n\n return () => {\n if (reminder) {\n clearTimeout(reminder)\n }\n if (forceLogOut) {\n clearTimeout(forceLogOut)\n }\n }\n }, [tokenExpiration, openModal, i18n, setNewUser, user, redirectToInactivityRoute])\n\n return (\n <Context\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser: setNewUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => use(Context) as AuthContext<T>\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import type { LivePreviewConfig } from 'payload';
2
+ import type { fieldSchemaToJSON } from 'payload/shared';
2
3
  import type { Dispatch } from 'react';
3
4
  import type React from 'react';
4
5
  import type { usePopupWindow } from '../../hooks/usePopupWindow.js';
@@ -7,6 +8,7 @@ export interface LivePreviewContextType {
7
8
  appIsReady: boolean;
8
9
  breakpoint: LivePreviewConfig['breakpoints'][number]['name'];
9
10
  breakpoints: LivePreviewConfig['breakpoints'];
11
+ fieldSchemaJSON?: ReturnType<typeof fieldSchemaToJSON>;
10
12
  iframeHasLoaded: boolean;
11
13
  iframeRef: React.RefObject<HTMLIFrameElement | null>;
12
14
  isLivePreviewEnabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;IAC5D,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC7C,eAAe,EAAE,OAAO,CAAA;IACxB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACpD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,gBAAgB,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kBAAkB,EAAE;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACrE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;IACzC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAA;IACrC,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,aAAa,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACrF,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,OAAO,KAAK,IAAI,CAAA;IACxD,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,oBAAoB,EAAE,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAA;IACrE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACpC,kBAAkB,EAAE,CAAC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAChE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe,EAAE;QACf,CAAC,EAAE,MAAM,CAAA;QACT,CAAC,EAAE,MAAM,CAAA;KACV,CAAA;IACD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,kBAAkB,uCAqC7B,CAAA;AAEF,eAAO,MAAM,qBAAqB,8BAAgC,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;IAC5D,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAA;IACtD,eAAe,EAAE,OAAO,CAAA;IACxB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACpD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,gBAAgB,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kBAAkB,EAAE;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACrE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;IACzC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAA;IACrC,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,aAAa,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACrF,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,OAAO,KAAK,IAAI,CAAA;IACxD,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,oBAAoB,EAAE,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAA;IACrE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACpC,kBAAkB,EAAE,CAAC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAChE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe,EAAE;QACf,CAAC,EAAE,MAAM,CAAA;QACT,CAAC,EAAE,MAAM,CAAA;KACV,CAAA;IACD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,kBAAkB,uCAsC7B,CAAA;AAEF,eAAO,MAAM,qBAAqB,8BAAgC,CAAA"}
@@ -5,6 +5,7 @@ export const LivePreviewContext = createContext({
5
5
  appIsReady: false,
6
6
  breakpoint: undefined,
7
7
  breakpoints: undefined,
8
+ fieldSchemaJSON: undefined,
8
9
  iframeHasLoaded: false,
9
10
  iframeRef: undefined,
10
11
  isLivePreviewEnabled: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["createContext","use","LivePreviewContext","appIsReady","breakpoint","undefined","breakpoints","iframeHasLoaded","iframeRef","isLivePreviewEnabled","isLivePreviewing","isPopupOpen","measuredDeviceSize","height","width","openPopupWindow","popupRef","previewWindowType","setAppIsReady","setBreakpoint","setHeight","setIframeHasLoaded","setIsLivePreviewing","setMeasuredDeviceSize","setPreviewWindowType","setSize","setToolbarPosition","setWidth","setZoom","size","toolbarPosition","x","y","url","zoom","useLivePreviewContext"],"sources":["../../../src/providers/LivePreview/context.ts"],"sourcesContent":["'use client'\nimport type { LivePreviewConfig } from 'payload'\nimport type { Dispatch } from 'react'\nimport type React from 'react'\n\nimport { createContext, use } from 'react'\n\nimport type { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport type { SizeReducerAction } from './sizeReducer.js'\n\nexport interface LivePreviewContextType {\n appIsReady: boolean\n breakpoint: LivePreviewConfig['breakpoints'][number]['name']\n breakpoints: LivePreviewConfig['breakpoints']\n iframeHasLoaded: boolean\n iframeRef: React.RefObject<HTMLIFrameElement | null>\n isLivePreviewEnabled: boolean\n isLivePreviewing: boolean\n isPopupOpen: boolean\n listeningForMessages?: boolean\n measuredDeviceSize: {\n height: number\n width: number\n }\n openPopupWindow: ReturnType<typeof usePopupWindow>['openPopupWindow']\n popupRef?: React.RefObject<null | Window>\n previewWindowType: 'iframe' | 'popup'\n setAppIsReady: (appIsReady: boolean) => void\n setBreakpoint: (breakpoint: LivePreviewConfig['breakpoints'][number]['name']) => void\n setHeight: (height: number) => void\n setIframeHasLoaded: (loaded: boolean) => void\n setIsLivePreviewing: (isLivePreviewing: boolean) => void\n setMeasuredDeviceSize: (size: { height: number; width: number }) => void\n setPreviewWindowType: (previewWindowType: 'iframe' | 'popup') => void\n setSize: Dispatch<SizeReducerAction>\n setToolbarPosition: (position: { x: number; y: number }) => void\n setWidth: (width: number) => void\n setZoom: (zoom: number) => void\n size: {\n height: number\n width: number\n }\n toolbarPosition: {\n x: number\n y: number\n }\n url: string | undefined\n zoom: number\n}\n\nexport const LivePreviewContext = createContext<LivePreviewContextType>({\n appIsReady: false,\n breakpoint: undefined,\n breakpoints: undefined,\n iframeHasLoaded: false,\n iframeRef: undefined,\n isLivePreviewEnabled: undefined,\n isLivePreviewing: false,\n isPopupOpen: false,\n measuredDeviceSize: {\n height: 0,\n width: 0,\n },\n openPopupWindow: () => {},\n popupRef: undefined,\n previewWindowType: 'iframe',\n setAppIsReady: () => {},\n setBreakpoint: () => {},\n setHeight: () => {},\n setIframeHasLoaded: () => {},\n setIsLivePreviewing: () => {},\n setMeasuredDeviceSize: () => {},\n setPreviewWindowType: () => {},\n setSize: () => {},\n setToolbarPosition: () => {},\n setWidth: () => {},\n setZoom: () => {},\n size: {\n height: 0,\n width: 0,\n },\n toolbarPosition: {\n x: 0,\n y: 0,\n },\n url: undefined,\n zoom: 1,\n})\n\nexport const useLivePreviewContext = () => use(LivePreviewContext)\n"],"mappings":"AAAA;;AAKA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AA6CnC,OAAO,MAAMC,kBAAA,GAAqBF,aAAA,CAAsC;EACtEG,UAAA,EAAY;EACZC,UAAA,EAAYC,SAAA;EACZC,WAAA,EAAaD,SAAA;EACbE,eAAA,EAAiB;EACjBC,SAAA,EAAWH,SAAA;EACXI,oBAAA,EAAsBJ,SAAA;EACtBK,gBAAA,EAAkB;EAClBC,WAAA,EAAa;EACbC,kBAAA,EAAoB;IAClBC,MAAA,EAAQ;IACRC,KAAA,EAAO;EACT;EACAC,eAAA,EAAiBA,CAAA,MAAO;EACxBC,QAAA,EAAUX,SAAA;EACVY,iBAAA,EAAmB;EACnBC,aAAA,EAAeA,CAAA,MAAO;EACtBC,aAAA,EAAeA,CAAA,MAAO;EACtBC,SAAA,EAAWA,CAAA,MAAO;EAClBC,kBAAA,EAAoBA,CAAA,MAAO;EAC3BC,mBAAA,EAAqBA,CAAA,MAAO;EAC5BC,qBAAA,EAAuBA,CAAA,MAAO;EAC9BC,oBAAA,EAAsBA,CAAA,MAAO;EAC7BC,OAAA,EAASA,CAAA,MAAO;EAChBC,kBAAA,EAAoBA,CAAA,MAAO;EAC3BC,QAAA,EAAUA,CAAA,MAAO;EACjBC,OAAA,EAASA,CAAA,MAAO;EAChBC,IAAA,EAAM;IACJhB,MAAA,EAAQ;IACRC,KAAA,EAAO;EACT;EACAgB,eAAA,EAAiB;IACfC,CAAA,EAAG;IACHC,CAAA,EAAG;EACL;EACAC,GAAA,EAAK5B,SAAA;EACL6B,IAAA,EAAM;AACR;AAEA,OAAO,MAAMC,qBAAA,GAAwBA,CAAA,KAAMlC,GAAA,CAAIC,kBAAA","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":["createContext","use","LivePreviewContext","appIsReady","breakpoint","undefined","breakpoints","fieldSchemaJSON","iframeHasLoaded","iframeRef","isLivePreviewEnabled","isLivePreviewing","isPopupOpen","measuredDeviceSize","height","width","openPopupWindow","popupRef","previewWindowType","setAppIsReady","setBreakpoint","setHeight","setIframeHasLoaded","setIsLivePreviewing","setMeasuredDeviceSize","setPreviewWindowType","setSize","setToolbarPosition","setWidth","setZoom","size","toolbarPosition","x","y","url","zoom","useLivePreviewContext"],"sources":["../../../src/providers/LivePreview/context.ts"],"sourcesContent":["'use client'\nimport type { LivePreviewConfig } from 'payload'\nimport type { fieldSchemaToJSON } from 'payload/shared'\nimport type { Dispatch } from 'react'\nimport type React from 'react'\n\nimport { createContext, use } from 'react'\n\nimport type { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport type { SizeReducerAction } from './sizeReducer.js'\n\nexport interface LivePreviewContextType {\n appIsReady: boolean\n breakpoint: LivePreviewConfig['breakpoints'][number]['name']\n breakpoints: LivePreviewConfig['breakpoints']\n fieldSchemaJSON?: ReturnType<typeof fieldSchemaToJSON>\n iframeHasLoaded: boolean\n iframeRef: React.RefObject<HTMLIFrameElement | null>\n isLivePreviewEnabled: boolean\n isLivePreviewing: boolean\n isPopupOpen: boolean\n listeningForMessages?: boolean\n measuredDeviceSize: {\n height: number\n width: number\n }\n openPopupWindow: ReturnType<typeof usePopupWindow>['openPopupWindow']\n popupRef?: React.RefObject<null | Window>\n previewWindowType: 'iframe' | 'popup'\n setAppIsReady: (appIsReady: boolean) => void\n setBreakpoint: (breakpoint: LivePreviewConfig['breakpoints'][number]['name']) => void\n setHeight: (height: number) => void\n setIframeHasLoaded: (loaded: boolean) => void\n setIsLivePreviewing: (isLivePreviewing: boolean) => void\n setMeasuredDeviceSize: (size: { height: number; width: number }) => void\n setPreviewWindowType: (previewWindowType: 'iframe' | 'popup') => void\n setSize: Dispatch<SizeReducerAction>\n setToolbarPosition: (position: { x: number; y: number }) => void\n setWidth: (width: number) => void\n setZoom: (zoom: number) => void\n size: {\n height: number\n width: number\n }\n toolbarPosition: {\n x: number\n y: number\n }\n url: string | undefined\n zoom: number\n}\n\nexport const LivePreviewContext = createContext<LivePreviewContextType>({\n appIsReady: false,\n breakpoint: undefined,\n breakpoints: undefined,\n fieldSchemaJSON: undefined,\n iframeHasLoaded: false,\n iframeRef: undefined,\n isLivePreviewEnabled: undefined,\n isLivePreviewing: false,\n isPopupOpen: false,\n measuredDeviceSize: {\n height: 0,\n width: 0,\n },\n openPopupWindow: () => {},\n popupRef: undefined,\n previewWindowType: 'iframe',\n setAppIsReady: () => {},\n setBreakpoint: () => {},\n setHeight: () => {},\n setIframeHasLoaded: () => {},\n setIsLivePreviewing: () => {},\n setMeasuredDeviceSize: () => {},\n setPreviewWindowType: () => {},\n setSize: () => {},\n setToolbarPosition: () => {},\n setWidth: () => {},\n setZoom: () => {},\n size: {\n height: 0,\n width: 0,\n },\n toolbarPosition: {\n x: 0,\n y: 0,\n },\n url: undefined,\n zoom: 1,\n})\n\nexport const useLivePreviewContext = () => use(LivePreviewContext)\n"],"mappings":"AAAA;;AAMA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AA8CnC,OAAO,MAAMC,kBAAA,GAAqBF,aAAA,CAAsC;EACtEG,UAAA,EAAY;EACZC,UAAA,EAAYC,SAAA;EACZC,WAAA,EAAaD,SAAA;EACbE,eAAA,EAAiBF,SAAA;EACjBG,eAAA,EAAiB;EACjBC,SAAA,EAAWJ,SAAA;EACXK,oBAAA,EAAsBL,SAAA;EACtBM,gBAAA,EAAkB;EAClBC,WAAA,EAAa;EACbC,kBAAA,EAAoB;IAClBC,MAAA,EAAQ;IACRC,KAAA,EAAO;EACT;EACAC,eAAA,EAAiBA,CAAA,MAAO;EACxBC,QAAA,EAAUZ,SAAA;EACVa,iBAAA,EAAmB;EACnBC,aAAA,EAAeA,CAAA,MAAO;EACtBC,aAAA,EAAeA,CAAA,MAAO;EACtBC,SAAA,EAAWA,CAAA,MAAO;EAClBC,kBAAA,EAAoBA,CAAA,MAAO;EAC3BC,mBAAA,EAAqBA,CAAA,MAAO;EAC5BC,qBAAA,EAAuBA,CAAA,MAAO;EAC9BC,oBAAA,EAAsBA,CAAA,MAAO;EAC7BC,OAAA,EAASA,CAAA,MAAO;EAChBC,kBAAA,EAAoBA,CAAA,MAAO;EAC3BC,QAAA,EAAUA,CAAA,MAAO;EACjBC,OAAA,EAASA,CAAA,MAAO;EAChBC,IAAA,EAAM;IACJhB,MAAA,EAAQ;IACRC,KAAA,EAAO;EACT;EACAgB,eAAA,EAAiB;IACfC,CAAA,EAAG;IACHC,CAAA,EAAG;EACL;EACAC,GAAA,EAAK7B,SAAA;EACL8B,IAAA,EAAM;AACR;AAEA,OAAO,MAAMC,qBAAA,GAAwBA,CAAA,KAAMnC,GAAA,CAAIC,kBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAO,KAA4D,MAAM,OAAO,CAAA;AAShF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,EAAE,OAAO,CAAA;IACzB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAUD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAgOlE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIvE,OAAO,KAA4D,MAAM,OAAO,CAAA;AAUhF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,EAAE,OAAO,CAAA;IACzB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAUD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAuOlE,CAAA"}