aboutsummaryrefslogtreecommitdiff
path: root/src/new_fields/util.ts
diff options
context:
space:
mode:
authorkimdahey <claire_kim1@brown.edu>2019-08-09 11:05:42 -0400
committerkimdahey <claire_kim1@brown.edu>2019-08-09 11:05:42 -0400
commitc407983788a09a5f93921439390834a4811b8842 (patch)
treeb757999bda24e13269608a6c63f116e55a702ba7 /src/new_fields/util.ts
parent46637dc8f902077d613b737f576b755545a92c17 (diff)
parent68f613b5e762649b743059e494e9307eb103ff0d (diff)
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web into tree_claire
Diffstat (limited to 'src/new_fields/util.ts')
-rw-r--r--src/new_fields/util.ts12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/new_fields/util.ts b/src/new_fields/util.ts
index c6f693f7f..6c05da507 100644
--- a/src/new_fields/util.ts
+++ b/src/new_fields/util.ts
@@ -6,7 +6,8 @@ import { RefField } from "./RefField";
import { ObjectField } from "./ObjectField";
import { action } from "mobx";
import { Parent, OnUpdate, Update, Id, SelfProxy, Self } from "./FieldSymbols";
-import { ComputedField } from "./ScriptField";
+import { DocServer } from "../client/DocServer";
+import { CurrentUserUtils } from "../server/authentication/models/current_user_utils";
function _readOnlySetter(): never {
throw new Error("Documents can't be modified in read-only mode");
@@ -63,9 +64,14 @@ const _setterImpl = action(function (target: any, prop: string | symbol | number
} else {
target.__fields[prop] = value;
}
- if (value === undefined) target[Update]({ '$unset': { ["fields." + prop]: "" } });
+ const writeMode = DocServer.getFieldWriteMode(prop as string);
if (typeof value === "object" && !(value instanceof ObjectField)) debugger;
- else target[Update]({ '$set': { ["fields." + prop]: value instanceof ObjectField ? SerializationHelper.Serialize(value) : (value === undefined ? null : value) } });
+ if (!writeMode || (writeMode === DocServer.WriteMode.SameUser && receiver.author === CurrentUserUtils.email)) {
+ if (value === undefined) target[Update]({ '$unset': { ["fields." + prop]: "" } });
+ else target[Update]({ '$set': { ["fields." + prop]: value instanceof ObjectField ? SerializationHelper.Serialize(value) : (value === undefined ? null : value) } });
+ } else {
+ DocServer.registerDocWithCachedUpdate(receiver, prop as string, curValue);
+ }
UndoManager.AddEvent({
redo: () => receiver[prop] = value,
undo: () => receiver[prop] = curValue