aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Zeleznik <zzzman@gmail.com>2020-01-21 09:12:35 -0500
committerBob Zeleznik <zzzman@gmail.com>2020-01-21 09:12:35 -0500
commit4d1c1286f311de9d69158adccb02b60638a30e83 (patch)
tree5b5352b74bdf252cf35484adbb6c5b0f2703686d
parent9090808d81028fb7ed8796339524b5a0fa0893d5 (diff)
added a ToString() method to fields so that rendering them as RichTextField won't make them unreadable
-rw-r--r--src/client/northstar/dash-fields/HistogramField.ts5
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormLayoutEngines.tsx11
-rw-r--r--src/new_fields/CursorField.ts5
-rw-r--r--src/new_fields/DateField.ts5
-rw-r--r--src/new_fields/Doc.ts17
-rw-r--r--src/new_fields/FieldSymbols.ts3
-rw-r--r--src/new_fields/HtmlField.ts5
-rw-r--r--src/new_fields/IconField.ts5
-rw-r--r--src/new_fields/InkField.ts5
-rw-r--r--src/new_fields/List.ts5
-rw-r--r--src/new_fields/ObjectField.ts3
-rw-r--r--src/new_fields/Proxy.ts5
-rw-r--r--src/new_fields/RefField.ts3
-rw-r--r--src/new_fields/RichTextField.ts5
-rw-r--r--src/new_fields/SchemaHeaderField.ts5
-rw-r--r--src/new_fields/ScriptField.ts5
-rw-r--r--src/new_fields/URLField.ts5
17 files changed, 75 insertions, 22 deletions
diff --git a/src/client/northstar/dash-fields/HistogramField.ts b/src/client/northstar/dash-fields/HistogramField.ts
index f3365e73d..076516977 100644
--- a/src/client/northstar/dash-fields/HistogramField.ts
+++ b/src/client/northstar/dash-fields/HistogramField.ts
@@ -7,7 +7,7 @@ import { ObjectField } from "../../../new_fields/ObjectField";
import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils";
import { OmitKeys } from "../../../Utils";
import { Deserializable } from "../../util/SerializationHelper";
-import { Copy, ToScriptString } from "../../../new_fields/FieldSymbols";
+import { Copy, ToScriptString, ToString } from "../../../new_fields/FieldSymbols";
function serialize(field: HistogramField) {
const obj = OmitKeys(field, ['Links', 'BrushLinks', 'Result', 'BrushColors', 'FilterModels', 'FilterOperand']).omit;
@@ -60,4 +60,7 @@ export class HistogramField extends ObjectField {
[ToScriptString]() {
return this.toString();
}
+ [ToString]() {
+ return this.toString();
+ }
} \ No newline at end of file
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLayoutEngines.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLayoutEngines.tsx
index 8c8da63cc..5924c3afb 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLayoutEngines.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLayoutEngines.tsx
@@ -7,8 +7,10 @@ import { OverlayView, OverlayElementOptions } from "../../OverlayView";
import { emptyFunction } from "../../../../Utils";
import React = require("react");
import { ObservableMap, runInAction } from "mobx";
-import { Id } from "../../../../new_fields/FieldSymbols";
+import { Id, ToString } from "../../../../new_fields/FieldSymbols";
import { DateField } from "../../../../new_fields/DateField";
+import { ObjectField } from "../../../../new_fields/ObjectField";
+import { RefField } from "../../../../new_fields/RefField";
interface PivotData {
type: string;
@@ -35,11 +37,8 @@ export interface ViewDefResult {
}
function toLabel(target: FieldResult<Field>) {
- if (target instanceof DateField) {
- const date = DateCast(target).date;
- if (date) {
- return `${date.toDateString()} ${date.toTimeString()}`;
- }
+ if (target instanceof ObjectField || target instanceof RefField) {
+ return target[ToString]();
}
return String(target);
}
diff --git a/src/new_fields/CursorField.ts b/src/new_fields/CursorField.ts
index fd86031a8..28467377b 100644
--- a/src/new_fields/CursorField.ts
+++ b/src/new_fields/CursorField.ts
@@ -2,7 +2,7 @@ import { ObjectField } from "./ObjectField";
import { observable } from "mobx";
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, createSimpleSchema, object, date } from "serializr";
-import { OnUpdate, ToScriptString, Copy } from "./FieldSymbols";
+import { OnUpdate, ToScriptString, ToString, Copy } from "./FieldSymbols";
export type CursorPosition = {
x: number,
@@ -60,4 +60,7 @@ export default class CursorField extends ObjectField {
[ToScriptString]() {
return "invalid";
}
+ [ToString]() {
+ return "invalid";
+ }
} \ No newline at end of file
diff --git a/src/new_fields/DateField.ts b/src/new_fields/DateField.ts
index 4f999e5e8..a925148c2 100644
--- a/src/new_fields/DateField.ts
+++ b/src/new_fields/DateField.ts
@@ -1,7 +1,7 @@
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, date } from "serializr";
import { ObjectField } from "./ObjectField";
-import { Copy, ToScriptString } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString } from "./FieldSymbols";
import { scriptingGlobal, Scripting } from "../client/util/Scripting";
@scriptingGlobal
@@ -26,6 +26,9 @@ export class DateField extends ObjectField {
[ToScriptString]() {
return `new DateField(new Date(${this.date.toISOString()}))`;
}
+ [ToString]() {
+ return this.date.toISOString();
+ }
}
Scripting.addGlobal(function d(...dateArgs: any[]) {
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts
index 29834256a..fa5ca1489 100644
--- a/src/new_fields/Doc.ts
+++ b/src/new_fields/Doc.ts
@@ -4,7 +4,7 @@ import { DocServer } from "../client/DocServer";
import { DocumentType } from "../client/documents/DocumentTypes";
import { Scripting, scriptingGlobal } from "../client/util/Scripting";
import { afterDocDeserialize, autoObject, Deserializable, SerializationHelper } from "../client/util/SerializationHelper";
-import { Copy, HandleUpdate, Id, OnUpdate, Parent, Self, SelfProxy, ToScriptString, Update } from "./FieldSymbols";
+import { Copy, HandleUpdate, Id, OnUpdate, Parent, Self, SelfProxy, ToScriptString, ToString, Update } from "./FieldSymbols";
import { List } from "./List";
import { ObjectField } from "./ObjectField";
import { PrefetchProxy, ProxyField } from "./Proxy";
@@ -36,6 +36,18 @@ export namespace Field {
return field[ToScriptString]();
}
}
+ export function toString(field: Field): string {
+ if (typeof field === "string") {
+ return `"${field}"`;
+ } else if (typeof field === "number" || typeof field === "boolean") {
+ return String(field);
+ } else if (field instanceof ObjectField) {
+ return field[ToString]();
+ } else if (field instanceof RefField) {
+ return field[ToString]();
+ }
+ return "-invalid field-";
+ }
export function IsField(field: any): field is Field;
export function IsField(field: any, includeUndefined: true): field is Field | undefined;
export function IsField(field: any, includeUndefined: boolean = false): field is Field | undefined {
@@ -156,6 +168,9 @@ export class Doc extends RefField {
[ToScriptString]() {
return "invalid";
}
+ [ToString]() {
+ return "Doc";
+ }
private [CachedUpdates]: { [key: string]: () => void | Promise<any> } = {};
public static CurrentUserEmail: string = "";
diff --git a/src/new_fields/FieldSymbols.ts b/src/new_fields/FieldSymbols.ts
index b5b3aa588..4aadb81a2 100644
--- a/src/new_fields/FieldSymbols.ts
+++ b/src/new_fields/FieldSymbols.ts
@@ -7,4 +7,5 @@ export const Id = Symbol("Id");
export const OnUpdate = Symbol("OnUpdate");
export const Parent = Symbol("Parent");
export const Copy = Symbol("Copy");
-export const ToScriptString = Symbol("ToScriptString"); \ No newline at end of file
+export const ToScriptString = Symbol("ToScriptString");
+export const ToString = Symbol("ToString"); \ No newline at end of file
diff --git a/src/new_fields/HtmlField.ts b/src/new_fields/HtmlField.ts
index f952acff9..6e8bba977 100644
--- a/src/new_fields/HtmlField.ts
+++ b/src/new_fields/HtmlField.ts
@@ -1,7 +1,7 @@
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, primitive } from "serializr";
import { ObjectField } from "./ObjectField";
-import { Copy, ToScriptString } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString} from "./FieldSymbols";
@Deserializable("html")
export class HtmlField extends ObjectField {
@@ -20,4 +20,7 @@ export class HtmlField extends ObjectField {
[ToScriptString]() {
return "invalid";
}
+ [ToString]() {
+ return this.html;
+ }
}
diff --git a/src/new_fields/IconField.ts b/src/new_fields/IconField.ts
index 62b2cd254..76c4ddf1b 100644
--- a/src/new_fields/IconField.ts
+++ b/src/new_fields/IconField.ts
@@ -1,7 +1,7 @@
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, primitive } from "serializr";
import { ObjectField } from "./ObjectField";
-import { Copy, ToScriptString } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString } from "./FieldSymbols";
@Deserializable("icon")
export class IconField extends ObjectField {
@@ -20,4 +20,7 @@ export class IconField extends ObjectField {
[ToScriptString]() {
return "invalid";
}
+ [ToString]() {
+ return "ICONfield";
+ }
}
diff --git a/src/new_fields/InkField.ts b/src/new_fields/InkField.ts
index 01493bcc2..4a44b4f55 100644
--- a/src/new_fields/InkField.ts
+++ b/src/new_fields/InkField.ts
@@ -1,7 +1,7 @@
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, custom, createSimpleSchema, list, object, map } from "serializr";
import { ObjectField } from "./ObjectField";
-import { Copy, ToScriptString } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString } from "./FieldSymbols";
export enum InkTool {
None,
@@ -45,4 +45,7 @@ export class InkField extends ObjectField {
[ToScriptString]() {
return "invalid";
}
+ [ToString]() {
+ return "InkField";
+ }
}
diff --git a/src/new_fields/List.ts b/src/new_fields/List.ts
index bb48b1bb3..a43f11e82 100644
--- a/src/new_fields/List.ts
+++ b/src/new_fields/List.ts
@@ -6,7 +6,7 @@ import { observable, action } from "mobx";
import { ObjectField } from "./ObjectField";
import { RefField } from "./RefField";
import { ProxyField } from "./Proxy";
-import { Self, Update, Parent, OnUpdate, SelfProxy, ToScriptString, Copy } from "./FieldSymbols";
+import { Self, Update, Parent, OnUpdate, SelfProxy, ToScriptString, ToString, Copy } from "./FieldSymbols";
import { Scripting } from "../client/util/Scripting";
const listHandlers: any = {
@@ -292,6 +292,9 @@ class ListImpl<T extends Field> extends ObjectField {
[ToScriptString]() {
return `new List([${(this as any).map((field: any) => Field.toScriptString(field))}])`;
}
+ [ToString]() {
+ return "List";
+ }
}
export type List<T extends Field> = ListImpl<T> & (T | (T extends RefField ? Promise<T> : never))[];
export const List: { new <T extends Field>(fields?: T[]): List<T> } = ListImpl as any;
diff --git a/src/new_fields/ObjectField.ts b/src/new_fields/ObjectField.ts
index 65ada91c0..b693c8c98 100644
--- a/src/new_fields/ObjectField.ts
+++ b/src/new_fields/ObjectField.ts
@@ -1,6 +1,6 @@
import { Doc } from "./Doc";
import { RefField } from "./RefField";
-import { OnUpdate, Parent, Copy, ToScriptString } from "./FieldSymbols";
+import { OnUpdate, Parent, Copy, ToScriptString, ToString } from "./FieldSymbols";
import { Scripting } from "../client/util/Scripting";
export abstract class ObjectField {
@@ -9,6 +9,7 @@ export abstract class ObjectField {
abstract [Copy](): ObjectField;
abstract [ToScriptString](): string;
+ abstract [ToString](): string;
}
export namespace ObjectField {
diff --git a/src/new_fields/Proxy.ts b/src/new_fields/Proxy.ts
index c6292e37c..d50c0f14e 100644
--- a/src/new_fields/Proxy.ts
+++ b/src/new_fields/Proxy.ts
@@ -5,7 +5,7 @@ import { observable, action } from "mobx";
import { DocServer } from "../client/DocServer";
import { RefField } from "./RefField";
import { ObjectField } from "./ObjectField";
-import { Id, Copy, ToScriptString } from "./FieldSymbols";
+import { Id, Copy, ToScriptString, ToString } from "./FieldSymbols";
import { scriptingGlobal } from "../client/util/Scripting";
import { Plugins } from "./util";
@@ -32,6 +32,9 @@ export class ProxyField<T extends RefField> extends ObjectField {
[ToScriptString]() {
return "invalid";
}
+ [ToString]() {
+ return "ProxyField";
+ }
@serializable(primitive())
readonly fieldId: string = "";
diff --git a/src/new_fields/RefField.ts b/src/new_fields/RefField.ts
index f7bea8c94..b6ef69750 100644
--- a/src/new_fields/RefField.ts
+++ b/src/new_fields/RefField.ts
@@ -1,6 +1,6 @@
import { serializable, primitive, alias } from "serializr";
import { Utils } from "../Utils";
-import { Id, HandleUpdate, ToScriptString } from "./FieldSymbols";
+import { Id, HandleUpdate, ToScriptString, ToString } from "./FieldSymbols";
import { afterDocDeserialize } from "../client/util/SerializationHelper";
export type FieldId = string;
@@ -17,4 +17,5 @@ export abstract class RefField {
protected [HandleUpdate]?(diff: any): void | Promise<void>;
abstract [ToScriptString](): string;
+ abstract [ToString](): string;
}
diff --git a/src/new_fields/RichTextField.ts b/src/new_fields/RichTextField.ts
index fd5459876..a0f21f45e 100644
--- a/src/new_fields/RichTextField.ts
+++ b/src/new_fields/RichTextField.ts
@@ -1,7 +1,7 @@
import { ObjectField } from "./ObjectField";
import { serializable } from "serializr";
import { Deserializable } from "../client/util/SerializationHelper";
-import { Copy, ToScriptString } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString } from "./FieldSymbols";
import { scriptingGlobal } from "../client/util/Scripting";
@scriptingGlobal
@@ -26,5 +26,8 @@ export class RichTextField extends ObjectField {
[ToScriptString]() {
return `new RichTextField("${this.Data}", "${this.Text}")`;
}
+ [ToString]() {
+ return this.Text;
+ }
} \ No newline at end of file
diff --git a/src/new_fields/SchemaHeaderField.ts b/src/new_fields/SchemaHeaderField.ts
index 42a8485ac..07c90f5a2 100644
--- a/src/new_fields/SchemaHeaderField.ts
+++ b/src/new_fields/SchemaHeaderField.ts
@@ -1,7 +1,7 @@
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, primitive } from "serializr";
import { ObjectField } from "./ObjectField";
-import { Copy, ToScriptString, OnUpdate } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString, OnUpdate } from "./FieldSymbols";
import { scriptingGlobal } from "../client/util/Scripting";
import { ColumnType } from "../client/views/collections/CollectionSchemaView";
@@ -116,4 +116,7 @@ export class SchemaHeaderField extends ObjectField {
[ToScriptString]() {
return `invalid`;
}
+ [ToString]() {
+ return `SchemaHeaderField`;
+ }
} \ No newline at end of file
diff --git a/src/new_fields/ScriptField.ts b/src/new_fields/ScriptField.ts
index b5ad4a7f6..09a18c258 100644
--- a/src/new_fields/ScriptField.ts
+++ b/src/new_fields/ScriptField.ts
@@ -1,6 +1,6 @@
import { ObjectField } from "./ObjectField";
import { CompiledScript, CompileScript, scriptingGlobal, ScriptOptions } from "../client/util/Scripting";
-import { Copy, ToScriptString, Parent, SelfProxy } from "./FieldSymbols";
+import { Copy, ToScriptString, ToString, Parent, SelfProxy } from "./FieldSymbols";
import { serializable, createSimpleSchema, map, primitive, object, deserialize, PropSchema, custom, SKIP } from "serializr";
import { Deserializable, autoObject } from "../client/util/SerializationHelper";
import { Doc } from "../new_fields/Doc";
@@ -101,6 +101,9 @@ export class ScriptField extends ObjectField {
[ToScriptString]() {
return "script field";
}
+ [ToString]() {
+ return "script field";
+ }
public static CompileScript(script: string, params: object = {}, addReturn = false) {
const compiled = CompileScript(script, {
params: { this: Doc.name, _last_: "any", ...params },
diff --git a/src/new_fields/URLField.ts b/src/new_fields/URLField.ts
index 35ef6dd02..cfab36906 100644
--- a/src/new_fields/URLField.ts
+++ b/src/new_fields/URLField.ts
@@ -1,7 +1,7 @@
import { Deserializable } from "../client/util/SerializationHelper";
import { serializable, custom } from "serializr";
import { ObjectField } from "./ObjectField";
-import { ToScriptString, Copy } from "./FieldSymbols";
+import { ToScriptString, ToString, Copy } from "./FieldSymbols";
import { Scripting, scriptingGlobal } from "../client/util/Scripting";
function url() {
@@ -32,6 +32,9 @@ export abstract class URLField extends ObjectField {
[ToScriptString]() {
return `new ${this.constructor.name}("${this.url.href}")`;
}
+ [ToString]() {
+ return this.url.href;
+ }
[Copy](): this {
return new (this.constructor as any)(this.url);