From 3463b5bec75851a3cb01fd0c7ca7223a67bbd54c Mon Sep 17 00:00:00 2001 From: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:05:41 -0800 Subject: [PATCH] When deleting megaphones ensure they are removed in redux --- ts/services/megaphone.preload.ts | 11 +++++++++-- ts/services/releaseNoteAndMegaphoneFetcher.preload.ts | 3 ++- ts/sql/server/megaphones.std.ts | 2 ++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ts/services/megaphone.preload.ts b/ts/services/megaphone.preload.ts index 7ba6131ce1..12d5d8c0aa 100644 --- a/ts/services/megaphone.preload.ts +++ b/ts/services/megaphone.preload.ts @@ -7,6 +7,7 @@ import { getMegaphoneLastSnoozeDurationMs, MegaphoneCtaId, SNOOZE_DEFAULT_DURATION, + type RemoteMegaphoneId, type RemoteMegaphoneType, type VisibleRemoteMegaphoneType, } from '../types/Megaphone.std.js'; @@ -120,6 +121,13 @@ export function isConditionalActive(conditionalId: string | null): boolean { return false; } +export async function deleteMegaphoneAndRemoveFromRedux( + id: RemoteMegaphoneId +): Promise { + await DataWriter.deleteMegaphone(id); + window.reduxActions.megaphones.removeVisibleMegaphone(id); +} + // Private async function processMegaphone(megaphone: RemoteMegaphoneType): Promise { @@ -127,8 +135,7 @@ async function processMegaphone(megaphone: RemoteMegaphoneType): Promise { if (isMegaphoneDeletable(megaphone)) { log.info(`processMegaphone: Deleting ${id}`); - await DataWriter.deleteMegaphone(id); - window.reduxActions.megaphones.removeVisibleMegaphone(id); + await deleteMegaphoneAndRemoveFromRedux(id); return; } diff --git a/ts/services/releaseNoteAndMegaphoneFetcher.preload.ts b/ts/services/releaseNoteAndMegaphoneFetcher.preload.ts index 060881f4e4..dd89b1a277 100644 --- a/ts/services/releaseNoteAndMegaphoneFetcher.preload.ts +++ b/ts/services/releaseNoteAndMegaphoneFetcher.preload.ts @@ -47,6 +47,7 @@ import { type RemoteMegaphoneType } from '../types/Megaphone.std.js'; import { isCountryPpmCsvBucketEnabled } from '../RemoteConfig.dom.js'; import type { AciString } from '../types/ServiceId.std.js'; import { + deleteMegaphoneAndRemoveFromRedux, isRemoteMegaphoneEnabled, runMegaphoneCheck, } from './megaphone.preload.js'; @@ -238,7 +239,7 @@ export class ReleaseNoteAndMegaphoneFetcher { `deleteUnknownMegaphones: Found local megaphone missing in manifest, deleting: ${id}` ); // eslint-disable-next-line no-await-in-loop - await DataWriter.deleteMegaphone(id); + await deleteMegaphoneAndRemoveFromRedux(id); } } diff --git a/ts/sql/server/megaphones.std.ts b/ts/sql/server/megaphones.std.ts index d7129b7ecf..0f2513115d 100644 --- a/ts/sql/server/megaphones.std.ts +++ b/ts/sql/server/megaphones.std.ts @@ -216,6 +216,8 @@ export function snoozeMegaphone( ); } +// Note: When deleting megaphones, ensure megaphones are removed from redux also. +// See: deleteMegaphoneAndRemoveFromRedux() export function deleteMegaphone( db: WritableDB, megaphoneId: RemoteMegaphoneId