import { action, configure, observable, ObservableMap, Lambda } from 'mobx'; import "normalize.css"; import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { observer } from 'mobx-react'; import { Doc, Field, FieldResult } from '../new_fields/Doc'; import { DocServer } from '../client/DocServer'; import { Id } from '../new_fields/RefField'; import { List } from '../new_fields/List'; import { URLField } from '../new_fields/URLField'; configure({ enforceActions: "observed" }); @observer class ListViewer extends React.Component<{ field: List }>{ @observable expanded = false; render() { let content; if (this.expanded) { content = (
{this.props.field.map((field, index) => )}
); } else { content = <>[...]; } return (
{content}
); } } @observer class DocumentViewer extends React.Component<{ field: Doc }> { @observable expanded = false; render() { let content; if (this.expanded) { const keys = Object.keys(this.props.field); let fields = keys.map(key => { return (
({key}):
); }); content = (
Document ({this.props.field[Id]})
{fields}
); } else { content = <>[...] ({this.props.field[Id]}); } return (
{content}
); } } @observer class DebugViewer extends React.Component<{ field: FieldResult }> { render() { let content; const field = this.props.field; if (field instanceof List) { content = (); } else if (field instanceof Doc) { content = (); } else if (typeof field === "string") { content =

"{field}"

; } else if (typeof field === "number" || typeof field === "boolean") { content =

{field}

; } else if (field instanceof URLField) { content =

{field.url.href}

; } else { content =

Unrecognized field type

; } return content; } } @observer class Viewer extends React.Component { @observable private idToAdd: string = ''; @observable private fields: Field[] = []; @action inputOnChange = (e: React.ChangeEvent) => { this.idToAdd = e.target.value; } @action onKeyPress = (e: React.KeyboardEvent) => { if (e.key === "Enter") { DocServer.GetRefField(this.idToAdd).then(action((field: any) => { if (field !== undefined) { this.fields.push(field); } })); this.idToAdd = ""; } } render() { return ( <>
{this.fields.map((field, index) => )}
); } } ReactDOM.render((
), document.getElementById('root') );