@payloadcms/ui 3.24.0-canary.f229d8d → 3.25.0-canary.36940b2
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 +143 -108
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/BulkUpload/EditMany/DrawerContent.js +22 -20
- package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +1 -0
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/index.scss +21 -5
- package/dist/elements/ConfirmationModal/index.d.ts +16 -0
- package/dist/elements/ConfirmationModal/index.d.ts.map +1 -0
- package/dist/elements/ConfirmationModal/index.js +157 -0
- package/dist/elements/ConfirmationModal/index.js.map +1 -0
- package/dist/elements/{GenerateConfirmation → ConfirmationModal}/index.scss +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +2 -0
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/types.d.ts +1 -0
- package/dist/elements/DatePicker/types.d.ts.map +1 -1
- package/dist/elements/DatePicker/types.js.map +1 -1
- package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
- package/dist/elements/DeleteDocument/index.js +31 -79
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.scss +0 -29
- package/dist/elements/DeleteMany/index.d.ts.map +1 -1
- package/dist/elements/DeleteMany/index.js +18 -45
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.scss +14 -27
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts +0 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +25 -54
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +3 -2
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/EditMany/index.d.ts.map +1 -1
- package/dist/elements/EditMany/index.js +22 -14
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/EditMany/index.scss +5 -19
- package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +1 -0
- package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
- package/dist/elements/FileDetails/DraggableFileDetails/index.js +19 -17
- package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
- package/dist/elements/FileDetails/StaticFileDetails/index.d.ts +1 -0
- package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -1
- package/dist/elements/FileDetails/StaticFileDetails/index.js +2 -1
- package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
- package/dist/elements/FileDetails/index.d.ts +1 -0
- package/dist/elements/FileDetails/index.d.ts.map +1 -1
- package/dist/elements/FileDetails/index.js.map +1 -1
- package/dist/elements/GenerateConfirmation/index.d.ts +1 -2
- package/dist/elements/GenerateConfirmation/index.d.ts.map +1 -1
- package/dist/elements/GenerateConfirmation/index.js +23 -47
- package/dist/elements/GenerateConfirmation/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/index.d.ts +0 -1
- package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
- package/dist/elements/LeaveWithoutSaving/index.js +56 -113
- package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts +9 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +17 -19
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/index.scss +5 -0
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +4 -1
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/Provider.d.ts +8 -1
- package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
- package/dist/elements/ListDrawer/Provider.js.map +1 -1
- package/dist/elements/ListSelection/index.d.ts +4 -0
- package/dist/elements/ListSelection/index.d.ts.map +1 -1
- package/dist/elements/ListSelection/index.js +44 -23
- package/dist/elements/ListSelection/index.js.map +1 -1
- package/dist/elements/ListSelection/index.scss +4 -0
- package/dist/elements/Localizer/LocalizerLabel/index.d.ts.map +1 -1
- package/dist/elements/Localizer/LocalizerLabel/index.js +11 -8
- package/dist/elements/Localizer/LocalizerLabel/index.js.map +1 -1
- package/dist/elements/Localizer/index.d.ts.map +1 -1
- package/dist/elements/Localizer/index.js +2 -0
- package/dist/elements/Localizer/index.js.map +1 -1
- package/dist/elements/Popup/index.d.ts +1 -0
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +2 -0
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PreviewButton/index.d.ts +2 -1
- package/dist/elements/PreviewButton/index.d.ts.map +1 -1
- package/dist/elements/PreviewButton/index.js +2 -2
- package/dist/elements/PreviewButton/index.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts +1 -2
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts +2 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.js +6 -2
- package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
- package/dist/elements/PublishButton/index.d.ts +2 -3
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +20 -17
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/PublishMany/index.d.ts.map +1 -1
- package/dist/elements/PublishMany/index.js +21 -46
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/PublishMany/index.scss +14 -32
- package/dist/elements/RelationshipTable/index.d.ts +7 -2
- package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/index.js +69 -23
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/RelationshipTable/index.scss +6 -0
- package/dist/elements/SaveButton/index.d.ts +2 -3
- package/dist/elements/SaveButton/index.d.ts.map +1 -1
- package/dist/elements/SaveButton/index.js +3 -3
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.d.ts +2 -1
- package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +2 -2
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/Status/index.d.ts.map +1 -1
- package/dist/elements/Status/index.js +173 -154
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/Status/index.scss +0 -41
- package/dist/elements/StayLoggedIn/index.d.ts +0 -1
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +45 -77
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/Table/index.d.ts +1 -9
- package/dist/elements/Table/index.d.ts.map +1 -1
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/TableColumns/RenderDefaultCell/index.d.ts.map +1 -1
- package/dist/elements/TableColumns/RenderDefaultCell/index.js +1 -0
- package/dist/elements/TableColumns/RenderDefaultCell/index.js.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.d.ts +1 -2
- package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
- package/dist/elements/TableColumns/buildPolymorphicColumnState.d.ts +20 -0
- package/dist/elements/TableColumns/buildPolymorphicColumnState.d.ts.map +1 -0
- package/dist/elements/TableColumns/buildPolymorphicColumnState.js +200 -0
- package/dist/elements/TableColumns/buildPolymorphicColumnState.js.map +1 -0
- package/dist/elements/TableColumns/index.d.ts +2 -3
- package/dist/elements/TableColumns/index.d.ts.map +1 -1
- package/dist/elements/TableColumns/index.js +4 -3
- package/dist/elements/TableColumns/index.js.map +1 -1
- package/dist/elements/UnpublishMany/index.d.ts +1 -1
- package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/index.js +16 -43
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/UnpublishMany/index.scss +14 -32
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +5 -1
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/ViewDescription/index.d.ts +2 -5
- package/dist/elements/ViewDescription/index.d.ts.map +1 -1
- package/dist/elements/ViewDescription/index.js +2 -2
- package/dist/elements/ViewDescription/index.js.map +1 -1
- package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/field-types.js +9 -5
- package/dist/elements/WhereBuilder/field-types.js.map +1 -1
- package/dist/exports/client/{CodeEditor-L6GW2VQ6.js → CodeEditor-G3Y4UHC4.js} +2 -2
- package/dist/exports/client/{CodeEditor-L6GW2VQ6.js.map → CodeEditor-G3Y4UHC4.js.map} +0 -1
- package/dist/exports/client/{DatePicker-THCU4KZJ.js → DatePicker-HHQ6TPOW.js} +2 -2
- package/dist/exports/client/{DatePicker-THCU4KZJ.js.map → DatePicker-HHQ6TPOW.js.map} +0 -1
- package/dist/exports/client/{chunk-ZZDNSFEW.js → chunk-4L367VSB.js} +2 -2
- package/dist/exports/client/{chunk-ZZDNSFEW.js.map → chunk-4L367VSB.js.map} +2 -3
- package/dist/exports/client/chunk-5LKBKI4T.js.map +0 -1
- package/dist/exports/client/{chunk-EG3ZOHFS.js → chunk-IMEQ6NKQ.js} +2 -2
- package/dist/exports/client/{chunk-EG3ZOHFS.js.map → chunk-IMEQ6NKQ.js.map} +3 -4
- package/dist/exports/client/index.d.ts +46 -4
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +11 -11
- package/dist/exports/client/index.js.map +4 -5
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js +85 -103
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.scss +43 -0
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js +24 -6
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Join/index.d.ts.map +1 -1
- package/dist/fields/Join/index.js +8 -3
- package/dist/fields/Join/index.js.map +1 -1
- package/dist/fields/Select/Input.d.ts.map +1 -1
- package/dist/fields/Select/Input.js +2 -0
- package/dist/fields/Select/Input.js.map +1 -1
- package/dist/fields/Tabs/Tab/index.scss +2 -1
- package/dist/fields/Upload/Input.d.ts +1 -0
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +13 -13
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/forms/Form/context.d.ts +3 -3
- package/dist/forms/Form/context.js +3 -3
- package/dist/forms/Form/context.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +19 -8
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/initContextState.d.ts.map +1 -1
- package/dist/forms/Form/initContextState.js +2 -0
- package/dist/forms/Form/initContextState.js.map +1 -1
- package/dist/forms/Form/types.d.ts +6 -0
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/useField/index.d.ts +1 -1
- package/dist/forms/useField/index.js +1 -1
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/icons/Dots/index.d.ts +7 -0
- package/dist/icons/Dots/index.d.ts.map +1 -0
- package/dist/icons/Dots/index.js +12 -0
- package/dist/icons/Dots/index.js.map +1 -0
- package/dist/icons/Dots/index.scss +27 -0
- package/dist/providers/Selection/index.d.ts.map +1 -1
- package/dist/providers/Selection/index.js +5 -6
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildTableState.d.ts +1 -2
- package/dist/utilities/buildTableState.d.ts.map +1 -1
- package/dist/utilities/buildTableState.js +72 -20
- package/dist/utilities/buildTableState.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +20 -14
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
- package/dist/utilities/handleFormStateLocking.js +3 -6
- package/dist/utilities/handleFormStateLocking.js.map +1 -1
- package/dist/utilities/renderTable.d.ts +6 -4
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +49 -17
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/utilities/upsertPreferences.d.ts +5 -1
- package/dist/utilities/upsertPreferences.d.ts.map +1 -1
- package/dist/utilities/upsertPreferences.js +11 -14
- package/dist/utilities/upsertPreferences.js.map +1 -1
- package/dist/views/Edit/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Auth/index.js +56 -55
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/index.d.ts +2 -2
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +3 -3
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/ListHeader/index.d.ts +2 -0
- package/dist/views/List/ListHeader/index.d.ts.map +1 -1
- package/dist/views/List/ListHeader/index.js +5 -0
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/dist/views/List/index.d.ts +2 -25
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +17 -23
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/List/types.d.ts +1 -18
- package/dist/views/List/types.d.ts.map +1 -1
- package/dist/views/List/types.js.map +1 -1
- package/package.json +5 -5
- package/dist/elements/DuplicateDocument/index.scss +0 -42
- package/dist/elements/LeaveWithoutSaving/index.scss +0 -39
- package/dist/elements/StayLoggedIn/index.scss +0 -40
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { BuildTableStateArgs, ClientConfig, ErrorResult, ListPreferences, PaginatedDocs } from 'payload';
|
|
2
|
-
import type { Column } from '../elements/Table/index.js';
|
|
1
|
+
import type { BuildTableStateArgs, ClientConfig, Column, ErrorResult, ListPreferences, PaginatedDocs } from 'payload';
|
|
3
2
|
type BuildTableStateSuccessResult = {
|
|
4
3
|
clientConfig?: ClientConfig;
|
|
5
4
|
data: PaginatedDocs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildTableState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEnB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,aAAa,
|
|
1
|
+
{"version":3,"file":"buildTableState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildTableState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEnB,YAAY,EACZ,MAAM,EACN,WAAW,EACX,eAAe,EACf,aAAa,EAGd,MAAM,SAAS,CAAA;AAShB,KAAK,4BAA4B,GAAG;IAClC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,WAAW,EAAE,eAAe,CAAA;IAC5B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,KAAK,0BAA0B,GAAG;IAChC,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,eAAe,CAAC,EAAE,KAAK,CAAA;IACvB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,GAAG,4BAA4B,CAAA;AAE7F,eAAO,MAAM,sBAAsB,SAC3B,mBAAmB,KACxB,OAAO,CAAC,qBAAqB,CAqB/B,CAAA;AAED,eAAO,MAAM,eAAe,SACpB,mBAAmB,KACxB,OAAO,CAAC,4BAA4B,CA0LtC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatErrors } from 'payload';
|
|
1
|
+
import { APIError, formatErrors } from 'payload';
|
|
2
2
|
import { isNumber } from 'payload/shared';
|
|
3
3
|
import { getClientConfig } from './getClientConfig.js';
|
|
4
4
|
import { renderFilters, renderTable } from './renderTable.js';
|
|
@@ -32,6 +32,7 @@ export const buildTableState = async args => {
|
|
|
32
32
|
columns,
|
|
33
33
|
docs: docsFromArgs,
|
|
34
34
|
enableRowSelections,
|
|
35
|
+
parent,
|
|
35
36
|
query,
|
|
36
37
|
renderRowTypes,
|
|
37
38
|
req,
|
|
@@ -81,12 +82,14 @@ export const buildTableState = async args => {
|
|
|
81
82
|
});
|
|
82
83
|
let collectionConfig;
|
|
83
84
|
let clientCollectionConfig;
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
if (!Array.isArray(collectionSlug)) {
|
|
86
|
+
if (req.payload.collections[collectionSlug]) {
|
|
87
|
+
collectionConfig = req.payload.collections[collectionSlug].config;
|
|
88
|
+
clientCollectionConfig = clientConfig.collections.find(collection => collection.slug === collectionSlug);
|
|
89
|
+
}
|
|
87
90
|
}
|
|
88
91
|
const listPreferences = await upsertPreferences({
|
|
89
|
-
key: `${collectionSlug}-list`,
|
|
92
|
+
key: Array.isArray(collectionSlug) ? `${parent.collectionSlug}-${parent.joinPath}` : `${collectionSlug}-list`,
|
|
90
93
|
req,
|
|
91
94
|
value: {
|
|
92
95
|
columns,
|
|
@@ -98,26 +101,72 @@ export const buildTableState = async args => {
|
|
|
98
101
|
let data;
|
|
99
102
|
// lookup docs, if desired, i.e. within `join` field which initialize with `depth: 0`
|
|
100
103
|
if (!docs || query) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
104
|
+
if (Array.isArray(collectionSlug)) {
|
|
105
|
+
if (!parent) {
|
|
106
|
+
throw new APIError('Unexpected array of collectionSlug, parent must be providen');
|
|
107
|
+
}
|
|
108
|
+
const select = {};
|
|
109
|
+
let currentSelectRef = select;
|
|
110
|
+
const segments = parent.joinPath.split('.');
|
|
111
|
+
for (let i = 0; i < segments.length; i++) {
|
|
112
|
+
currentSelectRef[segments[i]] = i === segments.length - 1 ? true : {};
|
|
113
|
+
currentSelectRef = currentSelectRef[segments[i]];
|
|
114
|
+
}
|
|
115
|
+
const joinQuery = {
|
|
116
|
+
sort: query?.sort,
|
|
117
|
+
where: query?.where
|
|
118
|
+
};
|
|
119
|
+
if (query) {
|
|
120
|
+
if (!Number.isNaN(Number(query.limit))) {
|
|
121
|
+
joinQuery.limit = Number(query.limit);
|
|
122
|
+
}
|
|
123
|
+
if (!Number.isNaN(Number(query.page))) {
|
|
124
|
+
joinQuery.limit = Number(query.limit);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
let parentDoc = await payload.findByID({
|
|
128
|
+
id: parent.id,
|
|
129
|
+
collection: parent.collectionSlug,
|
|
130
|
+
depth: 1,
|
|
131
|
+
joins: {
|
|
132
|
+
[parent.joinPath]: joinQuery
|
|
133
|
+
},
|
|
134
|
+
overrideAccess: false,
|
|
135
|
+
select,
|
|
136
|
+
user: req.user
|
|
137
|
+
});
|
|
138
|
+
for (let i = 0; i < segments.length; i++) {
|
|
139
|
+
if (i === segments.length - 1) {
|
|
140
|
+
data = parentDoc[segments[i]];
|
|
141
|
+
docs = data.docs;
|
|
142
|
+
} else {
|
|
143
|
+
parentDoc = parentDoc[segments[i]];
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
} else {
|
|
147
|
+
data = await payload.find({
|
|
148
|
+
collection: collectionSlug,
|
|
149
|
+
depth: 0,
|
|
150
|
+
limit: query?.limit ? parseInt(query.limit, 10) : undefined,
|
|
151
|
+
locale: req.locale,
|
|
152
|
+
overrideAccess: false,
|
|
153
|
+
page: query?.page ? parseInt(query.page, 10) : undefined,
|
|
154
|
+
sort: query?.sort,
|
|
155
|
+
user: req.user,
|
|
156
|
+
where: query?.where
|
|
157
|
+
});
|
|
158
|
+
docs = data.docs;
|
|
159
|
+
}
|
|
113
160
|
}
|
|
114
161
|
const {
|
|
115
162
|
columnState,
|
|
116
163
|
Table
|
|
117
164
|
} = renderTable({
|
|
118
165
|
clientCollectionConfig,
|
|
166
|
+
clientConfig,
|
|
119
167
|
collectionConfig,
|
|
120
|
-
|
|
168
|
+
collections: Array.isArray(collectionSlug) ? collectionSlug : undefined,
|
|
169
|
+
columnPreferences: Array.isArray(collectionSlug) ? listPreferences?.columns : undefined,
|
|
121
170
|
columns,
|
|
122
171
|
docs,
|
|
123
172
|
enableRowSelections,
|
|
@@ -125,9 +174,12 @@ export const buildTableState = async args => {
|
|
|
125
174
|
payload,
|
|
126
175
|
renderRowTypes,
|
|
127
176
|
tableAppearance,
|
|
128
|
-
useAsTitle:
|
|
177
|
+
useAsTitle: Array.isArray(collectionSlug) ? payload.collections[collectionSlug[0]]?.config?.admin?.useAsTitle : collectionConfig?.admin?.useAsTitle
|
|
129
178
|
});
|
|
130
|
-
|
|
179
|
+
let renderedFilters;
|
|
180
|
+
if (collectionConfig) {
|
|
181
|
+
renderedFilters = renderFilters(collectionConfig.fields, req.payload.importMap);
|
|
182
|
+
}
|
|
131
183
|
return {
|
|
132
184
|
data,
|
|
133
185
|
preferences: listPreferences,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableState.js","names":["formatErrors","isNumber","getClientConfig","renderFilters","renderTable","upsertPreferences","buildTableStateHandler","args","req","res","buildTableState","err","payload","logger","error","msg","message","collectionSlug","columns","docs","docsFromArgs","enableRowSelections","query","renderRowTypes","i18n","config","user","tableAppearance","incomingUserSlug","collection","adminUserSlug","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","length","clientConfig","importMap","collectionConfig","clientCollectionConfig","slug","listPreferences","key","value","Number","undefined","sort","data","parseInt","locale","overrideAccess","page","where","columnState","Table","columnPreferences","useAsTitle","renderedFilters","fields","preferences","state"],"sources":["../../src/utilities/buildTableState.ts"],"sourcesContent":["import type {\n BuildTableStateArgs,\n ClientCollectionConfig,\n ClientConfig,\n ErrorResult,\n ListPreferences,\n PaginatedDocs,\n SanitizedCollectionConfig,\n} from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { isNumber } from 'payload/shared'\n\nimport type { Column } from '../elements/Table/index.js'\n\nimport { getClientConfig } from './getClientConfig.js'\nimport { renderFilters, renderTable } from './renderTable.js'\nimport { upsertPreferences } from './upsertPreferences.js'\n\ntype BuildTableStateSuccessResult = {\n clientConfig?: ClientConfig\n data: PaginatedDocs\n errors?: never\n preferences: ListPreferences\n renderedFilters: Map<string, React.ReactNode>\n state: Column[]\n Table: React.ReactNode\n}\n\ntype BuildTableStateErrorResult = {\n data?: any\n renderedFilters?: never\n state?: never\n Table?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildTableStateResult = BuildTableStateErrorResult | BuildTableStateSuccessResult\n\nexport const buildTableStateHandler = async (\n args: BuildTableStateArgs,\n): Promise<BuildTableStateResult> => {\n const { req } = args\n\n try {\n const res = await buildTableState(args)\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildTableState = async (\n args: BuildTableStateArgs,\n): Promise<BuildTableStateSuccessResult> => {\n const {\n collectionSlug,\n columns,\n docs: docsFromArgs,\n enableRowSelections,\n query,\n renderRowTypes,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n user,\n },\n tableAppearance,\n } = args\n\n const incomingUserSlug = user?.collection\n\n const adminUserSlug = config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const clientConfig = getClientConfig({\n config,\n i18n,\n importMap: payload.importMap,\n })\n\n let collectionConfig: SanitizedCollectionConfig\n let clientCollectionConfig: ClientCollectionConfig\n\n if (req.payload.collections[collectionSlug]) {\n collectionConfig = req.payload.collections[collectionSlug].config\n clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n }\n\n const listPreferences = await upsertPreferences<ListPreferences>({\n key: `${collectionSlug}-list`,\n req,\n value: {\n columns,\n limit: isNumber(query?.limit) ? Number(query.limit) : undefined,\n sort: query?.sort as string,\n },\n })\n\n let docs = docsFromArgs\n let data: PaginatedDocs\n\n // lookup docs, if desired, i.e. within `join` field which initialize with `depth: 0`\n\n if (!docs || query) {\n data = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: query?.limit ? parseInt(query.limit, 10) : undefined,\n locale: req.locale,\n overrideAccess: false,\n page: query?.page ? parseInt(query.page, 10) : undefined,\n sort: query?.sort,\n user: req.user,\n where: query?.where,\n })\n\n docs = data.docs\n }\n\n const { columnState, Table } = renderTable({\n clientCollectionConfig,\n collectionConfig,\n columnPreferences: undefined, // TODO, might not be needed\n columns,\n docs,\n enableRowSelections,\n i18n: req.i18n,\n payload,\n renderRowTypes,\n tableAppearance,\n useAsTitle: collectionConfig.admin.useAsTitle,\n })\n\n const renderedFilters = renderFilters(collectionConfig.fields, req.payload.importMap)\n\n return {\n data,\n preferences: listPreferences,\n renderedFilters,\n state: columnState,\n Table,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"buildTableState.js","names":["APIError","formatErrors","isNumber","getClientConfig","renderFilters","renderTable","upsertPreferences","buildTableStateHandler","args","req","res","buildTableState","err","payload","logger","error","msg","message","collectionSlug","columns","docs","docsFromArgs","enableRowSelections","parent","query","renderRowTypes","i18n","config","user","tableAppearance","incomingUserSlug","collection","adminUserSlug","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","length","clientConfig","importMap","collectionConfig","clientCollectionConfig","Array","isArray","slug","listPreferences","key","joinPath","value","Number","undefined","sort","data","select","currentSelectRef","segments","split","i","joinQuery","where","isNaN","page","parentDoc","findByID","id","joins","overrideAccess","parseInt","locale","columnState","Table","columnPreferences","useAsTitle","renderedFilters","fields","preferences","state"],"sources":["../../src/utilities/buildTableState.ts"],"sourcesContent":["import type {\n BuildTableStateArgs,\n ClientCollectionConfig,\n ClientConfig,\n Column,\n ErrorResult,\n ListPreferences,\n PaginatedDocs,\n SanitizedCollectionConfig,\n Where,\n} from 'payload'\n\nimport { APIError, formatErrors } from 'payload'\nimport { isNumber } from 'payload/shared'\n\nimport { getClientConfig } from './getClientConfig.js'\nimport { renderFilters, renderTable } from './renderTable.js'\nimport { upsertPreferences } from './upsertPreferences.js'\n\ntype BuildTableStateSuccessResult = {\n clientConfig?: ClientConfig\n data: PaginatedDocs\n errors?: never\n preferences: ListPreferences\n renderedFilters: Map<string, React.ReactNode>\n state: Column[]\n Table: React.ReactNode\n}\n\ntype BuildTableStateErrorResult = {\n data?: any\n renderedFilters?: never\n state?: never\n Table?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildTableStateResult = BuildTableStateErrorResult | BuildTableStateSuccessResult\n\nexport const buildTableStateHandler = async (\n args: BuildTableStateArgs,\n): Promise<BuildTableStateResult> => {\n const { req } = args\n\n try {\n const res = await buildTableState(args)\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildTableState = async (\n args: BuildTableStateArgs,\n): Promise<BuildTableStateSuccessResult> => {\n const {\n collectionSlug,\n columns,\n docs: docsFromArgs,\n enableRowSelections,\n parent,\n query,\n renderRowTypes,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n user,\n },\n tableAppearance,\n } = args\n\n const incomingUserSlug = user?.collection\n\n const adminUserSlug = config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const clientConfig = getClientConfig({\n config,\n i18n,\n importMap: payload.importMap,\n })\n\n let collectionConfig: SanitizedCollectionConfig\n let clientCollectionConfig: ClientCollectionConfig\n\n if (!Array.isArray(collectionSlug)) {\n if (req.payload.collections[collectionSlug]) {\n collectionConfig = req.payload.collections[collectionSlug].config\n clientCollectionConfig = clientConfig.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n }\n }\n\n const listPreferences = await upsertPreferences<ListPreferences>({\n key: Array.isArray(collectionSlug)\n ? `${parent.collectionSlug}-${parent.joinPath}`\n : `${collectionSlug}-list`,\n req,\n value: {\n columns,\n limit: isNumber(query?.limit) ? Number(query.limit) : undefined,\n sort: query?.sort as string,\n },\n })\n\n let docs = docsFromArgs\n let data: PaginatedDocs\n\n // lookup docs, if desired, i.e. within `join` field which initialize with `depth: 0`\n\n if (!docs || query) {\n if (Array.isArray(collectionSlug)) {\n if (!parent) {\n throw new APIError('Unexpected array of collectionSlug, parent must be providen')\n }\n\n const select = {}\n let currentSelectRef = select\n\n const segments = parent.joinPath.split('.')\n\n for (let i = 0; i < segments.length; i++) {\n currentSelectRef[segments[i]] = i === segments.length - 1 ? true : {}\n currentSelectRef = currentSelectRef[segments[i]]\n }\n\n const joinQuery: { limit?: number; page?: number; sort?: string; where?: Where } = {\n sort: query?.sort as string,\n where: query?.where,\n }\n\n if (query) {\n if (!Number.isNaN(Number(query.limit))) {\n joinQuery.limit = Number(query.limit)\n }\n\n if (!Number.isNaN(Number(query.page))) {\n joinQuery.limit = Number(query.limit)\n }\n }\n\n let parentDoc = await payload.findByID({\n id: parent.id,\n collection: parent.collectionSlug,\n depth: 1,\n joins: {\n [parent.joinPath]: joinQuery,\n },\n overrideAccess: false,\n select,\n user: req.user,\n })\n\n for (let i = 0; i < segments.length; i++) {\n if (i === segments.length - 1) {\n data = parentDoc[segments[i]]\n docs = data.docs\n } else {\n parentDoc = parentDoc[segments[i]]\n }\n }\n } else {\n data = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: query?.limit ? parseInt(query.limit, 10) : undefined,\n locale: req.locale,\n overrideAccess: false,\n page: query?.page ? parseInt(query.page, 10) : undefined,\n sort: query?.sort,\n user: req.user,\n where: query?.where,\n })\n docs = data.docs\n }\n }\n\n const { columnState, Table } = renderTable({\n clientCollectionConfig,\n clientConfig,\n collectionConfig,\n collections: Array.isArray(collectionSlug) ? collectionSlug : undefined,\n columnPreferences: Array.isArray(collectionSlug) ? listPreferences?.columns : undefined, // TODO, might not be neededcolumns,\n columns,\n docs,\n enableRowSelections,\n i18n: req.i18n,\n payload,\n renderRowTypes,\n tableAppearance,\n useAsTitle: Array.isArray(collectionSlug)\n ? payload.collections[collectionSlug[0]]?.config?.admin?.useAsTitle\n : collectionConfig?.admin?.useAsTitle,\n })\n\n let renderedFilters\n\n if (collectionConfig) {\n renderedFilters = renderFilters(collectionConfig.fields, req.payload.importMap)\n }\n\n return {\n data,\n preferences: listPreferences,\n renderedFilters,\n state: columnState,\n Table,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyDataFromLocale.d.ts","sourceRoot":"","sources":["../../src/utilities/copyDataFromLocale.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAKnB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;
|
|
1
|
+
{"version":3,"file":"copyDataFromLocale.d.ts","sourceRoot":"","sources":["../../src/utilities/copyDataFromLocale.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAKnB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAmKD,eAAO,MAAM,yBAAyB,SAAgB,sBAAsB,0EAiB3E,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,sBAAsB,0CAwHpE,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import ObjectIdImport from 'bson-objectid';
|
|
2
2
|
import { formatErrors } from 'payload';
|
|
3
|
-
import { fieldAffectsData, tabHasName } from 'payload/shared';
|
|
3
|
+
import { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from 'payload/shared';
|
|
4
4
|
const ObjectId = ObjectIdImport.default || ObjectIdImport;
|
|
5
|
-
function iterateFields(fields, fromLocaleData, toLocaleData, req) {
|
|
5
|
+
function iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized) {
|
|
6
6
|
fields.map(field => {
|
|
7
7
|
if (fieldAffectsData(field)) {
|
|
8
8
|
switch (field.type) {
|
|
@@ -19,10 +19,13 @@ function iterateFields(fields, fromLocaleData, toLocaleData, req) {
|
|
|
19
19
|
toLocaleData[field.name].map((item, index) => {
|
|
20
20
|
if (fromLocaleData[field.name]?.[index]) {
|
|
21
21
|
// Generate new IDs if the field is localized to prevent errors with relational DBs.
|
|
22
|
-
if (
|
|
22
|
+
if (fieldShouldBeLocalized({
|
|
23
|
+
field,
|
|
24
|
+
parentIsLocalized
|
|
25
|
+
})) {
|
|
23
26
|
toLocaleData[field.name][index].id = new ObjectId().toHexString();
|
|
24
27
|
}
|
|
25
|
-
iterateFields(field.fields, fromLocaleData[field.name][index], item, req);
|
|
28
|
+
iterateFields(field.fields, fromLocaleData[field.name][index], item, req, parentIsLocalized || field.localized);
|
|
26
29
|
}
|
|
27
30
|
});
|
|
28
31
|
}
|
|
@@ -40,11 +43,14 @@ function iterateFields(fields, fromLocaleData, toLocaleData, req) {
|
|
|
40
43
|
toLocaleData[field.name].map((blockData, index) => {
|
|
41
44
|
const block = req.payload.blocks[blockData.blockType] ?? (field.blockReferences ?? field.blocks).find(block => typeof block !== 'string' && block.slug === blockData.blockType);
|
|
42
45
|
// Generate new IDs if the field is localized to prevent errors with relational DBs.
|
|
43
|
-
if (
|
|
46
|
+
if (fieldShouldBeLocalized({
|
|
47
|
+
field,
|
|
48
|
+
parentIsLocalized
|
|
49
|
+
})) {
|
|
44
50
|
toLocaleData[field.name][index].id = new ObjectId().toHexString();
|
|
45
51
|
}
|
|
46
52
|
if (block?.fields?.length) {
|
|
47
|
-
iterateFields(block?.fields, fromLocaleData[field.name][index], blockData, req);
|
|
53
|
+
iterateFields(block?.fields, fromLocaleData[field.name][index], blockData, req, parentIsLocalized || field.localized);
|
|
48
54
|
}
|
|
49
55
|
});
|
|
50
56
|
}
|
|
@@ -72,7 +78,7 @@ function iterateFields(fields, fromLocaleData, toLocaleData, req) {
|
|
|
72
78
|
case 'group':
|
|
73
79
|
{
|
|
74
80
|
if (field.name in toLocaleData && fromLocaleData?.[field.name] !== undefined) {
|
|
75
|
-
iterateFields(field.fields, fromLocaleData[field.name], toLocaleData[field.name], req);
|
|
81
|
+
iterateFields(field.fields, fromLocaleData[field.name], toLocaleData[field.name], req, parentIsLocalized || field.localized);
|
|
76
82
|
}
|
|
77
83
|
break;
|
|
78
84
|
}
|
|
@@ -81,16 +87,16 @@ function iterateFields(fields, fromLocaleData, toLocaleData, req) {
|
|
|
81
87
|
switch (field.type) {
|
|
82
88
|
case 'collapsible':
|
|
83
89
|
case 'row':
|
|
84
|
-
iterateFields(field.fields, fromLocaleData, toLocaleData, req);
|
|
90
|
+
iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized);
|
|
85
91
|
break;
|
|
86
92
|
case 'tabs':
|
|
87
93
|
field.tabs.map(tab => {
|
|
88
94
|
if (tabHasName(tab)) {
|
|
89
95
|
if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {
|
|
90
|
-
iterateFields(tab.fields, fromLocaleData[tab.name], toLocaleData[tab.name], req);
|
|
96
|
+
iterateFields(tab.fields, fromLocaleData[tab.name], toLocaleData[tab.name], req, parentIsLocalized);
|
|
91
97
|
}
|
|
92
98
|
} else {
|
|
93
|
-
iterateFields(tab.fields, fromLocaleData, toLocaleData, req);
|
|
99
|
+
iterateFields(tab.fields, fromLocaleData, toLocaleData, req, parentIsLocalized);
|
|
94
100
|
}
|
|
95
101
|
});
|
|
96
102
|
break;
|
|
@@ -98,8 +104,8 @@ function iterateFields(fields, fromLocaleData, toLocaleData, req) {
|
|
|
98
104
|
}
|
|
99
105
|
});
|
|
100
106
|
}
|
|
101
|
-
function mergeData(fromLocaleData, toLocaleData, fields, req) {
|
|
102
|
-
iterateFields(fields, fromLocaleData, toLocaleData, req);
|
|
107
|
+
function mergeData(fromLocaleData, toLocaleData, fields, req, parentIsLocalized) {
|
|
108
|
+
iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized);
|
|
103
109
|
return toLocaleData;
|
|
104
110
|
}
|
|
105
111
|
export const copyDataFromLocaleHandler = async args => {
|
|
@@ -192,7 +198,7 @@ export const copyDataFromLocale = async args => {
|
|
|
192
198
|
}
|
|
193
199
|
return globalSlug ? await payload.updateGlobal({
|
|
194
200
|
slug: globalSlug,
|
|
195
|
-
data: overrideData ? fromLocaleData.value : mergeData(fromLocaleData.value, toLocaleData.value, globals[globalSlug].config.fields, req),
|
|
201
|
+
data: overrideData ? fromLocaleData.value : mergeData(fromLocaleData.value, toLocaleData.value, globals[globalSlug].config.fields, req, false),
|
|
196
202
|
locale: toLocale,
|
|
197
203
|
overrideAccess: false,
|
|
198
204
|
req,
|
|
@@ -200,7 +206,7 @@ export const copyDataFromLocale = async args => {
|
|
|
200
206
|
}) : await payload.update({
|
|
201
207
|
id: docID,
|
|
202
208
|
collection: collectionSlug,
|
|
203
|
-
data: overrideData ? fromLocaleData.value : mergeData(fromLocaleData.value, toLocaleData.value, collections[collectionSlug].config.fields, req),
|
|
209
|
+
data: overrideData ? fromLocaleData.value : mergeData(fromLocaleData.value, toLocaleData.value, collections[collectionSlug].config.fields, req, false),
|
|
204
210
|
locale: toLocale,
|
|
205
211
|
overrideAccess: false,
|
|
206
212
|
req,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyDataFromLocale.js","names":["ObjectIdImport","formatErrors","fieldAffectsData","tabHasName","ObjectId","default","iterateFields","fields","fromLocaleData","toLocaleData","req","map","field","type","name","undefined","includes","item","index","localized","id","toHexString","blockData","block","payload","blocks","blockType","blockReferences","find","slug","length","tabs","tab","mergeData","copyDataFromLocaleHandler","args","copyDataFromLocale","err","logger","error","msg","fromLocale","toLocale","message","collectionSlug","docID","globalSlug","overrideData","collections","globals","user","incomingUserSlug","collection","adminUserSlug","config","admin","adminAccessFunction","access","canAccessAdmin","Error","Promise","allSettled","findGlobal","depth","locale","overrideAccess","findByID","joins","status","updateGlobal","data","value","update"],"sources":["../../src/utilities/copyDataFromLocale.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\nimport {\n type CollectionSlug,\n type Data,\n type Field,\n type FlattenedBlock,\n formatErrors,\n type PayloadRequest,\n} from 'payload'\nimport { fieldAffectsData, tabHasName } from 'payload/shared'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport type CopyDataFromLocaleArgs = {\n collectionSlug?: CollectionSlug\n docID?: number | string\n fromLocale: string\n globalSlug?: string\n overrideData?: boolean\n req: PayloadRequest\n toLocale: string\n}\n\nfunction iterateFields(\n fields: Field[],\n fromLocaleData: Data,\n toLocaleData: Data,\n req: PayloadRequest,\n): void {\n fields.map((field) => {\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((item: Data, index: number) => {\n if (fromLocaleData[field.name]?.[index]) {\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (field.localized) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n iterateFields(field.fields, fromLocaleData[field.name][index], item, req)\n }\n })\n }\n break\n\n case 'blocks':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((blockData: Data, index: number) => {\n const block =\n req.payload.blocks[blockData.blockType] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockData.blockType,\n ) as FlattenedBlock | undefined)\n\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (field.localized) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n if (block?.fields?.length) {\n iterateFields(block?.fields, fromLocaleData[field.name][index], blockData, req)\n }\n })\n }\n\n break\n\n case 'checkbox':\n case 'code':\n case 'date':\n case 'email':\n case 'json':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'richText':\n case 'select':\n case 'text':\n case 'textarea':\n case 'upload':\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n }\n break\n\n case 'group': {\n if (field.name in toLocaleData && fromLocaleData?.[field.name] !== undefined) {\n iterateFields(field.fields, fromLocaleData[field.name], toLocaleData[field.name], req)\n }\n break\n }\n }\n } else {\n switch (field.type) {\n case 'collapsible':\n case 'row':\n iterateFields(field.fields, fromLocaleData, toLocaleData, req)\n break\n\n case 'tabs':\n field.tabs.map((tab) => {\n if (tabHasName(tab)) {\n if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {\n iterateFields(tab.fields, fromLocaleData[tab.name], toLocaleData[tab.name], req)\n }\n } else {\n iterateFields(tab.fields, fromLocaleData, toLocaleData, req)\n }\n })\n break\n }\n }\n })\n}\n\nfunction mergeData(\n fromLocaleData: Data,\n toLocaleData: Data,\n fields: Field[],\n req: PayloadRequest,\n): Data {\n iterateFields(fields, fromLocaleData, toLocaleData, req)\n\n return toLocaleData\n}\n\nexport const copyDataFromLocaleHandler = async (args: CopyDataFromLocaleArgs) => {\n const { req } = args\n\n try {\n return await copyDataFromLocale(args)\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error copying data from \"${args.fromLocale}\" to \"${args.toLocale}\"`,\n })\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const copyDataFromLocale = async (args: CopyDataFromLocaleArgs) => {\n const {\n collectionSlug,\n docID,\n fromLocale,\n globalSlug,\n overrideData = false,\n req: {\n payload,\n payload: { collections, globals },\n user,\n },\n req,\n toLocale,\n } = args\n\n const incomingUserSlug = user?.collection\n\n const adminUserSlug = payload.config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req: args.req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n }\n\n const [fromLocaleData, toLocaleData] = await Promise.allSettled([\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n ])\n\n if (fromLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${fromLocale}\"`)\n }\n\n if (toLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${toLocale}\"`)\n }\n\n return globalSlug\n ? await payload.updateGlobal({\n slug: globalSlug,\n data: overrideData\n ? fromLocaleData.value\n : mergeData(\n fromLocaleData.value,\n toLocaleData.value,\n globals[globalSlug].config.fields,\n req,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n : await payload.update({\n id: docID,\n collection: collectionSlug,\n data: overrideData\n ? fromLocaleData.value\n : mergeData(\n fromLocaleData.value,\n toLocaleData.value,\n collections[collectionSlug].config.fields,\n req,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"copyDataFromLocale.js","names":["ObjectIdImport","formatErrors","fieldAffectsData","fieldShouldBeLocalized","tabHasName","ObjectId","default","iterateFields","fields","fromLocaleData","toLocaleData","req","parentIsLocalized","map","field","type","name","undefined","includes","item","index","id","toHexString","localized","blockData","block","payload","blocks","blockType","blockReferences","find","slug","length","tabs","tab","mergeData","copyDataFromLocaleHandler","args","copyDataFromLocale","err","logger","error","msg","fromLocale","toLocale","message","collectionSlug","docID","globalSlug","overrideData","collections","globals","user","incomingUserSlug","collection","adminUserSlug","config","admin","adminAccessFunction","access","canAccessAdmin","Error","Promise","allSettled","findGlobal","depth","locale","overrideAccess","findByID","joins","status","updateGlobal","data","value","update"],"sources":["../../src/utilities/copyDataFromLocale.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\nimport {\n type CollectionSlug,\n type Data,\n type Field,\n type FlattenedBlock,\n formatErrors,\n type PayloadRequest,\n} from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from 'payload/shared'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport type CopyDataFromLocaleArgs = {\n collectionSlug?: CollectionSlug\n docID?: number | string\n fromLocale: string\n globalSlug?: string\n overrideData?: boolean\n req: PayloadRequest\n toLocale: string\n}\n\nfunction iterateFields(\n fields: Field[],\n fromLocaleData: Data,\n toLocaleData: Data,\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): void {\n fields.map((field) => {\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((item: Data, index: number) => {\n if (fromLocaleData[field.name]?.[index]) {\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n iterateFields(\n field.fields,\n fromLocaleData[field.name][index],\n item,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n break\n\n case 'blocks':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((blockData: Data, index: number) => {\n const block =\n req.payload.blocks[blockData.blockType] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockData.blockType,\n ) as FlattenedBlock | undefined)\n\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n if (block?.fields?.length) {\n iterateFields(\n block?.fields,\n fromLocaleData[field.name][index],\n blockData,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n\n break\n\n case 'checkbox':\n case 'code':\n case 'date':\n case 'email':\n case 'json':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'richText':\n case 'select':\n case 'text':\n case 'textarea':\n case 'upload':\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n }\n break\n\n case 'group': {\n if (field.name in toLocaleData && fromLocaleData?.[field.name] !== undefined) {\n iterateFields(\n field.fields,\n fromLocaleData[field.name],\n toLocaleData[field.name],\n req,\n parentIsLocalized || field.localized,\n )\n }\n break\n }\n }\n } else {\n switch (field.type) {\n case 'collapsible':\n case 'row':\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n break\n\n case 'tabs':\n field.tabs.map((tab) => {\n if (tabHasName(tab)) {\n if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {\n iterateFields(\n tab.fields,\n fromLocaleData[tab.name],\n toLocaleData[tab.name],\n req,\n parentIsLocalized,\n )\n }\n } else {\n iterateFields(tab.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n })\n break\n }\n }\n })\n}\n\nfunction mergeData(\n fromLocaleData: Data,\n toLocaleData: Data,\n fields: Field[],\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): Data {\n iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n\n return toLocaleData\n}\n\nexport const copyDataFromLocaleHandler = async (args: CopyDataFromLocaleArgs) => {\n const { req } = args\n\n try {\n return await copyDataFromLocale(args)\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error copying data from \"${args.fromLocale}\" to \"${args.toLocale}\"`,\n })\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const copyDataFromLocale = async (args: CopyDataFromLocaleArgs) => {\n const {\n collectionSlug,\n docID,\n fromLocale,\n globalSlug,\n overrideData = false,\n req: {\n payload,\n payload: { collections, globals },\n user,\n },\n req,\n toLocale,\n } = args\n\n const incomingUserSlug = user?.collection\n\n const adminUserSlug = payload.config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req: args.req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n }\n\n const [fromLocaleData, toLocaleData] = await Promise.allSettled([\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n ])\n\n if (fromLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${fromLocale}\"`)\n }\n\n if (toLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${toLocale}\"`)\n }\n\n return globalSlug\n ? await payload.updateGlobal({\n slug: globalSlug,\n data: overrideData\n ? fromLocaleData.value\n : mergeData(\n fromLocaleData.value,\n toLocaleData.value,\n globals[globalSlug].config.fields,\n req,\n false,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n : await payload.update({\n id: docID,\n collection: collectionSlug,\n data: overrideData\n ? fromLocaleData.value\n : mergeData(\n fromLocaleData.value,\n toLocaleData.value,\n collections[collectionSlug].config.fields,\n req,\n false,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleFormStateLocking.d.ts","sourceRoot":"","sources":["../../src/utilities/handleFormStateLocking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExD,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAID,eAAO,MAAM,sBAAsB,+DAMhC,IAAI,KAAG,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"handleFormStateLocking.d.ts","sourceRoot":"","sources":["../../src/utilities/handleFormStateLocking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExD,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAID,eAAO,MAAM,sBAAsB,+DAMhC,IAAI,KAAG,OAAO,CAAC,MAAM,CA8HvB,CAAA"}
|
|
@@ -48,7 +48,7 @@ export const handleFormStateLocking = async ({
|
|
|
48
48
|
limit: 1,
|
|
49
49
|
overrideAccess: false,
|
|
50
50
|
pagination: false,
|
|
51
|
-
req,
|
|
51
|
+
user: req.user,
|
|
52
52
|
where: lockedDocumentQuery
|
|
53
53
|
});
|
|
54
54
|
if (lockedDocument.docs && lockedDocument.docs.length > 0) {
|
|
@@ -63,8 +63,7 @@ export const handleFormStateLocking = async ({
|
|
|
63
63
|
await req.payload.db.updateOne({
|
|
64
64
|
id: lockedDocument.docs[0].id,
|
|
65
65
|
collection: 'payload-locked-documents',
|
|
66
|
-
data: {}
|
|
67
|
-
req
|
|
66
|
+
data: {}
|
|
68
67
|
});
|
|
69
68
|
}
|
|
70
69
|
} else {
|
|
@@ -98,7 +97,6 @@ export const handleFormStateLocking = async ({
|
|
|
98
97
|
}
|
|
99
98
|
await req.payload.db.deleteMany({
|
|
100
99
|
collection: 'payload-locked-documents',
|
|
101
|
-
req,
|
|
102
100
|
where: deleteExpiredLocksQuery
|
|
103
101
|
});
|
|
104
102
|
await req.payload.db.create({
|
|
@@ -113,8 +111,7 @@ export const handleFormStateLocking = async ({
|
|
|
113
111
|
relationTo: req.user.collection,
|
|
114
112
|
value: req.user.id
|
|
115
113
|
}
|
|
116
|
-
}
|
|
117
|
-
req
|
|
114
|
+
}
|
|
118
115
|
});
|
|
119
116
|
result = {
|
|
120
117
|
isLocked: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleFormStateLocking.js","names":["lockDurationDefault","handleFormStateLocking","id","collectionSlug","globalSlug","req","updateLastEdited","result","lockedDocumentQuery","and","equals","lockDocumentsProp","payload","collections","config","lockDocuments","globals","find","g","slug","lockDuration","duration","lockDurationInMilliseconds","now","Date","getTime","push","updatedAt","greater_than","toISOString","lockedDocument","collection","depth","limit","overrideAccess","pagination","where","docs","length","isLocked","lastEditedAt","
|
|
1
|
+
{"version":3,"file":"handleFormStateLocking.js","names":["lockDurationDefault","handleFormStateLocking","id","collectionSlug","globalSlug","req","updateLastEdited","result","lockedDocumentQuery","and","equals","lockDocumentsProp","payload","collections","config","lockDocuments","globals","find","g","slug","lockDuration","duration","lockDurationInMilliseconds","now","Date","getTime","push","updatedAt","greater_than","toISOString","lockedDocument","collection","depth","limit","overrideAccess","pagination","user","where","docs","length","isLocked","lastEditedAt","value","lockOwnerID","db","updateOne","data","deleteExpiredLocksQuery","less_than","deleteMany","create","document","relationTo","undefined"],"sources":["../../src/utilities/handleFormStateLocking.ts"],"sourcesContent":["import type { PayloadRequest, TypedUser } from 'payload'\n\ntype Args = {\n collectionSlug?: string\n globalSlug?: string\n id?: number | string\n req: PayloadRequest\n updateLastEdited?: boolean\n}\n\ntype Result = {\n isLocked: boolean\n lastEditedAt: string\n user: TypedUser\n}\n\nconst lockDurationDefault = 300 // Default 5 minutes in seconds\n\nexport const handleFormStateLocking = async ({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n}: Args): Promise<Result> => {\n let result: Result\n\n if (id || globalSlug) {\n let lockedDocumentQuery\n\n if (collectionSlug) {\n lockedDocumentQuery = {\n and: [\n { 'document.relationTo': { equals: collectionSlug } },\n { 'document.value': { equals: id } },\n ],\n }\n } else if (globalSlug) {\n lockedDocumentQuery = {\n and: [{ globalSlug: { equals: globalSlug } }],\n }\n }\n\n const lockDocumentsProp = collectionSlug\n ? req.payload.collections?.[collectionSlug]?.config.lockDocuments\n : req.payload.config.globals.find((g) => g.slug === globalSlug)?.lockDocuments\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n const now = new Date().getTime()\n\n if (lockedDocumentQuery) {\n // Query where the lock is newer than the current time minus the lock duration\n lockedDocumentQuery.and.push({\n updatedAt: {\n greater_than: new Date(now - lockDurationInMilliseconds).toISOString(),\n },\n })\n\n const lockedDocument = await req.payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n user: req.user,\n where: lockedDocumentQuery,\n })\n\n if (lockedDocument.docs && lockedDocument.docs.length > 0) {\n result = {\n isLocked: true,\n lastEditedAt: lockedDocument.docs[0]?.updatedAt,\n user: lockedDocument.docs[0]?.user?.value,\n }\n\n const lockOwnerID =\n typeof lockedDocument.docs[0]?.user?.value === 'object'\n ? lockedDocument.docs[0]?.user?.value?.id\n : lockedDocument.docs[0]?.user?.value\n // Should only update doc if the incoming / current user is also the owner of the locked doc\n if (updateLastEdited && req.user && lockOwnerID === req.user.id) {\n await req.payload.db.updateOne({\n id: lockedDocument.docs[0].id,\n collection: 'payload-locked-documents',\n data: {},\n })\n }\n } else {\n // If NO ACTIVE lock document exists, first delete any expired locks and then create a fresh lock\n // Where updatedAt is older than the duration that is specified in the config\n let deleteExpiredLocksQuery\n\n if (collectionSlug) {\n deleteExpiredLocksQuery = {\n and: [\n { 'document.relationTo': { equals: collectionSlug } },\n {\n updatedAt: {\n less_than: new Date(now - lockDurationInMilliseconds).toISOString(),\n },\n },\n ],\n }\n } else if (globalSlug) {\n deleteExpiredLocksQuery = {\n and: [\n { globalSlug: { equals: globalSlug } },\n {\n updatedAt: {\n less_than: new Date(now - lockDurationInMilliseconds).toISOString(),\n },\n },\n ],\n }\n }\n\n await req.payload.db.deleteMany({\n collection: 'payload-locked-documents',\n where: deleteExpiredLocksQuery,\n })\n\n await req.payload.db.create({\n collection: 'payload-locked-documents',\n data: {\n document: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: id,\n }\n : undefined,\n globalSlug: globalSlug ? globalSlug : undefined,\n user: {\n relationTo: req.user.collection,\n value: req.user.id,\n },\n },\n })\n\n result = {\n isLocked: true,\n lastEditedAt: new Date().toISOString(),\n user: req.user,\n }\n }\n }\n }\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { ClientCollectionConfig, CollectionConfig, Field, ImportMap, ListPreferences, PaginatedDocs, Payload, SanitizedCollectionConfig } from 'payload';
|
|
1
|
+
import type { ClientCollectionConfig, ClientConfig, CollectionConfig, Field, ImportMap, ListPreferences, PaginatedDocs, Payload, SanitizedCollectionConfig } from 'payload';
|
|
2
2
|
import { type I18nClient } from '@payloadcms/translations';
|
|
3
3
|
import type { Column } from '../exports/client/index.js';
|
|
4
4
|
export declare const renderFilters: (fields: Field[], importMap: ImportMap) => Map<string, React.ReactNode>;
|
|
5
|
-
export declare const renderTable: ({ clientCollectionConfig, collectionConfig, columnPreferences, columns: columnsFromArgs, customCellProps, docs, enableRowSelections, i18n, payload, renderRowTypes, tableAppearance, useAsTitle, }: {
|
|
6
|
-
clientCollectionConfig
|
|
7
|
-
|
|
5
|
+
export declare const renderTable: ({ clientCollectionConfig, clientConfig, collectionConfig, collections, columnPreferences, columns: columnsFromArgs, customCellProps, docs, enableRowSelections, i18n, payload, renderRowTypes, tableAppearance, useAsTitle, }: {
|
|
6
|
+
clientCollectionConfig?: ClientCollectionConfig;
|
|
7
|
+
clientConfig?: ClientConfig;
|
|
8
|
+
collectionConfig?: SanitizedCollectionConfig;
|
|
9
|
+
collections?: string[];
|
|
8
10
|
columnPreferences: ListPreferences["columns"];
|
|
9
11
|
columns?: ListPreferences["columns"];
|
|
10
12
|
customCellProps?: Record<string, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTable.d.ts","sourceRoot":"","sources":["../../src/utilities/renderTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,OAAO,EACP,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAI1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"renderTable.d.ts","sourceRoot":"","sources":["../../src/utilities/renderTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EAEZ,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,OAAO,EACP,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAI1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAWxD,eAAO,MAAM,aAAa,WAChB,KAAK,EAAE,aACJ,SAAS,KACnB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAoB3B,CAAA;AAEH,eAAO,MAAM,WAAW,kOAerB;IACD,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,iBAAiB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACzC,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CACpD,KAAG;IACF,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;CAmHvB,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { getTranslation } from '@payloadcms/translations';
|
|
3
|
-
import { fieldIsHiddenOrDisabled, flattenTopLevelFields } from 'payload/shared';
|
|
3
|
+
import { fieldAffectsData, fieldIsHiddenOrDisabled, flattenTopLevelFields } from 'payload/shared';
|
|
4
4
|
import { RenderServerComponent } from '../elements/RenderServerComponent/index.js';
|
|
5
5
|
import { buildColumnState } from '../elements/TableColumns/buildColumnState.js';
|
|
6
|
+
import { buildPolymorphicColumnState } from '../elements/TableColumns/buildPolymorphicColumnState.js';
|
|
6
7
|
import { filterFields } from '../elements/TableColumns/filterFields.js';
|
|
7
8
|
import { getInitialColumns } from '../elements/TableColumns/getInitialColumns.js';
|
|
8
9
|
// eslint-disable-next-line payload/no-imports-from-exports-dir
|
|
@@ -21,7 +22,9 @@ export const renderFilters = (fields, importMap) => fields.reduce((acc, field) =
|
|
|
21
22
|
}, new Map());
|
|
22
23
|
export const renderTable = ({
|
|
23
24
|
clientCollectionConfig,
|
|
25
|
+
clientConfig,
|
|
24
26
|
collectionConfig,
|
|
27
|
+
collections,
|
|
25
28
|
columnPreferences,
|
|
26
29
|
columns: columnsFromArgs,
|
|
27
30
|
customCellProps,
|
|
@@ -34,20 +37,49 @@ export const renderTable = ({
|
|
|
34
37
|
useAsTitle
|
|
35
38
|
}) => {
|
|
36
39
|
// Ensure that columns passed as args comply with the field config, i.e. `hidden`, `disableListColumn`, etc.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
let columnState;
|
|
41
|
+
if (collections) {
|
|
42
|
+
const fields = [];
|
|
43
|
+
for (const collection of collections) {
|
|
44
|
+
const config = clientConfig.collections.find(each => each.slug === collection);
|
|
45
|
+
for (const field of filterFields(config.fields)) {
|
|
46
|
+
if (fieldAffectsData(field)) {
|
|
47
|
+
if (fields.some(each => fieldAffectsData(each) && each.name === field.name)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
fields.push(field);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const columns = columnsFromArgs ? columnsFromArgs?.filter(column => flattenTopLevelFields(fields, true)?.some(field => 'name' in field && field.name === column.accessor)) : getInitialColumns(fields, useAsTitle, []);
|
|
55
|
+
columnState = buildPolymorphicColumnState({
|
|
56
|
+
columnPreferences,
|
|
57
|
+
columns,
|
|
58
|
+
enableRowSelections,
|
|
59
|
+
fields,
|
|
60
|
+
i18n,
|
|
61
|
+
// sortColumnProps,
|
|
62
|
+
customCellProps,
|
|
63
|
+
docs,
|
|
64
|
+
payload,
|
|
65
|
+
useAsTitle
|
|
66
|
+
});
|
|
67
|
+
} else {
|
|
68
|
+
const columns = columnsFromArgs ? columnsFromArgs?.filter(column => flattenTopLevelFields(clientCollectionConfig.fields, true)?.some(field => 'name' in field && field.name === column.accessor)) : getInitialColumns(filterFields(clientCollectionConfig.fields), useAsTitle, clientCollectionConfig?.admin?.defaultColumns);
|
|
69
|
+
columnState = buildColumnState({
|
|
70
|
+
clientCollectionConfig,
|
|
71
|
+
collectionConfig,
|
|
72
|
+
columnPreferences,
|
|
73
|
+
columns,
|
|
74
|
+
enableRowSelections,
|
|
75
|
+
i18n,
|
|
76
|
+
// sortColumnProps,
|
|
77
|
+
customCellProps,
|
|
78
|
+
docs,
|
|
79
|
+
payload,
|
|
80
|
+
useAsTitle
|
|
81
|
+
});
|
|
82
|
+
}
|
|
51
83
|
const columnsToUse = [...columnState];
|
|
52
84
|
if (renderRowTypes) {
|
|
53
85
|
columnsToUse.unshift({
|
|
@@ -60,8 +92,8 @@ export const renderTable = ({
|
|
|
60
92
|
hidden: true
|
|
61
93
|
},
|
|
62
94
|
Heading: i18n.t('version:type'),
|
|
63
|
-
renderedCells: docs.map((
|
|
64
|
-
children: getTranslation(clientCollectionConfig.labels.singular, i18n)
|
|
95
|
+
renderedCells: docs.map((doc, i) => /*#__PURE__*/_jsx(Pill, {
|
|
96
|
+
children: getTranslation(collections ? payload.collections[doc.relationTo].config.labels.singular : clientCollectionConfig.labels.singular, i18n)
|
|
65
97
|
}, i))
|
|
66
98
|
});
|
|
67
99
|
}
|