diff options
Diffstat (limited to 'src/new_fields/util.ts')
-rw-r--r-- | src/new_fields/util.ts | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/new_fields/util.ts b/src/new_fields/util.ts index b2299f34a..511820115 100644 --- a/src/new_fields/util.ts +++ b/src/new_fields/util.ts @@ -31,17 +31,14 @@ export const setter = action(function (target: any, prop: string | symbol | numb throw new Error("Can't put the same object in multiple documents at the same time"); } value[Parent] = target; - value[OnUpdate] = (diff?: any) => { - if (!diff) diff = SerializationHelper.Serialize(value); - target[Update]({ [prop]: diff }); - }; + value[OnUpdate] = updateFunction(target, prop, value); } if (curValue instanceof ObjectField) { delete curValue[Parent]; delete curValue[OnUpdate]; } target.__fields[prop] = value; - target[Update]({ ["fields." + prop]: value instanceof ObjectField ? SerializationHelper.Serialize(value) : (value === undefined ? null : value) }); + target[Update]({ '$set': { ["fields." + prop]: value instanceof ObjectField ? SerializationHelper.Serialize(value) : (value === undefined ? null : value) } }); UndoManager.AddEvent({ redo: () => receiver[prop] = value, undo: () => receiver[prop] = curValue @@ -80,3 +77,10 @@ export function getField(target: any, prop: string | number, ignoreProto: boolea callback && callback(field); return field; } + +export function updateFunction(target: any, prop: any, value: any) { + return (diff?: any) => { + if (!diff) diff = { '$set': { ["fields." + prop]: SerializationHelper.Serialize(value) } }; + target[Update](diff); + }; +}
\ No newline at end of file |