fix(notifications): Advanced Push Rules mode switch keeps highlight/sound tweaks
RuleModeSwitcher rebuilt a rule's actions from scratch, so changing the mode of e.g. .m.rule.is_user_mention silently dropped its highlight tweak account-wide. Derive the existing highlight/custom-sound tweaks from the rule's current actions and pass them through as NotificationModeOptions. Adds getNotificationModeOptionsFromActions + unit tests. Fixes #19 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
@@ -49,6 +49,29 @@ export const getNotificationModeActions = (
|
||||
return actions;
|
||||
};
|
||||
|
||||
// Derive the options that would reproduce an existing rule's tweaks, so a mode
|
||||
// switch rebuilds actions on top of them instead of silently dropping a
|
||||
// `highlight` tweak (or a custom sound) that isn't part of the mode itself.
|
||||
export const getNotificationModeOptionsFromActions = (
|
||||
actions: PushRuleAction[],
|
||||
): NotificationModeOptions => {
|
||||
const soundTweak = actions.find(
|
||||
(action) => typeof action === 'object' && action.set_tweak === TweakName.Sound,
|
||||
);
|
||||
const highlightTweak = actions.find(
|
||||
(action) => typeof action === 'object' && action.set_tweak === TweakName.Highlight,
|
||||
);
|
||||
|
||||
return {
|
||||
soundValue:
|
||||
soundTweak && typeof soundTweak === 'object' && typeof soundTweak.value === 'string'
|
||||
? soundTweak.value
|
||||
: undefined,
|
||||
highlight:
|
||||
!!highlightTweak && typeof highlightTweak === 'object' && highlightTweak.value !== false,
|
||||
};
|
||||
};
|
||||
|
||||
export type GetNotificationModeCallback = (mode: NotificationMode) => PushRuleAction[];
|
||||
export const useNotificationModeActions = (
|
||||
options?: NotificationModeOptions,
|
||||
|
||||
Reference in New Issue
Block a user