@payloadcms/ui 3.11.1-canary.54f6c59 → 3.11.1-canary.eb516b3

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 (44) hide show
  1. package/dist/elements/BulkUpload/index.d.ts +3 -1
  2. package/dist/elements/BulkUpload/index.d.ts.map +1 -1
  3. package/dist/elements/BulkUpload/index.js +30 -19
  4. package/dist/elements/BulkUpload/index.js.map +1 -1
  5. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts +14 -0
  6. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -0
  7. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +75 -0
  8. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -0
  9. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts +8 -0
  10. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -0
  11. package/dist/elements/PublishButton/ScheduleDrawer/index.js +260 -0
  12. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -0
  13. package/dist/elements/PublishButton/ScheduleDrawer/index.scss +48 -0
  14. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +10 -0
  15. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -0
  16. package/dist/elements/PublishButton/ScheduleDrawer/types.js +2 -0
  17. package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -0
  18. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  19. package/dist/elements/PublishButton/index.js +116 -186
  20. package/dist/elements/PublishButton/index.js.map +1 -1
  21. package/dist/exports/client/index.js +22 -22
  22. package/dist/exports/client/index.js.map +4 -4
  23. package/dist/fields/Upload/Input.d.ts.map +1 -1
  24. package/dist/fields/Upload/Input.js +115 -109
  25. package/dist/fields/Upload/Input.js.map +1 -1
  26. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  27. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -0
  28. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  29. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  30. package/dist/providers/ListQuery/index.js +19 -10
  31. package/dist/providers/ListQuery/index.js.map +1 -1
  32. package/dist/providers/ServerFunctions/index.d.ts +5 -0
  33. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  34. package/dist/providers/ServerFunctions/index.js +31 -0
  35. package/dist/providers/ServerFunctions/index.js.map +1 -1
  36. package/dist/styles.css +1 -1
  37. package/dist/utilities/schedulePublishHandler.d.ts +13 -0
  38. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -0
  39. package/dist/utilities/schedulePublishHandler.js +38 -0
  40. package/dist/utilities/schedulePublishHandler.js.map +1 -0
  41. package/dist/views/List/index.d.ts.map +1 -1
  42. package/dist/views/List/index.js +15 -12
  43. package/dist/views/List/index.js.map +1 -1
  44. package/package.json +6 -6
@@ -6,16 +6,18 @@ export type BulkUploadProps = {
6
6
  export declare function BulkUploadDrawer(): React.JSX.Element;
7
7
  type BulkUploadContext = {
8
8
  collectionSlug: string;
9
+ currentActivePath: string;
9
10
  drawerSlug: string;
10
11
  initialFiles: FileList;
11
12
  maxFiles: number;
12
13
  onCancel: () => void;
13
14
  onSuccess: (newDocs: JsonObject[], errorCount: number) => void;
14
15
  setCollectionSlug: (slug: string) => void;
16
+ setCurrentActivePath: (path: string) => void;
15
17
  setInitialFiles: (files: FileList) => void;
16
18
  setMaxFiles: (maxFiles: number) => void;
17
19
  setOnCancel: (onCancel: BulkUploadContext['onCancel']) => void;
18
- setOnSuccess: (onSuccess: BulkUploadContext['onSuccess']) => void;
20
+ setOnSuccess: (path: string, onSuccess: BulkUploadContext['onSuccess']) => void;
19
21
  };
20
22
  export declare function BulkUploadProvider({ children }: {
21
23
  readonly children: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIzC,OAAO,KAAK,MAAM,OAAO,CAAA;AA6DzB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,sBAU/B;AAED,KAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9D,YAAY,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CAClE,CAAA;AAeD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBA8CtF;AAED,eAAO,MAAM,aAAa,yBAAkC,CAAA;AAE5D,wBAAgB,uBAAuB,WAItC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIzC,OAAO,KAAK,MAAM,OAAO,CAAA;AA6DzB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,sBAU/B;AAED,KAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9D,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CAChF,CAAA;AAiBD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAsDtF;AAED,eAAO,MAAM,aAAa,yBAAkC,CAAA;AAE5D,wBAAgB,uBAAuB,WAItC"}
@@ -85,27 +85,30 @@ export function BulkUploadDrawer() {
85
85
  }
86
86
  const Context = /*#__PURE__*/React.createContext({
87
87
  collectionSlug: '',
88
+ currentActivePath: undefined,
88
89
  drawerSlug: '',
89
90
  initialFiles: undefined,
90
91
  maxFiles: undefined,
91
92
  onCancel: () => null,
92
93
  onSuccess: () => null,
93
94
  setCollectionSlug: () => null,
95
+ setCurrentActivePath: () => null,
94
96
  setInitialFiles: () => null,
95
97
  setMaxFiles: () => null,
96
98
  setOnCancel: () => null,
97
99
  setOnSuccess: () => null
98
100
  });
99
101
  export function BulkUploadProvider(t0) {
100
- const $ = _c(14);
102
+ const $ = _c(16);
101
103
  const {
102
104
  children
103
105
  } = t0;
104
106
  const [collection, setCollection] = React.useState();
105
- const [onSuccessFunction, setOnSuccessFunction] = React.useState();
107
+ const [onSuccessFunctionMap, setOnSuccessFunctionMap] = React.useState();
106
108
  const [onCancelFunction, setOnCancelFunction] = React.useState();
107
109
  const [initialFiles, setInitialFiles] = React.useState(undefined);
108
110
  const [maxFiles, setMaxFiles] = React.useState(undefined);
111
+ const [currentActivePath, setCurrentActivePath] = React.useState(undefined);
109
112
  const drawerSlug = useBulkUploadDrawerSlug();
110
113
  let t1;
111
114
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
@@ -119,8 +122,11 @@ export function BulkUploadProvider(t0) {
119
122
  const setCollectionSlug = t1;
120
123
  let t2;
121
124
  if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
122
- t2 = onSuccess => {
123
- setOnSuccessFunction(() => onSuccess);
125
+ t2 = (path, onSuccess) => {
126
+ setOnSuccessFunctionMap(prev => ({
127
+ ...prev,
128
+ [path]: onSuccess
129
+ }));
124
130
  };
125
131
  $[1] = t2;
126
132
  } else {
@@ -140,28 +146,32 @@ export function BulkUploadProvider(t0) {
140
146
  t3 = $[3];
141
147
  }
142
148
  let t4;
143
- if ($[4] !== onSuccessFunction) {
149
+ if ($[4] !== currentActivePath || $[5] !== onSuccessFunctionMap) {
144
150
  t4 = (docIDs, errorCount) => {
145
- if (typeof onSuccessFunction === "function") {
151
+ if (onSuccessFunctionMap && Object.hasOwn(onSuccessFunctionMap, currentActivePath)) {
152
+ const onSuccessFunction = onSuccessFunctionMap[currentActivePath];
146
153
  onSuccessFunction(docIDs, errorCount);
147
154
  }
148
155
  };
149
- $[4] = onSuccessFunction;
150
- $[5] = t4;
156
+ $[4] = currentActivePath;
157
+ $[5] = onSuccessFunctionMap;
158
+ $[6] = t4;
151
159
  } else {
152
- t4 = $[5];
160
+ t4 = $[6];
153
161
  }
154
162
  let t5;
155
- if ($[6] !== children || $[7] !== collection || $[8] !== drawerSlug || $[9] !== initialFiles || $[10] !== maxFiles || $[11] !== t3 || $[12] !== t4) {
163
+ if ($[7] !== children || $[8] !== collection || $[9] !== currentActivePath || $[10] !== drawerSlug || $[11] !== initialFiles || $[12] !== maxFiles || $[13] !== t3 || $[14] !== t4) {
156
164
  t5 = _jsx(Context.Provider, {
157
165
  value: {
158
166
  collectionSlug: collection,
167
+ currentActivePath,
159
168
  drawerSlug,
160
169
  initialFiles,
161
170
  maxFiles,
162
171
  onCancel: t3,
163
172
  onSuccess: t4,
164
173
  setCollectionSlug,
174
+ setCurrentActivePath,
165
175
  setInitialFiles,
166
176
  setMaxFiles,
167
177
  setOnCancel: setOnCancelFunction,
@@ -171,16 +181,17 @@ export function BulkUploadProvider(t0) {
171
181
  children: [children, _jsx(BulkUploadDrawer, {})]
172
182
  })
173
183
  });
174
- $[6] = children;
175
- $[7] = collection;
176
- $[8] = drawerSlug;
177
- $[9] = initialFiles;
178
- $[10] = maxFiles;
179
- $[11] = t3;
180
- $[12] = t4;
181
- $[13] = t5;
184
+ $[7] = children;
185
+ $[8] = collection;
186
+ $[9] = currentActivePath;
187
+ $[10] = drawerSlug;
188
+ $[11] = initialFiles;
189
+ $[12] = maxFiles;
190
+ $[13] = t3;
191
+ $[14] = t4;
192
+ $[15] = t5;
182
193
  } else {
183
- t5 = $[13];
194
+ t5 = $[15];
184
195
  }
185
196
  return t5;
186
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","validateMimeType","React","toast","useConfig","useTranslation","Drawer","useDrawerDepth","AddFilesView","AddingFilesView","FormsManagerProvider","useFormsManager","drawerSlug","DrawerContent","addFiles","forms","isInitializing","closeModal","collectionSlug","useBulkUpload","config","t","uploadCollection","collections","find","col","slug","uploadConfig","upload","uploadMimeTypes","mimeTypes","onDrop","useCallback","acceptedFiles","fileTransfer","DataTransfer","candidateFile","undefined","length","type","items","add","files","error","_jsx","acceptMimeTypes","join","onCancel","BulkUploadDrawer","$","t0","gutter","Header","children","Context","createContext","initialFiles","maxFiles","onSuccess","setCollectionSlug","setInitialFiles","setMaxFiles","setOnCancel","setOnSuccess","BulkUploadProvider","collection","setCollection","useState","onSuccessFunction","setOnSuccessFunction","onCancelFunction","setOnCancelFunction","useBulkUploadDrawerSlug","t1","Symbol","for","t2","t3","t4","docIDs","errorCount","t5","Provider","value","_jsxs","Fragment","useContext","depth"],"sources":["../../../src/elements/BulkUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { JsonObject } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { validateMimeType } from 'payload/shared'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer, useDrawerDepth } from '../Drawer/index.js'\nimport { AddFilesView } from './AddFilesView/index.js'\nimport { AddingFilesView } from './AddingFilesView/index.js'\nimport { FormsManagerProvider, useFormsManager } from './FormsManager/index.js'\n\nconst drawerSlug = 'bulk-upload-drawer-slug'\n\nfunction DrawerContent() {\n const { addFiles, forms, isInitializing } = useFormsManager()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug } = useBulkUpload()\n const { config } = useConfig()\n const { t } = useTranslation()\n\n const uploadCollection = config.collections.find((col) => col.slug === collectionSlug)\n const uploadConfig = uploadCollection?.upload\n const uploadMimeTypes = uploadConfig?.mimeTypes\n\n const onDrop = React.useCallback(\n (acceptedFiles: FileList) => {\n const fileTransfer = new DataTransfer()\n for (const candidateFile of acceptedFiles) {\n if (\n uploadMimeTypes === undefined ||\n uploadMimeTypes.length === 0 ||\n validateMimeType(candidateFile.type, uploadMimeTypes)\n ) {\n fileTransfer.items.add(candidateFile)\n }\n }\n if (fileTransfer.files.length === 0) {\n toast.error(t('error:invalidFileType'))\n } else {\n void addFiles(fileTransfer.files)\n }\n },\n [addFiles, t, uploadMimeTypes],\n )\n\n if (!collectionSlug) {\n return null\n }\n\n if (!forms.length && !isInitializing) {\n return (\n <AddFilesView\n acceptMimeTypes={uploadMimeTypes?.join(', ')}\n onCancel={() => closeModal(drawerSlug)}\n onDrop={onDrop}\n />\n )\n } else {\n return <AddingFilesView />\n }\n}\n\nexport type BulkUploadProps = {\n readonly children: React.ReactNode\n}\n\nexport function BulkUploadDrawer() {\n const { drawerSlug } = useBulkUpload()\n\n return (\n <Drawer gutter={false} Header={null} slug={drawerSlug}>\n <FormsManagerProvider>\n <DrawerContent />\n </FormsManagerProvider>\n </Drawer>\n )\n}\n\ntype BulkUploadContext = {\n collectionSlug: string\n drawerSlug: string\n initialFiles: FileList\n maxFiles: number\n onCancel: () => void\n onSuccess: (newDocs: JsonObject[], errorCount: number) => void\n setCollectionSlug: (slug: string) => void\n setInitialFiles: (files: FileList) => void\n setMaxFiles: (maxFiles: number) => void\n setOnCancel: (onCancel: BulkUploadContext['onCancel']) => void\n setOnSuccess: (onSuccess: BulkUploadContext['onSuccess']) => void\n}\n\nconst Context = React.createContext<BulkUploadContext>({\n collectionSlug: '',\n drawerSlug: '',\n initialFiles: undefined,\n maxFiles: undefined,\n onCancel: () => null,\n onSuccess: () => null,\n setCollectionSlug: () => null,\n setInitialFiles: () => null,\n setMaxFiles: () => null,\n setOnCancel: () => null,\n setOnSuccess: () => null,\n})\nexport function BulkUploadProvider({ children }: { readonly children: React.ReactNode }) {\n const [collection, setCollection] = React.useState<string>()\n const [onSuccessFunction, setOnSuccessFunction] = React.useState<BulkUploadContext['onSuccess']>()\n const [onCancelFunction, setOnCancelFunction] = React.useState<BulkUploadContext['onCancel']>()\n const [initialFiles, setInitialFiles] = React.useState<FileList>(undefined)\n const [maxFiles, setMaxFiles] = React.useState<number>(undefined)\n const drawerSlug = useBulkUploadDrawerSlug()\n\n const setCollectionSlug: BulkUploadContext['setCollectionSlug'] = (slug) => {\n setCollection(slug)\n }\n\n const setOnSuccess: BulkUploadContext['setOnSuccess'] = (onSuccess) => {\n setOnSuccessFunction(() => onSuccess)\n }\n\n return (\n <Context.Provider\n value={{\n collectionSlug: collection,\n drawerSlug,\n initialFiles,\n maxFiles,\n onCancel: () => {\n if (typeof onCancelFunction === 'function') {\n onCancelFunction()\n }\n },\n onSuccess: (docIDs, errorCount) => {\n if (typeof onSuccessFunction === 'function') {\n onSuccessFunction(docIDs, errorCount)\n }\n },\n setCollectionSlug,\n setInitialFiles,\n setMaxFiles,\n setOnCancel: setOnCancelFunction,\n setOnSuccess,\n }}\n >\n <React.Fragment>\n {children}\n <BulkUploadDrawer />\n </React.Fragment>\n </Context.Provider>\n )\n}\n\nexport const useBulkUpload = () => React.useContext(Context)\n\nexport function useBulkUploadDrawerSlug() {\n const depth = useDrawerDepth()\n\n return `${drawerSlug}-${depth || 1}`\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","validateMimeType","React","toast","useConfig","useTranslation","Drawer","useDrawerDepth","AddFilesView","AddingFilesView","FormsManagerProvider","useFormsManager","drawerSlug","DrawerContent","addFiles","forms","isInitializing","closeModal","collectionSlug","useBulkUpload","config","t","uploadCollection","collections","find","col","slug","uploadConfig","upload","uploadMimeTypes","mimeTypes","onDrop","useCallback","acceptedFiles","fileTransfer","DataTransfer","candidateFile","undefined","length","type","items","add","files","error","_jsx","acceptMimeTypes","join","onCancel","BulkUploadDrawer","$","t0","gutter","Header","children","Context","createContext","currentActivePath","initialFiles","maxFiles","onSuccess","setCollectionSlug","setCurrentActivePath","setInitialFiles","setMaxFiles","setOnCancel","setOnSuccess","BulkUploadProvider","collection","setCollection","useState","onSuccessFunctionMap","setOnSuccessFunctionMap","onCancelFunction","setOnCancelFunction","useBulkUploadDrawerSlug","t1","Symbol","for","t2","path","prev","t3","t4","docIDs","errorCount","Object","hasOwn","onSuccessFunction","t5","Provider","value","_jsxs","Fragment","useContext","depth"],"sources":["../../../src/elements/BulkUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { JsonObject } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { validateMimeType } from 'payload/shared'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer, useDrawerDepth } from '../Drawer/index.js'\nimport { AddFilesView } from './AddFilesView/index.js'\nimport { AddingFilesView } from './AddingFilesView/index.js'\nimport { FormsManagerProvider, useFormsManager } from './FormsManager/index.js'\n\nconst drawerSlug = 'bulk-upload-drawer-slug'\n\nfunction DrawerContent() {\n const { addFiles, forms, isInitializing } = useFormsManager()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug } = useBulkUpload()\n const { config } = useConfig()\n const { t } = useTranslation()\n\n const uploadCollection = config.collections.find((col) => col.slug === collectionSlug)\n const uploadConfig = uploadCollection?.upload\n const uploadMimeTypes = uploadConfig?.mimeTypes\n\n const onDrop = React.useCallback(\n (acceptedFiles: FileList) => {\n const fileTransfer = new DataTransfer()\n for (const candidateFile of acceptedFiles) {\n if (\n uploadMimeTypes === undefined ||\n uploadMimeTypes.length === 0 ||\n validateMimeType(candidateFile.type, uploadMimeTypes)\n ) {\n fileTransfer.items.add(candidateFile)\n }\n }\n if (fileTransfer.files.length === 0) {\n toast.error(t('error:invalidFileType'))\n } else {\n void addFiles(fileTransfer.files)\n }\n },\n [addFiles, t, uploadMimeTypes],\n )\n\n if (!collectionSlug) {\n return null\n }\n\n if (!forms.length && !isInitializing) {\n return (\n <AddFilesView\n acceptMimeTypes={uploadMimeTypes?.join(', ')}\n onCancel={() => closeModal(drawerSlug)}\n onDrop={onDrop}\n />\n )\n } else {\n return <AddingFilesView />\n }\n}\n\nexport type BulkUploadProps = {\n readonly children: React.ReactNode\n}\n\nexport function BulkUploadDrawer() {\n const { drawerSlug } = useBulkUpload()\n\n return (\n <Drawer gutter={false} Header={null} slug={drawerSlug}>\n <FormsManagerProvider>\n <DrawerContent />\n </FormsManagerProvider>\n </Drawer>\n )\n}\n\ntype BulkUploadContext = {\n collectionSlug: string\n currentActivePath: string\n drawerSlug: string\n initialFiles: FileList\n maxFiles: number\n onCancel: () => void\n onSuccess: (newDocs: JsonObject[], errorCount: number) => void\n setCollectionSlug: (slug: string) => void\n setCurrentActivePath: (path: string) => void\n setInitialFiles: (files: FileList) => void\n setMaxFiles: (maxFiles: number) => void\n setOnCancel: (onCancel: BulkUploadContext['onCancel']) => void\n setOnSuccess: (path: string, onSuccess: BulkUploadContext['onSuccess']) => void\n}\n\nconst Context = React.createContext<BulkUploadContext>({\n collectionSlug: '',\n currentActivePath: undefined,\n drawerSlug: '',\n initialFiles: undefined,\n maxFiles: undefined,\n onCancel: () => null,\n onSuccess: () => null,\n setCollectionSlug: () => null,\n setCurrentActivePath: () => null,\n setInitialFiles: () => null,\n setMaxFiles: () => null,\n setOnCancel: () => null,\n setOnSuccess: () => null,\n})\nexport function BulkUploadProvider({ children }: { readonly children: React.ReactNode }) {\n const [collection, setCollection] = React.useState<string>()\n const [onSuccessFunctionMap, setOnSuccessFunctionMap] =\n React.useState<Record<string, BulkUploadContext['onSuccess']>>()\n const [onCancelFunction, setOnCancelFunction] = React.useState<BulkUploadContext['onCancel']>()\n const [initialFiles, setInitialFiles] = React.useState<FileList>(undefined)\n const [maxFiles, setMaxFiles] = React.useState<number>(undefined)\n const [currentActivePath, setCurrentActivePath] = React.useState<string>(undefined)\n const drawerSlug = useBulkUploadDrawerSlug()\n\n const setCollectionSlug: BulkUploadContext['setCollectionSlug'] = (slug) => {\n setCollection(slug)\n }\n\n const setOnSuccess: BulkUploadContext['setOnSuccess'] = React.useCallback((path, onSuccess) => {\n setOnSuccessFunctionMap((prev) => ({\n ...prev,\n [path]: onSuccess,\n }))\n }, [])\n\n return (\n <Context.Provider\n value={{\n collectionSlug: collection,\n currentActivePath,\n drawerSlug,\n initialFiles,\n maxFiles,\n onCancel: () => {\n if (typeof onCancelFunction === 'function') {\n onCancelFunction()\n }\n },\n onSuccess: (docIDs, errorCount) => {\n if (onSuccessFunctionMap && Object.hasOwn(onSuccessFunctionMap, currentActivePath)) {\n const onSuccessFunction = onSuccessFunctionMap[currentActivePath]\n onSuccessFunction(docIDs, errorCount)\n }\n },\n setCollectionSlug,\n setCurrentActivePath,\n setInitialFiles,\n setMaxFiles,\n setOnCancel: setOnCancelFunction,\n setOnSuccess,\n }}\n >\n <React.Fragment>\n {children}\n <BulkUploadDrawer />\n </React.Fragment>\n </Context.Provider>\n )\n}\n\nexport const useBulkUpload = () => React.useContext(Context)\n\nexport function useBulkUploadDrawerSlug() {\n const depth = useDrawerDepth()\n\n return `${drawerSlug}-${depth || 1}`\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import type { ClientConfig } from 'payload';
2
+ import { type I18nClient, type TFunction } from '@payloadcms/translations';
3
+ import type { Column } from '../../Table/index.js';
4
+ import type { UpcomingEvent } from './types.js';
5
+ type Args = {
6
+ dateFormat: string;
7
+ docs: UpcomingEvent[];
8
+ i18n: I18nClient;
9
+ localization: ClientConfig['localization'];
10
+ t: TFunction;
11
+ };
12
+ export declare const buildUpcomingColumns: ({ dateFormat, docs, i18n, localization, t, }: Args) => Column[];
13
+ export {};
14
+ //# sourceMappingURL=buildUpcomingColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildUpcomingColumns.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAE1F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK/C,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,aAAa,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAA;IAC1C,CAAC,EAAE,SAAS,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,iDAM9B,IAAI,KAAG,MAAM,EA4Df,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getTranslation } from '@payloadcms/translations';
3
+ import { formatDate } from '../../../utilities/formatDate.js';
4
+ import { Pill } from '../../Pill/index.js';
5
+ export const buildUpcomingColumns = ({
6
+ dateFormat,
7
+ docs,
8
+ i18n,
9
+ localization,
10
+ t
11
+ }) => {
12
+ const columns = [{
13
+ accessor: 'input.type',
14
+ active: true,
15
+ field: {
16
+ name: '',
17
+ type: 'text'
18
+ },
19
+ Heading: /*#__PURE__*/_jsx("span", {
20
+ children: t('version:type')
21
+ }),
22
+ renderedCells: docs.map(doc => {
23
+ const type = doc.input?.type;
24
+ return /*#__PURE__*/_jsxs(Pill, {
25
+ pillStyle: type === 'publish' ? 'success' : 'warning',
26
+ children: [type === 'publish' && t('version:publish'), type === 'unpublish' && t('version:unpublish')]
27
+ }, doc.id);
28
+ })
29
+ }, {
30
+ accessor: 'waitUntil',
31
+ active: true,
32
+ field: {
33
+ name: '',
34
+ type: 'date'
35
+ },
36
+ Heading: /*#__PURE__*/_jsx("span", {
37
+ children: t('general:time')
38
+ }),
39
+ renderedCells: docs.map(doc => /*#__PURE__*/_jsx("span", {
40
+ children: formatDate({
41
+ date: doc.waitUntil,
42
+ i18n,
43
+ pattern: dateFormat
44
+ })
45
+ }, doc.id))
46
+ }];
47
+ if (localization) {
48
+ columns.push({
49
+ accessor: 'input.locale',
50
+ active: true,
51
+ field: {
52
+ name: '',
53
+ type: 'text'
54
+ },
55
+ Heading: /*#__PURE__*/_jsx("span", {
56
+ children: t('general:locale')
57
+ }),
58
+ renderedCells: docs.map(doc => {
59
+ if (doc.input.locale) {
60
+ const matchedLocale = localization.locales.find(locale => locale.code === doc.input.locale);
61
+ if (matchedLocale) {
62
+ return /*#__PURE__*/_jsx("span", {
63
+ children: getTranslation(matchedLocale.label, i18n)
64
+ }, doc.id);
65
+ }
66
+ }
67
+ return /*#__PURE__*/_jsx("span", {
68
+ children: t('general:all')
69
+ }, doc.id);
70
+ })
71
+ });
72
+ }
73
+ return columns;
74
+ };
75
+ //# sourceMappingURL=buildUpcomingColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildUpcomingColumns.js","names":["getTranslation","formatDate","Pill","buildUpcomingColumns","dateFormat","docs","i18n","localization","t","columns","accessor","active","field","name","type","Heading","_jsx","renderedCells","map","doc","input","_jsxs","pillStyle","id","date","waitUntil","pattern","push","locale","matchedLocale","locales","find","code","label"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"sourcesContent":["import type { ClientConfig } from 'payload'\n\nimport { getTranslation, type I18nClient, type TFunction } from '@payloadcms/translations'\n\nimport type { Column } from '../../Table/index.js'\nimport type { UpcomingEvent } from './types.js'\n\nimport { formatDate } from '../../../utilities/formatDate.js'\nimport { Pill } from '../../Pill/index.js'\n\ntype Args = {\n dateFormat: string\n docs: UpcomingEvent[]\n i18n: I18nClient\n localization: ClientConfig['localization']\n t: TFunction\n}\n\nexport const buildUpcomingColumns = ({\n dateFormat,\n docs,\n i18n,\n localization,\n t,\n}: Args): Column[] => {\n const columns: Column[] = [\n {\n accessor: 'input.type',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('version:type')}</span>,\n renderedCells: docs.map((doc) => {\n const type = doc.input?.type\n\n return (\n <Pill key={doc.id} pillStyle={type === 'publish' ? 'success' : 'warning'}>\n {type === 'publish' && t('version:publish')}\n {type === 'unpublish' && t('version:unpublish')}\n </Pill>\n )\n }),\n },\n {\n accessor: 'waitUntil',\n active: true,\n field: {\n name: '',\n type: 'date',\n },\n Heading: <span>{t('general:time')}</span>,\n renderedCells: docs.map((doc) => (\n <span key={doc.id}>{formatDate({ date: doc.waitUntil, i18n, pattern: dateFormat })}</span>\n )),\n },\n ]\n\n if (localization) {\n columns.push({\n accessor: 'input.locale',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:locale')}</span>,\n renderedCells: docs.map((doc) => {\n if (doc.input.locale) {\n const matchedLocale = localization.locales.find(\n (locale) => locale.code === doc.input.locale,\n )\n if (matchedLocale) {\n return <span key={doc.id}>{getTranslation(matchedLocale.label, i18n)}</span>\n }\n }\n\n return <span key={doc.id}>{t('general:all')}</span>\n }),\n })\n }\n\n return columns\n}\n"],"mappings":";AAEA,SAASA,cAAc,QAAyC;AAKhE,SAASC,UAAU,QAAQ;AAC3B,SAASC,IAAI,QAAQ;AAUrB,OAAO,MAAMC,oBAAA,GAAuBA,CAAC;EACnCC,UAAU;EACVC,IAAI;EACJC,IAAI;EACJC,YAAY;EACZC;AAAC,CACI;EACL,MAAMC,OAAA,GAAoB,CACxB;IACEC,QAAA,EAAU;IACVC,MAAA,EAAQ;IACRC,KAAA,EAAO;MACLC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACAC,OAAA,eAASC,IAAA,CAAC;gBAAMR,CAAA,CAAE;;IAClBS,aAAA,EAAeZ,IAAA,CAAKa,GAAG,CAAEC,GAAA;MACvB,MAAML,IAAA,GAAOK,GAAA,CAAIC,KAAK,EAAEN,IAAA;MAExB,oBACEO,KAAA,CAACnB,IAAA;QAAkBoB,SAAA,EAAWR,IAAA,KAAS,YAAY,YAAY;mBAC5DA,IAAA,KAAS,aAAaN,CAAA,CAAE,oBACxBM,IAAA,KAAS,eAAeN,CAAA,CAAE;SAFlBW,GAAA,CAAII,EAAE;IAKrB;EACF,GACA;IACEb,QAAA,EAAU;IACVC,MAAA,EAAQ;IACRC,KAAA,EAAO;MACLC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACAC,OAAA,eAASC,IAAA,CAAC;gBAAMR,CAAA,CAAE;;IAClBS,aAAA,EAAeZ,IAAA,CAAKa,GAAG,CAAEC,GAAA,iBACvBH,IAAA,CAAC;gBAAmBf,UAAA,CAAW;QAAEuB,IAAA,EAAML,GAAA,CAAIM,SAAS;QAAEnB,IAAA;QAAMoB,OAAA,EAAStB;MAAW;OAArEe,GAAA,CAAII,EAAE;EAErB,EACD;EAED,IAAIhB,YAAA,EAAc;IAChBE,OAAA,CAAQkB,IAAI,CAAC;MACXjB,QAAA,EAAU;MACVC,MAAA,EAAQ;MACRC,KAAA,EAAO;QACLC,IAAA,EAAM;QACNC,IAAA,EAAM;MACR;MACAC,OAAA,eAASC,IAAA,CAAC;kBAAMR,CAAA,CAAE;;MAClBS,aAAA,EAAeZ,IAAA,CAAKa,GAAG,CAAEC,GAAA;QACvB,IAAIA,GAAA,CAAIC,KAAK,CAACQ,MAAM,EAAE;UACpB,MAAMC,aAAA,GAAgBtB,YAAA,CAAauB,OAAO,CAACC,IAAI,CAC5CH,MAAA,IAAWA,MAAA,CAAOI,IAAI,KAAKb,GAAA,CAAIC,KAAK,CAACQ,MAAM;UAE9C,IAAIC,aAAA,EAAe;YACjB,oBAAOb,IAAA,CAAC;wBAAmBhB,cAAA,CAAe6B,aAAA,CAAcI,KAAK,EAAE3B,IAAA;eAA7Ca,GAAA,CAAII,EAAE;UAC1B;QACF;QAEA,oBAAOP,IAAA,CAAC;oBAAmBR,CAAA,CAAE;WAAXW,GAAA,CAAII,EAAE;MAC1B;IACF;EACF;EAEA,OAAOd,OAAA;AACT","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ type Props = {
4
+ slug: string;
5
+ };
6
+ export declare const ScheduleDrawer: React.FC<Props>;
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAA;AAuBzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkN1C,CAAA"}
@@ -0,0 +1,260 @@
1
+ /* eslint-disable no-console */'use client';
2
+
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import { useModal } from '@faceless-ui/modal';
5
+ import { getTranslation } from '@payloadcms/translations';
6
+ import React from 'react';
7
+ import { toast } from 'sonner';
8
+ import { FieldLabel } from '../../../fields/FieldLabel/index.js';
9
+ import { Radio } from '../../../fields/RadioGroup/Radio/index.js';
10
+ import { useConfig } from '../../../providers/Config/index.js';
11
+ import { useDocumentInfo } from '../../../providers/DocumentInfo/index.js';
12
+ import { useServerFunctions } from '../../../providers/ServerFunctions/index.js';
13
+ import { useTranslation } from '../../../providers/Translation/index.js';
14
+ import { requests } from '../../../utilities/api.js';
15
+ import { Banner } from '../../Banner/index.js';
16
+ import { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js';
17
+ import { Button } from '../../Button/index.js';
18
+ import { DatePickerField } from '../../DatePicker/index.js';
19
+ import { Drawer } from '../../Drawer/index.js';
20
+ import { Gutter } from '../../Gutter/index.js';
21
+ import { ReactSelect } from '../../ReactSelect/index.js';
22
+ import { ShimmerEffect } from '../../ShimmerEffect/index.js';
23
+ import { Table } from '../../Table/index.js';
24
+ import { buildUpcomingColumns } from './buildUpcomingColumns.js';
25
+ import './index.scss';
26
+ const baseClass = 'schedule-publish';
27
+ const defaultLocaleOption = {
28
+ label: 'All',
29
+ value: 'all'
30
+ };
31
+ export const ScheduleDrawer = ({
32
+ slug
33
+ }) => {
34
+ const {
35
+ toggleModal
36
+ } = useModal();
37
+ const {
38
+ config: {
39
+ admin: {
40
+ dateFormat
41
+ },
42
+ localization,
43
+ routes: {
44
+ api
45
+ },
46
+ serverURL
47
+ }
48
+ } = useConfig();
49
+ const {
50
+ id,
51
+ collectionSlug,
52
+ globalSlug,
53
+ title
54
+ } = useDocumentInfo();
55
+ const {
56
+ i18n,
57
+ t
58
+ } = useTranslation();
59
+ const {
60
+ schedulePublish
61
+ } = useServerFunctions();
62
+ const [type, setType] = React.useState('publish');
63
+ const [date, setDate] = React.useState();
64
+ const [locale, setLocale] = React.useState(defaultLocaleOption);
65
+ const [processing, setProcessing] = React.useState(false);
66
+ const modalTitle = t('general:schedulePublishFor', {
67
+ title
68
+ });
69
+ const [upcoming, setUpcoming] = React.useState();
70
+ const [upcomingColumns, setUpcomingColumns] = React.useState();
71
+ const localeOptions = React.useMemo(() => {
72
+ if (localization) {
73
+ const options = localization.locales.map(({
74
+ code,
75
+ label
76
+ }) => ({
77
+ label: getTranslation(label, i18n),
78
+ value: code
79
+ }));
80
+ options.unshift(defaultLocaleOption);
81
+ return options;
82
+ }
83
+ return [];
84
+ }, [localization, i18n]);
85
+ const fetchUpcoming = React.useCallback(async () => {
86
+ const params = {
87
+ sort: 'waitUntil',
88
+ where: {
89
+ and: [{
90
+ taskSlug: {
91
+ equals: 'schedulePublish'
92
+ }
93
+ }, {
94
+ waitUntil: {
95
+ greater_than: new Date()
96
+ }
97
+ }]
98
+ }
99
+ };
100
+ if (collectionSlug) {
101
+ params.where.and.push({
102
+ 'input.doc.value': {
103
+ equals: id
104
+ }
105
+ });
106
+ params.where.and.push({
107
+ 'input.doc.relationTo': {
108
+ equals: collectionSlug
109
+ }
110
+ });
111
+ }
112
+ if (globalSlug) {
113
+ params.where.and.push({
114
+ 'input.global': {
115
+ equals: globalSlug
116
+ }
117
+ });
118
+ }
119
+ const {
120
+ docs
121
+ } = await requests.get(`${serverURL}${api}/payload-jobs`, {
122
+ params
123
+ }).then(res => res.json());
124
+ setUpcomingColumns(buildUpcomingColumns({
125
+ dateFormat,
126
+ docs,
127
+ i18n,
128
+ localization,
129
+ t
130
+ }));
131
+ setUpcoming(docs);
132
+ }, [api, collectionSlug, dateFormat, globalSlug, i18n, id, serverURL, t, localization]);
133
+ const handleSave = React.useCallback(async () => {
134
+ if (!date) {
135
+ return toast.error(t('general:noDateSelected'));
136
+ }
137
+ setProcessing(true);
138
+ let publishSpecificLocale;
139
+ if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {
140
+ publishSpecificLocale = locale.value;
141
+ }
142
+ try {
143
+ await schedulePublish({
144
+ type,
145
+ date,
146
+ doc: collectionSlug ? {
147
+ relationTo: collectionSlug,
148
+ value: id
149
+ } : undefined,
150
+ global: globalSlug || undefined,
151
+ locale: publishSpecificLocale
152
+ });
153
+ setDate(undefined);
154
+ toast.success(t('version:scheduledSuccessfully'));
155
+ void fetchUpcoming();
156
+ } catch (err) {
157
+ console.error(err);
158
+ toast.error(err.message);
159
+ }
160
+ setProcessing(false);
161
+ }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming]);
162
+ React.useEffect(() => {
163
+ if (!upcoming) {
164
+ const fetchInitialUpcoming = async () => {
165
+ await fetchUpcoming();
166
+ };
167
+ void fetchInitialUpcoming();
168
+ }
169
+ }, [upcoming, fetchUpcoming]);
170
+ return /*#__PURE__*/_jsxs(Drawer, {
171
+ className: baseClass,
172
+ gutter: false,
173
+ Header: /*#__PURE__*/_jsxs("div", {
174
+ className: `${baseClass}__drawer-header`,
175
+ children: [/*#__PURE__*/_jsx("h2", {
176
+ title: modalTitle,
177
+ children: modalTitle
178
+ }), /*#__PURE__*/_jsx(DrawerCloseButton, {
179
+ onClick: () => toggleModal(slug)
180
+ })]
181
+ }),
182
+ slug: slug,
183
+ children: [/*#__PURE__*/_jsxs(Gutter, {
184
+ className: `${baseClass}__scheduler`,
185
+ children: [/*#__PURE__*/_jsx(FieldLabel, {
186
+ label: t('version:type'),
187
+ required: true
188
+ }), /*#__PURE__*/_jsxs("ul", {
189
+ className: `${baseClass}__type`,
190
+ children: [/*#__PURE__*/_jsx("li", {
191
+ children: /*#__PURE__*/_jsx(Radio, {
192
+ id: `${slug}-type`,
193
+ isSelected: type === 'publish',
194
+ onChange: () => setType('publish'),
195
+ option: {
196
+ label: t('version:publish'),
197
+ value: 'publish'
198
+ },
199
+ path: `${slug}-type`,
200
+ readOnly: processing
201
+ })
202
+ }), /*#__PURE__*/_jsx("li", {
203
+ children: /*#__PURE__*/_jsx(Radio, {
204
+ id: `${slug}-type`,
205
+ isSelected: type === 'unpublish',
206
+ onChange: () => setType('unpublish'),
207
+ option: {
208
+ label: t('version:unpublish'),
209
+ value: 'unpublish'
210
+ },
211
+ path: `${slug}-type`,
212
+ readOnly: processing
213
+ })
214
+ })]
215
+ }), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx(FieldLabel, {
216
+ label: t('general:time'),
217
+ required: true
218
+ }), /*#__PURE__*/_jsx(DatePickerField, {
219
+ minDate: new Date(),
220
+ onChange: e => setDate(e),
221
+ pickerAppearance: "dayAndTime",
222
+ readOnly: processing,
223
+ timeIntervals: 5,
224
+ value: date
225
+ }), /*#__PURE__*/_jsx("br", {}), localeOptions.length > 0 && type === 'publish' && /*#__PURE__*/_jsxs(React.Fragment, {
226
+ children: [/*#__PURE__*/_jsx(FieldLabel, {
227
+ label: t('localization:localeToPublish')
228
+ }), /*#__PURE__*/_jsx(ReactSelect, {
229
+ onChange: e_0 => setLocale(e_0),
230
+ options: localeOptions,
231
+ value: locale
232
+ }), /*#__PURE__*/_jsx("br", {})]
233
+ }), /*#__PURE__*/_jsxs("div", {
234
+ className: `${baseClass}__actions`,
235
+ children: [/*#__PURE__*/_jsx(Button, {
236
+ buttonStyle: "primary",
237
+ disabled: processing,
238
+ onClick: handleSave,
239
+ type: "button",
240
+ children: t('general:save')
241
+ }), processing ? /*#__PURE__*/_jsx("span", {
242
+ children: t('general:saving')
243
+ }) : null]
244
+ })]
245
+ }), /*#__PURE__*/_jsxs(Gutter, {
246
+ className: `${baseClass}__upcoming`,
247
+ children: [/*#__PURE__*/_jsx("h4", {
248
+ children: t('general:upcomingEvents')
249
+ }), !upcoming && /*#__PURE__*/_jsx(ShimmerEffect, {}), upcoming?.length === 0 && /*#__PURE__*/_jsx(Banner, {
250
+ type: "info",
251
+ children: t('general:noUpcomingEventsScheduled')
252
+ }), upcoming?.length > 0 && /*#__PURE__*/_jsx(Table, {
253
+ appearance: "condensed",
254
+ columns: upcomingColumns,
255
+ data: upcoming
256
+ })]
257
+ })]
258
+ });
259
+ };
260
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["useModal","getTranslation","React","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","toggleModal","config","admin","dateFormat","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","localeOptions","useMemo","options","locales","map","code","unshift","fetchUpcoming","useCallback","params","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","docs","get","then","res","json","handleSave","error","publishSpecificLocale","doc","relationTo","undefined","global","success","err","console","message","useEffect","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { Column } from '../../Table/index.js'\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\nimport './index.scss'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: { dateFormat },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>('publish')\n const [date, setDate] = React.useState<Date>()\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const params: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n params.where.and.push({\n 'input.doc.value': {\n equals: id,\n },\n })\n\n params.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n params.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .get(`${serverURL}${api}/payload-jobs`, { params })\n .then((res) => res.json())\n\n setUpcomingColumns(buildUpcomingColumns({ dateFormat, docs, i18n, localization, t }))\n setUpcoming(docs)\n }, [api, collectionSlug, dateFormat, globalSlug, i18n, id, serverURL, t, localization])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: id,\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n })\n\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming])\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} required />\n <DatePickerField\n minDate={new Date()}\n onChange={(e) => setDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={date}\n />\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button buttonStyle=\"primary\" disabled={processing} onClick={handleSave} type=\"button\">\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}