@payloadcms/ui 4.0.0-canary.27 → 4.0.0-canary.29

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 (191) hide show
  1. package/dist/elements/AppHeader/index.js +1 -1
  2. package/dist/elements/AppHeader/index.js.map +1 -1
  3. package/dist/elements/Autosave/index.d.ts.map +1 -1
  4. package/dist/elements/Autosave/index.js +2 -3
  5. package/dist/elements/Autosave/index.js.map +1 -1
  6. package/dist/elements/BulkUpload/AddFilesView/index.css +10 -4
  7. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  8. package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
  9. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  10. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  11. package/dist/elements/BulkUpload/FormsManager/index.js +2 -3
  12. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  13. package/dist/elements/Button/index.d.ts.map +1 -1
  14. package/dist/elements/Button/index.js +2 -0
  15. package/dist/elements/Button/index.js.map +1 -1
  16. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  17. package/dist/elements/CopyLocaleData/index.js +8 -9
  18. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  19. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  20. package/dist/elements/DeleteMany/index.js +2 -3
  21. package/dist/elements/DeleteMany/index.js.map +1 -1
  22. package/dist/elements/Dropzone/index.css +10 -4
  23. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  24. package/dist/elements/DuplicateDocument/index.js +2 -3
  25. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  26. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  27. package/dist/elements/EditMany/DrawerContent.js +2 -3
  28. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  29. package/dist/elements/FileManager/index.css +0 -30
  30. package/dist/elements/FileManager/index.d.ts.map +1 -1
  31. package/dist/elements/FileManager/index.js +379 -287
  32. package/dist/elements/FileManager/index.js.map +1 -1
  33. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  34. package/dist/elements/Hierarchy/MoveMany/index.js +2 -3
  35. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  36. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  37. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +2 -3
  38. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
  39. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  40. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +2 -3
  41. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  42. package/dist/elements/LivePreview/Window/index.js +1 -1
  43. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  44. package/dist/elements/Localizer/index.js +1 -1
  45. package/dist/elements/Localizer/index.js.map +1 -1
  46. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  47. package/dist/elements/PublishButton/ScheduleDrawer/index.js +8 -30
  48. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  49. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +1 -1
  50. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -1
  51. package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -1
  52. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  53. package/dist/elements/PublishButton/index.js +5 -6
  54. package/dist/elements/PublishButton/index.js.map +1 -1
  55. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  56. package/dist/elements/PublishMany/DrawerContent.js +2 -3
  57. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  58. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  59. package/dist/elements/RestoreMany/index.js +2 -3
  60. package/dist/elements/RestoreMany/index.js.map +1 -1
  61. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  62. package/dist/elements/SaveDraftButton/index.js +2 -3
  63. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  64. package/dist/elements/Status/index.d.ts.map +1 -1
  65. package/dist/elements/Status/index.js +2 -3
  66. package/dist/elements/Status/index.js.map +1 -1
  67. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  68. package/dist/elements/Table/OrderableTable.js +2 -3
  69. package/dist/elements/Table/OrderableTable.js.map +1 -1
  70. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  71. package/dist/elements/Table/RelationshipProvider/index.js +2 -3
  72. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  73. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  74. package/dist/elements/UnpublishButton/index.js +3 -4
  75. package/dist/elements/UnpublishButton/index.js.map +1 -1
  76. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  77. package/dist/elements/UnpublishMany/DrawerContent.js +2 -3
  78. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  79. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
  80. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
  81. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  82. package/dist/elements/Upload/index.css +39 -32
  83. package/dist/elements/Upload/index.d.ts.map +1 -1
  84. package/dist/elements/Upload/index.js +37 -99
  85. package/dist/elements/Upload/index.js.map +1 -1
  86. package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
  87. package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
  88. package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
  89. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
  90. package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
  91. package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
  92. package/dist/elements/Upload/useUploadFromUrl.js +201 -0
  93. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
  94. package/dist/elements/UploadDropzoneContent/index.css +31 -0
  95. package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
  96. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
  97. package/dist/elements/UploadDropzoneContent/index.js +62 -0
  98. package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
  99. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +1 -1
  100. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  101. package/dist/fields/Array/index.d.ts.map +1 -1
  102. package/dist/fields/Array/index.js +2 -3
  103. package/dist/fields/Array/index.js.map +1 -1
  104. package/dist/fields/Blocks/index.d.ts.map +1 -1
  105. package/dist/fields/Blocks/index.js +2 -3
  106. package/dist/fields/Blocks/index.js.map +1 -1
  107. package/dist/fields/FieldLabel/index.d.ts.map +1 -1
  108. package/dist/fields/FieldLabel/index.js +4 -5
  109. package/dist/fields/FieldLabel/index.js.map +1 -1
  110. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  111. package/dist/fields/Relationship/Input.js +2 -3
  112. package/dist/fields/Relationship/Input.js.map +1 -1
  113. package/dist/fields/Slug/index.d.ts.map +1 -1
  114. package/dist/fields/Slug/index.js +2 -3
  115. package/dist/fields/Slug/index.js.map +1 -1
  116. package/dist/fields/Upload/Input.d.ts.map +1 -1
  117. package/dist/fields/Upload/Input.js +46 -19
  118. package/dist/fields/Upload/Input.js.map +1 -1
  119. package/dist/fields/Upload/Input.spec.js +242 -0
  120. package/dist/fields/Upload/Input.spec.js.map +1 -0
  121. package/dist/fields/shared/index.d.ts +1 -1
  122. package/dist/fields/shared/index.d.ts.map +1 -1
  123. package/dist/fields/shared/index.js.map +1 -1
  124. package/dist/forms/Form/index.d.ts.map +1 -1
  125. package/dist/forms/Form/index.js +2 -3
  126. package/dist/forms/Form/index.js.map +1 -1
  127. package/dist/forms/NullifyField/index.d.ts.map +1 -1
  128. package/dist/forms/NullifyField/index.js +2 -3
  129. package/dist/forms/NullifyField/index.js.map +1 -1
  130. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  131. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -0
  132. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  133. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  134. package/dist/hooks/usePayloadAPI.js +2 -3
  135. package/dist/hooks/usePayloadAPI.js.map +1 -1
  136. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  137. package/dist/providers/DocumentInfo/index.js +2 -3
  138. package/dist/providers/DocumentInfo/index.js.map +1 -1
  139. package/dist/providers/Locale/index.d.ts +1 -5
  140. package/dist/providers/Locale/index.d.ts.map +1 -1
  141. package/dist/providers/Locale/index.js +61 -139
  142. package/dist/providers/Locale/index.js.map +1 -1
  143. package/dist/providers/Selection/index.d.ts.map +1 -1
  144. package/dist/providers/Selection/index.js +2 -3
  145. package/dist/providers/Selection/index.js.map +1 -1
  146. package/dist/providers/ServerFunctions/index.d.ts +5 -1
  147. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  148. package/dist/providers/ServerFunctions/index.js +15 -0
  149. package/dist/providers/ServerFunctions/index.js.map +1 -1
  150. package/dist/styles.css +1 -1
  151. package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
  152. package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
  153. package/dist/utilities/getFilesFromClipboard.js +49 -0
  154. package/dist/utilities/getFilesFromClipboard.js.map +1 -0
  155. package/dist/utilities/getHasScheduledPublish.d.ts +2 -3
  156. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -1
  157. package/dist/utilities/getHasScheduledPublish.js +2 -5
  158. package/dist/utilities/getHasScheduledPublish.js.map +1 -1
  159. package/dist/utilities/schedulePublishHandler.d.ts +8 -1
  160. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  161. package/dist/utilities/schedulePublishHandler.js +68 -4
  162. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  163. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  164. package/dist/utilities/serverFunctionRegistry.js +2 -1
  165. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  166. package/dist/utilities/slugify.d.ts.map +1 -1
  167. package/dist/utilities/slugify.js +1 -0
  168. package/dist/utilities/slugify.js.map +1 -1
  169. package/dist/views/API/index.client.d.ts.map +1 -1
  170. package/dist/views/API/index.client.js +2 -3
  171. package/dist/views/API/index.client.js.map +1 -1
  172. package/dist/views/Document/index.d.ts.map +1 -1
  173. package/dist/views/Document/index.js +1 -2
  174. package/dist/views/Document/index.js.map +1 -1
  175. package/dist/views/Edit/SetDocumentTitle/index.d.ts.map +1 -1
  176. package/dist/views/Edit/SetDocumentTitle/index.js +4 -1
  177. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  178. package/dist/views/Edit/index.d.ts.map +1 -1
  179. package/dist/views/Edit/index.js +3 -2
  180. package/dist/views/Edit/index.js.map +1 -1
  181. package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
  182. package/dist/views/Version/Default/SetStepNav.js +10 -13
  183. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  184. package/dist/views/Version/Default/index.d.ts.map +1 -1
  185. package/dist/views/Version/Default/index.js +12 -13
  186. package/dist/views/Version/Default/index.js.map +1 -1
  187. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.d.ts.map +1 -1
  188. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js +2 -3
  189. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js.map +1 -1
  190. package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
  191. package/package.json +4 -4
@@ -0,0 +1,10 @@
1
+ export type ClipboardPasteResult = {
2
+ files: FileList;
3
+ type: 'file';
4
+ } | {
5
+ type: 'url';
6
+ url: string;
7
+ };
8
+ export declare const getFilesFromClipboard: () => Promise<FileList | null>;
9
+ export declare const getFileOrUrlFromClipboard: () => Promise<ClipboardPasteResult | null>;
10
+ //# sourceMappingURL=getFilesFromClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFilesFromClipboard.d.ts","sourceRoot":"","sources":["../../src/utilities/getFilesFromClipboard.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AA6CnG,eAAO,MAAM,qBAAqB,QAAa,OAAO,CAAC,QAAQ,GAAG,IAAI,CAGrE,CAAA;AAED,eAAO,MAAM,yBAAyB,QAAa,OAAO,CAAC,oBAAoB,GAAG,IAAI,CACrE,CAAA"}
@@ -0,0 +1,49 @@
1
+ const readClipboard = async () => {
2
+ if (!navigator.clipboard?.read) {
3
+ return null;
4
+ }
5
+ const clipboardItems = await navigator.clipboard.read();
6
+ const dataTransfer = new DataTransfer();
7
+ // Real OS-level copies (address bar, "copy link", browser context menus) often expose the
8
+ // same URL under several text representations (text/plain, text/uri-list, text/html) rather
9
+ // than a single clean 'text/plain' entry, so every text/* type is a candidate.
10
+ const textCandidates = [];
11
+ for (const clipboardItem of clipboardItems) {
12
+ for (const type of clipboardItem.types) {
13
+ if (type.startsWith('text/')) {
14
+ const textBlob = await clipboardItem.getType(type);
15
+ const text = (await textBlob.text()).trim();
16
+ if (text) {
17
+ textCandidates.push(text);
18
+ }
19
+ continue;
20
+ }
21
+ const blob = await clipboardItem.getType(type);
22
+ const extension = type.split('/')[1] ?? 'bin';
23
+ const filename = `clipboard-${dataTransfer.items.length + 1}.${extension}`;
24
+ dataTransfer.items.add(new File([blob], filename, {
25
+ type
26
+ }));
27
+ }
28
+ }
29
+ if (dataTransfer.files.length > 0) {
30
+ return {
31
+ type: 'file',
32
+ files: dataTransfer.files
33
+ };
34
+ }
35
+ const urlCandidate = textCandidates.find(text => URL.canParse(text));
36
+ if (urlCandidate) {
37
+ return {
38
+ type: 'url',
39
+ url: urlCandidate
40
+ };
41
+ }
42
+ return null;
43
+ };
44
+ export const getFilesFromClipboard = async () => {
45
+ const result = await readClipboard();
46
+ return result?.type === 'file' ? result.files : null;
47
+ };
48
+ export const getFileOrUrlFromClipboard = async () => readClipboard();
49
+ //# sourceMappingURL=getFilesFromClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFilesFromClipboard.js","names":["readClipboard","navigator","clipboard","read","clipboardItems","dataTransfer","DataTransfer","textCandidates","clipboardItem","type","types","startsWith","textBlob","getType","text","trim","push","blob","extension","split","filename","items","length","add","File","files","urlCandidate","find","URL","canParse","url","getFilesFromClipboard","result","getFileOrUrlFromClipboard"],"sources":["../../src/utilities/getFilesFromClipboard.ts"],"sourcesContent":["export type ClipboardPasteResult = { files: FileList; type: 'file' } | { type: 'url'; url: string }\n\nconst readClipboard = async (): Promise<ClipboardPasteResult | null> => {\n if (!navigator.clipboard?.read) {\n return null\n }\n\n const clipboardItems = await navigator.clipboard.read()\n const dataTransfer = new DataTransfer()\n // Real OS-level copies (address bar, \"copy link\", browser context menus) often expose the\n // same URL under several text representations (text/plain, text/uri-list, text/html) rather\n // than a single clean 'text/plain' entry, so every text/* type is a candidate.\n const textCandidates: string[] = []\n\n for (const clipboardItem of clipboardItems) {\n for (const type of clipboardItem.types) {\n if (type.startsWith('text/')) {\n const textBlob = await clipboardItem.getType(type)\n const text = (await textBlob.text()).trim()\n if (text) {\n textCandidates.push(text)\n }\n continue\n }\n\n const blob = await clipboardItem.getType(type)\n const extension = type.split('/')[1] ?? 'bin'\n const filename = `clipboard-${dataTransfer.items.length + 1}.${extension}`\n\n dataTransfer.items.add(new File([blob], filename, { type }))\n }\n }\n\n if (dataTransfer.files.length > 0) {\n return { type: 'file', files: dataTransfer.files }\n }\n\n const urlCandidate = textCandidates.find((text) => URL.canParse(text))\n if (urlCandidate) {\n return { type: 'url', url: urlCandidate }\n }\n\n return null\n}\n\nexport const getFilesFromClipboard = async (): Promise<FileList | null> => {\n const result = await readClipboard()\n return result?.type === 'file' ? result.files : null\n}\n\nexport const getFileOrUrlFromClipboard = async (): Promise<ClipboardPasteResult | null> =>\n readClipboard()\n"],"mappings":"AAEA,MAAMA,aAAA,GAAgB,MAAAA,CAAA;EACpB,IAAI,CAACC,SAAA,CAAUC,SAAS,EAAEC,IAAA,EAAM;IAC9B,OAAO;EACT;EAEA,MAAMC,cAAA,GAAiB,MAAMH,SAAA,CAAUC,SAAS,CAACC,IAAI;EACrD,MAAME,YAAA,GAAe,IAAIC,YAAA;EACzB;EACA;EACA;EACA,MAAMC,cAAA,GAA2B,EAAE;EAEnC,KAAK,MAAMC,aAAA,IAAiBJ,cAAA,EAAgB;IAC1C,KAAK,MAAMK,IAAA,IAAQD,aAAA,CAAcE,KAAK,EAAE;MACtC,IAAID,IAAA,CAAKE,UAAU,CAAC,UAAU;QAC5B,MAAMC,QAAA,GAAW,MAAMJ,aAAA,CAAcK,OAAO,CAACJ,IAAA;QAC7C,MAAMK,IAAA,GAAO,CAAC,MAAMF,QAAA,CAASE,IAAI,EAAC,EAAGC,IAAI;QACzC,IAAID,IAAA,EAAM;UACRP,cAAA,CAAeS,IAAI,CAACF,IAAA;QACtB;QACA;MACF;MAEA,MAAMG,IAAA,GAAO,MAAMT,aAAA,CAAcK,OAAO,CAACJ,IAAA;MACzC,MAAMS,SAAA,GAAYT,IAAA,CAAKU,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI;MACxC,MAAMC,QAAA,GAAW,aAAaf,YAAA,CAAagB,KAAK,CAACC,MAAM,GAAG,KAAKJ,SAAA,EAAW;MAE1Eb,YAAA,CAAagB,KAAK,CAACE,GAAG,CAAC,IAAIC,IAAA,CAAK,CAACP,IAAA,CAAK,EAAEG,QAAA,EAAU;QAAEX;MAAK;IAC3D;EACF;EAEA,IAAIJ,YAAA,CAAaoB,KAAK,CAACH,MAAM,GAAG,GAAG;IACjC,OAAO;MAAEb,IAAA,EAAM;MAAQgB,KAAA,EAAOpB,YAAA,CAAaoB;IAAM;EACnD;EAEA,MAAMC,YAAA,GAAenB,cAAA,CAAeoB,IAAI,CAAEb,IAAA,IAASc,GAAA,CAAIC,QAAQ,CAACf,IAAA;EAChE,IAAIY,YAAA,EAAc;IAChB,OAAO;MAAEjB,IAAA,EAAM;MAAOqB,GAAA,EAAKJ;IAAa;EAC1C;EAEA,OAAO;AACT;AAEA,OAAO,MAAMK,qBAAA,GAAwB,MAAAA,CAAA;EACnC,MAAMC,MAAA,GAAS,MAAMhC,aAAA;EACrB,OAAOgC,MAAA,EAAQvB,IAAA,KAAS,SAASuB,MAAA,CAAOP,KAAK,GAAG;AAClD;AAEA,OAAO,MAAMQ,yBAAA,GAA4B,MAAAA,CAAA,KACvCjC,aAAA","ignoreList":[]}
@@ -1,12 +1,11 @@
1
- import type { Payload, SanitizedCollectionConfig, SanitizedGlobalConfig, User } from 'payload';
1
+ import type { Payload, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload';
2
2
  type Args = {
3
3
  collectionConfig?: SanitizedCollectionConfig;
4
4
  globalConfig?: SanitizedGlobalConfig;
5
5
  hasPublishPermission?: boolean;
6
6
  id?: number | string;
7
7
  payload: Payload;
8
- user: User;
9
8
  };
10
- export declare const getHasScheduledPublish: ({ id: idArg, collectionConfig, globalConfig, hasPublishPermission, payload, user, }: Args) => Promise<boolean>;
9
+ export declare const getHasScheduledPublish: ({ id: idArg, collectionConfig, globalConfig, hasPublishPermission, payload, }: Args) => Promise<boolean>;
11
10
  export {};
12
11
  //# sourceMappingURL=getHasScheduledPublish.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getHasScheduledPublish.d.ts","sourceRoot":"","sources":["../../src/utilities/getHasScheduledPublish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO9F,KAAK,IAAI,GAAG;IACV,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,eAAO,MAAM,sBAAsB,wFAOhC,IAAI,KAAG,OAAO,CAAC,OAAO,CA4BxB,CAAA"}
1
+ {"version":3,"file":"getHasScheduledPublish.d.ts","sourceRoot":"","sources":["../../src/utilities/getHasScheduledPublish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAOxF,KAAK,IAAI,GAAG;IACV,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,sBAAsB,kFAMhC,IAAI,KAAG,OAAO,CAAC,OAAO,CA0BxB,CAAA"}
@@ -6,8 +6,7 @@ export const getHasScheduledPublish = async ({
6
6
  collectionConfig,
7
7
  globalConfig,
8
8
  hasPublishPermission,
9
- payload,
10
- user
9
+ payload
11
10
  }) => {
12
11
  const entityConfig = collectionConfig || globalConfig;
13
12
  const id = sanitizeID(idArg);
@@ -20,10 +19,8 @@ export const getHasScheduledPublish = async ({
20
19
  try {
21
20
  const {
22
21
  totalDocs
23
- } = await payload.count({
22
+ } = await payload.db.count({
24
23
  collection: 'payload-jobs',
25
- overrideAccess: false,
26
- user,
27
24
  where: buildUpcomingScheduleWhere({
28
25
  id,
29
26
  collectionSlug,
@@ -1 +1 @@
1
- {"version":3,"file":"getHasScheduledPublish.js","names":["hasScheduledPublishEnabled","buildUpcomingScheduleWhere","sanitizeID","getHasScheduledPublish","id","idArg","collectionConfig","globalConfig","hasPublishPermission","payload","user","entityConfig","collectionSlug","slug","globalSlug","canSchedulePublish","Boolean","totalDocs","count","collection","overrideAccess","where"],"sources":["../../src/utilities/getHasScheduledPublish.ts"],"sourcesContent":["import type { Payload, SanitizedCollectionConfig, SanitizedGlobalConfig, User } from 'payload'\n\nimport { hasScheduledPublishEnabled } from 'payload/shared'\n\nimport { buildUpcomingScheduleWhere } from '../elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js'\nimport { sanitizeID } from './sanitizeID.js'\n\ntype Args = {\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n hasPublishPermission?: boolean\n id?: number | string\n payload: Payload\n user: User\n}\n\nexport const getHasScheduledPublish = async ({\n id: idArg,\n collectionConfig,\n globalConfig,\n hasPublishPermission,\n payload,\n user,\n}: Args): Promise<boolean> => {\n const entityConfig = collectionConfig || globalConfig\n const id = sanitizeID(idArg)\n const collectionSlug = collectionConfig?.slug\n const globalSlug = globalConfig?.slug\n\n const canSchedulePublish = Boolean(\n hasScheduledPublishEnabled(entityConfig) &&\n hasPublishPermission &&\n (globalSlug || (collectionSlug && id)),\n )\n\n if (!canSchedulePublish) {\n return false\n }\n\n try {\n const { totalDocs } = await payload.count({\n collection: 'payload-jobs',\n overrideAccess: false,\n user,\n where: buildUpcomingScheduleWhere({ id, collectionSlug, globalSlug }),\n })\n\n return totalDocs > 0\n } catch {\n return false\n }\n}\n"],"mappings":"AAEA,SAASA,0BAA0B,QAAQ;AAE3C,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,UAAU,QAAQ;AAW3B,OAAO,MAAMC,sBAAA,GAAyB,MAAAA,CAAO;EAC3CC,EAAA,EAAIC,KAAK;EACTC,gBAAgB;EAChBC,YAAY;EACZC,oBAAoB;EACpBC,OAAO;EACPC;AAAI,CACC;EACL,MAAMC,YAAA,GAAeL,gBAAA,IAAoBC,YAAA;EACzC,MAAMH,EAAA,GAAKF,UAAA,CAAWG,KAAA;EACtB,MAAMO,cAAA,GAAiBN,gBAAA,EAAkBO,IAAA;EACzC,MAAMC,UAAA,GAAaP,YAAA,EAAcM,IAAA;EAEjC,MAAME,kBAAA,GAAqBC,OAAA,CACzBhB,0BAAA,CAA2BW,YAAA,KACzBH,oBAAA,KACCM,UAAA,IAAeF,cAAA,IAAkBR,EAAE;EAGxC,IAAI,CAACW,kBAAA,EAAoB;IACvB,OAAO;EACT;EAEA,IAAI;IACF,MAAM;MAAEE;IAAS,CAAE,GAAG,MAAMR,OAAA,CAAQS,KAAK,CAAC;MACxCC,UAAA,EAAY;MACZC,cAAA,EAAgB;MAChBV,IAAA;MACAW,KAAA,EAAOpB,0BAAA,CAA2B;QAAEG,EAAA;QAAIQ,cAAA;QAAgBE;MAAW;IACrE;IAEA,OAAOG,SAAA,GAAY;EACrB,EAAE,MAAM;IACN,OAAO;EACT;AACF","ignoreList":[]}
1
+ {"version":3,"file":"getHasScheduledPublish.js","names":["hasScheduledPublishEnabled","buildUpcomingScheduleWhere","sanitizeID","getHasScheduledPublish","id","idArg","collectionConfig","globalConfig","hasPublishPermission","payload","entityConfig","collectionSlug","slug","globalSlug","canSchedulePublish","Boolean","totalDocs","db","count","collection","where"],"sources":["../../src/utilities/getHasScheduledPublish.ts"],"sourcesContent":["import type { Payload, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'\n\nimport { hasScheduledPublishEnabled } from 'payload/shared'\n\nimport { buildUpcomingScheduleWhere } from '../elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js'\nimport { sanitizeID } from './sanitizeID.js'\n\ntype Args = {\n collectionConfig?: SanitizedCollectionConfig\n globalConfig?: SanitizedGlobalConfig\n hasPublishPermission?: boolean\n id?: number | string\n payload: Payload\n}\n\nexport const getHasScheduledPublish = async ({\n id: idArg,\n collectionConfig,\n globalConfig,\n hasPublishPermission,\n payload,\n}: Args): Promise<boolean> => {\n const entityConfig = collectionConfig || globalConfig\n const id = sanitizeID(idArg)\n const collectionSlug = collectionConfig?.slug\n const globalSlug = globalConfig?.slug\n\n const canSchedulePublish = Boolean(\n hasScheduledPublishEnabled(entityConfig) &&\n hasPublishPermission &&\n (globalSlug || (collectionSlug && id)),\n )\n\n if (!canSchedulePublish) {\n return false\n }\n\n try {\n const { totalDocs } = await payload.db.count({\n collection: 'payload-jobs',\n where: buildUpcomingScheduleWhere({ id, collectionSlug, globalSlug }),\n })\n\n return totalDocs > 0\n } catch {\n return false\n }\n}\n"],"mappings":"AAEA,SAASA,0BAA0B,QAAQ;AAE3C,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,UAAU,QAAQ;AAU3B,OAAO,MAAMC,sBAAA,GAAyB,MAAAA,CAAO;EAC3CC,EAAA,EAAIC,KAAK;EACTC,gBAAgB;EAChBC,YAAY;EACZC,oBAAoB;EACpBC;AAAO,CACF;EACL,MAAMC,YAAA,GAAeJ,gBAAA,IAAoBC,YAAA;EACzC,MAAMH,EAAA,GAAKF,UAAA,CAAWG,KAAA;EACtB,MAAMM,cAAA,GAAiBL,gBAAA,EAAkBM,IAAA;EACzC,MAAMC,UAAA,GAAaN,YAAA,EAAcK,IAAA;EAEjC,MAAME,kBAAA,GAAqBC,OAAA,CACzBf,0BAAA,CAA2BU,YAAA,KACzBF,oBAAA,KACCK,UAAA,IAAeF,cAAA,IAAkBP,EAAE;EAGxC,IAAI,CAACU,kBAAA,EAAoB;IACvB,OAAO;EACT;EAEA,IAAI;IACF,MAAM;MAAEE;IAAS,CAAE,GAAG,MAAMP,OAAA,CAAQQ,EAAE,CAACC,KAAK,CAAC;MAC3CC,UAAA,EAAY;MACZC,KAAA,EAAOnB,0BAAA,CAA2B;QAAEG,EAAA;QAAIO,cAAA;QAAgBE;MAAW;IACrE;IAEA,OAAOG,SAAA,GAAY;EACrB,EAAE,MAAM;IACN,OAAO;EACT;AACF","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import { type SchedulePublishTaskInput, type ServerFunction } from 'payload';
1
+ import type { SchedulePublishTaskInput, ServerFunction } from 'payload';
2
+ import type { UpcomingEvent } from '../elements/PublishButton/ScheduleDrawer/types.js';
2
3
  export type SchedulePublishHandlerArgs = {
3
4
  date?: Date;
4
5
  /**
@@ -8,5 +9,11 @@ export type SchedulePublishHandlerArgs = {
8
9
  localeToPublish?: string;
9
10
  timezone?: string;
10
11
  } & Pick<SchedulePublishTaskInput, 'doc' | 'global' | 'type'>;
12
+ export type GetUpcomingScheduledPublishHandlerArgs = {
13
+ collectionSlug?: string;
14
+ globalSlug?: string;
15
+ id?: number | string;
16
+ };
17
+ export declare const getUpcomingScheduledPublishHandler: ServerFunction<GetUpcomingScheduledPublishHandlerArgs, Promise<UpcomingEvent[]>>;
11
18
  export declare const schedulePublishHandler: ServerFunction<SchedulePublishHandlerArgs>;
12
19
  //# sourceMappingURL=schedulePublishHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedulePublishHandler.d.ts","sourceRoot":"","sources":["../../src/utilities/schedulePublishHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,wBAAwB,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAE5F,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,IAAI,CAAC,wBAAwB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAA;AAE7D,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,0BAA0B,CAuD7E,CAAA"}
1
+ {"version":3,"file":"schedulePublishHandler.d.ts","sourceRoot":"","sources":["../../src/utilities/schedulePublishHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAA;AAKtF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,IAAI,CAAC,wBAAwB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAA;AAE7D,MAAM,MAAM,sCAAsC,GAAG;IACnD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,kCAAkC,EAAE,cAAc,CAC7D,sCAAsC,EACtC,OAAO,CAAC,aAAa,EAAE,CAAC,CAiDzB,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,0BAA0B,CAyD7E,CAAA"}
@@ -1,4 +1,62 @@
1
- import { canAccessAdmin } from 'payload';
1
+ import { canAccessAdmin, Forbidden } from 'payload';
2
+ import { hasScheduledPublishEnabled } from 'payload/shared';
3
+ import { buildUpcomingScheduleWhere } from '../elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js';
4
+ import { getDocumentPermissions } from './getDocumentPermissions.js';
5
+ export const getUpcomingScheduledPublishHandler = async ({
6
+ id,
7
+ collectionSlug,
8
+ globalSlug,
9
+ req
10
+ }) => {
11
+ const {
12
+ payload
13
+ } = req;
14
+ await canAccessAdmin({
15
+ req
16
+ });
17
+ const collectionConfig = collectionSlug ? payload.collections[collectionSlug]?.config : undefined;
18
+ const globalConfig = globalSlug ? payload.config.globals.find(({
19
+ slug
20
+ }) => slug === globalSlug) : undefined;
21
+ const entityConfig = collectionConfig || globalConfig;
22
+ const hasValidTarget = Boolean(entityConfig && hasScheduledPublishEnabled(entityConfig) && (collectionConfig && id !== undefined && !globalSlug || globalConfig && !collectionSlug));
23
+ if (!hasValidTarget) {
24
+ throw new Forbidden(req.t);
25
+ }
26
+ const {
27
+ hasPublishPermission
28
+ } = await getDocumentPermissions({
29
+ id,
30
+ collectionConfig,
31
+ data: {},
32
+ globalConfig,
33
+ req
34
+ });
35
+ if (!hasPublishPermission) {
36
+ throw new Forbidden(req.t);
37
+ }
38
+ const {
39
+ docs
40
+ } = await payload.db.find({
41
+ collection: 'payload-jobs',
42
+ limit: 0,
43
+ sort: 'waitUntil',
44
+ where: buildUpcomingScheduleWhere({
45
+ id,
46
+ collectionSlug,
47
+ globalSlug
48
+ })
49
+ });
50
+ return docs.map(job => ({
51
+ id: job.id,
52
+ input: {
53
+ type: job.input?.type === 'unpublish' ? 'unpublish' : 'publish',
54
+ locale: job.input?.locale,
55
+ timezone: job.input?.timezone
56
+ },
57
+ waitUntil: job.waitUntil
58
+ }));
59
+ };
2
60
  export const schedulePublishHandler = async ({
3
61
  type,
4
62
  date,
@@ -23,9 +81,15 @@ export const schedulePublishHandler = async ({
23
81
  collection: 'payload-jobs',
24
82
  req,
25
83
  where: {
26
- id: {
27
- equals: deleteID
28
- }
84
+ and: [{
85
+ id: {
86
+ equals: deleteID
87
+ }
88
+ }, {
89
+ taskSlug: {
90
+ equals: 'schedulePublish'
91
+ }
92
+ }]
29
93
  }
30
94
  });
31
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schedulePublishHandler.js","names":["canAccessAdmin","schedulePublishHandler","type","date","deleteID","doc","global","localeToPublish","req","timezone","i18n","payload","user","delete","collection","where","id","equals","jobs","queue","input","locale","task","waitUntil","err","error","value","relationTo","logger","message","t"],"sources":["../../src/utilities/schedulePublishHandler.ts"],"sourcesContent":["import { canAccessAdmin, type SchedulePublishTaskInput, type ServerFunction } from 'payload'\n\nexport type SchedulePublishHandlerArgs = {\n date?: Date\n /**\n * The job id to delete to remove a scheduled publish event\n */\n deleteID?: number | string\n localeToPublish?: string\n timezone?: string\n} & Pick<SchedulePublishTaskInput, 'doc' | 'global' | 'type'>\n\nexport const schedulePublishHandler: ServerFunction<SchedulePublishHandlerArgs> = async ({\n type,\n date,\n deleteID,\n doc,\n global,\n localeToPublish,\n req,\n timezone,\n}) => {\n const { i18n, payload, user } = req\n\n await canAccessAdmin({ req })\n\n try {\n if (deleteID) {\n await payload.delete({\n collection: 'payload-jobs',\n req,\n where: { id: { equals: deleteID } },\n })\n }\n\n await payload.jobs.queue({\n input: {\n type,\n doc,\n global,\n locale: localeToPublish,\n timezone,\n user: user.id,\n },\n task: 'schedulePublish',\n waitUntil: date,\n })\n } catch (err) {\n let error\n\n if (deleteID) {\n error = `Error deleting scheduled publish event with ID ${deleteID}`\n } else {\n error = `Error scheduling ${type} for `\n if (doc) {\n error += `document with ID ${doc.value} in collection ${doc.relationTo}`\n }\n }\n\n payload.logger.error({ err }, error)\n\n return {\n error,\n }\n }\n\n return { message: i18n.t('general:success') }\n}\n"],"mappings":"AAAA,SAASA,cAAc,QAA4D;AAYnF,OAAO,MAAMC,sBAAA,GAAqE,MAAAA,CAAO;EACvFC,IAAI;EACJC,IAAI;EACJC,QAAQ;EACRC,GAAG;EACHC,MAAM;EACNC,eAAe;EACfC,GAAG;EACHC;AAAQ,CACT;EACC,MAAM;IAAEC,IAAI;IAAEC,OAAO;IAAEC;EAAI,CAAE,GAAGJ,GAAA;EAEhC,MAAMR,cAAA,CAAe;IAAEQ;EAAI;EAE3B,IAAI;IACF,IAAIJ,QAAA,EAAU;MACZ,MAAMO,OAAA,CAAQE,MAAM,CAAC;QACnBC,UAAA,EAAY;QACZN,GAAA;QACAO,KAAA,EAAO;UAAEC,EAAA,EAAI;YAAEC,MAAA,EAAQb;UAAS;QAAE;MACpC;IACF;IAEA,MAAMO,OAAA,CAAQO,IAAI,CAACC,KAAK,CAAC;MACvBC,KAAA,EAAO;QACLlB,IAAA;QACAG,GAAA;QACAC,MAAA;QACAe,MAAA,EAAQd,eAAA;QACRE,QAAA;QACAG,IAAA,EAAMA,IAAA,CAAKI;MACb;MACAM,IAAA,EAAM;MACNC,SAAA,EAAWpB;IACb;EACF,EAAE,OAAOqB,GAAA,EAAK;IACZ,IAAIC,KAAA;IAEJ,IAAIrB,QAAA,EAAU;MACZqB,KAAA,GAAQ,kDAAkDrB,QAAA,EAAU;IACtE,OAAO;MACLqB,KAAA,GAAQ,oBAAoBvB,IAAA,OAAW;MACvC,IAAIG,GAAA,EAAK;QACPoB,KAAA,IAAS,oBAAoBpB,GAAA,CAAIqB,KAAK,kBAAkBrB,GAAA,CAAIsB,UAAU,EAAE;MAC1E;IACF;IAEAhB,OAAA,CAAQiB,MAAM,CAACH,KAAK,CAAC;MAAED;IAAI,GAAGC,KAAA;IAE9B,OAAO;MACLA;IACF;EACF;EAEA,OAAO;IAAEI,OAAA,EAASnB,IAAA,CAAKoB,CAAC,CAAC;EAAmB;AAC9C","ignoreList":[]}
1
+ {"version":3,"file":"schedulePublishHandler.js","names":["canAccessAdmin","Forbidden","hasScheduledPublishEnabled","buildUpcomingScheduleWhere","getDocumentPermissions","getUpcomingScheduledPublishHandler","id","collectionSlug","globalSlug","req","payload","collectionConfig","collections","config","undefined","globalConfig","globals","find","slug","entityConfig","hasValidTarget","Boolean","t","hasPublishPermission","data","docs","db","collection","limit","sort","where","map","job","input","type","locale","timezone","waitUntil","schedulePublishHandler","date","deleteID","doc","global","localeToPublish","i18n","user","delete","and","equals","taskSlug","jobs","queue","task","err","error","value","relationTo","logger","message"],"sources":["../../src/utilities/schedulePublishHandler.ts"],"sourcesContent":["import type { SchedulePublishTaskInput, ServerFunction } from 'payload'\n\nimport { canAccessAdmin, Forbidden } from 'payload'\nimport { hasScheduledPublishEnabled } from 'payload/shared'\n\nimport type { UpcomingEvent } from '../elements/PublishButton/ScheduleDrawer/types.js'\n\nimport { buildUpcomingScheduleWhere } from '../elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js'\nimport { getDocumentPermissions } from './getDocumentPermissions.js'\n\nexport type SchedulePublishHandlerArgs = {\n date?: Date\n /**\n * The job id to delete to remove a scheduled publish event\n */\n deleteID?: number | string\n localeToPublish?: string\n timezone?: string\n} & Pick<SchedulePublishTaskInput, 'doc' | 'global' | 'type'>\n\nexport type GetUpcomingScheduledPublishHandlerArgs = {\n collectionSlug?: string\n globalSlug?: string\n id?: number | string\n}\n\nexport const getUpcomingScheduledPublishHandler: ServerFunction<\n GetUpcomingScheduledPublishHandlerArgs,\n Promise<UpcomingEvent[]>\n> = async ({ id, collectionSlug, globalSlug, req }) => {\n const { payload } = req\n\n await canAccessAdmin({ req })\n\n const collectionConfig = collectionSlug ? payload.collections[collectionSlug]?.config : undefined\n const globalConfig = globalSlug\n ? payload.config.globals.find(({ slug }) => slug === globalSlug)\n : undefined\n const entityConfig = collectionConfig || globalConfig\n const hasValidTarget = Boolean(\n entityConfig &&\n hasScheduledPublishEnabled(entityConfig) &&\n ((collectionConfig && id !== undefined && !globalSlug) || (globalConfig && !collectionSlug)),\n )\n\n if (!hasValidTarget) {\n throw new Forbidden(req.t)\n }\n\n const { hasPublishPermission } = await getDocumentPermissions({\n id,\n collectionConfig,\n data: {},\n globalConfig,\n req,\n })\n\n if (!hasPublishPermission) {\n throw new Forbidden(req.t)\n }\n\n const { docs } = await payload.db.find<UpcomingEvent>({\n collection: 'payload-jobs',\n limit: 0,\n sort: 'waitUntil',\n where: buildUpcomingScheduleWhere({ id, collectionSlug, globalSlug }),\n })\n\n return docs.map((job) => ({\n id: job.id,\n input: {\n type: job.input?.type === 'unpublish' ? 'unpublish' : 'publish',\n locale: job.input?.locale,\n timezone: job.input?.timezone,\n },\n waitUntil: job.waitUntil,\n }))\n}\n\nexport const schedulePublishHandler: ServerFunction<SchedulePublishHandlerArgs> = async ({\n type,\n date,\n deleteID,\n doc,\n global,\n localeToPublish,\n req,\n timezone,\n}) => {\n const { i18n, payload, user } = req\n\n await canAccessAdmin({ req })\n\n try {\n if (deleteID) {\n await payload.delete({\n collection: 'payload-jobs',\n req,\n where: {\n and: [{ id: { equals: deleteID } }, { taskSlug: { equals: 'schedulePublish' } }],\n },\n })\n }\n\n await payload.jobs.queue({\n input: {\n type,\n doc,\n global,\n locale: localeToPublish,\n timezone,\n user: user.id,\n },\n task: 'schedulePublish',\n waitUntil: date,\n })\n } catch (err) {\n let error\n\n if (deleteID) {\n error = `Error deleting scheduled publish event with ID ${deleteID}`\n } else {\n error = `Error scheduling ${type} for `\n if (doc) {\n error += `document with ID ${doc.value} in collection ${doc.relationTo}`\n }\n }\n\n payload.logger.error({ err }, error)\n\n return {\n error,\n }\n }\n\n return { message: i18n.t('general:success') }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"serverFunctionRegistry.d.ts","sourceRoot":"","sources":["../../src/utilities/serverFunctionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAe7C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAc1E,CAAA"}
1
+ {"version":3,"file":"serverFunctionRegistry.d.ts","sourceRoot":"","sources":["../../src/utilities/serverFunctionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAkB7C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAe1E,CAAA"}
@@ -7,7 +7,7 @@ import { renderListHandler } from '../views/List/handleServerFunction.js';
7
7
  import { buildFormStateHandler } from './buildFormState.js';
8
8
  import { buildTableStateHandler } from './buildTableState.js';
9
9
  import { copyDataFromLocaleHandler } from './copyDataFromLocale.js';
10
- import { schedulePublishHandler } from './schedulePublishHandler.js';
10
+ import { getUpcomingScheduledPublishHandler, schedulePublishHandler } from './schedulePublishHandler.js';
11
11
  import { slugifyHandler } from './slugify.js';
12
12
  import { switchLanguageHandler } from './switchLanguageHandler.js';
13
13
  /**
@@ -29,6 +29,7 @@ export const sharedServerFunctions = {
29
29
  'copy-data-from-locale': copyDataFromLocaleHandler,
30
30
  'form-state': buildFormStateHandler,
31
31
  'get-default-layout': getDefaultLayoutHandler,
32
+ 'get-upcoming-scheduled-publish': getUpcomingScheduledPublishHandler,
32
33
  'render-document': renderDocumentHandler,
33
34
  'render-document-slots': renderDocumentSlotsHandler,
34
35
  'render-field': _internal_renderFieldHandler,
@@ -1 +1 @@
1
- {"version":3,"file":"serverFunctionRegistry.js","names":["renderTabHandler","_internal_renderFieldHandler","getDefaultLayoutHandler","renderWidgetHandler","renderDocumentHandler","renderDocumentSlotsHandler","renderListHandler","buildFormStateHandler","buildTableStateHandler","copyDataFromLocaleHandler","schedulePublishHandler","slugifyHandler","switchLanguageHandler","sharedServerFunctions","slugify"],"sources":["../../src/utilities/serverFunctionRegistry.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\n\nimport { renderTabHandler } from '../elements/Nav/SidebarTabs/renderTabServerFn.js'\nimport { _internal_renderFieldHandler } from '../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js'\nimport { getDefaultLayoutHandler, renderWidgetHandler } from '../views/Dashboard/serverFunctions.js'\nimport { renderDocumentHandler } from '../views/Document/handleServerFunction.js'\nimport { renderDocumentSlotsHandler } from '../views/Document/renderDocumentSlots.js'\nimport { renderListHandler } from '../views/List/handleServerFunction.js'\nimport { buildFormStateHandler } from './buildFormState.js'\nimport { buildTableStateHandler } from './buildTableState.js'\nimport { copyDataFromLocaleHandler } from './copyDataFromLocale.js'\nimport { schedulePublishHandler } from './schedulePublishHandler.js'\nimport { slugifyHandler } from './slugify.js'\nimport { switchLanguageHandler } from './switchLanguageHandler.js'\n\n/**\n * The complete, framework-agnostic set of Payload server functions.\n *\n * Every adapter (`@payloadcms/next`, `@payloadcms/tanstack-start`) dispatches\n * from this single registry via `createServerFunctionHandler`, so a handler\n * added here reaches every framework and the adapter lists can't drift.\n *\n * Handlers may return values containing React elements (e.g. `customComponents`\n * inside form state, the `Document` / `List` nodes from render-document /\n * render-list, the render-field / render-widget output). Adapters ship those\n * over the wire as RSC payloads: Next.js does this natively, while the TanStack\n * Start adapter passes a `transformResult` (`serializeForRsc`) to\n * `createServerFunctionHandler` that converts elements into\n * `renderServerComponent` handles.\n */\nexport const sharedServerFunctions: Record<string, ServerFunction<any, any>> = {\n 'copy-data-from-locale': copyDataFromLocaleHandler,\n 'form-state': buildFormStateHandler,\n 'get-default-layout': getDefaultLayoutHandler,\n 'render-document': renderDocumentHandler,\n 'render-document-slots': renderDocumentSlotsHandler,\n 'render-field': _internal_renderFieldHandler,\n 'render-list': renderListHandler,\n 'render-tab': renderTabHandler,\n 'render-widget': renderWidgetHandler,\n 'schedule-publish': schedulePublishHandler,\n slugify: slugifyHandler,\n 'switch-language': switchLanguageHandler,\n 'table-state': buildTableStateHandler,\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ;AACjC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,uBAAuB,EAAEC,mBAAmB,QAAQ;AAC7D,SAASC,qBAAqB,QAAQ;AACtC,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,sBAAsB,QAAQ;AACvC,SAASC,cAAc,QAAQ;AAC/B,SAASC,qBAAqB,QAAQ;AAEtC;;;;;;;;;;;;;;;AAeA,OAAO,MAAMC,qBAAA,GAAkE;EAC7E,yBAAyBJ,yBAAA;EACzB,cAAcF,qBAAA;EACd,sBAAsBL,uBAAA;EACtB,mBAAmBE,qBAAA;EACnB,yBAAyBC,0BAAA;EACzB,gBAAgBJ,4BAAA;EAChB,eAAeK,iBAAA;EACf,cAAcN,gBAAA;EACd,iBAAiBG,mBAAA;EACjB,oBAAoBO,sBAAA;EACpBI,OAAA,EAASH,cAAA;EACT,mBAAmBC,qBAAA;EACnB,eAAeJ;AACjB","ignoreList":[]}
1
+ {"version":3,"file":"serverFunctionRegistry.js","names":["renderTabHandler","_internal_renderFieldHandler","getDefaultLayoutHandler","renderWidgetHandler","renderDocumentHandler","renderDocumentSlotsHandler","renderListHandler","buildFormStateHandler","buildTableStateHandler","copyDataFromLocaleHandler","getUpcomingScheduledPublishHandler","schedulePublishHandler","slugifyHandler","switchLanguageHandler","sharedServerFunctions","slugify"],"sources":["../../src/utilities/serverFunctionRegistry.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\n\nimport { renderTabHandler } from '../elements/Nav/SidebarTabs/renderTabServerFn.js'\nimport { _internal_renderFieldHandler } from '../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js'\nimport { getDefaultLayoutHandler, renderWidgetHandler } from '../views/Dashboard/serverFunctions.js'\nimport { renderDocumentHandler } from '../views/Document/handleServerFunction.js'\nimport { renderDocumentSlotsHandler } from '../views/Document/renderDocumentSlots.js'\nimport { renderListHandler } from '../views/List/handleServerFunction.js'\nimport { buildFormStateHandler } from './buildFormState.js'\nimport { buildTableStateHandler } from './buildTableState.js'\nimport { copyDataFromLocaleHandler } from './copyDataFromLocale.js'\nimport {\n getUpcomingScheduledPublishHandler,\n schedulePublishHandler,\n} from './schedulePublishHandler.js'\nimport { slugifyHandler } from './slugify.js'\nimport { switchLanguageHandler } from './switchLanguageHandler.js'\n\n/**\n * The complete, framework-agnostic set of Payload server functions.\n *\n * Every adapter (`@payloadcms/next`, `@payloadcms/tanstack-start`) dispatches\n * from this single registry via `createServerFunctionHandler`, so a handler\n * added here reaches every framework and the adapter lists can't drift.\n *\n * Handlers may return values containing React elements (e.g. `customComponents`\n * inside form state, the `Document` / `List` nodes from render-document /\n * render-list, the render-field / render-widget output). Adapters ship those\n * over the wire as RSC payloads: Next.js does this natively, while the TanStack\n * Start adapter passes a `transformResult` (`serializeForRsc`) to\n * `createServerFunctionHandler` that converts elements into\n * `renderServerComponent` handles.\n */\nexport const sharedServerFunctions: Record<string, ServerFunction<any, any>> = {\n 'copy-data-from-locale': copyDataFromLocaleHandler,\n 'form-state': buildFormStateHandler,\n 'get-default-layout': getDefaultLayoutHandler,\n 'get-upcoming-scheduled-publish': getUpcomingScheduledPublishHandler,\n 'render-document': renderDocumentHandler,\n 'render-document-slots': renderDocumentSlotsHandler,\n 'render-field': _internal_renderFieldHandler,\n 'render-list': renderListHandler,\n 'render-tab': renderTabHandler,\n 'render-widget': renderWidgetHandler,\n 'schedule-publish': schedulePublishHandler,\n slugify: slugifyHandler,\n 'switch-language': switchLanguageHandler,\n 'table-state': buildTableStateHandler,\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ;AACjC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,uBAAuB,EAAEC,mBAAmB,QAAQ;AAC7D,SAASC,qBAAqB,QAAQ;AACtC,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,yBAAyB,QAAQ;AAC1C,SACEC,kCAAkC,EAClCC,sBAAsB,QACjB;AACP,SAASC,cAAc,QAAQ;AAC/B,SAASC,qBAAqB,QAAQ;AAEtC;;;;;;;;;;;;;;;AAeA,OAAO,MAAMC,qBAAA,GAAkE;EAC7E,yBAAyBL,yBAAA;EACzB,cAAcF,qBAAA;EACd,sBAAsBL,uBAAA;EACtB,kCAAkCQ,kCAAA;EAClC,mBAAmBN,qBAAA;EACnB,yBAAyBC,0BAAA;EACzB,gBAAgBJ,4BAAA;EAChB,eAAeK,iBAAA;EACf,cAAcN,gBAAA;EACd,iBAAiBG,mBAAA;EACjB,oBAAoBQ,sBAAA;EACpBI,OAAA,EAASH,cAAA;EACT,mBAAmBC,qBAAA;EACnB,eAAeL;AACjB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../src/utilities/slugify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAE/B,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CACzC,yBAAyB,EACzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAkF7B,CAAA"}
1
+ {"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../src/utilities/slugify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAE/B,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CACzC,yBAAyB,EACzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAqF7B,CAAA"}
@@ -53,6 +53,7 @@ export const slugifyHandler = async args => {
53
53
  // a row-filtered (`Where`) result is treated as not allowed, since scoping the probe to readable
54
54
  // rows would break uniqueness.
55
55
  const canRead = await executeAccess({
56
+ slug: collectionConfig.slug,
56
57
  disableErrors: true,
57
58
  req
58
59
  }, collectionConfig.access.read);
@@ -1 +1 @@
1
- {"version":3,"file":"slugify.js","names":["executeAccess","getFieldByPath","getSlugFallbackValue","getUniqueFieldValue","hasDraftsEnabled","UnauthorizedError","slugify","defaultSlugify","slugifyHandler","args","id","collectionSlug","data","globalSlug","locale","path","req","valueToSlugify","user","docConfig","payload","collections","config","globals","find","g","slug","Error","field","fields","flattenedFields","customSlugify","custom","undefined","result","collectionConfig","type","canRead","disableErrors","access","read","localeToScope","localized","excludeId","collection","draftsEnabled","name","value"],"sources":["../../src/utilities/slugify.ts"],"sourcesContent":["import type { Slugify } from 'payload/shared'\n\nimport {\n executeAccess,\n getFieldByPath,\n getSlugFallbackValue,\n getUniqueFieldValue,\n hasDraftsEnabled,\n type ServerFunction,\n type SlugifyServerFunctionArgs,\n UnauthorizedError,\n} from 'payload'\nimport { slugify as defaultSlugify } from 'payload/shared'\n\n/**\n * This server function is directly related to the {@link https://payloadcms.com/docs/fields/slug | Slug Field}.\n * This is a server function that is used to invoke the user's custom slugify function from the client.\n * This pattern is required, as there is no other way for us to pass their function across the client-server boundary.\n * - Not through props\n * - Not from a server function defined within a server component (see below)\n * When a server function contains non-serializable data within its closure, it gets passed through the boundary (and breaks).\n * The only way to pass server functions to the client (that contain non-serializable data) is if it is globally defined.\n * But we also cannot define this function alongside the server component, as we will not have access to their custom slugify function.\n * See `ServerFunctionsProvider` for more details.\n */\nexport const slugifyHandler: ServerFunction<\n SlugifyServerFunctionArgs,\n Promise<ReturnType<Slugify>>\n> = async (args) => {\n const { id, collectionSlug, data, globalSlug, locale, path, req, valueToSlugify } = args\n\n if (!req.user) {\n throw new UnauthorizedError()\n }\n\n const docConfig = collectionSlug\n ? req.payload.collections[collectionSlug]?.config\n : globalSlug\n ? req.payload.config.globals.find((g) => g.slug === globalSlug)\n : null\n\n if (!docConfig) {\n throw new Error()\n }\n\n const { field } = getFieldByPath({\n config: req.payload.config,\n fields: docConfig.flattenedFields,\n path,\n })\n\n const customSlugify = (\n typeof field?.custom?.slugify === 'function' ? field.custom.slugify : undefined\n ) as Slugify\n\n const slugify = (valueToSlugify: unknown) =>\n customSlugify\n ? customSlugify({ data, req, valueToSlugify })\n : defaultSlugify(valueToSlugify as string)\n\n const result = await slugify(valueToSlugify)\n\n const collectionConfig = collectionSlug ? req.payload.collections[collectionSlug]?.config : null\n\n // Uniqueness dedupe only applies to a collection's slug field. Globals have no collection to\n // dedupe against, so their result is returned as-is.\n if (!collectionConfig || !field || field.type !== 'slug' || !('name' in field)) {\n return result\n }\n\n // Probing reads across the whole collection with the raw db, so require unrestricted read access —\n // a row-filtered (`Where`) result is treated as not allowed, since scoping the probe to readable\n // rows would break uniqueness.\n const canRead = await executeAccess({ disableErrors: true, req }, collectionConfig.access.read)\n\n if (canRead !== true) {\n return result\n }\n\n // A localized slug is unique per-locale, so scope the probe to the current locale — otherwise it\n // dedupes against the default locale and can hand back a colliding value. The client passes the\n // active admin locale; fall back to the request's own locale.\n const localeToScope = field.localized ? (locale ?? req.locale ?? undefined) : undefined\n\n // The current doc is excluded so a regenerate can reuse its own value rather than bump past it.\n const excludeId = typeof id === 'string' || typeof id === 'number' ? id : undefined\n\n // A source resolved to a value: dedupe it the same way the next save would, so the generate button\n // can't hand back a slug that's already taken. With no source, return the `<singular>-N` fallback.\n if (result) {\n return getUniqueFieldValue({\n id: excludeId,\n collection: collectionConfig.slug,\n draftsEnabled: hasDraftsEnabled(collectionConfig),\n field: field.name,\n locale: localeToScope,\n req,\n value: result,\n })\n }\n\n return getSlugFallbackValue({\n id: excludeId,\n collection: collectionConfig,\n field: field.name,\n locale: localeToScope,\n req,\n slugify,\n })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"slugify.js","names":["executeAccess","getFieldByPath","getSlugFallbackValue","getUniqueFieldValue","hasDraftsEnabled","UnauthorizedError","slugify","defaultSlugify","slugifyHandler","args","id","collectionSlug","data","globalSlug","locale","path","req","valueToSlugify","user","docConfig","payload","collections","config","globals","find","g","slug","Error","field","fields","flattenedFields","customSlugify","custom","undefined","result","collectionConfig","type","canRead","disableErrors","access","read","localeToScope","localized","excludeId","collection","draftsEnabled","name","value"],"sources":["../../src/utilities/slugify.ts"],"sourcesContent":["import type { Slugify } from 'payload/shared'\n\nimport {\n executeAccess,\n getFieldByPath,\n getSlugFallbackValue,\n getUniqueFieldValue,\n hasDraftsEnabled,\n type ServerFunction,\n type SlugifyServerFunctionArgs,\n UnauthorizedError,\n} from 'payload'\nimport { slugify as defaultSlugify } from 'payload/shared'\n\n/**\n * This server function is directly related to the {@link https://payloadcms.com/docs/fields/slug | Slug Field}.\n * This is a server function that is used to invoke the user's custom slugify function from the client.\n * This pattern is required, as there is no other way for us to pass their function across the client-server boundary.\n * - Not through props\n * - Not from a server function defined within a server component (see below)\n * When a server function contains non-serializable data within its closure, it gets passed through the boundary (and breaks).\n * The only way to pass server functions to the client (that contain non-serializable data) is if it is globally defined.\n * But we also cannot define this function alongside the server component, as we will not have access to their custom slugify function.\n * See `ServerFunctionsProvider` for more details.\n */\nexport const slugifyHandler: ServerFunction<\n SlugifyServerFunctionArgs,\n Promise<ReturnType<Slugify>>\n> = async (args) => {\n const { id, collectionSlug, data, globalSlug, locale, path, req, valueToSlugify } = args\n\n if (!req.user) {\n throw new UnauthorizedError()\n }\n\n const docConfig = collectionSlug\n ? req.payload.collections[collectionSlug]?.config\n : globalSlug\n ? req.payload.config.globals.find((g) => g.slug === globalSlug)\n : null\n\n if (!docConfig) {\n throw new Error()\n }\n\n const { field } = getFieldByPath({\n config: req.payload.config,\n fields: docConfig.flattenedFields,\n path,\n })\n\n const customSlugify = (\n typeof field?.custom?.slugify === 'function' ? field.custom.slugify : undefined\n ) as Slugify\n\n const slugify = (valueToSlugify: unknown) =>\n customSlugify\n ? customSlugify({ data, req, valueToSlugify })\n : defaultSlugify(valueToSlugify as string)\n\n const result = await slugify(valueToSlugify)\n\n const collectionConfig = collectionSlug ? req.payload.collections[collectionSlug]?.config : null\n\n // Uniqueness dedupe only applies to a collection's slug field. Globals have no collection to\n // dedupe against, so their result is returned as-is.\n if (!collectionConfig || !field || field.type !== 'slug' || !('name' in field)) {\n return result\n }\n\n // Probing reads across the whole collection with the raw db, so require unrestricted read access —\n // a row-filtered (`Where`) result is treated as not allowed, since scoping the probe to readable\n // rows would break uniqueness.\n const canRead = await executeAccess(\n { slug: collectionConfig.slug, disableErrors: true, req },\n collectionConfig.access.read,\n )\n\n if (canRead !== true) {\n return result\n }\n\n // A localized slug is unique per-locale, so scope the probe to the current locale — otherwise it\n // dedupes against the default locale and can hand back a colliding value. The client passes the\n // active admin locale; fall back to the request's own locale.\n const localeToScope = field.localized ? (locale ?? req.locale ?? undefined) : undefined\n\n // The current doc is excluded so a regenerate can reuse its own value rather than bump past it.\n const excludeId = typeof id === 'string' || typeof id === 'number' ? id : undefined\n\n // A source resolved to a value: dedupe it the same way the next save would, so the generate button\n // can't hand back a slug that's already taken. With no source, return the `<singular>-N` fallback.\n if (result) {\n return getUniqueFieldValue({\n id: excludeId,\n collection: collectionConfig.slug,\n draftsEnabled: hasDraftsEnabled(collectionConfig),\n field: field.name,\n locale: localeToScope,\n req,\n value: result,\n })\n }\n\n return getSlugFallbackValue({\n id: excludeId,\n collection: collectionConfig,\n field: field.name,\n locale: localeToScope,\n req,\n slugify,\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/views/API/index.client.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAiB9B,OAAO,aAAa,CAAA;AAKpB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAkPjC,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/views/API/index.client.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAiB9B,OAAO,aAAa,CAAA;AAKpB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAmPjC,CAAA"}
@@ -34,9 +34,8 @@ export const APIViewClient = () => {
34
34
  i18n,
35
35
  t
36
36
  } = useTranslation();
37
- const {
38
- code
39
- } = useLocale();
37
+ const currentLocale = useLocale();
38
+ const code = currentLocale?.code;
40
39
  const {
41
40
  config: {
42
41
  defaultDepth,
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","names":["formatAdminURL","hasDraftsEnabled","React","toast","Button","CodeEditor","CodeEditorLazy","CheckboxField","NumberField","TextInput","Form","MinimizeMaximizeIcon","NewTabIcon","useConfig","useDocumentInfo","useLocale","useSearchParams","useTranslation","SetDocumentStepNav","LocaleSelector","baseClass","APIViewClient","id","collectionSlug","globalSlug","initialData","isTrashed","searchParams","i18n","t","code","config","defaultDepth","localization","routes","api","apiRoute","serverURL","getEntityConfig","collectionConfig","globalConfig","localeOptions","locales","map","locale","label","value","draftsEnabled","docEndpoint","undefined","data","setData","useState","draft","setDraft","get","setLocale","depth","setDepth","toString","authenticated","setAuthenticated","fullscreen","setFullscreen","origin","setOrigin","jsonString","useMemo","JSON","stringify","recalculatedHeightAt","setRecalculatedHeightAt","useEffect","count","window","location","trashParam","deletedAt","params","URLSearchParams","String","trash","fetchURL","path","fetchData","res","fetch","credentials","headers","language","method","json","error","console","_jsxs","className","filter","Boolean","join","_jsx","globalLabel","pluralLabel","labels","plural","useAsTitle","admin","view","initialState","initialValue","valid","Number","onChange","field","name","step","max","min","htmlAttributes","readOnly","buttonStyle","el","icon","size","margin","newTab","url","isMinimized","onClick","defaultLanguage","height","options","fixedOverflowWidgets","folding","lineNumbers","stickyScroll","enabled","wordWrap"],"sources":["../../../src/views/API/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { formatAdminURL, hasDraftsEnabled } from 'payload/shared'\nimport * as React from 'react'\nimport { toast } from 'sonner'\n\nimport { Button } from '../../elements/Button/index.js'\nimport { CodeEditor as CodeEditorLazy } from '../../elements/CodeEditor/index.js'\nimport { CheckboxField } from '../../fields/Checkbox/index.js'\nimport { NumberField } from '../../fields/Number/index.js'\nimport { TextInput } from '../../fields/Text/Input.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { MinimizeMaximizeIcon } from '../../icons/MinimizeMaximize/index.js'\nimport { NewTabIcon } from '../../icons/NewTab/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useSearchParams } from '../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { SetDocumentStepNav } from '../../views/Edit/SetDocumentStepNav/index.js'\nimport './index.css'\nimport { LocaleSelector } from './LocaleSelector/index.js'\n\nconst baseClass = 'query-inspector'\n\nexport const APIViewClient: React.FC = () => {\n const { id, collectionSlug, globalSlug, initialData, isTrashed } = useDocumentInfo()\n\n const searchParams = useSearchParams()\n const { i18n, t } = useTranslation()\n const { code } = useLocale()\n\n const {\n config: {\n defaultDepth,\n localization,\n routes: { api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n const localeOptions =\n localization &&\n localization.locales.map((locale) => ({ label: locale.label, value: locale.code }))\n\n let draftsEnabled: boolean = false\n let docEndpoint: `/${string}` = undefined\n\n if (collectionConfig) {\n draftsEnabled = hasDraftsEnabled(collectionConfig)\n docEndpoint = `/${collectionSlug}/${id}`\n }\n\n if (globalConfig) {\n draftsEnabled = hasDraftsEnabled(globalConfig)\n docEndpoint = `/globals/${globalSlug}`\n }\n\n const [data, setData] = React.useState<any>(initialData)\n const [draft, setDraft] = React.useState<boolean>(searchParams.get('draft') === 'true')\n const [locale, setLocale] = React.useState<string>(searchParams?.get('locale') || code)\n const [depth, setDepth] = React.useState<string>(\n searchParams.get('depth') || defaultDepth.toString(),\n )\n const [authenticated, setAuthenticated] = React.useState<boolean>(true)\n const [fullscreen, setFullscreen] = React.useState<boolean>(false)\n const [origin, setOrigin] = React.useState<string>(serverURL || '')\n\n const jsonString = React.useMemo(\n () => (data === undefined ? '' : JSON.stringify(data, null, 2)),\n [data],\n )\n\n // readOnly editors never fire onChange, so bump a counter to re-fit height on data change\n const [recalculatedHeightAt, setRecalculatedHeightAt] = React.useState(0)\n React.useEffect(() => {\n setRecalculatedHeightAt((count) => count + 1)\n }, [jsonString])\n\n // Set the origin to the window.location.origin in useEffect to avoid hydration errors\n React.useEffect(() => {\n if (!serverURL) {\n setOrigin(window.location.origin)\n }\n }, [serverURL])\n\n const trashParam = typeof initialData?.deletedAt === 'string'\n\n const params = new URLSearchParams({\n depth,\n draft: String(draft),\n locale,\n trash: trashParam ? 'true' : 'false',\n }).toString()\n\n const fetchURL = formatAdminURL({\n apiRoute,\n path: `${docEndpoint}?${params}`,\n serverURL: origin,\n })\n\n React.useEffect(() => {\n const fetchData = async () => {\n try {\n const res = await fetch(fetchURL, {\n credentials: authenticated ? 'include' : 'omit',\n headers: {\n 'Accept-Language': i18n.language,\n },\n method: 'GET',\n })\n\n try {\n const json = await res.json()\n setData(json)\n } catch (error) {\n toast.error('Error parsing response')\n console.error(error) // eslint-disable-line no-console\n }\n } catch (error) {\n toast.error('Error making request')\n console.error(error) // eslint-disable-line no-console\n }\n }\n\n void fetchData()\n }, [i18n.language, fetchURL, authenticated])\n\n return (\n <div\n className={[baseClass, fullscreen && `${baseClass}--fullscreen`].filter(Boolean).join(' ')}\n >\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalLabel={globalConfig?.label}\n globalSlug={globalSlug}\n id={id}\n isTrashed={isTrashed}\n pluralLabel={collectionConfig ? collectionConfig?.labels?.plural : undefined}\n useAsTitle={collectionConfig ? collectionConfig?.admin?.useAsTitle : undefined}\n view=\"API\"\n />\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__configuration`}>\n <Form\n initialState={{\n authenticated: {\n initialValue: authenticated || false,\n valid: true,\n value: authenticated || false,\n },\n depth: {\n initialValue: Number(depth || 0),\n valid: true,\n value: Number(depth || 0),\n },\n draft: {\n initialValue: draft || false,\n valid: true,\n value: draft || false,\n },\n locale: {\n initialValue: locale,\n valid: true,\n value: locale,\n },\n }}\n >\n <div className={`${baseClass}__form-fields`}>\n {localeOptions && (\n <LocaleSelector localeOptions={localeOptions} onChange={setLocale} />\n )}\n <NumberField\n field={{\n name: 'depth',\n admin: {\n step: 1,\n },\n label: t('general:depth'),\n max: 10,\n min: 0,\n }}\n onChange={(value) => setDepth(value?.toString())}\n path=\"depth\"\n />\n {draftsEnabled && (\n <CheckboxField\n field={{\n name: 'draft',\n label: t('version:draft'),\n }}\n onChange={() => setDraft(!draft)}\n path=\"draft\"\n />\n )}\n <CheckboxField\n field={{\n name: 'authenticated',\n label: t('authentication:authenticated'),\n }}\n onChange={() => setAuthenticated(!authenticated)}\n path=\"authenticated\"\n />\n </div>\n </Form>\n </div>\n <div className={`${baseClass}__results-wrapper`}>\n <div className={`${baseClass}__results-bar`}>\n <div className={`${baseClass}__api-url-field`}>\n <TextInput\n className={`${baseClass}__api-url-input`}\n htmlAttributes={{\n 'aria-label': 'API URL',\n readOnly: true,\n }}\n path=\"api-url\"\n readOnly={false}\n value={fetchURL}\n />\n </div>\n <div className={`${baseClass}__results-bar-actions`}>\n <Button\n aria-label={t('general:openInNewWindow')}\n buttonStyle=\"secondary\"\n className={`${baseClass}__api-url-open-button`}\n el=\"anchor\"\n icon={<NewTabIcon size={16} />}\n margin={false}\n newTab\n size=\"large\"\n url={fetchURL}\n />\n <Button\n aria-label=\"toggle fullscreen\"\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-fullscreen-button`}\n icon={<MinimizeMaximizeIcon isMinimized={!fullscreen} />}\n margin={false}\n onClick={() => setFullscreen(!fullscreen)}\n size=\"large\"\n />\n </div>\n </div>\n <div className={`${baseClass}__results`}>\n <CodeEditorLazy\n defaultLanguage=\"json\"\n height=\"100%\"\n options={{\n fixedOverflowWidgets: true,\n folding: true,\n lineNumbers: 'on',\n stickyScroll: { enabled: false },\n wordWrap: 'off',\n }}\n readOnly\n recalculatedHeightAt={recalculatedHeightAt}\n value={jsonString}\n />\n </div>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.client.js","names":["formatAdminURL","hasDraftsEnabled","React","toast","Button","CodeEditor","CodeEditorLazy","CheckboxField","NumberField","TextInput","Form","MinimizeMaximizeIcon","NewTabIcon","useConfig","useDocumentInfo","useLocale","useSearchParams","useTranslation","SetDocumentStepNav","LocaleSelector","baseClass","APIViewClient","id","collectionSlug","globalSlug","initialData","isTrashed","searchParams","i18n","t","currentLocale","code","config","defaultDepth","localization","routes","api","apiRoute","serverURL","getEntityConfig","collectionConfig","globalConfig","localeOptions","locales","map","locale","label","value","draftsEnabled","docEndpoint","undefined","data","setData","useState","draft","setDraft","get","setLocale","depth","setDepth","toString","authenticated","setAuthenticated","fullscreen","setFullscreen","origin","setOrigin","jsonString","useMemo","JSON","stringify","recalculatedHeightAt","setRecalculatedHeightAt","useEffect","count","window","location","trashParam","deletedAt","params","URLSearchParams","String","trash","fetchURL","path","fetchData","res","fetch","credentials","headers","language","method","json","error","console","_jsxs","className","filter","Boolean","join","_jsx","globalLabel","pluralLabel","labels","plural","useAsTitle","admin","view","initialState","initialValue","valid","Number","onChange","field","name","step","max","min","htmlAttributes","readOnly","buttonStyle","el","icon","size","margin","newTab","url","isMinimized","onClick","defaultLanguage","height","options","fixedOverflowWidgets","folding","lineNumbers","stickyScroll","enabled","wordWrap"],"sources":["../../../src/views/API/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { formatAdminURL, hasDraftsEnabled } from 'payload/shared'\nimport * as React from 'react'\nimport { toast } from 'sonner'\n\nimport { Button } from '../../elements/Button/index.js'\nimport { CodeEditor as CodeEditorLazy } from '../../elements/CodeEditor/index.js'\nimport { CheckboxField } from '../../fields/Checkbox/index.js'\nimport { NumberField } from '../../fields/Number/index.js'\nimport { TextInput } from '../../fields/Text/Input.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { MinimizeMaximizeIcon } from '../../icons/MinimizeMaximize/index.js'\nimport { NewTabIcon } from '../../icons/NewTab/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useSearchParams } from '../../providers/RouterAdapter/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { SetDocumentStepNav } from '../../views/Edit/SetDocumentStepNav/index.js'\nimport './index.css'\nimport { LocaleSelector } from './LocaleSelector/index.js'\n\nconst baseClass = 'query-inspector'\n\nexport const APIViewClient: React.FC = () => {\n const { id, collectionSlug, globalSlug, initialData, isTrashed } = useDocumentInfo()\n\n const searchParams = useSearchParams()\n const { i18n, t } = useTranslation()\n const currentLocale = useLocale()\n const code = currentLocale?.code\n\n const {\n config: {\n defaultDepth,\n localization,\n routes: { api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n const localeOptions =\n localization &&\n localization.locales.map((locale) => ({ label: locale.label, value: locale.code }))\n\n let draftsEnabled: boolean = false\n let docEndpoint: `/${string}` = undefined\n\n if (collectionConfig) {\n draftsEnabled = hasDraftsEnabled(collectionConfig)\n docEndpoint = `/${collectionSlug}/${id}`\n }\n\n if (globalConfig) {\n draftsEnabled = hasDraftsEnabled(globalConfig)\n docEndpoint = `/globals/${globalSlug}`\n }\n\n const [data, setData] = React.useState<any>(initialData)\n const [draft, setDraft] = React.useState<boolean>(searchParams.get('draft') === 'true')\n const [locale, setLocale] = React.useState<string>(searchParams?.get('locale') || code)\n const [depth, setDepth] = React.useState<string>(\n searchParams.get('depth') || defaultDepth.toString(),\n )\n const [authenticated, setAuthenticated] = React.useState<boolean>(true)\n const [fullscreen, setFullscreen] = React.useState<boolean>(false)\n const [origin, setOrigin] = React.useState<string>(serverURL || '')\n\n const jsonString = React.useMemo(\n () => (data === undefined ? '' : JSON.stringify(data, null, 2)),\n [data],\n )\n\n // readOnly editors never fire onChange, so bump a counter to re-fit height on data change\n const [recalculatedHeightAt, setRecalculatedHeightAt] = React.useState(0)\n React.useEffect(() => {\n setRecalculatedHeightAt((count) => count + 1)\n }, [jsonString])\n\n // Set the origin to the window.location.origin in useEffect to avoid hydration errors\n React.useEffect(() => {\n if (!serverURL) {\n setOrigin(window.location.origin)\n }\n }, [serverURL])\n\n const trashParam = typeof initialData?.deletedAt === 'string'\n\n const params = new URLSearchParams({\n depth,\n draft: String(draft),\n locale,\n trash: trashParam ? 'true' : 'false',\n }).toString()\n\n const fetchURL = formatAdminURL({\n apiRoute,\n path: `${docEndpoint}?${params}`,\n serverURL: origin,\n })\n\n React.useEffect(() => {\n const fetchData = async () => {\n try {\n const res = await fetch(fetchURL, {\n credentials: authenticated ? 'include' : 'omit',\n headers: {\n 'Accept-Language': i18n.language,\n },\n method: 'GET',\n })\n\n try {\n const json = await res.json()\n setData(json)\n } catch (error) {\n toast.error('Error parsing response')\n console.error(error) // eslint-disable-line no-console\n }\n } catch (error) {\n toast.error('Error making request')\n console.error(error) // eslint-disable-line no-console\n }\n }\n\n void fetchData()\n }, [i18n.language, fetchURL, authenticated])\n\n return (\n <div\n className={[baseClass, fullscreen && `${baseClass}--fullscreen`].filter(Boolean).join(' ')}\n >\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalLabel={globalConfig?.label}\n globalSlug={globalSlug}\n id={id}\n isTrashed={isTrashed}\n pluralLabel={collectionConfig ? collectionConfig?.labels?.plural : undefined}\n useAsTitle={collectionConfig ? collectionConfig?.admin?.useAsTitle : undefined}\n view=\"API\"\n />\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__configuration`}>\n <Form\n initialState={{\n authenticated: {\n initialValue: authenticated || false,\n valid: true,\n value: authenticated || false,\n },\n depth: {\n initialValue: Number(depth || 0),\n valid: true,\n value: Number(depth || 0),\n },\n draft: {\n initialValue: draft || false,\n valid: true,\n value: draft || false,\n },\n locale: {\n initialValue: locale,\n valid: true,\n value: locale,\n },\n }}\n >\n <div className={`${baseClass}__form-fields`}>\n {localeOptions && (\n <LocaleSelector localeOptions={localeOptions} onChange={setLocale} />\n )}\n <NumberField\n field={{\n name: 'depth',\n admin: {\n step: 1,\n },\n label: t('general:depth'),\n max: 10,\n min: 0,\n }}\n onChange={(value) => setDepth(value?.toString())}\n path=\"depth\"\n />\n {draftsEnabled && (\n <CheckboxField\n field={{\n name: 'draft',\n label: t('version:draft'),\n }}\n onChange={() => setDraft(!draft)}\n path=\"draft\"\n />\n )}\n <CheckboxField\n field={{\n name: 'authenticated',\n label: t('authentication:authenticated'),\n }}\n onChange={() => setAuthenticated(!authenticated)}\n path=\"authenticated\"\n />\n </div>\n </Form>\n </div>\n <div className={`${baseClass}__results-wrapper`}>\n <div className={`${baseClass}__results-bar`}>\n <div className={`${baseClass}__api-url-field`}>\n <TextInput\n className={`${baseClass}__api-url-input`}\n htmlAttributes={{\n 'aria-label': 'API URL',\n readOnly: true,\n }}\n path=\"api-url\"\n readOnly={false}\n value={fetchURL}\n />\n </div>\n <div className={`${baseClass}__results-bar-actions`}>\n <Button\n aria-label={t('general:openInNewWindow')}\n buttonStyle=\"secondary\"\n className={`${baseClass}__api-url-open-button`}\n el=\"anchor\"\n icon={<NewTabIcon size={16} />}\n margin={false}\n newTab\n size=\"large\"\n url={fetchURL}\n />\n <Button\n aria-label=\"toggle fullscreen\"\n buttonStyle=\"secondary\"\n className={`${baseClass}__toggle-fullscreen-button`}\n icon={<MinimizeMaximizeIcon isMinimized={!fullscreen} />}\n margin={false}\n onClick={() => setFullscreen(!fullscreen)}\n size=\"large\"\n />\n </div>\n </div>\n <div className={`${baseClass}__results`}>\n <CodeEditorLazy\n defaultLanguage=\"json\"\n height=\"100%\"\n options={{\n fixedOverflowWidgets: true,\n folding: true,\n lineNumbers: 'on',\n stickyScroll: { enabled: false },\n wordWrap: 'off',\n }}\n readOnly\n recalculatedHeightAt={recalculatedHeightAt}\n value={jsonString}\n />\n </div>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Document/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,IAAI,EACJ,uBAAuB,EACvB,uBAAuB,EAEvB,iBAAiB,EACjB,gBAAgB,EAChB,gCAAgC,EACjC,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,MAAM,OAAO,CAAA;AA6BzB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,gBAAgB,CAAC,uBAAuB,CAAC,GACzC,KAAK,CAAC,EAAE,GACR,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,6PAgBxB;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,EAAE,gCAAgC,CAAA;CAC5C,GAAG,oBAAoB,KAAG,OAAO,CAAC;IACjC,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAsZA,CAAA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,oBAAoB,+QAuB7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Document/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,IAAI,EACJ,uBAAuB,EACvB,uBAAuB,EAEvB,iBAAiB,EACjB,gBAAgB,EAChB,gCAAgC,EACjC,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,MAAM,OAAO,CAAA;AA6BzB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,gBAAgB,CAAC,uBAAuB,CAAC,GACzC,KAAK,CAAC,EAAE,GACR,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,6PAgBxB;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,EAAE,gCAAgC,CAAA;CAC5C,GAAG,oBAAoB,KAAG,OAAO,CAAC;IACjC,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAqZA,CAAA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,oBAAoB,+QAuB7D"}
@@ -204,8 +204,7 @@ export const renderDocument = async ({
204
204
  collectionConfig,
205
205
  globalConfig,
206
206
  hasPublishPermission,
207
- payload,
208
- user
207
+ payload
209
208
  })]);
210
209
  await recentlyViewedPromise;
211
210
  const documentViewServerProps = {