@payloadcms/plugin-import-export 3.52.0-internal.8a9caef → 3.53.0-canary.0
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/components/ExportSaveButton/index.d.ts.map +1 -1
- package/dist/components/ExportSaveButton/index.js +12 -3
- package/dist/components/ExportSaveButton/index.js.map +1 -1
- package/dist/components/Page/index.d.ts +4 -0
- package/dist/components/Page/index.d.ts.map +1 -0
- package/dist/components/Page/index.js +41 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/Page/index.scss +3 -0
- package/dist/components/Preview/index.d.ts.map +1 -1
- package/dist/components/Preview/index.js +5 -0
- package/dist/components/Preview/index.js.map +1 -1
- package/dist/components/SortBy/index.d.ts +1 -0
- package/dist/components/SortBy/index.d.ts.map +1 -1
- package/dist/components/SortBy/index.js +64 -22
- package/dist/components/SortBy/index.js.map +1 -1
- package/dist/components/SortBy/index.scss +1 -2
- package/dist/components/SortOrder/index.d.ts +4 -0
- package/dist/components/SortOrder/index.d.ts.map +1 -0
- package/dist/components/SortOrder/index.js +123 -0
- package/dist/components/SortOrder/index.js.map +1 -0
- package/dist/components/SortOrder/index.scss +3 -0
- package/dist/export/createExport.d.ts +2 -0
- package/dist/export/createExport.d.ts.map +1 -1
- package/dist/export/createExport.js +66 -15
- package/dist/export/createExport.js.map +1 -1
- package/dist/export/download.d.ts.map +1 -1
- package/dist/export/download.js +34 -16
- package/dist/export/download.js.map +1 -1
- package/dist/export/flattenObject.d.ts.map +1 -1
- package/dist/export/flattenObject.js +32 -20
- package/dist/export/flattenObject.js.map +1 -1
- package/dist/export/getCustomFieldFunctions.d.ts.map +1 -1
- package/dist/export/getCustomFieldFunctions.js +11 -1
- package/dist/export/getCustomFieldFunctions.js.map +1 -1
- package/dist/export/getFields.d.ts.map +1 -1
- package/dist/export/getFields.js +56 -10
- package/dist/export/getFields.js.map +1 -1
- package/dist/exports/rsc.d.ts +2 -0
- package/dist/exports/rsc.d.ts.map +1 -1
- package/dist/exports/rsc.js +2 -0
- package/dist/exports/rsc.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/translations/languages/ar.d.ts.map +1 -1
- package/dist/translations/languages/ar.js +2 -0
- package/dist/translations/languages/ar.js.map +1 -1
- package/dist/translations/languages/az.d.ts.map +1 -1
- package/dist/translations/languages/az.js +2 -0
- package/dist/translations/languages/az.js.map +1 -1
- package/dist/translations/languages/bg.d.ts.map +1 -1
- package/dist/translations/languages/bg.js +2 -0
- package/dist/translations/languages/bg.js.map +1 -1
- package/dist/translations/languages/ca.d.ts.map +1 -1
- package/dist/translations/languages/ca.js +2 -0
- package/dist/translations/languages/ca.js.map +1 -1
- package/dist/translations/languages/cs.d.ts.map +1 -1
- package/dist/translations/languages/cs.js +2 -0
- package/dist/translations/languages/cs.js.map +1 -1
- package/dist/translations/languages/da.d.ts.map +1 -1
- package/dist/translations/languages/da.js +2 -0
- package/dist/translations/languages/da.js.map +1 -1
- package/dist/translations/languages/de.d.ts.map +1 -1
- package/dist/translations/languages/de.js +2 -0
- package/dist/translations/languages/de.js.map +1 -1
- package/dist/translations/languages/en.d.ts +2 -0
- package/dist/translations/languages/en.d.ts.map +1 -1
- package/dist/translations/languages/en.js +2 -0
- package/dist/translations/languages/en.js.map +1 -1
- package/dist/translations/languages/es.d.ts.map +1 -1
- package/dist/translations/languages/es.js +2 -0
- package/dist/translations/languages/es.js.map +1 -1
- package/dist/translations/languages/et.d.ts.map +1 -1
- package/dist/translations/languages/et.js +2 -0
- package/dist/translations/languages/et.js.map +1 -1
- package/dist/translations/languages/fa.d.ts.map +1 -1
- package/dist/translations/languages/fa.js +2 -0
- package/dist/translations/languages/fa.js.map +1 -1
- package/dist/translations/languages/fr.d.ts.map +1 -1
- package/dist/translations/languages/fr.js +2 -0
- package/dist/translations/languages/fr.js.map +1 -1
- package/dist/translations/languages/he.d.ts.map +1 -1
- package/dist/translations/languages/he.js +2 -0
- package/dist/translations/languages/he.js.map +1 -1
- package/dist/translations/languages/hr.d.ts.map +1 -1
- package/dist/translations/languages/hr.js +2 -0
- package/dist/translations/languages/hr.js.map +1 -1
- package/dist/translations/languages/hu.d.ts.map +1 -1
- package/dist/translations/languages/hu.js +2 -0
- package/dist/translations/languages/hu.js.map +1 -1
- package/dist/translations/languages/hy.d.ts.map +1 -1
- package/dist/translations/languages/hy.js +2 -0
- package/dist/translations/languages/hy.js.map +1 -1
- package/dist/translations/languages/it.d.ts.map +1 -1
- package/dist/translations/languages/it.js +2 -0
- package/dist/translations/languages/it.js.map +1 -1
- package/dist/translations/languages/ja.d.ts.map +1 -1
- package/dist/translations/languages/ja.js +2 -0
- package/dist/translations/languages/ja.js.map +1 -1
- package/dist/translations/languages/ko.d.ts.map +1 -1
- package/dist/translations/languages/ko.js +2 -0
- package/dist/translations/languages/ko.js.map +1 -1
- package/dist/translations/languages/lt.d.ts.map +1 -1
- package/dist/translations/languages/lt.js +2 -0
- package/dist/translations/languages/lt.js.map +1 -1
- package/dist/translations/languages/lv.d.ts.map +1 -1
- package/dist/translations/languages/lv.js +2 -0
- package/dist/translations/languages/lv.js.map +1 -1
- package/dist/translations/languages/my.d.ts.map +1 -1
- package/dist/translations/languages/my.js +2 -0
- package/dist/translations/languages/my.js.map +1 -1
- package/dist/translations/languages/nb.d.ts.map +1 -1
- package/dist/translations/languages/nb.js +2 -0
- package/dist/translations/languages/nb.js.map +1 -1
- package/dist/translations/languages/nl.d.ts.map +1 -1
- package/dist/translations/languages/nl.js +2 -0
- package/dist/translations/languages/nl.js.map +1 -1
- package/dist/translations/languages/pl.d.ts.map +1 -1
- package/dist/translations/languages/pl.js +2 -0
- package/dist/translations/languages/pl.js.map +1 -1
- package/dist/translations/languages/pt.d.ts.map +1 -1
- package/dist/translations/languages/pt.js +2 -0
- package/dist/translations/languages/pt.js.map +1 -1
- package/dist/translations/languages/ro.d.ts.map +1 -1
- package/dist/translations/languages/ro.js +2 -0
- package/dist/translations/languages/ro.js.map +1 -1
- package/dist/translations/languages/rs.d.ts.map +1 -1
- package/dist/translations/languages/rs.js +2 -0
- package/dist/translations/languages/rs.js.map +1 -1
- package/dist/translations/languages/rsLatin.d.ts.map +1 -1
- package/dist/translations/languages/rsLatin.js +2 -0
- package/dist/translations/languages/rsLatin.js.map +1 -1
- package/dist/translations/languages/ru.d.ts.map +1 -1
- package/dist/translations/languages/ru.js +2 -0
- package/dist/translations/languages/ru.js.map +1 -1
- package/dist/translations/languages/sk.d.ts.map +1 -1
- package/dist/translations/languages/sk.js +2 -0
- package/dist/translations/languages/sk.js.map +1 -1
- package/dist/translations/languages/sl.d.ts.map +1 -1
- package/dist/translations/languages/sl.js +2 -0
- package/dist/translations/languages/sl.js.map +1 -1
- package/dist/translations/languages/sv.d.ts.map +1 -1
- package/dist/translations/languages/sv.js +2 -0
- package/dist/translations/languages/sv.js.map +1 -1
- package/dist/translations/languages/th.d.ts.map +1 -1
- package/dist/translations/languages/th.js +2 -0
- package/dist/translations/languages/th.js.map +1 -1
- package/dist/translations/languages/tr.d.ts.map +1 -1
- package/dist/translations/languages/tr.js +2 -0
- package/dist/translations/languages/tr.js.map +1 -1
- package/dist/translations/languages/translation-schema.json +7 -0
- package/dist/translations/languages/uk.d.ts.map +1 -1
- package/dist/translations/languages/uk.js +2 -0
- package/dist/translations/languages/uk.js.map +1 -1
- package/dist/translations/languages/vi.d.ts.map +1 -1
- package/dist/translations/languages/vi.js +2 -0
- package/dist/translations/languages/vi.js.map +1 -1
- package/dist/translations/languages/zh.d.ts.map +1 -1
- package/dist/translations/languages/zh.js +2 -0
- package/dist/translations/languages/zh.js.map +1 -1
- package/dist/translations/languages/zhTw.d.ts.map +1 -1
- package/dist/translations/languages/zhTw.js +2 -0
- package/dist/translations/languages/zhTw.js.map +1 -1
- package/dist/translations/types.d.ts +2 -0
- package/dist/translations/types.d.ts.map +1 -1
- package/dist/translations/types.js.map +1 -1
- package/dist/utilities/getFlattenedFieldKeys.js +1 -1
- package/dist/utilities/getFlattenedFieldKeys.js.map +1 -1
- package/dist/utilities/sortHelpers.d.ts +6 -0
- package/dist/utilities/sortHelpers.d.ts.map +1 -0
- package/dist/utilities/sortHelpers.js +14 -0
- package/dist/utilities/sortHelpers.js.map +1 -0
- package/dist/utilities/validateLimitValue.d.ts +3 -0
- package/dist/utilities/validateLimitValue.d.ts.map +1 -0
- package/dist/utilities/validateLimitValue.js +15 -0
- package/dist/utilities/validateLimitValue.js.map +1 -0
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ExportSaveButton/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ExportSaveButton/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA0GpC,CAAA"}
|
|
@@ -43,7 +43,17 @@ export const ExportSaveButton = ()=>{
|
|
|
43
43
|
toast.dismiss(toastID);
|
|
44
44
|
}
|
|
45
45
|
if (!response.ok) {
|
|
46
|
-
|
|
46
|
+
// Try to parse the error message from the JSON response
|
|
47
|
+
let errorMsg = 'Failed to download file';
|
|
48
|
+
try {
|
|
49
|
+
const errorJson = await response.json();
|
|
50
|
+
if (errorJson?.errors?.[0]?.message) {
|
|
51
|
+
errorMsg = errorJson.errors[0].message;
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
54
|
+
// Ignore JSON parse errors, fallback to generic message
|
|
55
|
+
}
|
|
56
|
+
throw new Error(errorMsg);
|
|
47
57
|
}
|
|
48
58
|
const fileStream = response.body;
|
|
49
59
|
const reader = fileStream?.getReader();
|
|
@@ -72,8 +82,7 @@ export const ExportSaveButton = ()=>{
|
|
|
72
82
|
document.body.removeChild(a);
|
|
73
83
|
URL.revokeObjectURL(url);
|
|
74
84
|
} catch (error) {
|
|
75
|
-
|
|
76
|
-
toast.error('Error downloading file');
|
|
85
|
+
toast.error(error.message || 'Error downloading file');
|
|
77
86
|
}
|
|
78
87
|
};
|
|
79
88
|
return /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ExportSaveButton/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n SaveButton,\n toast,\n Translation,\n useConfig,\n useForm,\n useFormModified,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nexport const ExportSaveButton: React.FC = () => {\n const { t } = useTranslation<PluginImportExportTranslations, PluginImportExportTranslationKeys>()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const { getData, setModified } = useForm()\n const modified = useFormModified()\n\n const exportsCollectionConfig = getEntityConfig({ collectionSlug: 'exports' })\n\n const disableSave = exportsCollectionConfig?.admin?.custom?.disableSave === true\n\n const disableDownload = exportsCollectionConfig?.admin?.custom?.disableDownload === true\n\n const label = t('general:save')\n\n const handleDownload = async () => {\n let timeoutID: null | ReturnType<typeof setTimeout> = null\n let toastID: null | number | string = null\n\n try {\n setModified(false) // Reset modified state\n const data = getData()\n\n // Set a timeout to show toast if the request takes longer than 200ms\n timeoutID = setTimeout(() => {\n toastID = toast.success('Your export is being processed...')\n }, 200)\n\n const response = await fetch(`${serverURL}${api}/exports/download`, {\n body: JSON.stringify({\n data,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n // Clear the timeout if fetch completes quickly\n if (timeoutID) {\n clearTimeout(timeoutID)\n }\n\n // Dismiss the toast if it was shown\n if (toastID) {\n toast.dismiss(toastID)\n }\n\n if (!response.ok) {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ExportSaveButton/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n Button,\n SaveButton,\n toast,\n Translation,\n useConfig,\n useForm,\n useFormModified,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nexport const ExportSaveButton: React.FC = () => {\n const { t } = useTranslation<PluginImportExportTranslations, PluginImportExportTranslationKeys>()\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const { getData, setModified } = useForm()\n const modified = useFormModified()\n\n const exportsCollectionConfig = getEntityConfig({ collectionSlug: 'exports' })\n\n const disableSave = exportsCollectionConfig?.admin?.custom?.disableSave === true\n\n const disableDownload = exportsCollectionConfig?.admin?.custom?.disableDownload === true\n\n const label = t('general:save')\n\n const handleDownload = async () => {\n let timeoutID: null | ReturnType<typeof setTimeout> = null\n let toastID: null | number | string = null\n\n try {\n setModified(false) // Reset modified state\n const data = getData()\n\n // Set a timeout to show toast if the request takes longer than 200ms\n timeoutID = setTimeout(() => {\n toastID = toast.success('Your export is being processed...')\n }, 200)\n\n const response = await fetch(`${serverURL}${api}/exports/download`, {\n body: JSON.stringify({\n data,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n // Clear the timeout if fetch completes quickly\n if (timeoutID) {\n clearTimeout(timeoutID)\n }\n\n // Dismiss the toast if it was shown\n if (toastID) {\n toast.dismiss(toastID)\n }\n\n if (!response.ok) {\n // Try to parse the error message from the JSON response\n let errorMsg = 'Failed to download file'\n try {\n const errorJson = await response.json()\n if (errorJson?.errors?.[0]?.message) {\n errorMsg = errorJson.errors[0].message\n }\n } catch {\n // Ignore JSON parse errors, fallback to generic message\n }\n throw new Error(errorMsg)\n }\n\n const fileStream = response.body\n const reader = fileStream?.getReader()\n const decoder = new TextDecoder()\n let result = ''\n\n while (reader) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n result += decoder.decode(value, { stream: true })\n }\n\n const blob = new Blob([result], { type: 'text/plain' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${data.name}.${data.format}`\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n URL.revokeObjectURL(url)\n } catch (error: any) {\n toast.error(error.message || 'Error downloading file')\n }\n }\n\n return (\n <React.Fragment>\n {!disableSave && <SaveButton label={label} />}\n {!disableDownload && (\n <Button disabled={!modified} onClick={handleDownload} size=\"medium\" type=\"button\">\n <Translation i18nKey=\"upload:download\" t={t} />\n </Button>\n )}\n </React.Fragment>\n )\n}\n"],"names":["Button","SaveButton","toast","Translation","useConfig","useForm","useFormModified","useTranslation","React","ExportSaveButton","t","config","routes","api","serverURL","getEntityConfig","getData","setModified","modified","exportsCollectionConfig","collectionSlug","disableSave","admin","custom","disableDownload","label","handleDownload","timeoutID","toastID","data","setTimeout","success","response","fetch","body","JSON","stringify","credentials","headers","method","clearTimeout","dismiss","ok","errorMsg","errorJson","json","errors","message","Error","fileStream","reader","getReader","decoder","TextDecoder","result","done","value","read","decode","stream","blob","Blob","type","url","URL","createObjectURL","a","document","createElement","href","download","name","format","appendChild","click","removeChild","revokeObjectURL","error","Fragment","disabled","onClick","size","i18nKey"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Page/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAKzD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,IAAI,EAAE,0BA6BlB,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { NumberField, useField } from '@payloadcms/ui';
|
|
4
|
+
import React, { useEffect } from 'react';
|
|
5
|
+
import './index.scss';
|
|
6
|
+
const baseClass = 'page-field';
|
|
7
|
+
export const Page = (props)=>{
|
|
8
|
+
const { setValue } = useField();
|
|
9
|
+
const { value: limitValue } = useField({
|
|
10
|
+
path: 'limit'
|
|
11
|
+
});
|
|
12
|
+
// Effect to reset page to 1 if limit is removed
|
|
13
|
+
useEffect(()=>{
|
|
14
|
+
if (!limitValue) {
|
|
15
|
+
setValue(1) // Reset page to 1
|
|
16
|
+
;
|
|
17
|
+
}
|
|
18
|
+
}, [
|
|
19
|
+
limitValue,
|
|
20
|
+
setValue
|
|
21
|
+
]);
|
|
22
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
23
|
+
className: baseClass,
|
|
24
|
+
children: /*#__PURE__*/ _jsx(NumberField, {
|
|
25
|
+
field: {
|
|
26
|
+
name: props.field.name,
|
|
27
|
+
admin: {
|
|
28
|
+
autoComplete: undefined,
|
|
29
|
+
placeholder: undefined,
|
|
30
|
+
step: 1
|
|
31
|
+
},
|
|
32
|
+
label: props.field.label,
|
|
33
|
+
min: 1
|
|
34
|
+
},
|
|
35
|
+
onChange: (value)=>setValue(value ?? 1),
|
|
36
|
+
path: props.path
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Page/index.tsx"],"sourcesContent":["'use client'\n\nimport type { NumberFieldClientComponent } from 'payload'\n\nimport { NumberField, useField } from '@payloadcms/ui'\nimport React, { useEffect } from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'page-field'\n\nexport const Page: NumberFieldClientComponent = (props) => {\n const { setValue } = useField<number>()\n const { value: limitValue } = useField<number>({ path: 'limit' })\n\n // Effect to reset page to 1 if limit is removed\n useEffect(() => {\n if (!limitValue) {\n setValue(1) // Reset page to 1\n }\n }, [limitValue, setValue])\n\n return (\n <div className={baseClass}>\n <NumberField\n field={{\n name: props.field.name,\n admin: {\n autoComplete: undefined,\n placeholder: undefined,\n step: 1,\n },\n label: props.field.label,\n min: 1,\n }}\n onChange={(value) => setValue(value ?? 1)} // Update the page value on change\n path={props.path}\n />\n </div>\n )\n}\n"],"names":["NumberField","useField","React","useEffect","baseClass","Page","props","setValue","value","limitValue","path","div","className","field","name","admin","autoComplete","undefined","placeholder","step","label","min","onChange"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,iBAAgB;AACtD,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAExC,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,OAAmC,CAACC;IAC/C,MAAM,EAAEC,QAAQ,EAAE,GAAGN;IACrB,MAAM,EAAEO,OAAOC,UAAU,EAAE,GAAGR,SAAiB;QAAES,MAAM;IAAQ;IAE/D,gDAAgD;IAChDP,UAAU;QACR,IAAI,CAACM,YAAY;YACfF,SAAS,GAAG,kBAAkB;;QAChC;IACF,GAAG;QAACE;QAAYF;KAAS;IAEzB,qBACE,KAACI;QAAIC,WAAWR;kBACd,cAAA,KAACJ;YACCa,OAAO;gBACLC,MAAMR,MAAMO,KAAK,CAACC,IAAI;gBACtBC,OAAO;oBACLC,cAAcC;oBACdC,aAAaD;oBACbE,MAAM;gBACR;gBACAC,OAAOd,MAAMO,KAAK,CAACO,KAAK;gBACxBC,KAAK;YACP;YACAC,UAAU,CAACd,QAAUD,SAASC,SAAS;YACvCE,MAAMJ,MAAMI,IAAI;;;AAIxB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Preview/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Preview/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,OAAO,yBAiLnB,CAAA"}
|
|
@@ -13,6 +13,9 @@ export const Preview = ()=>{
|
|
|
13
13
|
const { value: where } = useField({
|
|
14
14
|
path: 'where'
|
|
15
15
|
});
|
|
16
|
+
const { value: page } = useField({
|
|
17
|
+
path: 'page'
|
|
18
|
+
});
|
|
16
19
|
const { value: limit } = useField({
|
|
17
20
|
path: 'limit'
|
|
18
21
|
});
|
|
@@ -58,6 +61,7 @@ export const Preview = ()=>{
|
|
|
58
61
|
format,
|
|
59
62
|
limit,
|
|
60
63
|
locale,
|
|
64
|
+
page,
|
|
61
65
|
sort,
|
|
62
66
|
where
|
|
63
67
|
}),
|
|
@@ -134,6 +138,7 @@ export const Preview = ()=>{
|
|
|
134
138
|
i18n,
|
|
135
139
|
limit,
|
|
136
140
|
locale,
|
|
141
|
+
page,
|
|
137
142
|
sort,
|
|
138
143
|
where
|
|
139
144
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Preview/index.tsx"],"sourcesContent":["'use client'\nimport type { Column } from '@payloadcms/ui'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CodeEditorLazy,\n Table,\n Translation,\n useConfig,\n useField,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nimport { buildDisabledFieldRegex } from '../../utilities/buildDisabledFieldRegex.js'\nimport './index.scss'\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'preview'\n\nexport const Preview = () => {\n const { collection } = useImportExport()\n const { config } = useConfig()\n const { value: where } = useField({ path: 'where' })\n const { value: limit } = useField<number>({ path: 'limit' })\n const { value: fields } = useField<string[]>({ path: 'fields' })\n const { value: sort } = useField({ path: 'sort' })\n const { value: draft } = useField({ path: 'drafts' })\n const { value: locale } = useField({ path: 'locale' })\n const { value: format } = useField({ path: 'format' })\n const [dataToRender, setDataToRender] = React.useState<any[]>([])\n const [resultCount, setResultCount] = React.useState<any>('')\n const [columns, setColumns] = React.useState<Column[]>([])\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const collectionSlug = typeof collection === 'string' && collection\n const collectionConfig = config.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n const disabledFieldRegexes: RegExp[] = React.useMemo(() => {\n const disabledFieldPaths =\n collectionConfig?.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n return disabledFieldPaths.map(buildDisabledFieldRegex)\n }, [collectionConfig])\n\n const isCSV = format === 'csv'\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!collectionSlug || !collectionConfig) {\n return\n }\n\n try {\n const res = await fetch('/api/preview-data', {\n body: JSON.stringify({\n collectionSlug,\n draft,\n fields,\n format,\n limit,\n locale,\n sort,\n where,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n\n if (!res.ok) {\n return\n }\n\n const { docs, totalDocs }: { docs: Record<string, unknown>[]; totalDocs: number } =\n await res.json()\n\n setResultCount(limit && limit < totalDocs ? limit : totalDocs)\n\n const allKeys = Array.from(new Set(docs.flatMap((doc) => Object.keys(doc))))\n const defaultMetaFields = ['createdAt', 'updatedAt', '_status', 'id']\n\n // Match CSV column ordering by building keys based on fields and regex\n const fieldToRegex = (field: string): RegExp => {\n const parts = field.split('.').map((part) => `${part}(?:_\\\\d+)?`)\n return new RegExp(`^${parts.join('_')}`)\n }\n\n // Construct final list of field keys to match field order + meta order\n const selectedKeys =\n Array.isArray(fields) && fields.length > 0\n ? fields.flatMap((field) => {\n const regex = fieldToRegex(field)\n return allKeys.filter(\n (key) =>\n regex.test(key) &&\n !disabledFieldRegexes.some((disabledRegex) => disabledRegex.test(key)),\n )\n })\n : allKeys.filter(\n (key) =>\n !defaultMetaFields.includes(key) &&\n !disabledFieldRegexes.some((regex) => regex.test(key)),\n )\n\n const fieldKeys =\n Array.isArray(fields) && fields.length > 0\n ? selectedKeys // strictly use selected fields only\n : [\n ...selectedKeys,\n ...defaultMetaFields.filter(\n (key) => allKeys.includes(key) && !selectedKeys.includes(key),\n ),\n ]\n\n // Build columns based on flattened keys\n const newColumns: Column[] = fieldKeys.map((key) => ({\n accessor: key,\n active: true,\n field: { name: key } as ClientField,\n Heading: getTranslation(key, i18n),\n renderedCells: docs.map((doc: Record<string, unknown>) => {\n const val = doc[key]\n\n if (val === undefined || val === null) {\n return null\n }\n\n // Avoid ESLint warning by type-checking before calling String()\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n return String(val)\n }\n\n if (Array.isArray(val)) {\n return val.map(String).join(', ')\n }\n\n return JSON.stringify(val)\n }),\n }))\n\n setColumns(newColumns)\n setDataToRender(docs)\n } catch (error) {\n console.error('Error fetching preview data:', error)\n }\n }\n\n void fetchData()\n }, [\n collectionConfig,\n collectionSlug,\n disabledFieldRegexes,\n draft,\n fields,\n format,\n i18n,\n limit,\n locale,\n sort,\n where,\n ])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {resultCount && (\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:totalDocumentsCount\"\n t={t}\n variables={{\n count: resultCount,\n }}\n />\n )}\n </div>\n {dataToRender &&\n (isCSV ? (\n <Table columns={columns} data={dataToRender} />\n ) : (\n <CodeEditorLazy language=\"json\" readOnly value={JSON.stringify(dataToRender, null, 2)} />\n ))}\n </div>\n )\n}\n"],"names":["getTranslation","CodeEditorLazy","Table","Translation","useConfig","useField","useTranslation","React","buildDisabledFieldRegex","useImportExport","baseClass","Preview","collection","config","value","where","path","limit","fields","sort","draft","locale","format","dataToRender","setDataToRender","useState","resultCount","setResultCount","columns","setColumns","i18n","t","collectionSlug","collectionConfig","collections","find","slug","disabledFieldRegexes","useMemo","disabledFieldPaths","admin","custom","disabledFields","map","isCSV","useEffect","fetchData","res","fetch","body","JSON","stringify","credentials","headers","method","ok","docs","totalDocs","json","allKeys","Array","from","Set","flatMap","doc","Object","keys","defaultMetaFields","fieldToRegex","field","parts","split","part","RegExp","join","selectedKeys","isArray","length","regex","filter","key","test","some","disabledRegex","includes","fieldKeys","newColumns","accessor","active","name","Heading","renderedCells","val","undefined","String","error","console","div","className","h3","i18nKey","variables","count","data","language","readOnly"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Preview/index.tsx"],"sourcesContent":["'use client'\nimport type { Column } from '@payloadcms/ui'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CodeEditorLazy,\n Table,\n Translation,\n useConfig,\n useField,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nimport { buildDisabledFieldRegex } from '../../utilities/buildDisabledFieldRegex.js'\nimport './index.scss'\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'preview'\n\nexport const Preview = () => {\n const { collection } = useImportExport()\n const { config } = useConfig()\n const { value: where } = useField({ path: 'where' })\n const { value: page } = useField({ path: 'page' })\n const { value: limit } = useField<number>({ path: 'limit' })\n const { value: fields } = useField<string[]>({ path: 'fields' })\n const { value: sort } = useField({ path: 'sort' })\n const { value: draft } = useField({ path: 'drafts' })\n const { value: locale } = useField({ path: 'locale' })\n const { value: format } = useField({ path: 'format' })\n const [dataToRender, setDataToRender] = React.useState<any[]>([])\n const [resultCount, setResultCount] = React.useState<any>('')\n const [columns, setColumns] = React.useState<Column[]>([])\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const collectionSlug = typeof collection === 'string' && collection\n const collectionConfig = config.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n const disabledFieldRegexes: RegExp[] = React.useMemo(() => {\n const disabledFieldPaths =\n collectionConfig?.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n return disabledFieldPaths.map(buildDisabledFieldRegex)\n }, [collectionConfig])\n\n const isCSV = format === 'csv'\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!collectionSlug || !collectionConfig) {\n return\n }\n\n try {\n const res = await fetch('/api/preview-data', {\n body: JSON.stringify({\n collectionSlug,\n draft,\n fields,\n format,\n limit,\n locale,\n page,\n sort,\n where,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n\n if (!res.ok) {\n return\n }\n\n const { docs, totalDocs }: { docs: Record<string, unknown>[]; totalDocs: number } =\n await res.json()\n\n setResultCount(limit && limit < totalDocs ? limit : totalDocs)\n\n const allKeys = Array.from(new Set(docs.flatMap((doc) => Object.keys(doc))))\n const defaultMetaFields = ['createdAt', 'updatedAt', '_status', 'id']\n\n // Match CSV column ordering by building keys based on fields and regex\n const fieldToRegex = (field: string): RegExp => {\n const parts = field.split('.').map((part) => `${part}(?:_\\\\d+)?`)\n return new RegExp(`^${parts.join('_')}`)\n }\n\n // Construct final list of field keys to match field order + meta order\n const selectedKeys =\n Array.isArray(fields) && fields.length > 0\n ? fields.flatMap((field) => {\n const regex = fieldToRegex(field)\n return allKeys.filter(\n (key) =>\n regex.test(key) &&\n !disabledFieldRegexes.some((disabledRegex) => disabledRegex.test(key)),\n )\n })\n : allKeys.filter(\n (key) =>\n !defaultMetaFields.includes(key) &&\n !disabledFieldRegexes.some((regex) => regex.test(key)),\n )\n\n const fieldKeys =\n Array.isArray(fields) && fields.length > 0\n ? selectedKeys // strictly use selected fields only\n : [\n ...selectedKeys,\n ...defaultMetaFields.filter(\n (key) => allKeys.includes(key) && !selectedKeys.includes(key),\n ),\n ]\n\n // Build columns based on flattened keys\n const newColumns: Column[] = fieldKeys.map((key) => ({\n accessor: key,\n active: true,\n field: { name: key } as ClientField,\n Heading: getTranslation(key, i18n),\n renderedCells: docs.map((doc: Record<string, unknown>) => {\n const val = doc[key]\n\n if (val === undefined || val === null) {\n return null\n }\n\n // Avoid ESLint warning by type-checking before calling String()\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n return String(val)\n }\n\n if (Array.isArray(val)) {\n return val.map(String).join(', ')\n }\n\n return JSON.stringify(val)\n }),\n }))\n\n setColumns(newColumns)\n setDataToRender(docs)\n } catch (error) {\n console.error('Error fetching preview data:', error)\n }\n }\n\n void fetchData()\n }, [\n collectionConfig,\n collectionSlug,\n disabledFieldRegexes,\n draft,\n fields,\n format,\n i18n,\n limit,\n locale,\n page,\n sort,\n where,\n ])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {resultCount && (\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:totalDocumentsCount\"\n t={t}\n variables={{\n count: resultCount,\n }}\n />\n )}\n </div>\n {dataToRender &&\n (isCSV ? (\n <Table columns={columns} data={dataToRender} />\n ) : (\n <CodeEditorLazy language=\"json\" readOnly value={JSON.stringify(dataToRender, null, 2)} />\n ))}\n </div>\n )\n}\n"],"names":["getTranslation","CodeEditorLazy","Table","Translation","useConfig","useField","useTranslation","React","buildDisabledFieldRegex","useImportExport","baseClass","Preview","collection","config","value","where","path","page","limit","fields","sort","draft","locale","format","dataToRender","setDataToRender","useState","resultCount","setResultCount","columns","setColumns","i18n","t","collectionSlug","collectionConfig","collections","find","slug","disabledFieldRegexes","useMemo","disabledFieldPaths","admin","custom","disabledFields","map","isCSV","useEffect","fetchData","res","fetch","body","JSON","stringify","credentials","headers","method","ok","docs","totalDocs","json","allKeys","Array","from","Set","flatMap","doc","Object","keys","defaultMetaFields","fieldToRegex","field","parts","split","part","RegExp","join","selectedKeys","isArray","length","regex","filter","key","test","some","disabledRegex","includes","fieldKeys","newColumns","accessor","active","name","Heading","renderedCells","val","undefined","String","error","console","div","className","h3","i18nKey","variables","count","data","language","readOnly"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SortBy/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SortBy/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAgBzD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,MAAM,EAAE,0BAqHpB,CAAA"}
|
|
@@ -1,71 +1,113 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { FieldLabel, ReactSelect, useConfig, useDocumentInfo, useField, useListQuery } from '@payloadcms/ui';
|
|
4
|
-
import React, { useEffect, useState } from 'react';
|
|
4
|
+
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { applySortOrder, normalizeQueryParam, stripSortDash } from '../../utilities/sortHelpers.js';
|
|
5
6
|
import { reduceFields } from '../FieldsToExport/reduceFields.js';
|
|
6
7
|
import { useImportExport } from '../ImportExportProvider/index.js';
|
|
8
|
+
import './index.scss';
|
|
7
9
|
const baseClass = 'sort-by-fields';
|
|
8
10
|
export const SortBy = (props)=>{
|
|
9
11
|
const { id } = useDocumentInfo();
|
|
10
|
-
|
|
12
|
+
// The "sort" text field that stores 'title' or '-title'
|
|
13
|
+
const { setValue: setSort, value: sortRaw } = useField();
|
|
14
|
+
// Sibling order field ('asc' | 'desc') used when writing sort on change
|
|
15
|
+
const { value: sortOrder = 'asc' } = useField({
|
|
16
|
+
path: 'sortOrder'
|
|
17
|
+
});
|
|
18
|
+
// Needed so we can initialize sortOrder when SortOrder component is hidden
|
|
19
|
+
const { setValue: setSortOrder } = useField({
|
|
20
|
+
path: 'sortOrder'
|
|
21
|
+
});
|
|
11
22
|
const { value: collectionSlug } = useField({
|
|
12
23
|
path: 'collectionSlug'
|
|
13
24
|
});
|
|
14
25
|
const { query } = useListQuery();
|
|
15
26
|
const { getEntityConfig } = useConfig();
|
|
16
27
|
const { collection } = useImportExport();
|
|
28
|
+
// ReactSelect's displayed option
|
|
17
29
|
const [displayedValue, setDisplayedValue] = useState(null);
|
|
18
30
|
const collectionConfig = getEntityConfig({
|
|
19
31
|
collectionSlug: collectionSlug ?? collection
|
|
20
32
|
});
|
|
21
|
-
const fieldOptions = reduceFields({
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
33
|
+
const fieldOptions = useMemo(()=>reduceFields({
|
|
34
|
+
fields: collectionConfig?.fields
|
|
35
|
+
}), [
|
|
36
|
+
collectionConfig?.fields
|
|
37
|
+
]);
|
|
38
|
+
// Normalize the stored value for display (strip the '-') and pick the option
|
|
25
39
|
useEffect(()=>{
|
|
26
|
-
|
|
40
|
+
const clean = stripSortDash(sortRaw);
|
|
41
|
+
if (!clean) {
|
|
27
42
|
setDisplayedValue(null);
|
|
28
43
|
return;
|
|
29
44
|
}
|
|
30
|
-
const option = fieldOptions.find((
|
|
31
|
-
if (option && (!displayedValue || displayedValue.value !==
|
|
45
|
+
const option = fieldOptions.find((f)=>f.value === clean);
|
|
46
|
+
if (option && (!displayedValue || displayedValue.value !== clean)) {
|
|
32
47
|
setDisplayedValue(option);
|
|
33
48
|
}
|
|
34
49
|
}, [
|
|
35
|
-
|
|
50
|
+
sortRaw,
|
|
36
51
|
fieldOptions,
|
|
37
|
-
|
|
52
|
+
displayedValue
|
|
38
53
|
]);
|
|
54
|
+
// One-time init guard so clearing `sort` doesn't rehydrate from query again
|
|
55
|
+
const didInitRef = useRef(false);
|
|
56
|
+
// Sync the visible select from list-view query sort (preferred) or groupBy (fallback)
|
|
57
|
+
// and initialize both `sort` and `sortOrder` here as SortOrder may be hidden by admin.condition.
|
|
39
58
|
useEffect(()=>{
|
|
40
|
-
if (
|
|
59
|
+
if (didInitRef.current) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (id) {
|
|
63
|
+
didInitRef.current = true;
|
|
41
64
|
return;
|
|
42
65
|
}
|
|
43
|
-
|
|
66
|
+
if (typeof sortRaw === 'string' && sortRaw.length > 0) {
|
|
67
|
+
// Already initialized elsewhere
|
|
68
|
+
didInitRef.current = true;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const qsSort = normalizeQueryParam(query?.sort);
|
|
72
|
+
const qsGroupBy = normalizeQueryParam(query?.groupBy);
|
|
73
|
+
const source = qsSort ?? qsGroupBy;
|
|
74
|
+
if (!source) {
|
|
75
|
+
didInitRef.current = true;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const isDesc = !!qsSort && qsSort.startsWith('-');
|
|
79
|
+
const base = stripSortDash(source);
|
|
80
|
+
const order = isDesc ? 'desc' : 'asc';
|
|
81
|
+
// Write BOTH fields so preview/export have the right values even if SortOrder is hidden
|
|
82
|
+
setSort(applySortOrder(base, order));
|
|
83
|
+
setSortOrder(order);
|
|
84
|
+
const option = fieldOptions.find((f)=>f.value === base);
|
|
44
85
|
if (option) {
|
|
45
|
-
setValue(option.value);
|
|
46
86
|
setDisplayedValue(option);
|
|
47
87
|
}
|
|
88
|
+
didInitRef.current = true;
|
|
48
89
|
}, [
|
|
49
|
-
fieldOptions,
|
|
50
90
|
id,
|
|
91
|
+
query?.groupBy,
|
|
51
92
|
query?.sort,
|
|
52
|
-
|
|
53
|
-
|
|
93
|
+
sortRaw,
|
|
94
|
+
fieldOptions,
|
|
95
|
+
setSort,
|
|
96
|
+
setSortOrder
|
|
54
97
|
]);
|
|
98
|
+
// When user selects a different field, store it with the current order applied
|
|
55
99
|
const onChange = (option)=>{
|
|
56
100
|
if (!option) {
|
|
57
|
-
|
|
101
|
+
setSort('');
|
|
58
102
|
setDisplayedValue(null);
|
|
59
103
|
} else {
|
|
60
|
-
setValue(option.value);
|
|
61
104
|
setDisplayedValue(option);
|
|
105
|
+
const next = applySortOrder(option.value, String(sortOrder));
|
|
106
|
+
setSort(next);
|
|
62
107
|
}
|
|
63
108
|
};
|
|
64
109
|
return /*#__PURE__*/ _jsxs("div", {
|
|
65
110
|
className: baseClass,
|
|
66
|
-
style: {
|
|
67
|
-
'--field-width': '33%'
|
|
68
|
-
},
|
|
69
111
|
children: [
|
|
70
112
|
/*#__PURE__*/ _jsx(FieldLabel, {
|
|
71
113
|
label: props.field.label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SortBy/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectFieldClientComponent } from 'payload'\nimport type { ReactNode } from 'react'\n\nimport {\n FieldLabel,\n ReactSelect,\n useConfig,\n useDocumentInfo,\n useField,\n useListQuery,\n} from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\nimport { reduceFields } from '../FieldsToExport/reduceFields.js'\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'sort-by-fields'\n\nexport const SortBy: SelectFieldClientComponent = (props) => {\n const { id } = useDocumentInfo()\n const { setValue, value } = useField<string>()\n const { value: collectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { query } = useListQuery()\n const { getEntityConfig } = useConfig()\n const { collection } = useImportExport()\n\n const [displayedValue, setDisplayedValue] = useState<{\n id: string\n label: ReactNode\n value: string\n } | null>(null)\n\n const collectionConfig = getEntityConfig({ collectionSlug: collectionSlug ?? collection })\n const fieldOptions = reduceFields({ fields: collectionConfig?.fields })\n\n //
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SortBy/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectFieldClientComponent } from 'payload'\nimport type { ReactNode } from 'react'\n\nimport {\n FieldLabel,\n ReactSelect,\n useConfig,\n useDocumentInfo,\n useField,\n useListQuery,\n} from '@payloadcms/ui'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { applySortOrder, normalizeQueryParam, stripSortDash } from '../../utilities/sortHelpers.js'\nimport { reduceFields } from '../FieldsToExport/reduceFields.js'\nimport { useImportExport } from '../ImportExportProvider/index.js'\nimport './index.scss'\n\nconst baseClass = 'sort-by-fields'\n\nexport const SortBy: SelectFieldClientComponent = (props) => {\n const { id } = useDocumentInfo()\n\n // The \"sort\" text field that stores 'title' or '-title'\n const { setValue: setSort, value: sortRaw } = useField<string>()\n\n // Sibling order field ('asc' | 'desc') used when writing sort on change\n const { value: sortOrder = 'asc' } = useField<string>({ path: 'sortOrder' })\n // Needed so we can initialize sortOrder when SortOrder component is hidden\n const { setValue: setSortOrder } = useField<'asc' | 'desc'>({ path: 'sortOrder' })\n\n const { value: collectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { query } = useListQuery()\n const { getEntityConfig } = useConfig()\n const { collection } = useImportExport()\n\n // ReactSelect's displayed option\n const [displayedValue, setDisplayedValue] = useState<{\n id: string\n label: ReactNode\n value: string\n } | null>(null)\n\n const collectionConfig = getEntityConfig({ collectionSlug: collectionSlug ?? collection })\n const fieldOptions = useMemo(\n () => reduceFields({ fields: collectionConfig?.fields }),\n [collectionConfig?.fields],\n )\n\n // Normalize the stored value for display (strip the '-') and pick the option\n useEffect(() => {\n const clean = stripSortDash(sortRaw)\n if (!clean) {\n setDisplayedValue(null)\n return\n }\n\n const option = fieldOptions.find((f) => f.value === clean)\n if (option && (!displayedValue || displayedValue.value !== clean)) {\n setDisplayedValue(option)\n }\n }, [sortRaw, fieldOptions, displayedValue])\n\n // One-time init guard so clearing `sort` doesn't rehydrate from query again\n const didInitRef = useRef(false)\n\n // Sync the visible select from list-view query sort (preferred) or groupBy (fallback)\n // and initialize both `sort` and `sortOrder` here as SortOrder may be hidden by admin.condition.\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n if (id) {\n didInitRef.current = true\n return\n }\n if (typeof sortRaw === 'string' && sortRaw.length > 0) {\n // Already initialized elsewhere\n didInitRef.current = true\n return\n }\n\n const qsSort = normalizeQueryParam(query?.sort)\n const qsGroupBy = normalizeQueryParam(query?.groupBy)\n\n const source = qsSort ?? qsGroupBy\n if (!source) {\n didInitRef.current = true\n return\n }\n\n const isDesc = !!qsSort && qsSort.startsWith('-')\n const base = stripSortDash(source)\n const order: 'asc' | 'desc' = isDesc ? 'desc' : 'asc'\n\n // Write BOTH fields so preview/export have the right values even if SortOrder is hidden\n setSort(applySortOrder(base, order))\n setSortOrder(order)\n\n const option = fieldOptions.find((f) => f.value === base)\n if (option) {\n setDisplayedValue(option)\n }\n\n didInitRef.current = true\n }, [id, query?.groupBy, query?.sort, sortRaw, fieldOptions, setSort, setSortOrder])\n\n // When user selects a different field, store it with the current order applied\n const onChange = (option: { id: string; label: ReactNode; value: string } | null) => {\n if (!option) {\n setSort('')\n setDisplayedValue(null)\n } else {\n setDisplayedValue(option)\n const next = applySortOrder(option.value, String(sortOrder) as 'asc' | 'desc')\n setSort(next)\n }\n }\n\n return (\n <div className={baseClass}>\n <FieldLabel label={props.field.label} path={props.path} />\n <ReactSelect\n className={baseClass}\n disabled={props.readOnly}\n getOptionValue={(option) => String(option.value)}\n inputId={`field-${props.path.replace(/\\./g, '__')}`}\n isClearable={true}\n isSortable={true}\n // @ts-expect-error react select option\n onChange={onChange}\n options={fieldOptions}\n // @ts-expect-error react select\n value={displayedValue}\n />\n </div>\n )\n}\n"],"names":["FieldLabel","ReactSelect","useConfig","useDocumentInfo","useField","useListQuery","React","useEffect","useMemo","useRef","useState","applySortOrder","normalizeQueryParam","stripSortDash","reduceFields","useImportExport","baseClass","SortBy","props","id","setValue","setSort","value","sortRaw","sortOrder","path","setSortOrder","collectionSlug","query","getEntityConfig","collection","displayedValue","setDisplayedValue","collectionConfig","fieldOptions","fields","clean","option","find","f","didInitRef","current","length","qsSort","sort","qsGroupBy","groupBy","source","isDesc","startsWith","base","order","onChange","next","String","div","className","label","field","disabled","readOnly","getOptionValue","inputId","replace","isClearable","isSortable","options"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SortOrder/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAMzD,OAAO,cAAc,CAAA;AAcrB,eAAO,MAAM,SAAS,EAAE,0BAuGvB,CAAA"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { FieldLabel, ReactSelect, useDocumentInfo, useField, useListQuery } from '@payloadcms/ui';
|
|
4
|
+
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { applySortOrder, normalizeQueryParam, stripSortDash } from '../../utilities/sortHelpers.js';
|
|
6
|
+
import './index.scss';
|
|
7
|
+
const baseClass = 'sort-order-field';
|
|
8
|
+
const options = [
|
|
9
|
+
{
|
|
10
|
+
label: 'Ascending',
|
|
11
|
+
value: 'asc'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: 'Descending',
|
|
15
|
+
value: 'desc'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
const defaultOption = options[0];
|
|
19
|
+
export const SortOrder = (props)=>{
|
|
20
|
+
const { id } = useDocumentInfo();
|
|
21
|
+
const { query } = useListQuery();
|
|
22
|
+
// 'sortOrder' select field: 'asc' | 'desc'
|
|
23
|
+
const { setValue: setOrder, value: orderValueRaw } = useField();
|
|
24
|
+
// 'sort' text field: 'title' | '-title'
|
|
25
|
+
const { setValue: setSort, value: sortRaw } = useField({
|
|
26
|
+
path: 'sort'
|
|
27
|
+
});
|
|
28
|
+
// The current order value, defaulting to 'asc' for UI
|
|
29
|
+
const orderValue = orderValueRaw || 'asc';
|
|
30
|
+
// Map 'asc' | 'desc' to the option object for ReactSelect
|
|
31
|
+
const currentOption = useMemo(()=>options.find((o)=>o.value === orderValue) ?? defaultOption, [
|
|
32
|
+
orderValue
|
|
33
|
+
]);
|
|
34
|
+
const [displayed, setDisplayed] = useState(currentOption);
|
|
35
|
+
// One-time init guard so clearing `sort` doesn't rehydrate from query again
|
|
36
|
+
const didInitRef = useRef(false);
|
|
37
|
+
// Derive from list-view query.sort if present; otherwise fall back to groupBy
|
|
38
|
+
useEffect(()=>{
|
|
39
|
+
if (didInitRef.current) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Existing export -> don't initialize here
|
|
43
|
+
if (id) {
|
|
44
|
+
didInitRef.current = true;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// If sort already has a value, treat as initialized
|
|
48
|
+
if (typeof sortRaw === 'string' && sortRaw.length > 0) {
|
|
49
|
+
didInitRef.current = true;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const qsSort = normalizeQueryParam(query?.sort);
|
|
53
|
+
const qsGroupBy = normalizeQueryParam(query?.groupBy);
|
|
54
|
+
if (qsSort) {
|
|
55
|
+
const isDesc = qsSort.startsWith('-');
|
|
56
|
+
const base = stripSortDash(qsSort);
|
|
57
|
+
const order = isDesc ? 'desc' : 'asc';
|
|
58
|
+
setOrder(order);
|
|
59
|
+
setSort(applySortOrder(base, order)) // combined: 'title' or '-title'
|
|
60
|
+
;
|
|
61
|
+
didInitRef.current = true;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Fallback: groupBy (always ascending)
|
|
65
|
+
if (qsGroupBy) {
|
|
66
|
+
setOrder('asc');
|
|
67
|
+
setSort(applySortOrder(qsGroupBy, 'asc')) // write 'groupByField' (no dash)
|
|
68
|
+
;
|
|
69
|
+
didInitRef.current = true;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Nothing to initialize
|
|
73
|
+
didInitRef.current = true;
|
|
74
|
+
}, [
|
|
75
|
+
id,
|
|
76
|
+
query?.sort,
|
|
77
|
+
query?.groupBy,
|
|
78
|
+
sortRaw,
|
|
79
|
+
setOrder,
|
|
80
|
+
setSort
|
|
81
|
+
]);
|
|
82
|
+
// Keep the select's displayed option in sync with the stored order
|
|
83
|
+
useEffect(()=>{
|
|
84
|
+
setDisplayed(currentOption ?? defaultOption);
|
|
85
|
+
}, [
|
|
86
|
+
currentOption
|
|
87
|
+
]);
|
|
88
|
+
// Handle manual order changes via ReactSelect:
|
|
89
|
+
// - update the order field
|
|
90
|
+
// - rewrite the combined "sort" string to add/remove the leading '-'
|
|
91
|
+
const onChange = (option)=>{
|
|
92
|
+
const next = option?.value ?? 'asc';
|
|
93
|
+
setOrder(next);
|
|
94
|
+
const base = stripSortDash(sortRaw);
|
|
95
|
+
if (base) {
|
|
96
|
+
setSort(applySortOrder(base, next));
|
|
97
|
+
}
|
|
98
|
+
setDisplayed(option ?? defaultOption);
|
|
99
|
+
};
|
|
100
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
101
|
+
className: baseClass,
|
|
102
|
+
children: [
|
|
103
|
+
/*#__PURE__*/ _jsx(FieldLabel, {
|
|
104
|
+
label: props.field.label,
|
|
105
|
+
path: props.path
|
|
106
|
+
}),
|
|
107
|
+
/*#__PURE__*/ _jsx(ReactSelect, {
|
|
108
|
+
className: baseClass,
|
|
109
|
+
disabled: props.readOnly,
|
|
110
|
+
inputId: `field-${props.path.replace(/\./g, '__')}`,
|
|
111
|
+
isClearable: false,
|
|
112
|
+
isSearchable: false,
|
|
113
|
+
// @ts-expect-error react-select option typing differs from our local type
|
|
114
|
+
onChange: onChange,
|
|
115
|
+
options: options,
|
|
116
|
+
// @ts-expect-error react-select option typing differs from our local type
|
|
117
|
+
value: displayed
|
|
118
|
+
})
|
|
119
|
+
]
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SortOrder/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectFieldClientComponent } from 'payload'\n\nimport { FieldLabel, ReactSelect, useDocumentInfo, useField, useListQuery } from '@payloadcms/ui'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { applySortOrder, normalizeQueryParam, stripSortDash } from '../../utilities/sortHelpers.js'\nimport './index.scss'\n\nconst baseClass = 'sort-order-field'\n\ntype Order = 'asc' | 'desc'\ntype OrderOption = { label: string; value: Order }\n\nconst options = [\n { label: 'Ascending', value: 'asc' as const },\n { label: 'Descending', value: 'desc' as const },\n] as const\n\nconst defaultOption: OrderOption = options[0]\n\nexport const SortOrder: SelectFieldClientComponent = (props) => {\n const { id } = useDocumentInfo()\n const { query } = useListQuery()\n\n // 'sortOrder' select field: 'asc' | 'desc'\n const { setValue: setOrder, value: orderValueRaw } = useField<Order>()\n\n // 'sort' text field: 'title' | '-title'\n const { setValue: setSort, value: sortRaw } = useField<string>({ path: 'sort' })\n\n // The current order value, defaulting to 'asc' for UI\n const orderValue: Order = orderValueRaw || 'asc'\n\n // Map 'asc' | 'desc' to the option object for ReactSelect\n const currentOption = useMemo<OrderOption>(\n () => options.find((o) => o.value === orderValue) ?? defaultOption,\n [orderValue],\n )\n const [displayed, setDisplayed] = useState<null | OrderOption>(currentOption)\n\n // One-time init guard so clearing `sort` doesn't rehydrate from query again\n const didInitRef = useRef(false)\n\n // Derive from list-view query.sort if present; otherwise fall back to groupBy\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n\n // Existing export -> don't initialize here\n if (id) {\n didInitRef.current = true\n return\n }\n\n // If sort already has a value, treat as initialized\n if (typeof sortRaw === 'string' && sortRaw.length > 0) {\n didInitRef.current = true\n return\n }\n\n const qsSort = normalizeQueryParam(query?.sort)\n const qsGroupBy = normalizeQueryParam(query?.groupBy)\n\n if (qsSort) {\n const isDesc = qsSort.startsWith('-')\n const base = stripSortDash(qsSort)\n const order: Order = isDesc ? 'desc' : 'asc'\n setOrder(order)\n setSort(applySortOrder(base, order)) // combined: 'title' or '-title'\n didInitRef.current = true\n return\n }\n\n // Fallback: groupBy (always ascending)\n if (qsGroupBy) {\n setOrder('asc')\n setSort(applySortOrder(qsGroupBy, 'asc')) // write 'groupByField' (no dash)\n didInitRef.current = true\n return\n }\n\n // Nothing to initialize\n didInitRef.current = true\n }, [id, query?.sort, query?.groupBy, sortRaw, setOrder, setSort])\n\n // Keep the select's displayed option in sync with the stored order\n useEffect(() => {\n setDisplayed(currentOption ?? defaultOption)\n }, [currentOption])\n\n // Handle manual order changes via ReactSelect:\n // - update the order field\n // - rewrite the combined \"sort\" string to add/remove the leading '-'\n const onChange = (option: null | OrderOption) => {\n const next = option?.value ?? 'asc'\n setOrder(next)\n\n const base = stripSortDash(sortRaw)\n if (base) {\n setSort(applySortOrder(base, next))\n }\n\n setDisplayed(option ?? defaultOption)\n }\n\n return (\n <div className={baseClass}>\n <FieldLabel label={props.field.label} path={props.path} />\n <ReactSelect\n className={baseClass}\n disabled={props.readOnly}\n inputId={`field-${props.path.replace(/\\./g, '__')}`}\n isClearable={false}\n isSearchable={false}\n // @ts-expect-error react-select option typing differs from our local type\n onChange={onChange}\n options={options as unknown as OrderOption[]}\n // @ts-expect-error react-select option typing differs from our local type\n value={displayed}\n />\n </div>\n )\n}\n"],"names":["FieldLabel","ReactSelect","useDocumentInfo","useField","useListQuery","React","useEffect","useMemo","useRef","useState","applySortOrder","normalizeQueryParam","stripSortDash","baseClass","options","label","value","defaultOption","SortOrder","props","id","query","setValue","setOrder","orderValueRaw","setSort","sortRaw","path","orderValue","currentOption","find","o","displayed","setDisplayed","didInitRef","current","length","qsSort","sort","qsGroupBy","groupBy","isDesc","startsWith","base","order","onChange","option","next","div","className","field","disabled","readOnly","inputId","replace","isClearable","isSearchable"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExport.d.ts","sourceRoot":"","sources":["../../src/export/createExport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"createExport.d.ts","sourceRoot":"","sources":["../../src/export/createExport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAarE,MAAM,MAAM,MAAM,GAAG;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,YAAY,SAAgB,gBAAgB,kCAyYxD,CAAA"}
|