// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import type { ReadonlyDeep } from 'type-fest'; import type { BoundActionCreatorsMapObject } from '../../hooks/useBoundActions'; import { useBoundActions } from '../../hooks/useBoundActions'; // Types export enum NavTab { Chats = 'Chats', Calls = 'Calls', Stories = 'Stories', } // State export type NavStateType = ReadonlyDeep<{ selectedNavTab: NavTab; }>; // Actions export const CHANGE_NAV_TAB = 'nav/CHANGE_NAV_TAB'; export type ChangeNavTabActionType = ReadonlyDeep<{ type: typeof CHANGE_NAV_TAB; payload: { selectedNavTab: NavTab }; }>; export type NavActionType = ReadonlyDeep; // Action Creators function changeNavTab(selectedNavTab: NavTab): NavActionType { return { type: CHANGE_NAV_TAB, payload: { selectedNavTab }, }; } export const actions = { changeNavTab, }; export const useNavActions = (): BoundActionCreatorsMapObject => useBoundActions(actions); // Reducer export function getEmptyState(): NavStateType { return { selectedNavTab: NavTab.Chats, }; } export function reducer( state: Readonly = getEmptyState(), action: Readonly ): NavStateType { if (action.type === CHANGE_NAV_TAB) { return { ...state, selectedNavTab: action.payload.selectedNavTab, }; } return state; }