aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/index.ts13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/server/index.ts b/src/server/index.ts
index 93e4cafbf..7a548607f 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -318,6 +318,9 @@ const suffixMap: { [type: string]: (string | [string, string | ((json: any) => a
};
function ToSearchTerm(val: any): { suffix: string, value: any } | undefined {
+ if (val === null || val === undefined) {
+ return;
+ }
const type = val.__type || typeof val;
let suffix = suffixMap[type];
if (!suffix) {
@@ -334,7 +337,11 @@ function ToSearchTerm(val: any): { suffix: string, value: any } | undefined {
suffix = suffix[0];
}
- return { suffix, value: val }
+ return { suffix, value: val };
+}
+
+function getSuffix(value: string | [string, any]): string {
+ return typeof value === "string" ? value : value[0];
}
function UpdateField(socket: Socket, diff: Diff) {
@@ -348,14 +355,14 @@ function UpdateField(socket: Socket, diff: Diff) {
let dynfield = false;
for (let key in docfield) {
if (!key.startsWith("fields.")) continue;
+ dynfield = true;
+ Object.values(suffixMap).forEach(suf => update[key + getSuffix(suf)] = null);
let val = docfield[key];
let term = ToSearchTerm(val);
if (term !== undefined) {
let { suffix, value } = term;
key = key.substring(7);
- Object.values(suffixMap).forEach(suf => update[key + suf] = null);
update[key + suffix] = { set: value };
- dynfield = true;
}
}
if (dynfield) {