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