mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-03-13 14:40:01 +01:00
45 lines
1 KiB
TypeScript
45 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]);
|