import { action, observable } from 'mobx'; import { observer } from "mobx-react"; import 'react-image-lightbox/style.css'; // This only needs to be imported once in your app import { Document } from '../../../fields/Document'; import { Field, Opt } from '../../../fields/Field'; import { Key } from '../../../fields/Key'; import { emptyDocFunction, emptyFunction, returnFalse } from '../../../Utils'; import { Server } from "../../Server"; import { CompileScript, ToField } from "../../util/Scripting"; import { Transform } from '../../util/Transform'; import { EditableView } from "../EditableView"; import { FieldView, FieldViewProps } from './FieldView'; import "./KeyValueBox.scss"; import "./KeyValuePair.scss"; import React = require("react"); // Represents one row in a key value plane export interface KeyValuePairProps { rowStyle: string; fieldId: string; doc: Document; keyWidth: number; } @observer export class KeyValuePair extends React.Component { @observable private key: Opt; constructor(props: KeyValuePairProps) { super(props); Server.GetField(this.props.fieldId, action((field: Opt) => field instanceof Key && (this.key = field))); } render() { if (!this.key) { return error; } let props: FieldViewProps = { Document: this.props.doc, ContainingCollectionView: undefined, fieldKey: this.key, isSelected: returnFalse, select: emptyFunction, isTopMost: false, selectOnLoad: false, active: returnFalse, whenActiveChanged: emptyFunction, ScreenToLocalTransform: Transform.Identity, focus: emptyDocFunction, }; let contents = ; return (
{this.key.Name}
{ let field = props.Document.Get(props.fieldKey); if (field && field instanceof Field) { return field.ToScriptString(); } return field || ""; }} SetValue={(value: string) => { let script = CompileScript(value, { addReturn: true }); if (!script.compiled) { return false; } let res = script.run(); if (!res.success) return false; const field = res.result; if (field instanceof Field) { props.Document.Set(props.fieldKey, field); return true; } else { let dataField = ToField(field); if (dataField) { props.Document.Set(props.fieldKey, dataField); return true; } } return false; }}> ); } }