From 090093a50397ddc2a8fc2c50f5097f4a4ea8a74c Mon Sep 17 00:00:00 2001 From: Hannah Date: Thu, 7 Feb 2019 15:50:23 -0500 Subject: started adding editable schema cells --- src/fields/Document.ts | 4 +++ src/fields/Field.ts | 2 ++ src/fields/NumberField.ts | 4 +++ src/views/EditableView.tsx | 35 ++++++++++++++++++++++++++ src/views/collections/CollectionSchemaView.tsx | 29 +++++++++++++++++++-- 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/views/EditableView.tsx (limited to 'src') diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 3d74c047c..53138eda9 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -141,6 +141,10 @@ export class Document extends Field { return delegate; } + ToScriptString(): string { + return ""; + } + TrySetValue(value: any): boolean { throw new Error("Method not implemented."); } diff --git a/src/fields/Field.ts b/src/fields/Field.ts index 9880116c0..20d8bf5ed 100644 --- a/src/fields/Field.ts +++ b/src/fields/Field.ts @@ -47,6 +47,8 @@ export abstract class Field { return this.id === other.id; } + abstract ToScriptString(): string; + abstract TrySetValue(value: any): boolean; abstract GetValue(): any; diff --git a/src/fields/NumberField.ts b/src/fields/NumberField.ts index c3444f644..03926d696 100644 --- a/src/fields/NumberField.ts +++ b/src/fields/NumberField.ts @@ -5,6 +5,10 @@ export class NumberField extends BasicField { super(data); } + ToScriptString(): string { + return "new NumberField(this.Data)"; + } + Copy() { return new NumberField(this.Data); } diff --git a/src/views/EditableView.tsx b/src/views/EditableView.tsx new file mode 100644 index 000000000..5f8d6ebcd --- /dev/null +++ b/src/views/EditableView.tsx @@ -0,0 +1,35 @@ +import React = require('react') +import { observer } from 'mobx-react'; +import { observable } from 'mobx'; + +export interface EditableProps { + GetValue(): string; + SetValue(value: string): boolean; + contents: any; +} + +@observer +export class EditableView extends React.Component { + @observable + editing: boolean = false; + + onKeyDown = (e: React.KeyboardEvent) => { + if (e.key == "Enter" && !e.ctrlKey) { + this.props.SetValue(e.currentTarget.value); + this.editing = false; + } + } + + render() { + if (this.editing) { + return + } else { + return ( +
+ {this.props.contents} + +
+ ) + } + } +} \ No newline at end of file diff --git a/src/views/collections/CollectionSchemaView.tsx b/src/views/collections/CollectionSchemaView.tsx index 8817cb496..c7a3d81a4 100644 --- a/src/views/collections/CollectionSchemaView.tsx +++ b/src/views/collections/CollectionSchemaView.tsx @@ -11,6 +11,9 @@ import "./CollectionSchemaView.scss" import { ScrollBox } from "../../util/ScrollBox"; import { CollectionViewBase } from "./CollectionViewBase"; import { DocumentView } from "../nodes/DocumentView"; +import { EditableView } from "../EditableView"; +import { CompileScript } from "../../util/Scripting"; +import { Field } from "../../fields/Field"; @observer export class CollectionSchemaView extends CollectionViewBase { @@ -25,9 +28,29 @@ export class CollectionSchemaView extends CollectionViewBase { fieldKey: rowProps.value[1], DocumentViewForField: undefined } - return ( + let contents = ( ) + return ( + { + let field = props.doc.Get(props.fieldKey); + if (field && field instanceof Field) { + return field.ToScriptString(); + } + return field || ""; + }} SetValue={(value: string) => { + let script = CompileScript(value); + if (!script.compiled) { + return false; + } + let field = script(); + if (field instanceof Field) { + props.doc.Set(props.fieldKey, field); + return true; + } + return false; + }}> + ) } private getTrProps: ComponentPropsGetterR = (state, rowInfo) => { @@ -74,7 +97,9 @@ export class CollectionSchemaView extends CollectionViewBase { [KS.Title, KS.Data, KS.Author]) let content; if (this.selectedIndex != -1) { - content = () + content = ( + + ) } else { content =
} -- cgit v1.2.3-70-g09d2