UNPKG

immuto-react

Version:
65 lines 2.83 kB
"use strict"; var React = require("react"); var index_1 = require("../index"); var immuto_1 = require("immuto"); var Selectable; (function (Selectable) { Selectable.selected = immuto_1.property("SELECTED", function (s) { return s.selected; }); Selectable.empty = { label: "", selected: false }; Selectable.reduce = immuto_1.reducer(Selectable.empty).action(Selectable.selected); })(Selectable = exports.Selectable || (exports.Selectable = {})); var Selectables; (function (Selectables) { Selectables.empty = []; Selectables.at = immuto_1.array(Selectable); Selectables.reduce = immuto_1.reducer(Selectables.empty).action(Selectables.at); })(Selectables = exports.Selectables || (exports.Selectables = {})); function SelectableEditor(_a) { var binding = _a.binding; return (React.createElement("label", null, React.createElement(index_1.CheckBox, {binding: Selectable.selected(binding)}), " ", binding.state.label)); } exports.SelectableEditor = SelectableEditor; var SelectAll; (function (SelectAll) { SelectAll.selectables = immuto_1.reference("SELECTABLES", Selectables, function (s) { return s.selectables; }); SelectAll.all = immuto_1.property("ALL", function (s) { var count = s.selectables.filter(function (i) { return i.selected; }).length; return count === s.selectables.length ? true : count === 0 ? false : undefined; }, function (s, v) { return ({ selectables: s.selectables.map(function (i) { return Selectable.reduce(i, Selectable.selected.update(immuto_1.replace(v))); }) }); }); SelectAll.empty = { selectables: [ { label: "Homer", selected: false }, { label: "Marge", selected: true }, { label: "Bart", selected: false }, { label: "Lisa", selected: true }, { label: "Maggie", selected: true } ] }; SelectAll.reduce = immuto_1.reducer(SelectAll.empty) .action(SelectAll.selectables) .action(SelectAll.all); })(SelectAll = exports.SelectAll || (exports.SelectAll = {})); function SelectAllEditor(_a) { var model = _a.binding; return (React.createElement("div", null, React.createElement("div", null, React.createElement("label", null, React.createElement(index_1.CheckBox, {binding: model.$(SelectAll.all)}), " Select all") ), React.createElement("hr", null), model.state.selectables.map(function (s, i) { return (React.createElement("div", {key: s.label}, React.createElement(SelectableEditor, {binding: model.$(SelectAll.selectables).$(Selectables.at(i))}) )); }))); } exports.SelectAllEditor = SelectAllEditor; //# sourceMappingURL=selectAll.js.map