Skip to content

Commit b987cb8

Browse files
committed
fix: potential solution for #756
1 parent 446a4e1 commit b987cb8

File tree

4 files changed

+39
-34
lines changed

4 files changed

+39
-34
lines changed

src/fields/hooks/beforeChange/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const beforeChange = async ({
3232
const mergeLocaleActions = [];
3333
const errors: { message: string, field: string }[] = [];
3434

35-
traverseFields({
35+
await traverseFields({
3636
data,
3737
doc,
3838
docWithLocales,
@@ -41,7 +41,6 @@ export const beforeChange = async ({
4141
operation,
4242
path: '',
4343
mergeLocaleActions,
44-
promises,
4544
req,
4645
siblingData: data,
4746
siblingDoc: doc,

src/fields/hooks/beforeChange/promise.ts

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ type Args = {
1717
mergeLocaleActions: (() => void)[]
1818
operation: Operation
1919
path: string
20-
promises: Promise<void>[]
2120
req: PayloadRequest
2221
siblingData: Record<string, unknown>
2322
siblingDoc: Record<string, unknown>
@@ -44,7 +43,6 @@ export const promise = async ({
4443
mergeLocaleActions,
4544
operation,
4645
path,
47-
promises,
4846
req,
4947
siblingData,
5048
siblingDoc,
@@ -171,15 +169,11 @@ export const promise = async ({
171169
}
172170

173171
case 'group': {
174-
let groupData = siblingData[field.name] as Record<string, unknown>;
175-
let groupDoc = siblingDoc[field.name] as Record<string, unknown>;
176-
let groupDocWithLocales = siblingDocWithLocales[field.name] as Record<string, unknown>;
172+
if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {};
173+
if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {};
174+
if (typeof siblingDocWithLocales[field.name] !== 'object') siblingDocWithLocales[field.name] = {};
177175

178-
if (typeof siblingData[field.name] !== 'object') groupData = {};
179-
if (typeof siblingDoc[field.name] !== 'object') groupDoc = {};
180-
if (typeof siblingDocWithLocales[field.name] !== 'object') groupDocWithLocales = {};
181-
182-
traverseFields({
176+
await traverseFields({
183177
data,
184178
doc,
185179
docWithLocales,
@@ -189,11 +183,10 @@ export const promise = async ({
189183
mergeLocaleActions,
190184
operation,
191185
path: `${path}${field.name}.`,
192-
promises,
193186
req,
194-
siblingData: groupData,
195-
siblingDoc: groupDoc,
196-
siblingDocWithLocales: groupDocWithLocales,
187+
siblingData: siblingData[field.name] as Record<string, unknown>,
188+
siblingDoc: siblingDoc[field.name] as Record<string, unknown>,
189+
siblingDocWithLocales: siblingDocWithLocales[field.name] as Record<string, unknown>,
197190
skipValidation: skipValidationFromHere,
198191
});
199192

@@ -203,9 +196,11 @@ export const promise = async ({
203196
case 'array': {
204197
const rows = siblingData[field.name];
205198

199+
const promises = [];
200+
206201
if (Array.isArray(rows)) {
207202
rows.forEach((row, i) => {
208-
traverseFields({
203+
promises.push(traverseFields({
209204
data,
210205
doc,
211206
docWithLocales,
@@ -215,27 +210,31 @@ export const promise = async ({
215210
mergeLocaleActions,
216211
operation,
217212
path: `${path}${field.name}.${i}.`,
218-
promises,
219213
req,
220214
siblingData: row,
221215
siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]?.[i]),
222216
siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]?.[i]),
223217
skipValidation: skipValidationFromHere,
224-
});
218+
}));
225219
});
226220
}
221+
222+
await Promise.all(promises);
223+
227224
break;
228225
}
229226

230227
case 'blocks': {
231228
const rows = siblingData[field.name];
232229

230+
const promises = [];
231+
233232
if (Array.isArray(rows)) {
234233
rows.forEach((row, i) => {
235234
const block = field.blocks.find((blockType) => blockType.slug === row.blockType);
236235

237236
if (block) {
238-
traverseFields({
237+
promises.push(traverseFields({
239238
data,
240239
doc,
241240
docWithLocales,
@@ -245,23 +244,25 @@ export const promise = async ({
245244
mergeLocaleActions,
246245
operation,
247246
path: `${path}${field.name}.${i}.`,
248-
promises,
249247
req,
250248
siblingData: row,
251249
siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]?.[i]),
252250
siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]?.[i]),
253251
skipValidation: skipValidationFromHere,
254-
});
252+
}));
255253
}
256254
});
257255
}
258256

257+
await Promise.all(promises);
258+
259259
break;
260260
}
261261

262262
case 'row':
263263
case 'collapsible': {
264-
traverseFields({
264+
const promises = [];
265+
promises.push(traverseFields({
265266
data,
266267
doc,
267268
docWithLocales,
@@ -271,20 +272,22 @@ export const promise = async ({
271272
mergeLocaleActions,
272273
operation,
273274
path,
274-
promises,
275275
req,
276276
siblingData,
277277
siblingDoc,
278278
siblingDocWithLocales,
279279
skipValidation: skipValidationFromHere,
280-
});
280+
}));
281+
282+
await Promise.all(promises);
281283

282284
break;
283285
}
284286

285287
case 'tabs': {
288+
const promises = [];
286289
field.tabs.forEach((tab) => {
287-
traverseFields({
290+
promises.push(traverseFields({
288291
data,
289292
doc,
290293
docWithLocales,
@@ -294,14 +297,16 @@ export const promise = async ({
294297
mergeLocaleActions,
295298
operation,
296299
path,
297-
promises,
298300
req,
299301
siblingData,
300302
siblingDoc,
301303
siblingDocWithLocales,
302304
skipValidation: skipValidationFromHere,
303-
});
305+
}));
304306
});
307+
308+
await Promise.all(promises);
309+
305310
break;
306311
}
307312

src/fields/hooks/beforeChange/traverseFields.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ type Args = {
1313
mergeLocaleActions: (() => void)[]
1414
operation: Operation
1515
path: string
16-
promises: Promise<void>[]
1716
req: PayloadRequest
1817
siblingData: Record<string, unknown>
1918
siblingDoc: Record<string, unknown>
2019
siblingDocWithLocales: Record<string, unknown>
2120
skipValidation?: boolean
2221
}
2322

24-
export const traverseFields = ({
23+
export const traverseFields = async ({
2524
data,
2625
doc,
2726
docWithLocales,
@@ -31,13 +30,14 @@ export const traverseFields = ({
3130
mergeLocaleActions,
3231
operation,
3332
path,
34-
promises,
3533
req,
3634
siblingData,
3735
siblingDoc,
3836
siblingDocWithLocales,
3937
skipValidation,
40-
}: Args): void => {
38+
}: Args): Promise<void> => {
39+
const promises = [];
40+
4141
fields.forEach((field) => {
4242
promises.push(promise({
4343
data,
@@ -49,12 +49,13 @@ export const traverseFields = ({
4949
mergeLocaleActions,
5050
operation,
5151
path,
52-
promises,
5352
req,
5453
siblingData,
5554
siblingDoc,
5655
siblingDocWithLocales,
5756
skipValidation,
5857
}));
5958
});
59+
60+
await Promise.all(promises);
6061
};

test/fields/int.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ describe('Fields', () => {
8989
});
9090
});
9191

92-
it.skip('should create with ids and nested ids', async () => {
92+
it('should create with ids and nested ids', async () => {
9393
const docWithIDs = await payload.create<GroupField>({
9494
collection: groupFieldsSlug,
9595
data: groupDoc,

0 commit comments

Comments
 (0)