@payloadcms/ui 3.24.0-canary.f229d8d → 3.24.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/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 +158 -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 +16 -43
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.scss +0 -29
- 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/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 +1 -0
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +14 -0
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListControls/index.scss +5 -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 +0 -1
- package/dist/elements/PublishMany/index.d.ts.map +1 -1
- package/dist/elements/PublishMany/index.js +19 -45
- package/dist/elements/PublishMany/index.js.map +1 -1
- 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/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 -2
- package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/index.js +14 -42
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- 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/exports/client/CodeEditor-L6GW2VQ6.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-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/chunk-ZZDNSFEW.js.map +0 -1
- 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 +23 -23
- package/dist/exports/client/index.js.map +4 -5
- 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.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/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/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/index.d.ts +2 -25
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +6 -3
- 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 +4 -4
- package/dist/elements/DuplicateDocument/index.scss +0 -42
- package/dist/elements/LeaveWithoutSaving/index.scss +0 -39
- package/dist/elements/PublishMany/index.scss +0 -39
- package/dist/elements/StayLoggedIn/index.scss +0 -40
- package/dist/elements/UnpublishMany/index.scss +0 -39
|
@@ -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
|
}
|