@payloadcms/ui 3.0.0-beta.43 → 3.0.0-beta.44
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/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +90 -69
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
- package/dist/elements/DeleteDocument/index.js +1 -2
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.d.ts.map +1 -1
- package/dist/elements/DeleteMany/index.js +1 -2
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +1 -2
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/index.js +1 -2
- package/dist/elements/DocumentDrawer/index.js.map +1 -1
- package/dist/elements/Drawer/index.d.ts.map +1 -1
- package/dist/elements/Drawer/index.js +1 -3
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +1 -2
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/index.d.ts.map +1 -1
- package/dist/elements/EditMany/index.js +1 -2
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/EditUpload/index.d.ts.map +1 -1
- package/dist/elements/EditUpload/index.js +1 -5
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/GenerateConfirmation/index.d.ts.map +1 -1
- package/dist/elements/GenerateConfirmation/index.js +1 -2
- package/dist/elements/GenerateConfirmation/index.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +1 -2
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +1 -2
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/index.d.ts.map +1 -1
- package/dist/elements/ListDrawer/index.js +1 -2
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/Modal/index.d.ts +1 -7
- package/dist/elements/Modal/index.d.ts.map +1 -1
- package/dist/elements/Modal/index.js +1 -7
- package/dist/elements/Modal/index.js.map +1 -1
- package/dist/elements/Nav/NavToggler/index.d.ts.map +1 -1
- package/dist/elements/Nav/NavToggler/index.js +1 -2
- package/dist/elements/Nav/NavToggler/index.js.map +1 -1
- package/dist/elements/Nav/context.d.ts.map +1 -1
- package/dist/elements/Nav/context.js +1 -2
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +1 -2
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PublishMany/index.d.ts.map +1 -1
- package/dist/elements/PublishMany/index.js +1 -2
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/Status/index.d.ts.map +1 -1
- package/dist/elements/Status/index.js +1 -2
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +1 -2
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.js +2 -1
- package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
- package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/index.js +1 -2
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/WindowInfo/index.d.ts +1 -3
- package/dist/elements/WindowInfo/index.d.ts.map +1 -1
- package/dist/elements/WindowInfo/index.js +1 -7
- package/dist/elements/WindowInfo/index.js.map +1 -1
- package/dist/exports/elements.d.ts +1 -6
- package/dist/exports/elements.d.ts.map +1 -1
- package/dist/exports/elements.js +1 -4
- package/dist/exports/elements.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js +1 -2
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
- package/dist/fields/Blocks/RowActions.js +1 -2
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js +1 -0
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Tabs/index.d.ts.map +1 -1
- package/dist/fields/Tabs/index.js +10 -1
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/hooks/useHotkey.d.ts.map +1 -1
- package/dist/hooks/useHotkey.js +1 -2
- package/dist/hooks/useHotkey.js.map +1 -1
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +1 -2
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Root/index.d.ts.map +1 -1
- package/dist/providers/Root/index.js +3 -13
- package/dist/providers/Root/index.js.map +1 -1
- package/dist/utilities/reduceFieldsToValuesWithValidation.d.ts +15 -0
- package/dist/utilities/reduceFieldsToValuesWithValidation.d.ts.map +1 -0
- package/dist/utilities/reduceFieldsToValuesWithValidation.js +29 -0
- package/dist/utilities/reduceFieldsToValuesWithValidation.js.map +1 -0
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAG/E,OAAO,KAAsC,MAAM,OAAO,CAAA;AAiB1D,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkNpC,CAAA"}
|
|
@@ -1,33 +1,40 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { versionDefaults } from 'payload/versions';
|
|
3
4
|
import React, { useEffect, useRef, useState } from 'react';
|
|
4
5
|
import { toast } from 'react-toastify';
|
|
5
|
-
import { useAllFormFields, useForm, useFormModified } from '../../forms/Form/context.js';
|
|
6
|
+
import { useAllFormFields, useForm, useFormModified, useFormSubmitted } from '../../forms/Form/context.js';
|
|
7
|
+
import { useDebounce } from '../../hooks/useDebounce.js';
|
|
6
8
|
import { useConfig } from '../../providers/Config/index.js';
|
|
7
9
|
import { useDocumentEvents } from '../../providers/DocumentEvents/index.js';
|
|
8
10
|
import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
|
|
9
11
|
import { useLocale } from '../../providers/Locale/index.js';
|
|
10
12
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
11
13
|
import { formatTimeToNow } from '../../utilities/formatDate.js';
|
|
12
|
-
import {
|
|
14
|
+
import { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js';
|
|
13
15
|
const baseClass = 'autosave';
|
|
14
16
|
export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdatedAt })=>{
|
|
15
17
|
const { routes: { api }, serverURL } = useConfig();
|
|
16
18
|
const { docConfig, getVersions, versions } = useDocumentInfo();
|
|
17
19
|
const { reportUpdate } = useDocumentEvents();
|
|
18
20
|
const { dispatchFields, setSubmitted } = useForm();
|
|
21
|
+
const submitted = useFormSubmitted();
|
|
19
22
|
const versionsConfig = docConfig?.versions;
|
|
20
23
|
const [fields] = useAllFormFields();
|
|
21
|
-
const
|
|
24
|
+
const formModified = useFormModified();
|
|
22
25
|
const { code: locale } = useLocale();
|
|
23
26
|
const { i18n, t } = useTranslation();
|
|
24
|
-
let interval =
|
|
25
|
-
if (versionsConfig.drafts && versionsConfig
|
|
27
|
+
let interval = versionDefaults.autosaveInterval;
|
|
28
|
+
if (versionsConfig.drafts && versionsConfig.drafts.autosave) interval = versionsConfig.drafts.autosave.interval;
|
|
26
29
|
const [saving, setSaving] = useState(false);
|
|
27
30
|
const [lastSaved, setLastSaved] = useState();
|
|
31
|
+
const debouncedFields = useDebounce(fields, interval);
|
|
32
|
+
const modified = useDebounce(formModified, interval);
|
|
28
33
|
const fieldRef = useRef(fields);
|
|
29
34
|
const modifiedRef = useRef(modified);
|
|
30
35
|
const localeRef = useRef(locale);
|
|
36
|
+
const debouncedRef = useRef(debouncedFields);
|
|
37
|
+
debouncedRef.current = debouncedFields;
|
|
31
38
|
// Store fields in ref so the autosave func
|
|
32
39
|
// can always retrieve the most to date copies
|
|
33
40
|
// after the timeout has executed
|
|
@@ -41,6 +48,8 @@ export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdate
|
|
|
41
48
|
localeRef.current = locale;
|
|
42
49
|
// When debounced fields change, autosave
|
|
43
50
|
useEffect(()=>{
|
|
51
|
+
const abortController = new AbortController();
|
|
52
|
+
let autosaveTimeout = undefined;
|
|
44
53
|
const autosave = ()=>{
|
|
45
54
|
if (modified) {
|
|
46
55
|
setSaving(true);
|
|
@@ -58,81 +67,91 @@ export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdate
|
|
|
58
67
|
method = 'POST';
|
|
59
68
|
}
|
|
60
69
|
if (url) {
|
|
61
|
-
setTimeout(async ()=>{
|
|
70
|
+
autosaveTimeout = setTimeout(async ()=>{
|
|
62
71
|
if (modifiedRef.current) {
|
|
63
|
-
const
|
|
64
|
-
...
|
|
65
|
-
_status: 'draft'
|
|
72
|
+
const { data, valid } = {
|
|
73
|
+
...reduceFieldsToValuesWithValidation(fieldRef.current, true)
|
|
66
74
|
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
reportUpdate({
|
|
80
|
-
id,
|
|
81
|
-
entitySlug,
|
|
82
|
-
updatedAt: newDate.toISOString()
|
|
75
|
+
data._status = 'draft';
|
|
76
|
+
const skipSubmission = submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate;
|
|
77
|
+
if (!skipSubmission) {
|
|
78
|
+
const res = await fetch(url, {
|
|
79
|
+
body: JSON.stringify(data),
|
|
80
|
+
credentials: 'include',
|
|
81
|
+
headers: {
|
|
82
|
+
'Accept-Language': i18n.language,
|
|
83
|
+
'Content-Type': 'application/json'
|
|
84
|
+
},
|
|
85
|
+
method,
|
|
86
|
+
signal: abortController.signal
|
|
83
87
|
});
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const newNonFieldErrs = [];
|
|
92
|
-
if (err?.message) {
|
|
93
|
-
newNonFieldErrs.push(err);
|
|
94
|
-
}
|
|
95
|
-
if (Array.isArray(err?.data)) {
|
|
96
|
-
err.data.forEach((dataError)=>{
|
|
97
|
-
if (dataError?.field) {
|
|
98
|
-
newFieldErrs.push(dataError);
|
|
99
|
-
} else {
|
|
100
|
-
newNonFieldErrs.push(dataError);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
return [
|
|
105
|
-
[
|
|
106
|
-
...fieldErrs,
|
|
107
|
-
...newFieldErrs
|
|
108
|
-
],
|
|
109
|
-
[
|
|
110
|
-
...nonFieldErrs,
|
|
111
|
-
...newNonFieldErrs
|
|
112
|
-
]
|
|
113
|
-
];
|
|
114
|
-
}, [
|
|
115
|
-
[],
|
|
116
|
-
[]
|
|
117
|
-
]);
|
|
118
|
-
dispatchFields({
|
|
119
|
-
type: 'ADD_SERVER_ERRORS',
|
|
120
|
-
errors: fieldErrors
|
|
121
|
-
});
|
|
122
|
-
nonFieldErrors.forEach((err)=>{
|
|
123
|
-
toast.error(err.message || i18n.t('error:unknown'));
|
|
88
|
+
if (res.status === 200) {
|
|
89
|
+
const newDate = new Date();
|
|
90
|
+
setLastSaved(newDate.getTime());
|
|
91
|
+
reportUpdate({
|
|
92
|
+
id,
|
|
93
|
+
entitySlug,
|
|
94
|
+
updatedAt: newDate.toISOString()
|
|
124
95
|
});
|
|
125
|
-
|
|
96
|
+
void getVersions();
|
|
97
|
+
}
|
|
98
|
+
if (versionsConfig?.drafts && versionsConfig?.drafts?.validate && res.status === 400) {
|
|
99
|
+
const json = await res.json();
|
|
100
|
+
if (Array.isArray(json.errors)) {
|
|
101
|
+
const [fieldErrors, nonFieldErrors] = json.errors.reduce(([fieldErrs, nonFieldErrs], err)=>{
|
|
102
|
+
const newFieldErrs = [];
|
|
103
|
+
const newNonFieldErrs = [];
|
|
104
|
+
if (err?.message) {
|
|
105
|
+
newNonFieldErrs.push(err);
|
|
106
|
+
}
|
|
107
|
+
if (Array.isArray(err?.data)) {
|
|
108
|
+
err.data.forEach((dataError)=>{
|
|
109
|
+
if (dataError?.field) {
|
|
110
|
+
newFieldErrs.push(dataError);
|
|
111
|
+
} else {
|
|
112
|
+
newNonFieldErrs.push(dataError);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return [
|
|
117
|
+
[
|
|
118
|
+
...fieldErrs,
|
|
119
|
+
...newFieldErrs
|
|
120
|
+
],
|
|
121
|
+
[
|
|
122
|
+
...nonFieldErrs,
|
|
123
|
+
...newNonFieldErrs
|
|
124
|
+
]
|
|
125
|
+
];
|
|
126
|
+
}, [
|
|
127
|
+
[],
|
|
128
|
+
[]
|
|
129
|
+
]);
|
|
130
|
+
dispatchFields({
|
|
131
|
+
type: 'ADD_SERVER_ERRORS',
|
|
132
|
+
errors: fieldErrors
|
|
133
|
+
});
|
|
134
|
+
nonFieldErrors.forEach((err)=>{
|
|
135
|
+
toast.error(err.message || i18n.t('error:unknown'));
|
|
136
|
+
});
|
|
137
|
+
setSubmitted(true);
|
|
138
|
+
setSaving(false);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
126
141
|
}
|
|
127
|
-
setSubmitted(true);
|
|
128
142
|
}
|
|
129
143
|
}
|
|
130
144
|
setSaving(false);
|
|
131
|
-
},
|
|
145
|
+
}, 1000);
|
|
132
146
|
}
|
|
133
147
|
}
|
|
134
148
|
};
|
|
135
149
|
void autosave();
|
|
150
|
+
return ()=>{
|
|
151
|
+
clearTimeout(autosaveTimeout);
|
|
152
|
+
if (abortController.signal) abortController.abort();
|
|
153
|
+
setSaving(false);
|
|
154
|
+
};
|
|
136
155
|
}, [
|
|
137
156
|
api,
|
|
138
157
|
collection,
|
|
@@ -146,7 +165,9 @@ export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdate
|
|
|
146
165
|
reportUpdate,
|
|
147
166
|
serverURL,
|
|
148
167
|
setSubmitted,
|
|
149
|
-
versionsConfig?.drafts
|
|
168
|
+
versionsConfig?.drafts,
|
|
169
|
+
debouncedFields,
|
|
170
|
+
submitted
|
|
150
171
|
]);
|
|
151
172
|
useEffect(()=>{
|
|
152
173
|
if (versions?.docs?.[0]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload/types'\n\nimport React, { useEffect, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport { useAllFormFields, useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.js'\nimport './index.scss'\n\nconst baseClass = 'autosave'\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({\n id,\n collection,\n global: globalDoc,\n publishedDocUpdatedAt,\n}) => {\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const { docConfig, getVersions, versions } = useDocumentInfo()\n const { reportUpdate } = useDocumentEvents()\n const { dispatchFields, setSubmitted } = useForm()\n const versionsConfig = docConfig?.versions\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n let interval = 800\n if (versionsConfig.drafts && versionsConfig?.drafts?.autosave)\n interval = versionsConfig.drafts.autosave.interval\n\n const [saving, setSaving] = useState(false)\n const [lastSaved, setLastSaved] = useState<number>()\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n fieldRef.current = fields\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n // When debounced fields change, autosave\n useEffect(() => {\n const autosave = () => {\n if (modified) {\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'POST'\n }\n\n if (url) {\n setTimeout(async () => {\n if (modifiedRef.current) {\n const body = {\n ...reduceFieldsToValues(fieldRef.current, true),\n _status: 'draft',\n }\n const res = await fetch(url, {\n body: JSON.stringify(body),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method,\n })\n\n if (res.status === 200) {\n const newDate = new Date()\n setLastSaved(newDate.getTime())\n reportUpdate({\n id,\n entitySlug,\n updatedAt: newDate.toISOString(),\n })\n void getVersions()\n }\n\n if (\n versionsConfig?.drafts &&\n versionsConfig?.drafts?.validate &&\n res.status === 400\n ) {\n const json = await res.json()\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || i18n.t('error:unknown'))\n })\n\n return\n }\n setSubmitted(true)\n }\n }\n\n setSaving(false)\n }, interval)\n }\n }\n }\n\n void autosave()\n }, [\n api,\n collection,\n dispatchFields,\n getVersions,\n globalDoc,\n i18n,\n id,\n interval,\n modified,\n reportUpdate,\n serverURL,\n setSubmitted,\n versionsConfig?.drafts,\n ])\n\n useEffect(() => {\n if (versions?.docs?.[0]) {\n setLastSaved(new Date(versions.docs[0].updatedAt).getTime())\n } else if (publishedDocUpdatedAt) {\n setLastSaved(new Date(publishedDocUpdatedAt).getTime())\n }\n }, [publishedDocUpdatedAt, versions])\n\n return (\n <div className={baseClass}>\n {saving && t('general:saving')}\n {!saving && lastSaved && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastSaved, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"names":["React","useEffect","useRef","useState","toast","useAllFormFields","useForm","useFormModified","useConfig","useDocumentEvents","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValues","baseClass","Autosave","id","collection","global","globalDoc","publishedDocUpdatedAt","routes","api","serverURL","docConfig","getVersions","versions","reportUpdate","dispatchFields","setSubmitted","versionsConfig","fields","modified","code","locale","i18n","t","interval","drafts","autosave","saving","setSaving","lastSaved","setLastSaved","fieldRef","modifiedRef","localeRef","current","url","method","entitySlug","slug","setTimeout","body","_status","res","fetch","JSON","stringify","credentials","headers","language","status","newDate","Date","getTime","updatedAt","toISOString","validate","json","Array","isArray","errors","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","data","forEach","dataError","field","type","error","docs","div","className","Fragment","distance","date"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload/types'\n\nimport { versionDefaults } from 'payload/versions'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport {\n useAllFormFields,\n useForm,\n useFormModified,\n useFormSubmitted,\n} from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValuesWithValidation } from '../../utilities/reduceFieldsToValuesWithValidation.js'\nimport './index.scss'\n\nconst baseClass = 'autosave'\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({\n id,\n collection,\n global: globalDoc,\n publishedDocUpdatedAt,\n}) => {\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const { docConfig, getVersions, versions } = useDocumentInfo()\n const { reportUpdate } = useDocumentEvents()\n const { dispatchFields, setSubmitted } = useForm()\n const submitted = useFormSubmitted()\n const versionsConfig = docConfig?.versions\n\n const [fields] = useAllFormFields()\n const formModified = useFormModified()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n let interval = versionDefaults.autosaveInterval\n if (versionsConfig.drafts && versionsConfig.drafts.autosave)\n interval = versionsConfig.drafts.autosave.interval\n\n const [saving, setSaving] = useState(false)\n const [lastSaved, setLastSaved] = useState<number>()\n const debouncedFields = useDebounce(fields, interval)\n const modified = useDebounce(formModified, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n const debouncedRef = useRef(debouncedFields)\n\n debouncedRef.current = debouncedFields\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n fieldRef.current = fields\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n // When debounced fields change, autosave\n useEffect(() => {\n const abortController = new AbortController()\n let autosaveTimeout = undefined\n\n const autosave = () => {\n if (modified) {\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'POST'\n }\n\n if (url) {\n autosaveTimeout = setTimeout(async () => {\n if (modifiedRef.current) {\n const { data, valid } = {\n ...reduceFieldsToValuesWithValidation(fieldRef.current, true),\n }\n data._status = 'draft'\n const skipSubmission =\n submitted && !valid && versionsConfig?.drafts && versionsConfig?.drafts?.validate\n\n if (!skipSubmission) {\n const res = await fetch(url, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method,\n signal: abortController.signal,\n })\n\n if (res.status === 200) {\n const newDate = new Date()\n setLastSaved(newDate.getTime())\n reportUpdate({\n id,\n entitySlug,\n updatedAt: newDate.toISOString(),\n })\n void getVersions()\n }\n\n if (\n versionsConfig?.drafts &&\n versionsConfig?.drafts?.validate &&\n res.status === 400\n ) {\n const json = await res.json()\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || i18n.t('error:unknown'))\n })\n\n setSubmitted(true)\n setSaving(false)\n return\n }\n }\n }\n }\n\n setSaving(false)\n }, 1000)\n }\n }\n }\n\n void autosave()\n\n return () => {\n clearTimeout(autosaveTimeout)\n if (abortController.signal) abortController.abort()\n setSaving(false)\n }\n }, [\n api,\n collection,\n dispatchFields,\n getVersions,\n globalDoc,\n i18n,\n id,\n interval,\n modified,\n reportUpdate,\n serverURL,\n setSubmitted,\n versionsConfig?.drafts,\n debouncedFields,\n submitted,\n ])\n\n useEffect(() => {\n if (versions?.docs?.[0]) {\n setLastSaved(new Date(versions.docs[0].updatedAt).getTime())\n } else if (publishedDocUpdatedAt) {\n setLastSaved(new Date(publishedDocUpdatedAt).getTime())\n }\n }, [publishedDocUpdatedAt, versions])\n\n return (\n <div className={baseClass}>\n {saving && t('general:saving')}\n {!saving && lastSaved && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastSaved, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"names":["versionDefaults","React","useEffect","useRef","useState","toast","useAllFormFields","useForm","useFormModified","useFormSubmitted","useDebounce","useConfig","useDocumentEvents","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValuesWithValidation","baseClass","Autosave","id","collection","global","globalDoc","publishedDocUpdatedAt","routes","api","serverURL","docConfig","getVersions","versions","reportUpdate","dispatchFields","setSubmitted","submitted","versionsConfig","fields","formModified","code","locale","i18n","t","interval","autosaveInterval","drafts","autosave","saving","setSaving","lastSaved","setLastSaved","debouncedFields","modified","fieldRef","modifiedRef","localeRef","debouncedRef","current","abortController","AbortController","autosaveTimeout","undefined","url","method","entitySlug","slug","setTimeout","data","valid","_status","skipSubmission","validate","res","fetch","body","JSON","stringify","credentials","headers","language","signal","status","newDate","Date","getTime","updatedAt","toISOString","json","Array","isArray","errors","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","push","forEach","dataError","field","type","error","clearTimeout","abort","docs","div","className","Fragment","distance","date"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteDocument/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAK9D,OAAO,KAAgC,MAAM,OAAO,CAAA;AAYpD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteDocument/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAK9D,OAAO,KAAgC,MAAM,OAAO,CAAA;AAYpD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAgI1C,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
3
|
+
import { Modal, useModal } from '@faceless-ui/modal';
|
|
4
4
|
import { getTranslation } from '@payloadcms/translations';
|
|
5
5
|
import { useRouter } from 'next/navigation.js';
|
|
6
6
|
import React, { useCallback, useState } from 'react';
|
|
@@ -17,7 +17,6 @@ import { Translation } from '../Translation/index.js';
|
|
|
17
17
|
const baseClass = 'delete-document';
|
|
18
18
|
export const DeleteDocument = (props)=>{
|
|
19
19
|
const { id, buttonId, collectionSlug, singularLabel, title: titleFromProps } = props;
|
|
20
|
-
const { Modal, useModal } = facelessUIImport;
|
|
21
20
|
const { routes: { admin, api }, serverURL } = useConfig();
|
|
22
21
|
const { setModified } = useForm();
|
|
23
22
|
const [deleting, setDeleting] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DeleteDocument/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DeleteDocument/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { MinimalTemplate } from '../../templates/Minimal/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'delete-document'\n\nexport type Props = {\n buttonId?: string\n collectionSlug: SanitizedCollectionConfig['slug']\n id?: string\n singularLabel: SanitizedCollectionConfig['labels']['singular']\n title?: string\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n}\n\nexport const DeleteDocument: React.FC<Props> = (props) => {\n const { id, buttonId, collectionSlug, singularLabel, title: titleFromProps } = props\n\n const {\n routes: { admin, api },\n serverURL,\n } = useConfig()\n\n const { setModified } = useForm()\n const [deleting, setDeleting] = useState(false)\n const { toggleModal } = useModal()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { title } = useDocumentInfo()\n\n const titleToRender = titleFromProps || title || id\n\n const modalSlug = `delete-${id}`\n\n const addDefaultError = useCallback(() => {\n setDeleting(false)\n toast.error(t('error:deletingTitle', { title }))\n }, [t, title])\n\n const handleDelete = useCallback(async () => {\n setDeleting(true)\n setModified(false)\n try {\n await requests\n .delete(`${serverURL}${api}/${collectionSlug}/${id}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n setDeleting(false)\n toggleModal(modalSlug)\n toast.success(\n t('general:titleDeleted', { label: getTranslation(singularLabel, i18n), title }) ||\n json.message,\n )\n\n return router.push(`${admin}/collections/${collectionSlug}`)\n }\n toggleModal(modalSlug)\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n addDefaultError()\n }\n return false\n } catch (e) {\n return addDefaultError()\n }\n })\n } catch (e) {\n addDefaultError()\n }\n }, [\n setModified,\n serverURL,\n api,\n collectionSlug,\n id,\n toggleModal,\n modalSlug,\n t,\n singularLabel,\n i18n,\n title,\n router,\n admin,\n addDefaultError,\n ])\n\n if (id) {\n return (\n <React.Fragment>\n <PopupList.Button\n id={buttonId}\n onClick={() => {\n setDeleting(false)\n toggleModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </PopupList.Button>\n <Modal className={baseClass} slug={modalSlug}>\n <MinimalTemplate className={`${baseClass}__template`}>\n <h1>{t('general:confirmDeletion')}</h1>\n <p>\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: getTranslation(singularLabel, i18n),\n title: titleToRender,\n }}\n />\n </p>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"secondary\"\n id=\"confirm-cancel\"\n onClick={deleting ? undefined : () => toggleModal(modalSlug)}\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button id=\"confirm-delete\" onClick={deleting ? undefined : handleDelete}>\n {deleting ? t('general:deleting') : t('general:confirm')}\n </Button>\n </div>\n </MinimalTemplate>\n </Modal>\n </React.Fragment>\n )\n }\n\n return null\n}\n"],"names":["Modal","useModal","getTranslation","useRouter","React","useCallback","useState","toast","useForm","useConfig","useDocumentInfo","useTranslation","MinimalTemplate","requests","Button","PopupList","Translation","baseClass","DeleteDocument","props","id","buttonId","collectionSlug","singularLabel","title","titleFromProps","routes","admin","api","serverURL","setModified","deleting","setDeleting","toggleModal","router","i18n","t","titleToRender","modalSlug","addDefaultError","error","handleDelete","delete","headers","language","then","res","json","status","success","label","message","push","errors","forEach","e","Fragment","onClick","className","slug","h1","p","elements","children","strong","i18nKey","variables","div","buttonStyle","undefined","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAK3D,OAAO,KAAgC,MAAM,OAAO,CAAA;AAapD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,EAAE,sBAAsB,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DeleteMany/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAK3D,OAAO,KAAgC,MAAM,OAAO,CAAA;AAapD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,EAAE,sBAAsB,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkHtC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
3
|
+
import { Modal, useModal } from '@faceless-ui/modal';
|
|
4
4
|
import { getTranslation } from '@payloadcms/translations';
|
|
5
5
|
import { useRouter } from 'next/navigation.js';
|
|
6
6
|
import React, { useCallback, useState } from 'react';
|
|
@@ -17,7 +17,6 @@ import { Button } from '../Button/index.js';
|
|
|
17
17
|
import { Pill } from '../Pill/index.js';
|
|
18
18
|
const baseClass = 'delete-documents';
|
|
19
19
|
export const DeleteMany = (props)=>{
|
|
20
|
-
const { Modal, useModal } = facelessUIImport;
|
|
21
20
|
const { collection: { slug, labels: { plural } } = {} } = props;
|
|
22
21
|
const { permissions } = useAuth();
|
|
23
22
|
const { routes: { api }, serverURL } = useConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload/types'\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig } from 'payload/types'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { useSearchParams } from '../../providers/SearchParams/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { MinimalTemplate } from '../../templates/Minimal/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { Pill } from '../Pill/index.js'\nimport './index.scss'\n\nconst baseClass = 'delete-documents'\n\nexport type Props = {\n collection: ClientCollectionConfig\n title?: string\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { collection: { slug, labels: { plural } } = {} } = props\n\n const { permissions } = useAuth()\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const { toggleModal } = useModal()\n const { count, getQueryParams, selectAll, toggleAll } = useSelection()\n const { i18n, t } = useTranslation()\n const [deleting, setDeleting] = useState(false)\n const router = useRouter()\n const { stringifyParams } = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete?.permission\n\n const modalSlug = `delete-${slug}`\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:unknown'))\n }, [t])\n\n const handleDelete = useCallback(async () => {\n setDeleting(true)\n await requests\n .delete(`${serverURL}${api}/${slug}${getQueryParams()}`, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n .then(async (res) => {\n try {\n const json = await res.json()\n toggleModal(modalSlug)\n if (res.status < 400) {\n toast.success(json.message || t('general:deletedSuccessfully'), { autoClose: 3000 })\n toggleAll()\n router.replace(\n stringifyParams({\n params: {\n page: selectAll ? '1' : undefined,\n },\n replace: true,\n }),\n )\n clearRouteCache()\n return null\n }\n\n if (json.errors) {\n toast.error(json.message)\n } else {\n addDefaultError()\n }\n return false\n } catch (e) {\n return addDefaultError()\n }\n })\n }, [\n addDefaultError,\n api,\n getQueryParams,\n i18n.language,\n modalSlug,\n router,\n selectAll,\n serverURL,\n slug,\n stringifyParams,\n t,\n toggleAll,\n toggleModal,\n clearRouteCache,\n ])\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <Pill\n className={`${baseClass}__toggle`}\n onClick={() => {\n setDeleting(false)\n toggleModal(modalSlug)\n }}\n >\n {t('general:delete')}\n </Pill>\n <Modal className={baseClass} slug={modalSlug}>\n <MinimalTemplate className={`${baseClass}__template`}>\n <h1>{t('general:confirmDeletion')}</h1>\n <p>{t('general:aboutToDeleteCount', { count, label: getTranslation(plural, i18n) })}</p>\n <Button\n buttonStyle=\"secondary\"\n id=\"confirm-cancel\"\n onClick={deleting ? undefined : () => toggleModal(modalSlug)}\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button id=\"confirm-delete\" onClick={deleting ? undefined : handleDelete}>\n {deleting ? t('general:deleting') : t('general:confirm')}\n </Button>\n </MinimalTemplate>\n </Modal>\n </React.Fragment>\n )\n}\n"],"names":["Modal","useModal","getTranslation","useRouter","React","useCallback","useState","toast","useAuth","useConfig","useRouteCache","useSearchParams","SelectAllStatus","useSelection","useTranslation","MinimalTemplate","requests","Button","Pill","baseClass","DeleteMany","props","collection","slug","labels","plural","permissions","routes","api","serverURL","toggleModal","count","getQueryParams","selectAll","toggleAll","i18n","t","deleting","setDeleting","router","stringifyParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","permission","modalSlug","addDefaultError","error","handleDelete","headers","language","then","res","json","status","success","message","autoClose","replace","params","page","undefined","errors","e","None","Fragment","className","onClick","h1","p","label","buttonStyle","id","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAerD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAerD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAiG/D,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
3
|
+
import { useModal } from '@faceless-ui/modal';
|
|
4
4
|
import queryString from 'qs';
|
|
5
5
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
6
6
|
import { toast } from 'react-toastify';
|
|
@@ -17,7 +17,6 @@ import { IDLabel } from '../IDLabel/index.js';
|
|
|
17
17
|
import { RenderTitle } from '../RenderTitle/index.js';
|
|
18
18
|
import { baseClass } from './index.js';
|
|
19
19
|
export const DocumentDrawerContent = ({ id: existingDocID, Header, collectionSlug, drawerSlug, onSave: onSaveFromProps })=>{
|
|
20
|
-
const { useModal } = facelessUIImport;
|
|
21
20
|
const config = useConfig();
|
|
22
21
|
const { routes: { api: apiRoute }, serverURL } = config;
|
|
23
22
|
const { closeModal, modalState, toggleModal } = useModal();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js'\nimport { X } from '../../icons/X/index.js'\nimport { useComponentMap } from '../../providers/ComponentMap/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider, useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { IDLabel } from '../IDLabel/index.js'\nimport { RenderTitle } from '../RenderTitle/index.js'\nimport { baseClass } from './index.js'\n\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = ({\n id: existingDocID,\n Header,\n collectionSlug,\n drawerSlug,\n onSave: onSaveFromProps,\n}) => {\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const { t } = useTranslation()\n const [docID, setDocID] = useState(existingDocID)\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n const isEditing = Boolean(docID)\n const apiURL = docID\n ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}?locale=${locale.code}`\n : null\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${docID}` : ''\n }?${formattedQueryParams}`\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n const onLoadError = React.useCallback(\n (data) => {\n if (isOpen) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n },\n [closeModal, drawerSlug, isOpen, t],\n )\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setDocID(args.doc.id)\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header || <RenderTitle element=\"span\" />}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n <DocumentTitle />\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n id={docID}\n isEditing={isEditing}\n onLoadError={onLoadError}\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\nconst DocumentTitle: React.FC = () => {\n const { id, title } = useDocumentInfo()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"names":["useModal","queryString","React","useCallback","useEffect","useState","toast","useRelatedCollections","X","useComponentMap","useConfig","DocumentInfoProvider","useDocumentInfo","useFormQueryParams","useLocale","useTranslation","Gutter","IDLabel","RenderTitle","baseClass","DocumentDrawerContent","id","existingDocID","Header","collectionSlug","drawerSlug","onSave","onSaveFromProps","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","t","docID","setDocID","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","componentMap","Edit","isEditing","Boolean","apiURL","code","action","onLoadError","data","error","errors","message","args","doc","BeforeDocument","className","div","h2","element","button","aria-label","onClick","type","DocumentTitle","slug","disableActions","disableLeaveWithoutSaving","title","toString"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2D,MAAM,OAAO,CAAA;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAO9F,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,eAAe,CAAA;AAcrC,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAyBhE,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAQxD,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2D,MAAM,OAAO,CAAA;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAO9F,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,eAAe,CAAA;AAcrC,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAyBhE,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAQxD,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,iBAiE/B,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createElement as _createElement } from "react";
|
|
4
|
-
import
|
|
4
|
+
import { useModal } from '@faceless-ui/modal';
|
|
5
5
|
import { getTranslation } from '@payloadcms/translations';
|
|
6
6
|
import React, { useCallback, useEffect, useId, useMemo, useState } from 'react';
|
|
7
7
|
import { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js';
|
|
@@ -41,7 +41,6 @@ export const DocumentDrawer = (props)=>{
|
|
|
41
41
|
});
|
|
42
42
|
};
|
|
43
43
|
export const useDocumentDrawer = ({ id, collectionSlug })=>{
|
|
44
|
-
const { useModal } = facelessUIImport;
|
|
45
44
|
const drawerDepth = useEditDepth();
|
|
46
45
|
const uuid = useId();
|
|
47
46
|
const { closeModal, modalState, openModal, toggleModal } = useModal();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DocumentDrawer/index.tsx"],"sourcesContent":["'use client'\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DocumentDrawer/index.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback, useEffect, useId, useMemo, useState } from 'react'\n\nimport type { DocumentDrawerProps, DocumentTogglerProps, UseDocumentDrawer } from './types.js'\n\nimport { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { DocumentDrawerContent } from './DrawerContent.js'\nimport './index.scss'\n\nexport const baseClass = 'doc-drawer'\n\nconst formatDocumentDrawerSlug = ({\n id,\n collectionSlug,\n depth,\n uuid,\n}: {\n collectionSlug: string\n depth: number\n id: number | string\n uuid: string // supply when creating a new document and no id is available\n}) => `doc-drawer_${collectionSlug}_${depth}${id ? `_${id}` : ''}_${uuid}`\n\nexport const DocumentDrawerToggler: React.FC<DocumentTogglerProps> = ({\n id,\n children,\n className,\n collectionSlug,\n disabled,\n drawerSlug,\n ...rest\n}) => {\n const { i18n, t } = useTranslation()\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n\n return (\n <DrawerToggler\n aria-label={t(!id ? 'fields:addNewLabel' : 'general:editLabel', {\n label: getTranslation(collectionConfig.labels.singular, i18n),\n })}\n className={[className, `${baseClass}__toggler`].filter(Boolean).join(' ')}\n disabled={disabled}\n slug={drawerSlug}\n {...rest}\n >\n {children}\n </DrawerToggler>\n )\n}\n\nexport const DocumentDrawer: React.FC<DocumentDrawerProps> = (props) => {\n const { drawerSlug } = props\n\n return (\n <Drawer Header={null} className={baseClass} gutter={false} slug={drawerSlug}>\n <DocumentDrawerContent {...props} />\n </Drawer>\n )\n}\n\nexport const useDocumentDrawer: UseDocumentDrawer = ({ id, collectionSlug }) => {\n const drawerDepth = useEditDepth()\n const uuid = useId()\n const { closeModal, modalState, openModal, toggleModal } = useModal()\n const [isOpen, setIsOpen] = useState(false)\n\n const drawerSlug = formatDocumentDrawerSlug({\n id,\n collectionSlug,\n depth: drawerDepth,\n uuid,\n })\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n const toggleDrawer = useCallback(() => {\n toggleModal(drawerSlug)\n }, [toggleModal, drawerSlug])\n\n const closeDrawer = useCallback(() => {\n closeModal(drawerSlug)\n }, [closeModal, drawerSlug])\n\n const openDrawer = useCallback(() => {\n openModal(drawerSlug)\n }, [openModal, drawerSlug])\n\n const MemoizedDrawer = useMemo(() => {\n return (props) => (\n <DocumentDrawer\n {...props}\n collectionSlug={collectionSlug}\n drawerSlug={drawerSlug}\n id={id}\n key={drawerSlug}\n />\n )\n }, [id, drawerSlug, collectionSlug])\n\n const MemoizedDrawerToggler = useMemo(() => {\n return (props) => (\n <DocumentDrawerToggler\n {...props}\n collectionSlug={collectionSlug}\n drawerSlug={drawerSlug}\n id={id}\n />\n )\n }, [id, drawerSlug, collectionSlug])\n\n const MemoizedDrawerState = useMemo(\n () => ({\n closeDrawer,\n drawerDepth,\n drawerSlug,\n isDrawerOpen: isOpen,\n openDrawer,\n toggleDrawer,\n }),\n [drawerDepth, drawerSlug, isOpen, toggleDrawer, closeDrawer, openDrawer],\n )\n\n return [MemoizedDrawer, MemoizedDrawerToggler, MemoizedDrawerState]\n}\n"],"names":["useModal","getTranslation","React","useCallback","useEffect","useId","useMemo","useState","useRelatedCollections","useEditDepth","useTranslation","Drawer","DrawerToggler","DocumentDrawerContent","baseClass","formatDocumentDrawerSlug","id","collectionSlug","depth","uuid","DocumentDrawerToggler","children","className","disabled","drawerSlug","rest","i18n","t","collectionConfig","aria-label","label","labels","singular","filter","Boolean","join","slug","DocumentDrawer","props","Header","gutter","useDocumentDrawer","drawerDepth","closeModal","modalState","openModal","toggleModal","isOpen","setIsOpen","toggleDrawer","closeDrawer","openDrawer","MemoizedDrawer","key","MemoizedDrawerToggler","MemoizedDrawerState","isDrawerOpen"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Drawer/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAMrD,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,gBAAgB,oBAAqB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,MACzD,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Drawer/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAMrD,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,gBAAgB,oBAAqB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,MACzD,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAuBhD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiFlC,CAAA"}
|