patronum
Version:
☄️ Effector utility library delivering modularity and convenience
72 lines (71 loc) • 1.46 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.condition = condition;
var _effector = require("effector");
function condition({
source = (0, _effector.createEvent)({
name: "source",
sid: "rytt3j"
}),
if: test,
then: thenBranch,
else: elseBranch
}) {
const checker = _effector.is.unit(test) || isFunction(test) ? test : value => value === test;
if (thenBranch && elseBranch) {
(0, _effector.split)({
and: [{
source,
match: {
then: checker,
else: inverse(checker)
},
cases: {
then: thenBranch,
else: elseBranch
}
}],
or: {
sid: "aaw2hr"
}
});
} else if (thenBranch) {
// @ts-expect-error
(0, _effector.sample)({
and: [{
source: source,
filter: checker,
target: thenBranch
}],
or: {
sid: "-dwrmbb"
}
});
} else if (elseBranch) {
// @ts-expect-error
(0, _effector.sample)({
and: [{
source,
filter: inverse(checker),
target: elseBranch
}],
or: {
sid: "-dsx25s"
}
});
}
return source;
}
function isFunction(value) {
return typeof value === 'function';
}
function inverse(fnOrUnit) {
if (_effector.is.unit(fnOrUnit)) {
return fnOrUnit.map(value => !value, {
skipVoid: false
});
}
return value => !fnOrUnit(value);
}
;