UNPKG

bobflux-monitor

Version:

Component for time travelling in bobflux/fun-model application state history.

77 lines (69 loc) 2.07 kB
import * as b from 'bobril'; export const textareaStyles = { default: { resize: 'none' }, copyState: b.styleDef({ width: 150, height: 72 }), intervalStyle: b.styleDef({ width: 150, height: 24 }) }; export interface ITextareaData { value?: string; onKeyDown?: (event: b.IKeyDownUpEvent) => void; onChange?: (value: string) => void; style?: b.IBobrilStyle; setFocus?: boolean; float?: string; placeholder?: string; } interface ICtx extends b.IBobrilCtx { data: ITextareaData; value: string; } function focus(ctx: ICtx, element: HTMLInputElement) { if (ctx.data.setFocus) { element.focus(); (<HTMLInputElement>element).select(); } }; export const textarea = b.createComponent<ITextareaData>({ id: 'bobflux-monitor-textarea', render(ctx: ICtx, me: b.IBobrilNode) { if (ctx.data.value !== undefined && ctx.data.value !== null) { ctx.value = ctx.data.value; } else { ctx.value = ''; } me.tag = 'textarea'; me.attrs = { rows: 1, value: ctx.value, placeholder: ctx.data.placeholder, wrap: 'soft', spellcheck: false }; b.style(me, !!ctx.data.style && ctx.data.style, textareaStyles.default, { cssFloat: ctx.data.float }); }, postInitDom(ctx: ICtx, _me: b.IBobrilCacheNode, element: HTMLElement) { focus(ctx, <HTMLInputElement>element); }, postUpdateDom(ctx: ICtx, _me: b.IBobrilCacheNode, element: HTMLElement) { focus(ctx, <HTMLInputElement>element); }, onChange(ctx: ICtx, value: string) { ctx.value = value; if (ctx.data.onChange) ctx.data.onChange(value); }, onKeyDown(ctx: ICtx, event: b.IKeyDownUpEvent): boolean { if (ctx.data.onKeyDown) ctx.data.onKeyDown(event); return false; } }); export default textarea;