aboutsummaryrefslogtreecommitdiff
path: root/src/fields/util.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2024-08-13 15:14:05 -0400
committerbobzel <zzzman@gmail.com>2024-08-13 15:14:05 -0400
commit4d45f8a046ce5300f0b046457a381d219eef3363 (patch)
treeb4f1a2fcff857840e5b281b25729a8f378467ef6 /src/fields/util.ts
parent5c7964173d80752200727d8340825210c2704265 (diff)
cleaning up database types
Diffstat (limited to 'src/fields/util.ts')
-rw-r--r--src/fields/util.ts20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/fields/util.ts b/src/fields/util.ts
index 69ece82a2..a5c56607c 100644
--- a/src/fields/util.ts
+++ b/src/fields/util.ts
@@ -8,7 +8,7 @@ import { Doc, DocListCast, FieldType, FieldResult, HierarchyMapping, ReverseHier
import { AclAdmin, AclAugment, AclEdit, AclPrivate, DirectLinks, DocAcl, DocData, DocLayout, FieldKeys, ForceServerWrite, Height, Initializing, SelfProxy, UpdatingFromServer, Width } from './DocSymbols';
import { FieldChanged, Id, Parent, ToValue } from './FieldSymbols';
import { List, ListImpl } from './List';
-import { ObjectField } from './ObjectField';
+import { ObjectField, serializedFieldType, serverOpType } from './ObjectField';
import { PrefetchProxy, ProxyField } from './Proxy';
import { RefField } from './RefField';
import { RichTextField } from './RichTextField';
@@ -112,9 +112,9 @@ const _setterImpl = action((target: Doc | ListImpl<FieldType>, prop: string | sy
if (writeToServer) {
// prettier-ignore
- if (value === undefined)
+ if (value === undefined || value === null)
(target as Doc|ObjectField)[FieldChanged]?.(undefined, { $unset: { ['fields.' + prop]: '' } });
- else (target as Doc|ObjectField)[FieldChanged]?.(undefined, { $set: { ['fields.' + prop]: value instanceof ObjectField ? SerializationHelper.Serialize(value) :value}});
+ else (target as Doc|ObjectField)[FieldChanged]?.(undefined, { $set: { ['fields.' + prop]: (value instanceof ObjectField ? SerializationHelper.Serialize(value) :value) as { fields: serializedFieldType[]}}});
if (prop === 'author' || prop.toString().startsWith('acl_')) updateCachedAcls(target);
} else if (receiver instanceof Doc) {
DocServer.registerDocWithCachedUpdate(receiver, prop as string, curValue);
@@ -393,15 +393,15 @@ export function deleteProperty(target: Doc | ListImpl<FieldType>, prop: string |
// able to undo and redo the partial change.
//
export function containedFieldChangedHandler(container: ListImpl<FieldType> | Doc, prop: string | number, liveContainedField: ObjectField) {
- let lastValue: FieldResult = liveContainedField instanceof ObjectField ? ObjectField.MakeCopy(liveContainedField) : liveContainedField;
- return (diff?: { op: '$addToSet' | '$remFromSet' | '$set'; items: (FieldType & { value?: FieldType })[] | undefined; length: number | undefined; hint?: unknown } /* , dummyServerOp?: any */) => {
- const serializeItems = () => ({ __type: 'list', fields: diff?.items?.map((item: FieldType) => SerializationHelper.Serialize(item)) });
+ let lastValue = ObjectField.MakeCopy(liveContainedField);
+ return (diff?: { op: '$addToSet' | '$remFromSet' | '$set'; items: (FieldType & { value?: FieldType })[] | undefined; length: number | undefined; hint?: { start: number; deleteCount: number } } /* , dummyServerOp?: any */) => {
+ const serializeItems = () => ({ __type: 'list', fields: diff?.items?.map((item: FieldType) => SerializationHelper.Serialize(item) as serializedFieldType) ?? [] });
// prettier-ignore
- const serverOp = diff?.op === '$addToSet'
+ const serverOp: serverOpType = diff?.op === '$addToSet'
? { $addToSet: { ['fields.' + prop]: serializeItems() }, length: diff.length }
: diff?.op === '$remFromSet'
? { $remFromSet: { ['fields.' + prop]: serializeItems(), hint: diff.hint}, length: diff.length }
- : { $set: { ['fields.' + prop]: liveContainedField ? SerializationHelper.Serialize(liveContainedField) as FieldType : undefined } };
+ : { $set: { ['fields.' + prop]: SerializationHelper.Serialize(liveContainedField) as {fields: serializedFieldType[]}} };
if (!(container instanceof Doc) || !container[UpdatingFromServer]) {
const cont = container as { [key: string | number]: FieldType };
@@ -477,13 +477,13 @@ export function containedFieldChangedHandler(container: ListImpl<FieldType> | Do
// console.log('redo list: ' + prop, fieldVal()); // bcz: uncomment to log undo
setFieldVal(ObjectField.MakeCopy(newValue));
const containerProp = cont[prop];
- lastValue = containerProp instanceof ObjectField && ObjectField.MakeCopy(containerProp);
+ if (containerProp instanceof ObjectField) lastValue = ObjectField.MakeCopy(containerProp);
},
undo: () => {
// console.log('undo list: ' + prop, fieldVal()); // bcz: uncomment to log undo
setFieldVal(ObjectField.MakeCopy(prevValue));
const containerProp = cont[prop];
- lastValue = containerProp instanceof ObjectField && ObjectField.MakeCopy(containerProp);
+ if (containerProp instanceof ObjectField) lastValue = ObjectField.MakeCopy(containerProp);
},
prop: 'set list field',
},