import * as React from 'react'; import { observer } from 'mobx-react'; import { BoxId, Tuid } from "../entities"; import { PureJSONContent } from '../controllers'; import { FA } from 'tonva-react-form'; type TvTemplet = (values?:any, x?:any) => JSX.Element; interface Props { tuidValue: number|BoxId, ui?: TvTemplet, x?: any, nullUI?: ()=>JSX.Element } function boxIdContent(bi: number|BoxId, ui:TvTemplet, x:any) { if (typeof bi === 'number') return <>{bi}; let {id, _$tuid, _$com} = bi as BoxId; if (id === undefined || id === null) return; let t:Tuid = _$tuid; if (t === undefined) { if (ui !== undefined) return ui(bi, x); return PureJSONContent(bi, x); } let com = ui || _$com; if (com === undefined) { com = bi._$com = t.getTuidContent(); } let val = t.valueFromId(id); if (val === undefined) { return <>[ no {t.name} on id={id}]; } switch (typeof val) { case 'number': val = {id: val}; break; } if (ui !== undefined) { let ret = ui(val, x); if (ret !== undefined) return ret; return <>{id}; } return React.createElement(com, val); } const Tv = observer(({tuidValue, ui, x, nullUI}:Props) => { if (tuidValue === undefined) { if (nullUI === undefined) return <>[undefined]; return nullUI(); } if (tuidValue === null) { if (nullUI === undefined) return <>[null]; return nullUI(); } let ttv = typeof tuidValue; switch (ttv) { default: if (ui === undefined) return <>{ttv}-{tuidValue}; else { let ret = ui(tuidValue, x); if (ret !== undefined) return ret; return <>{tuidValue}; } case 'object': let divObj = boxIdContent(tuidValue, ui, x); if (divObj !== undefined) return divObj; return nullUI(); case 'number': return <>id...{tuidValue}; } }); export const tv = (tuidValue:number|BoxId, ui?:TvTemplet, x?:any, nullUI?:()=>JSX.Element):JSX.Element => { return ; };