import * as b from 'bobril'; import * as f from 'fun-model'; import * as cm from './component'; import * as c from "./common"; export interface IDataComponentState extends f.IState { } export interface IDataComponentContext extends cm.IContext { data: TData; me: b.IBobrilCacheNode; } export function createDataComponent(component: b.IBobrilComponent) : (cursor: f.ICursor | c.CursorFieldsMap) => b.IComponentFactory { return (innerCursor: f.ICursor | c.CursorFieldsMap) => b.createDerivedComponent( b.createVirtualComponent({ init(ctx: IDataComponentContext) { if (c.isCursor(innerCursor)) { ctx.cursor = innerCursor; ctx.state = f.getState(ctx.cursor); } else { Object.keys(innerCursor).forEach(ck => { (ctx)[c.unifyCursorName(ck)] = (>innerCursor)[ck]; (ctx)[c.unifyStateName(ck)] = f.getState((>innerCursor)[ck]); }); } }, render(ctx: IDataComponentContext) { if (c.isCursor(innerCursor)) { ctx.state = f.getState(ctx.cursor); } else { Object.keys(innerCursor).forEach(ck => { (ctx)[c.unifyStateName(ck)] = f.getState((>innerCursor)[ck]); }); } } }), component); }