mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-03-13 14:40:01 +01:00
44 lines
1 KiB
TypeScript
44 lines
1 KiB
TypeScript
import { IPushRule, IPushRules, PushRuleKind, RuleId } from 'matrix-js-sdk';
|
|
import { useMemo } from 'react';
|
|
|
|
export type PushRuleData = {
|
|
kind: PushRuleKind;
|
|
pushRule: IPushRule;
|
|
};
|
|
|
|
export const orderedPushRuleKinds: PushRuleKind[] = [
|
|
PushRuleKind.Override,
|
|
PushRuleKind.ContentSpecific,
|
|
PushRuleKind.RoomSpecific,
|
|
PushRuleKind.SenderSpecific,
|
|
PushRuleKind.Underride,
|
|
];
|
|
|
|
export const getPushRule = (
|
|
pushRules: IPushRules,
|
|
ruleId: RuleId | string
|
|
): PushRuleData | undefined => {
|
|
const { global } = pushRules;
|
|
|
|
let ruleData: PushRuleData | undefined;
|
|
|
|
orderedPushRuleKinds.some((kind) => {
|
|
const rules = global[kind];
|
|
const pushRule = rules?.find((r) => r.rule_id === ruleId);
|
|
if (pushRule) {
|
|
ruleData = {
|
|
kind,
|
|
pushRule,
|
|
};
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
return ruleData;
|
|
};
|
|
|
|
export const usePushRule = (
|
|
pushRules: IPushRules,
|
|
ruleId: RuleId | string
|
|
): PushRuleData | undefined => useMemo(() => getPushRule(pushRules, ruleId), [pushRules, ruleId]);
|