payload 1.3.3 → 1.3.4
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/admin/components/elements/Autosave/index.js +1 -1
- package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.d.ts +1 -2
- package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.js +24 -27
- package/dist/admin/components/forms/Form/buildStateFromSchema/index.js +1 -4
- package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.d.ts +1 -2
- package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.js +4 -3
- package/dist/utilities/getEntityPolicies.js +2 -2
- package/package.json +1 -1
|
@@ -78,7 +78,7 @@ const Autosave = ({ collection, global, id, publishedDocUpdatedAt }) => {
|
|
|
78
78
|
}
|
|
79
79
|
if (url) {
|
|
80
80
|
const body = {
|
|
81
|
-
...reduceFieldsToValues(fieldRef.current),
|
|
81
|
+
...reduceFieldsToValues(fieldRef.current, true),
|
|
82
82
|
_status: 'draft',
|
|
83
83
|
};
|
|
84
84
|
setTimeout(async () => {
|
|
@@ -9,12 +9,11 @@ type Args = {
|
|
|
9
9
|
state: Fields;
|
|
10
10
|
path: string;
|
|
11
11
|
passesCondition: boolean;
|
|
12
|
-
fieldPromises: Promise<void>[];
|
|
13
12
|
id: string | number;
|
|
14
13
|
operation: 'create' | 'update';
|
|
15
14
|
data: Data;
|
|
16
15
|
fullData: Data;
|
|
17
16
|
t: TFunction;
|
|
18
17
|
};
|
|
19
|
-
export declare const addFieldStatePromise: ({ field, locale, user, state, path, passesCondition, fullData, data,
|
|
18
|
+
export declare const addFieldStatePromise: ({ field, locale, user, state, path, passesCondition, fullData, data, id, operation, t, }: Args) => Promise<void>;
|
|
20
19
|
export {};
|
|
@@ -3,7 +3,7 @@ import ObjectID from 'bson-objectid';
|
|
|
3
3
|
import { fieldAffectsData, fieldHasSubFields, tabHasName, } from '../../../../../fields/config/types';
|
|
4
4
|
import getValueWithDefault from '../../../../../fields/getDefaultValue';
|
|
5
5
|
import { iterateFields } from './iterateFields';
|
|
6
|
-
export const addFieldStatePromise = async ({ field, locale, user, state, path, passesCondition, fullData, data,
|
|
6
|
+
export const addFieldStatePromise = async ({ field, locale, user, state, path, passesCondition, fullData, data, id, operation, t, }) => {
|
|
7
7
|
var _a;
|
|
8
8
|
if (fieldAffectsData(field)) {
|
|
9
9
|
const fieldState = {
|
|
@@ -40,21 +40,20 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
40
40
|
switch (field.type) {
|
|
41
41
|
case 'array': {
|
|
42
42
|
const arrayValue = Array.isArray(valueWithDefault) ? valueWithDefault : [];
|
|
43
|
-
arrayValue.
|
|
43
|
+
const promises = arrayValue.map((row, i) => {
|
|
44
44
|
const rowPath = `${path}${field.name}.${i}.`;
|
|
45
45
|
state[`${rowPath}id`] = {
|
|
46
46
|
value: row.id,
|
|
47
47
|
initialValue: row.id || new ObjectID().toHexString(),
|
|
48
48
|
valid: true,
|
|
49
49
|
};
|
|
50
|
-
iterateFields({
|
|
50
|
+
return iterateFields({
|
|
51
51
|
state,
|
|
52
52
|
fields: field.fields,
|
|
53
53
|
data: row,
|
|
54
54
|
parentPassesCondition: passesCondition,
|
|
55
55
|
path: rowPath,
|
|
56
56
|
user,
|
|
57
|
-
fieldPromises,
|
|
58
57
|
fullData,
|
|
59
58
|
id,
|
|
60
59
|
locale,
|
|
@@ -62,6 +61,7 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
62
61
|
t,
|
|
63
62
|
});
|
|
64
63
|
});
|
|
64
|
+
await Promise.all(promises);
|
|
65
65
|
// Add values to field state
|
|
66
66
|
fieldState.value = arrayValue.length;
|
|
67
67
|
fieldState.initialValue = arrayValue.length;
|
|
@@ -74,6 +74,7 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
74
74
|
}
|
|
75
75
|
case 'blocks': {
|
|
76
76
|
const blocksValue = Array.isArray(valueWithDefault) ? valueWithDefault : [];
|
|
77
|
+
const promises = [];
|
|
77
78
|
blocksValue.forEach((row, i) => {
|
|
78
79
|
const block = field.blocks.find((blockType) => blockType.slug === row.blockType);
|
|
79
80
|
const rowPath = `${path}${field.name}.${i}.`;
|
|
@@ -93,7 +94,7 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
93
94
|
initialValue: row.blockName,
|
|
94
95
|
valid: true,
|
|
95
96
|
};
|
|
96
|
-
iterateFields({
|
|
97
|
+
promises.push(iterateFields({
|
|
97
98
|
state,
|
|
98
99
|
fields: block.fields,
|
|
99
100
|
data: row,
|
|
@@ -103,12 +104,12 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
103
104
|
user,
|
|
104
105
|
locale,
|
|
105
106
|
operation,
|
|
106
|
-
fieldPromises,
|
|
107
107
|
id,
|
|
108
108
|
t,
|
|
109
|
-
});
|
|
109
|
+
}));
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
|
+
await Promise.all(promises);
|
|
112
113
|
// Add values to field state
|
|
113
114
|
fieldState.value = blocksValue.length;
|
|
114
115
|
fieldState.initialValue = blocksValue.length;
|
|
@@ -120,11 +121,10 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
120
121
|
break;
|
|
121
122
|
}
|
|
122
123
|
case 'group': {
|
|
123
|
-
iterateFields({
|
|
124
|
+
await iterateFields({
|
|
124
125
|
state,
|
|
125
126
|
id,
|
|
126
127
|
operation,
|
|
127
|
-
fieldPromises,
|
|
128
128
|
fields: field.fields,
|
|
129
129
|
data: data === null || data === void 0 ? void 0 : data[field.name],
|
|
130
130
|
fullData,
|
|
@@ -147,14 +147,13 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
147
147
|
}
|
|
148
148
|
else if (fieldHasSubFields(field)) {
|
|
149
149
|
// Handle field types that do not use names (row, etc)
|
|
150
|
-
iterateFields({
|
|
150
|
+
await iterateFields({
|
|
151
151
|
state,
|
|
152
152
|
fields: field.fields,
|
|
153
153
|
data,
|
|
154
154
|
parentPassesCondition: passesCondition,
|
|
155
155
|
path,
|
|
156
156
|
user,
|
|
157
|
-
fieldPromises,
|
|
158
157
|
fullData,
|
|
159
158
|
id,
|
|
160
159
|
locale,
|
|
@@ -163,21 +162,19 @@ export const addFieldStatePromise = async ({ field, locale, user, state, path, p
|
|
|
163
162
|
});
|
|
164
163
|
}
|
|
165
164
|
else if (field.type === 'tabs') {
|
|
166
|
-
field.tabs.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
});
|
|
181
|
-
});
|
|
165
|
+
const promises = field.tabs.map((tab) => iterateFields({
|
|
166
|
+
state,
|
|
167
|
+
fields: tab.fields,
|
|
168
|
+
data: tabHasName(tab) ? data === null || data === void 0 ? void 0 : data[tab.name] : data,
|
|
169
|
+
parentPassesCondition: passesCondition,
|
|
170
|
+
path: tabHasName(tab) ? `${path}${tab.name}.` : path,
|
|
171
|
+
user,
|
|
172
|
+
fullData,
|
|
173
|
+
id,
|
|
174
|
+
locale,
|
|
175
|
+
operation,
|
|
176
|
+
t,
|
|
177
|
+
}));
|
|
178
|
+
await Promise.all(promises);
|
|
182
179
|
}
|
|
183
180
|
};
|
|
@@ -2,9 +2,8 @@ import { iterateFields } from './iterateFields';
|
|
|
2
2
|
const buildStateFromSchema = async (args) => {
|
|
3
3
|
const { fieldSchema, data: fullData = {}, user, id, operation, locale, t, } = args;
|
|
4
4
|
if (fieldSchema) {
|
|
5
|
-
const fieldPromises = [];
|
|
6
5
|
const state = {};
|
|
7
|
-
iterateFields({
|
|
6
|
+
await iterateFields({
|
|
8
7
|
state,
|
|
9
8
|
fields: fieldSchema,
|
|
10
9
|
id,
|
|
@@ -12,13 +11,11 @@ const buildStateFromSchema = async (args) => {
|
|
|
12
11
|
operation,
|
|
13
12
|
path: '',
|
|
14
13
|
user,
|
|
15
|
-
fieldPromises,
|
|
16
14
|
data: fullData,
|
|
17
15
|
fullData,
|
|
18
16
|
parentPassesCondition: true,
|
|
19
17
|
t,
|
|
20
18
|
});
|
|
21
|
-
await Promise.all(fieldPromises);
|
|
22
19
|
return state;
|
|
23
20
|
}
|
|
24
21
|
return {};
|
|
@@ -11,10 +11,9 @@ type Args = {
|
|
|
11
11
|
path: string;
|
|
12
12
|
user: User;
|
|
13
13
|
locale: string;
|
|
14
|
-
fieldPromises: Promise<void>[];
|
|
15
14
|
id: string | number;
|
|
16
15
|
operation: 'create' | 'update';
|
|
17
16
|
t: TFunction;
|
|
18
17
|
};
|
|
19
|
-
export declare const iterateFields: ({ fields, data, parentPassesCondition, path, fullData, user, locale, operation,
|
|
18
|
+
export declare const iterateFields: ({ fields, data, parentPassesCondition, path, fullData, user, locale, operation, id, state, t, }: Args) => Promise<void>;
|
|
20
19
|
export {};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { fieldIsPresentationalOnly, } from '../../../../../fields/config/types';
|
|
2
2
|
import { addFieldStatePromise } from './addFieldStatePromise';
|
|
3
|
-
export const iterateFields = ({ fields, data, parentPassesCondition, path = '', fullData, user, locale, operation,
|
|
3
|
+
export const iterateFields = async ({ fields, data, parentPassesCondition, path = '', fullData, user, locale, operation, id, state, t, }) => {
|
|
4
|
+
const promises = [];
|
|
4
5
|
fields.forEach((field) => {
|
|
5
6
|
var _a, _b;
|
|
6
7
|
const initialData = data;
|
|
7
8
|
if (!fieldIsPresentationalOnly(field) && !((_a = field === null || field === void 0 ? void 0 : field.admin) === null || _a === void 0 ? void 0 : _a.disabled)) {
|
|
8
9
|
const passesCondition = Boolean((((_b = field === null || field === void 0 ? void 0 : field.admin) === null || _b === void 0 ? void 0 : _b.condition) ? field.admin.condition(fullData || {}, initialData || {}) : true) && parentPassesCondition);
|
|
9
|
-
|
|
10
|
+
promises.push(addFieldStatePromise({
|
|
10
11
|
fullData,
|
|
11
12
|
id,
|
|
12
13
|
locale,
|
|
@@ -14,7 +15,6 @@ export const iterateFields = ({ fields, data, parentPassesCondition, path = '',
|
|
|
14
15
|
path,
|
|
15
16
|
state,
|
|
16
17
|
user,
|
|
17
|
-
fieldPromises,
|
|
18
18
|
field,
|
|
19
19
|
passesCondition,
|
|
20
20
|
data,
|
|
@@ -22,4 +22,5 @@ export const iterateFields = ({ fields, data, parentPassesCondition, path = '',
|
|
|
22
22
|
}));
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
+
await Promise.all(promises);
|
|
25
26
|
};
|
|
@@ -61,7 +61,7 @@ function getEntityPolicies(args) {
|
|
|
61
61
|
const accessResult = await access({ req, id, doc: docBeingAccessed });
|
|
62
62
|
if (typeof accessResult === 'object' && !disableWhere) {
|
|
63
63
|
mutablePolicies[operation] = {
|
|
64
|
-
permission: !!(await getEntityDoc({ where: accessResult })),
|
|
64
|
+
permission: (id || type === 'global') ? !!(await getEntityDoc({ where: accessResult })) : true,
|
|
65
65
|
where: accessResult,
|
|
66
66
|
};
|
|
67
67
|
}
|
|
@@ -153,4 +153,4 @@ function getEntityPolicies(args) {
|
|
|
153
153
|
return [policies, promises];
|
|
154
154
|
}
|
|
155
155
|
exports.getEntityPolicies = getEntityPolicies;
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0RW50aXR5UG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL2dldEVudGl0eVBvbGljaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGtEQUFpRTtBQThCakUsU0FBZ0IsaUJBQWlCLENBQWlCLElBQU87SUFDdkQsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDbkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLCtDQUErQztJQUMvQywyQ0FBMkM7SUFDM0MsNkNBQTZDO0lBQzdDLCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRztRQUNmLE1BQU0sRUFBRSxFQUFFO0tBQ1MsQ0FBQztJQUN0QixNQUFNLFFBQVEsR0FBRyxFQUFzQixDQUFDO0lBQ3hDLElBQUksZ0JBQWdCLENBQUM7SUFFckIsS0FBSyxVQUFVLFlBQVksQ0FBQyxFQUFFLEtBQUssS0FBd0IsRUFBRTs7UUFDM0QsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2YsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNyQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUM1QixjQUFjLEVBQUUsSUFBSTtvQkFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2lCQUNsQixDQUFDLENBQUM7YUFDSjtZQUVELElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLEVBQUU7Z0JBQy9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO29CQUM3QixNQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUMxQyxjQUFjLEVBQUUsSUFBSTt3QkFDcEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dC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
|