immuto-react
Version:
React bindings for Immuto
65 lines • 2.83 kB
JavaScript
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
;