diff --git a/ts/state/selectors/globalModals.std.ts b/ts/state/selectors/globalModals.std.ts index 8ba6202719..9306a8ff27 100644 --- a/ts/state/selectors/globalModals.std.ts +++ b/ts/state/selectors/globalModals.std.ts @@ -5,7 +5,10 @@ import { createSelector } from 'reselect'; import type { StateType } from '../reducer.preload.ts'; import type { GlobalModalsStateType } from '../ducks/globalModals.preload.ts'; -import { UsernameOnboardingState } from '../../types/globalModals.std.ts'; +import { + PinReminderState, + UsernameOnboardingState, +} from '../../types/globalModals.std.ts'; import type { StateSelector } from '../types.std.ts'; import type { PinMessageDialogData } from '../smart/PinMessageDialog.preload.tsx'; @@ -20,6 +23,10 @@ export const isShowingAnyModal = createSelector( return value === UsernameOnboardingState.Open; } + if (key === 'pinReminderState') { + return value === PinReminderState.Modal; + } + return Boolean(value); }) ); diff --git a/ts/test-node/state/selectors/globalModals_test.preload.ts b/ts/test-node/state/selectors/globalModals_test.preload.ts new file mode 100644 index 0000000000..7748e49c4f --- /dev/null +++ b/ts/test-node/state/selectors/globalModals_test.preload.ts @@ -0,0 +1,45 @@ +// Copyright 2026 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { assert } from 'chai'; + +import type { StateType } from '../../../state/reducer.preload.ts'; +import type { GlobalModalsStateType } from '../../../state/ducks/globalModals.preload.ts'; +import { getEmptyState } from '../../../state/ducks/globalModals.preload.ts'; + +import { isShowingAnyModal } from '../../../state/selectors/globalModals.std.ts'; +import { UsernameOnboardingState } from '../../../types/globalModals.std.ts'; + +describe('both/state/selectors/globalModals', () => { + function getRootState( + overrides: Readonly> + ): StateType { + return { + globalModals: { + ...getEmptyState(), + ...overrides, + }, + } as StateType; + } + + describe('#isShowingAnyModal', () => { + it('returns false in default state', () => { + const state = getRootState({}); + assert.isFalse(isShowingAnyModal(state)); + }); + + it('returns true when showing a modal', () => { + const state = getRootState({ + errorModalProps: { title: 'hi', description: 'im a cat' }, + }); + assert.isTrue(isShowingAnyModal(state)); + }); + + it('returns true when showing username megaphone', () => { + const state = getRootState({ + usernameOnboardingState: UsernameOnboardingState.Open, + }); + assert.isTrue(isShowingAnyModal(state)); + }); + }); +});