monadic_react
Version:
A monadic library for easily composing React-based libraries.
493 lines • 55.5 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var Immutable = require("immutable");
var i18next = require("i18next");
var core_1 = require("./core");
var html_1 = require("./html");
var primitives_1 = require("./primitives");
var Repeat = /** @class */ (function (_super) {
__extends(Repeat, _super);
function Repeat(props, context) {
var _this = _super.call(this, props, context) || this;
_this.stopped = false;
_this.state = { current_value: props.value, frame_index: 1 };
return _this;
}
Repeat.prototype.componentWillUnmount = function () {
this.stopped = true;
};
Repeat.prototype.componentWillMount = function () {
this.stopped = false;
};
Repeat.prototype.render = function () {
var _this = this;
this.props.debug_info && console.log("Render:", this.props.debug_info(), this.state.current_value);
return this.props.p(this.state.current_value).comp(this.props.context)(function (callback) { return function (new_value) {
if (_this.stopped)
return;
return _this.setState(__assign({}, _this.state, { frame_index: _this.state.frame_index + 1, current_value: new_value }), function () {
return _this.props.cont(callback)(new_value);
});
}; });
};
return Repeat;
}(React.Component));
exports.repeat = function (key, dbg) {
return function (p) { return function (initial_value) { return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(Repeat, ({ kind: "repeat", debug_info: dbg, p: p, value: initial_value, context: ctxt, cont: cont, key: key }));
}; }); }; };
};
var Any = /** @class */ (function (_super) {
__extends(Any, _super);
function Any(props, context) {
var _this = _super.call(this, props, context) || this;
_this.state = { ps: "creating" };
return _this;
}
Any.prototype.componentWillReceiveProps = function (new_props) {
this.setState(__assign({}, this.state, { ps: new_props.ps.map(function (p) {
return p(new_props.value).comp(new_props.context)(function (callback) { return function (new_value) {
return new_props.cont(callback)(new_value);
}; });
}) }));
};
Any.prototype.componentWillMount = function () {
var _this = this;
this.setState(__assign({}, this.state, { ps: this.props.ps.map(function (p) {
return p(_this.props.value).comp(_this.props.context)(function (callback) { return function (new_value) {
return _this.props.cont(callback)(new_value);
}; });
}) }));
};
Any.prototype.render = function () {
return React.createElement("div", { className: this.props.className },
" ",
this.state.ps != "creating" ? this.state.ps : null,
" ");
};
return Any;
}(React.Component));
exports.any = function (key, className, dbg) {
return function (ps) { return function (initial_value) { return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(Any, { kind: "any", debug_info: dbg, ps: ps, value: initial_value, context: ctxt, cont: cont, key: key, className: className });
}; }); }; };
};
var Never = /** @class */ (function (_super) {
__extends(Never, _super);
function Never(props, context) {
var _this = _super.call(this, props, context) || this;
_this.state = { p: "loading" };
return _this;
}
Never.prototype.componentWillReceiveProps = function (new_props) {
this.setState(__assign({}, this.state, { p: new_props.p.comp(new_props.context)(function (callback) { return function (new_value) { }; }) }));
};
Never.prototype.componentWillMount = function () {
this.setState(__assign({}, this.state, { p: this.props.p.comp(this.props.context)(function (callback) { return function (new_value) { }; }) }));
};
Never.prototype.render = function () {
return this.state.p != "loading" ? this.state.p : [];
};
return Never;
}(React.Component));
exports.never = function (p, key) {
return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(Never, { kind: "never", p: p, context: ctxt, cont: cont, key: key, debug_info: undefined });
}; });
};
var All = /** @class */ (function (_super) {
__extends(All, _super);
function All(props, context) {
var _this = _super.call(this, props, context) || this;
_this.state = { results: Immutable.Map(), ps: "creating" };
return _this;
}
All.prototype.componentWillReceiveProps = function (new_props) {
var _this = this;
this.setState(__assign({}, this.state, { ps: new_props.ps.map(function (p, p_i) {
return p.comp(new_props.context)(function (callback) { return function (result) {
return _this.setState(__assign({}, _this.state, { results: _this.state.results.set(p_i, result) }), function () {
if (_this.state.results.keySeq().toSet().equals(Immutable.Range(0, new_props.ps.length).toSet())) {
var results_1 = _this.state.results.sortBy(function (r, r_i) { return r_i; }).toArray();
_this.setState(__assign({}, _this.state, { results: Immutable.Map() }), function () {
return new_props.cont(callback)(results_1);
});
}
});
}; });
}) }));
};
All.prototype.componentWillMount = function () {
var _this = this;
this.setState(__assign({}, this.state, { ps: this.props.ps.map(function (p, p_i) {
return p.comp(_this.props.context)(function (callback) { return function (result) {
return _this.setState(__assign({}, _this.state, { results: _this.state.results.set(p_i, result) }), function () {
if (_this.state.results.keySeq().toSet().equals(Immutable.Range(0, _this.props.ps.length).toSet())) {
var results_2 = _this.state.results.sortBy(function (r, r_i) { return r_i; }).toArray();
_this.setState(__assign({}, _this.state, { results: Immutable.Map() }), function () {
return _this.props.cont(callback)(results_2);
});
}
});
}; });
}) }));
};
All.prototype.render = function () {
return React.createElement("div", null,
" ",
this.state.ps != "creating" ? this.state.ps : null,
" ");
};
return All;
}(React.Component));
exports.all = function (ps, key, dbg) {
return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(All, { kind: "all", debug_info: dbg, ps: ps, context: ctxt, cont: cont, key: key });
}; });
};
var Retract = /** @class */ (function (_super) {
__extends(Retract, _super);
function Retract(props, context) {
var _this = _super.call(this, props, context) || this;
_this.state = { p: "creating" };
return _this;
}
Retract.prototype.componentWillReceiveProps = function (new_props) {
this.setState(__assign({}, this.state, { p: new_props.p(new_props.inb(new_props.value)).comp(new_props.context)(function (callback) { return function (new_value) {
return new_props.cont(callback)(new_props.out(new_props.value)(new_value));
}; }) }));
};
Retract.prototype.componentWillMount = function () {
var _this = this;
this.setState(__assign({}, this.state, { p: this.props.p(this.props.inb(this.props.value)).comp(this.props.context)(function (callback) { return function (new_value) {
return _this.props.cont(callback)(_this.props.out(_this.props.value)(new_value));
}; }) }));
};
Retract.prototype.render = function () {
return this.state.p != "creating" ? this.state.p : [];
};
return Retract;
}(React.Component));
exports.retract = function (key, dbg) {
return function (inb, out, p) { return function (initial_value) { return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(Retract, { kind: "retract", debug_info: dbg, inb: inb, out: out, p: p, value: initial_value, context: ctxt, cont: cont, key: key });
}; }); }; };
};
var LiftPromise = /** @class */ (function (_super) {
__extends(LiftPromise, _super);
function LiftPromise(props, context) {
var _this = _super.call(this, props, context) || this;
_this.wait_time = 500;
_this.stopped = false;
_this.state = { result: "busy", input: props.value, retry_count: 0 };
return _this;
}
LiftPromise.prototype.componentWillReceiveProps = function (new_props) {
var _this = this;
// if (this.state.result != "busy" && this.state.result != "error") {
// this.props.debug_info && console.log("New props (ignored):", this.props.debug_info(), this.state.input, new_props.value)
// return
// }
this.props.debug_info && console.log("New props:", this.props.debug_info(), this.state.input, new_props.value);
this.setState(__assign({}, this.state, { input: new_props.value }), function () {
return _this.load(new_props);
});
};
LiftPromise.prototype.load = function (props) {
var _this = this;
if (this.stopped)
return;
this.setState(__assign({}, this.state, { result: "busy" }), function () {
return props.p(_this.state.input).then(function (x) {
_this.wait_time = 500;
if (_this.props.debug_info)
console.log("Promise done:", _this.props.debug_info());
if (_this.stopped)
return;
_this.setState(__assign({}, _this.state, { result: x }), function () { return props.cont(function () { return null; })(x); });
})
.catch(function () {
if (props.retry_strategy == "never") {
if (_this.stopped)
return;
_this.setState(__assign({}, _this.state, { result: "error" }));
}
else if (props.retry_strategy == "semi exponential") {
_this.wait_time = Math.floor(Math.max(_this.wait_time * 1.5, 2500));
setTimeout(function () { return _this.load(props); }, _this.wait_time);
}
else if (props.retry_strategy.kind == "retry then show failure") {
if (_this.stopped)
return;
if (_this.state.retry_count < props.retry_strategy.times) {
_this.setState(__assign({}, _this.state, { retry_count: _this.state.retry_count + 1 }));
setTimeout(function () { return _this.load(props); }, _this.wait_time);
}
else {
var failedJSX = props.retry_strategy.on_failure.comp(props.context)(props.cont);
_this.setState(__assign({}, _this.state, { retry_count: 0, result: { kind: "failing", failure_renderer: failedJSX } }));
}
}
else if (props.retry_strategy.kind == "never") {
if (_this.stopped)
return;
var failedJSX = props.retry_strategy.on_failure.comp(props.context)(props.cont);
_this.setState(__assign({}, _this.state, { result: { kind: "failing", failure_renderer: failedJSX } }));
}
});
});
};
LiftPromise.prototype.componentWillUnmount = function () {
this.stopped = true;
};
LiftPromise.prototype.componentWillMount = function () {
this.stopped = false;
this.props.debug_info && console.log("Mount:", this.props.debug_info());
this.load(this.props);
};
LiftPromise.prototype.render = function () {
this.props.debug_info && console.log("Render:", this.props.debug_info());
return this.state.result == "busy" ? React.createElement("div", { className: "busy" }, i18next.t("busy"))
: this.state.result == "error" ? React.createElement("div", { className: "error" }, i18next.t("error"))
: this.state.result != undefined && this.state.result.hasOwnProperty('kind') && this.state.result.kind === "failing" ? this.state.result.failure_renderer
: [];
};
return LiftPromise;
}(React.Component));
exports.lift_promise = function (p, retry_strategy, key, dbg) {
return function (x) { return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(LiftPromise, { kind: "lift promise", debug_info: dbg, value: x, retry_strategy: retry_strategy, p: p, context: ctxt, cont: cont, key: key });
}; }); };
};
var Delay = /** @class */ (function (_super) {
__extends(Delay, _super);
function Delay(props, context) {
var _this = _super.call(this, props, context) || this;
_this.running = false;
_this.state = { status: "dirty", value: props.value, last_command: props.p(props.value).comp(props.context)(props.cont) };
return _this;
}
Delay.prototype.componentWillMount = function () {
var _this = this;
//console.log("starting delay thread")
if (this.running)
return;
this.running = true;
var self = this;
var process = function () { return setTimeout(function () {
//console.log("delay is ticking", self.state.status, self.state.value)
if (self.state.status == "dirty") {
//console.log("delay is submitting the data to save")
if (!_this.running)
return;
self.setState(__assign({}, self.state, { status: "waiting", last_command: self.props.p(self.state.value).comp(_this.props.context)(function (callback) { return function (new_value) {
//console.log("calling the continuation of dirty", self.state.value)
self.props.cont(callback)(new_value);
}; }) }));
process();
}
else {
if (self.running)
process();
}
}, self.props.dt); };
process();
};
Delay.prototype.componentWillUnmount = function () {
//console.log("stopping delay thread")
this.running = false;
};
Delay.prototype.componentWillReceiveProps = function (new_props) {
//console.log("Delay received new props and is going back to dirty")
this.setState(__assign({}, this.state, { value: new_props.value, status: "dirty" }));
};
Delay.prototype.render = function () {
return this.state.last_command;
};
return Delay;
}(React.Component));
exports.delay = function (dt, key, dbg) {
return function (p) { return function (initial_value) { return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(Delay, { kind: "delay", debug_info: dbg, dt: dt, p: p, value: initial_value, context: ctxt, cont: cont, key: key });
}; }); }; };
};
var Wait = /** @class */ (function (_super) {
__extends(Wait, _super);
function Wait(props, context) {
var _this = _super.call(this, props, context) || this;
_this.running = false;
_this.state = { status: "open",
last_command: null
//last_command:props.p(props.value).comp(props.context)(props.cont)
};
return _this;
}
Wait.prototype.end_process = function () {
var _this = this;
if (!this.running)
return;
//console.log('Ending process')
this.setState(__assign({}, this.state, { status: "closed", last_command: this.props.p(this.props.value).comp(this.props.context)(function (callback) { return function (new_value) { return _this.props.cont(callback)(new_value); }; }) }));
};
Wait.prototype.process = function () {
//console.log('Starting Wait process')
};
Wait.prototype.componentWillMount = function () {
var _this = this;
//console.log("starting wait thread")
if (this.running)
return;
this.running = true;
//console.log('Starting first waiting')
setTimeout(function () { return _this.end_process(); }, this.props.dt);
// var self = this
// let process = () =>
// setTimeout(() => {
// console.log("wait is ticking", self.state.status, self.state.value)
// if (self.state.status == "dirty") {
// console.log("wait is submitting the data to save")
// if (!this.running) return
// self.setState({...self.state, status:"waiting", last_command:self.props.p(self.state.value).comp(this.props.context)(callback => new_value => {
// console.log("calling the continuation of dirty", self.state.value)
// self.props.cont(callback)(new_value)
// })})
// process()
// } else {
// if (self.running)
// process()
// }
// }, self.props.dt)
// process()
};
Wait.prototype.componentWillUnmount = function () {
//console.log("stopping wait thread")
this.running = false;
};
Wait.prototype.componentDidUpdate = function (prevProps, prevState) {
var _this = this;
if (prevState.status == 'closed' && this.state.status == "open") {
//console.log('Here we start the process')
setTimeout(function () { return _this.end_process(); }, this.props.dt);
}
};
Wait.prototype.componentWillReceiveProps = function (new_props) {
// console.log("Wait received new props and is going to wait")
// let process = () => console.log('start process') || setTimeout(() => {
// console.log('the process is ending')
// this.setState({...this.state, status:"closed", last_command: this.props.p(this.state.value).comp(this.props.context)(callback => new_value => {
// this.props.cont(callback)(new_value)
// })})
// }
// ,this.props.dt)
// if (this.state.status == "closed") {
// this.setState({...this.state, value: new_props.value, status:"waiting"}, () => process())
// }
// else this.setState({...this.state, value: new_props.value})
this.setState(__assign({}, this.state, { status: 'open' }));
};
Wait.prototype.render = function () {
//console.log(this.props.value)
return this.state.last_command;
};
return Wait;
}(React.Component));
exports.waiting = function (dt, key, dbg) {
return function (p) { return function (initial_value) { return core_1.make_C(function (ctxt) { return function (cont) {
return React.createElement(Wait, { kind: "wait", debug_info: dbg, dt: dt, p: p, value: initial_value, context: ctxt, cont: cont, key: key });
}; }); }; };
};
exports.mk_submenu_entry = function (label, children) { return { kind: "sub menu", label: label, children: children }; };
exports.mk_menu_entry = function (v) { return { kind: "item", value: v }; };
exports.simple_menu = function (type, to_string, key, dbg) {
var content_menu_class, content_class, menu_class, entries_class, entry_class, sub_entry_class;
if (type == "side menu") {
content_menu_class = "monadic-content-with-menu";
content_class = "monadic-content";
menu_class = "monadic-content-menu";
entries_class = "monadic-content-menu__entries";
entry_class = "monadic-content-menu__entry";
sub_entry_class = "monadic-content-menu__sub-entry";
}
else {
content_menu_class = "monadic-content-with-tabs";
content_class = "monadic-content";
menu_class = "monadic-tabs";
entries_class = "monadic-tabs__entries";
entry_class = "monadic-tabs__entry";
sub_entry_class = "monadic-tabs__sub-entry";
}
return function (items_array, p, selected_item, selected_sub_menu) {
var items = Immutable.List(items_array);
var entries = function (s) {
return (type != "side menu" && s.shown_range.first > 0 ?
[function (s) { return html_1.div(entry_class + " monadic-prev-tab")(html_1.a("<"))(__assign({}, s, { shown_range: __assign({}, s.shown_range, { first: s.shown_range.first - 1 }) })); }]
:
[]).concat(items.map(function (item, i) {
return function (s) {
return item.kind == "item" ?
html_1.div(entry_class + " " + (s.selected.kind == "item" && item.value == s.selected.value ? " " + entry_class + "--active" : ""), to_string(item.value))(html_1.a(to_string(item.value), undefined, undefined, false, undefined))(__assign({}, s, { sub_selected: { kind: "nothing" }, selected: item, last_action: { kind: "selection" } }))
:
exports.any(item.label)([
function (s) { return html_1.div(entry_class + " ", item.label)(html_1.a(item.label, undefined, undefined, false, undefined))(__assign({}, s, { sub_selected: item, last_action: { kind: "selection" } })); }
].concat((s.sub_selected.kind == "sub menu" && item.label == s.sub_selected.label) ||
(s.selected.kind == "item" && item.children.some(function (c) { return s.selected.kind == "item" && c.value == s.selected.value; })) ?
item.children.map(function (c) {
return function (s) { return html_1.div(sub_entry_class + " " + (s.selected.kind == "item" && c.value == s.selected.value ? " " + sub_entry_class + "--active" : ""), to_string(c.value))(html_1.a(to_string(c.value), undefined, undefined, false, undefined))(__assign({}, s, { sub_selected: item, selected: c, last_action: { kind: "selection" } })); };
})
:
[]))(s);
};
}).filter(function (i, i_i) { return type == "side menu" || i_i >= s.shown_range.first && (i_i - s.shown_range.first) < s.shown_range.amount; })
.concat(type != "side menu" && s.shown_range.first + s.shown_range.amount < items.count() ?
[function (s) { return html_1.div(entry_class + " monadic-next-tab")(html_1.a(">"))(__assign({}, s, { shown_range: __assign({}, s.shown_range, { first: s.shown_range.first + 1 }) })); }]
:
[])
.toArray());
};
return exports.repeat()(html_1.div()(exports.any(undefined, content_menu_class)([
html_1.div(menu_class, menu_class)(function (s) { return exports.any(undefined, entries_class)(entries(s))(s); }),
html_1.div(content_class, content_class)(function (s) { return s.selected.kind == "item" ?
p(s.selected.value).then(undefined, function (p_res) { return core_1.unit(__assign({}, s, { last_action: { kind: "p", p_res: p_res } })); })
:
core_1.unit(s).never(); })
])))({ selected: selected_item == undefined ? { kind: "nothing" } : { kind: "item", value: selected_item },
sub_selected: selected_sub_menu == undefined ? { kind: "nothing" } : { kind: "sub menu", label: selected_sub_menu },
last_action: { kind: "init" },
shown_range: type == "side menu" ? undefined : { first: 0, amount: type.max_tabs } })
.filter(function (s) { return s.last_action.kind != "p"; })
.map(function (s) { return s.last_action.kind == "p" && s.last_action.p_res; });
};
};
exports.custom = function (key, dbg) {
return function (render) { return core_1.make_C(function (ctxt) { return function (cont) { return render(ctxt)(cont); }; }); };
};
exports.hide = function (f_name, f) {
return exports.repeat()(function (visible) {
return primitives_1.bool("edit", "plus/minus")(visible);
})(false).then(f_name + " toggle", function (visible) {
return !visible ?
core_1.unit(null)
:
f.then("visible " + f_name, function (_) { return core_1.unit(null); });
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhY3RfbW9uYWQvY29tYmluYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQThCO0FBRTlCLHFDQUFzQztBQUN0QyxpQ0FBa0M7QUFFbEMsK0JBQTRFO0FBQzVFLCtCQUE2QjtBQUM3QiwyQ0FBaUM7QUFjakM7SUFBd0IsMEJBQThDO0lBQ3BFLGdCQUFZLEtBQW9CLEVBQUMsT0FBVztRQUE1QyxZQUNFLGtCQUFNLEtBQUssRUFBRSxPQUFPLENBQUMsU0FFdEI7UUFDRCxhQUFPLEdBQVcsS0FBSyxDQUFBO1FBRnJCLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUMsQ0FBQyxFQUFFLENBQUE7O0lBQzVELENBQUM7SUFHRCxxQ0FBb0IsR0FBcEI7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtJQUNyQixDQUFDO0lBRUQsbUNBQWtCLEdBQWxCO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDdEIsQ0FBQztJQUVELHVCQUFNLEdBQU47UUFBQSxpQkFPQztRQU5DLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBQSxRQUFRLElBQUksT0FBQSxVQUFBLFNBQVM7WUFDMUYsSUFBSSxLQUFJLENBQUMs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