72 lines
1.4 KiB
TypeScript
72 lines
1.4 KiB
TypeScript
|
|
import {
|
||
|
|
IPushRule,
|
||
|
|
IPushRules,
|
||
|
|
PushRuleAction,
|
||
|
|
PushRuleCondition,
|
||
|
|
PushRuleKind,
|
||
|
|
RuleId,
|
||
|
|
} from 'matrix-js-sdk';
|
||
|
|
import { useMemo } from 'react';
|
||
|
|
|
||
|
|
export type PushRuleData = {
|
||
|
|
kind: PushRuleKind;
|
||
|
|
pushRule: IPushRule;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const makePushRuleData = (
|
||
|
|
kind: PushRuleKind,
|
||
|
|
ruleId: RuleId,
|
||
|
|
actions: PushRuleAction[],
|
||
|
|
conditions?: PushRuleCondition[],
|
||
|
|
pattern?: string,
|
||
|
|
enabled?: boolean,
|
||
|
|
_default?: boolean
|
||
|
|
): PushRuleData => ({
|
||
|
|
kind,
|
||
|
|
pushRule: {
|
||
|
|
rule_id: ruleId,
|
||
|
|
default: _default ?? true,
|
||
|
|
enabled: enabled ?? true,
|
||
|
|
pattern,
|
||
|
|
conditions,
|
||
|
|
actions,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
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]);
|