import React, { useCallback, useMemo } from 'react'; import { Badge, Box, Text } from 'folds'; import { ConditionKind, IPushRules, PushRuleCondition, PushRuleKind, RuleId } from 'matrix-js-sdk'; import { useAccountData } from '../../../hooks/useAccountData'; import { AccountDataEvent } from '../../../../types/matrix/accountData'; import { NotificationModeSwitcher } from './NotificationModeSwitcher'; import { SequenceCard } from '../../../components/sequence-card'; import { SequenceCardStyle } from '../styles.css'; import { SettingTile } from '../../../components/setting-tile'; import { PushRuleData, usePushRule } from '../../../hooks/usePushRule'; import { getNotificationModeActions, NotificationMode, useNotificationModeActions, } from '../../../hooks/useNotificationMode'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; const getAllMessageDefaultRule = ( ruleId: RuleId, encrypted: boolean, oneToOne: boolean ): PushRuleData => { const conditions: PushRuleCondition[] = []; if (oneToOne) conditions.push({ kind: ConditionKind.RoomMemberCount, is: '2', }); conditions.push({ kind: ConditionKind.EventMatch, key: 'type', pattern: encrypted ? 'm.room.encrypted' : 'm.room.message', }); return { kind: PushRuleKind.Underride, pushRule: { rule_id: ruleId, default: true, enabled: true, conditions, actions: getNotificationModeActions(NotificationMode.NotifyLoud), }, }; }; type PushRulesProps = { ruleId: RuleId.DM | RuleId.EncryptedDM | RuleId.Message | RuleId.EncryptedMessage; pushRules: IPushRules; encrypted?: boolean; oneToOne?: boolean; }; function AllMessagesModeSwitcher({ ruleId, pushRules, encrypted, oneToOne }: PushRulesProps) { const mx = useMatrixClient(); const defaultPushRuleData = getAllMessageDefaultRule( ruleId, encrypted ?? false, oneToOne ?? false ); const { kind, pushRule } = usePushRule(pushRules, ruleId) ?? defaultPushRuleData; const getModeActions = useNotificationModeActions(); const handleChange = useCallback( async (mode: NotificationMode) => { const actions = getModeActions(mode); await mx.setPushRuleActions('global', kind, ruleId, actions); }, [mx, getModeActions, kind, ruleId] ); return ; } export function AllMessagesNotifications() { const pushRulesEvt = useAccountData(AccountDataEvent.PushRules); const pushRules = useMemo( () => pushRulesEvt?.getContent() ?? { global: {} }, [pushRulesEvt] ); return ( All Messages Hint: 1 } /> } /> } /> } /> ); }