@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.
- package/dist/elements/BulkUpload/index.d.ts +3 -1
- package/dist/elements/BulkUpload/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/index.js +30 -19
- package/dist/elements/BulkUpload/index.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts +14 -0
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -0
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +75 -0
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts +8 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.js +260 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.scss +48 -0
- package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +10 -0
- package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -0
- package/dist/elements/PublishButton/ScheduleDrawer/types.js +2 -0
- package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -0
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +116 -186
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/exports/client/index.js +22 -22
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +115 -109
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +19 -10
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts +5 -0
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js +31 -0
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/schedulePublishHandler.d.ts +13 -0
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -0
- package/dist/utilities/schedulePublishHandler.js +38 -0
- package/dist/utilities/schedulePublishHandler.js.map +1 -0
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +15 -12
- package/dist/views/List/index.js.map +1 -1
- 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;
|
|
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(
|
|
102
|
+
const $ = _c(16);
|
|
101
103
|
const {
|
|
102
104
|
children
|
|
103
105
|
} = t0;
|
|
104
106
|
const [collection, setCollection] = React.useState();
|
|
105
|
-
const [
|
|
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
|
-
|
|
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] !==
|
|
149
|
+
if ($[4] !== currentActivePath || $[5] !== onSuccessFunctionMap) {
|
|
144
150
|
t4 = (docIDs, errorCount) => {
|
|
145
|
-
if (
|
|
151
|
+
if (onSuccessFunctionMap && Object.hasOwn(onSuccessFunctionMap, currentActivePath)) {
|
|
152
|
+
const onSuccessFunction = onSuccessFunctionMap[currentActivePath];
|
|
146
153
|
onSuccessFunction(docIDs, errorCount);
|
|
147
154
|
}
|
|
148
155
|
};
|
|
149
|
-
$[4] =
|
|
150
|
-
$[5] =
|
|
156
|
+
$[4] = currentActivePath;
|
|
157
|
+
$[5] = onSuccessFunctionMap;
|
|
158
|
+
$[6] = t4;
|
|
151
159
|
} else {
|
|
152
|
-
t4 = $[
|
|
160
|
+
t4 = $[6];
|
|
153
161
|
}
|
|
154
162
|
let t5;
|
|
155
|
-
if ($[
|
|
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
|
-
$[
|
|
175
|
-
$[
|
|
176
|
-
$[
|
|
177
|
-
$[
|
|
178
|
-
$[
|
|
179
|
-
$[
|
|
180
|
-
$[
|
|
181
|
-
$[
|
|
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 = $[
|
|
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 @@
|
|
|
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":[]}
|