Skip to main content

Rule Effects

ruleEffects are onChange callbacks triggered when certain rules are changed. It allows you to couple rules to each other wihout adding complex onChange events.

Use cases
  • I want to reset sort order when the user changes their filters.
  • Two filters are mutually exclusive, and one should be disabled when the other is active.

Type Signature

ruleEffect(
string | FinderRule | (string | FinderRule)[]
| ((items: FItem[], context: FContext) =>
string | FinderRule<FItem> | (string | FinderRule<FItem>)[]
),
(instance:FinderCore) => void
),

Example Usage

const rules = finderRuleset<Fruit>([
filterRule({
id: "is_an_orange",
filterFn: (item) => item.type === "orange",
boolean: true,
}),
filterRule({
id: "is_an_apple",
filterFn: (item) => item.type === "apple",
boolean: true,
defaultValue: true,
}),
filterRule({
id: "is_fresh",
filterFn: (item) => item.is_fresh,
boolean: true,
}),
]);

// whenever these rules are changed, the callback will be triggered.
const effects = [
ruleEffect(["is_an_orange", "is_an_apple"], (instance) => {
if (instance.filters.get("is_an_orange") === true) {
instance.filters.toggle("is_an_apple");
}
}),
];

const finder = new FinderCore(fruits, { rules, effects });
tip

Changes triggered inside an effect callback are processed silently, and do not trigger Events.