Skip to content

Commit 17dc45d

Browse files
committed
remove generateId from crud plugin as it's generally unreliable, hard to make work reliably, and is not really a pattern we want to encourage
1 parent 6da5a21 commit 17dc45d

2 files changed

Lines changed: 3 additions & 20 deletions

File tree

src/sync-plugins/crud.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ export interface SyncedCrudPropsBase<TRemote extends object, TLocal = TRemote>
8585
fieldDeletedList?: string;
8686
updatePartial?: boolean;
8787
changesSince?: 'all' | 'last-sync';
88-
generateId?: () => string | number;
8988
subscribe?: (params: SyncedSubscribeParams<TRemote[]>) => (() => void) | void;
9089
waitForSet?:
9190
| ((params: WaitForSetCrudFnParams<TLocal>) => any)
@@ -115,13 +114,6 @@ function transformOut<T1, T2>(data: T1, transform: undefined | ((value: T1) => T
115114
return transform ? transform(clone(data)) : data;
116115
}
117116

118-
function ensureId(obj: any, fieldId: string, generateId: () => string | number) {
119-
if (!obj[fieldId]) {
120-
obj[fieldId] = generateId();
121-
}
122-
return obj[fieldId];
123-
}
124-
125117
function computeLastSync(data: any[], fieldUpdatedAt: string | undefined, fieldCreatedAt: string | undefined) {
126118
let newLastSync = 0;
127119
for (let i = 0; i < data.length; i++) {
@@ -238,7 +230,6 @@ export function syncedCrud<TRemote extends object, TLocal = TRemote, TAsOption e
238230
onSaved,
239231
mode: modeParam,
240232
changesSince,
241-
generateId,
242233
waitForSet: waitForSetParam,
243234
retry,
244235
...rest
@@ -407,11 +398,8 @@ export function syncedCrud<TRemote extends object, TLocal = TRemote, TAsOption e
407398
const { path, prevAtPath, valueAtPath, pathTypes } = change;
408399
if (asType === 'value') {
409400
if (value) {
410-
let id = value?.[fieldId];
401+
const id = value?.[fieldId];
411402
let isCreate = fieldCreatedAt ? !value[fieldCreatedAt!] : !prevAtPath;
412-
if (isNullOrUndefined(id) && generateId) {
413-
id = ensureId(value, fieldId, generateId);
414-
}
415403
if (!isNullOrUndefined(id)) {
416404
changesById.set(id, change);
417405
if (pendingCreates.has(id)) {
@@ -509,9 +497,6 @@ export function syncedCrud<TRemote extends object, TLocal = TRemote, TAsOption e
509497
? !item[fieldUpdatedAt] && !prev?.[fieldCreatedAt!]
510498
: isNullOrUndefined(prev));
511499
if (isCreate) {
512-
if (generateId) {
513-
ensureId(item, fieldId, generateId);
514-
}
515500
if (!item[fieldId]) {
516501
console.error('[legend-state]: added item without an id');
517502
}

tests/crud.test.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2418,13 +2418,12 @@ describe('onSaved', () => {
24182418
created = clone(input);
24192419
return input;
24202420
},
2421-
generateId: () => 'id1',
24222421
}),
24232422
);
24242423

24252424
await promiseTimeout(1);
24262425

2427-
obs.id1.set({ test: 'hello', id: undefined as unknown as string });
2426+
obs.id1.set({ test: 'hello', id: 'id1' });
24282427

24292428
await promiseTimeout(1);
24302429

@@ -2633,7 +2632,6 @@ describe('onSaved', () => {
26332632
create: async (input: BasicValue) => {
26342633
return input;
26352634
},
2636-
generateId: () => 'id1',
26372635
onSaved(params) {
26382636
saved = params.saved;
26392637
},
@@ -2642,7 +2640,7 @@ describe('onSaved', () => {
26422640

26432641
await promiseTimeout(1);
26442642

2645-
obs.id1.set({ test: 'hello', id: undefined as unknown as string });
2643+
obs.id1.set({ test: 'hello', id: 'id1' });
26462644

26472645
await promiseTimeout(1);
26482646

0 commit comments

Comments
 (0)