UNPKG

bobflux

Version:

Bobflux is pure functional implementation of FLUX architecture.

102 lines (98 loc) 3.47 kB
import * as b from "bobril"; import * as g from "bobril-g11n"; import * as m from "bobril-m"; import * as fg from "bobril-flexbox-grid"; import * as f from "../flux"; import * as s from "./state"; import * as c from "./state.cursors"; import * as a from "./actions"; export const createTodosPage = f.createRouteComponent<s.ITodosState, any>({ render(_ctx: f.IContext<s.ITodosState>, me: b.IBobrilNode) { me.children = [ fg.Row({ center: fg.ModificatorType.xs, children: fg.Col({ md: 12, children: addFormFactory(), }), }), fg.Row({ center: fg.ModificatorType.xs, children: fg.Col({ md: 12, children: todosOverviewFactory(), }), }), ]; }, }); const createAddForm = f.createComponent<s.ITodo>({ render(ctx: f.IContext<s.ITodo>, me: b.IBobrilNode) { me.children = m.Paper({ children: fg.Row({ middle: fg.ModificatorType.xs, children: [ fg.Col({ md: 8, children: m.TextField({ value: ctx.state.name, onChange: (v) => a.updateNewTodoName(v), }), }), fg.Col({ md: 4, children: m.Button({ type: m.ButtonType.Raised, feature: m.Feature.Primary, children: g.t("Add"), action: () => { a.addTodo(); }, }), }), ], }), }); }, }); const addFormFactory = createAddForm(c.editedTodoCursor); const createTodosOverview = f.createComponent<s.ITodo[]>({ render(ctx: f.IContext<s.ITodo[]>, me: b.IBobrilNode) { me.children = m.Paper({ children: [ fg.Row({ children: [ fg.Col({ xs: 2, children: g.t("Is done"), }), fg.Col({ xs: 10, children: g.t("Name"), }), ], }), ctx.state.map((t) => { return m.Paper({ children: fg.Row({ children: [ fg.Col({ xs: 2, children: m.Checkbox({ checked: t.isDone, action: () => a.changeDoneStatus({ id: t.id, isDone: !t.isDone }), }), }), fg.Col({ xs: 10, children: t.name, }), ], }), }); }), ], }); }, }); const todosOverviewFactory = createTodosOverview(c.todosCursor);