You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.0 KiB
TypeScript
214 lines
5.0 KiB
TypeScript
// TODOLATER move into redux slice
|
|
import { SessionSettingCategory } from '../../components/settings/SessionSettings';
|
|
|
|
export const FOCUS_SECTION = 'FOCUS_SECTION';
|
|
export const FOCUS_SETTINGS_SECTION = 'FOCUS_SETTINGS_SECTION';
|
|
export const IS_APP_FOCUSED = 'IS_APP_FOCUSED';
|
|
export const LEFT_OVERLAY_MODE = 'LEFT_OVERLAY_MODE';
|
|
export const RESET_LEFT_OVERLAY_MODE = 'RESET_OVERLAY_MODE';
|
|
export const RIGHT_OVERLAY_MODE = 'RIGHT_OVERLAY_MODE';
|
|
export const RESET_RIGHT_OVERLAY_MODE = 'RESET_RIGHT_OVERLAY_MODE';
|
|
|
|
export enum SectionType {
|
|
Profile,
|
|
Message,
|
|
Settings,
|
|
ColorMode,
|
|
PathIndicator,
|
|
}
|
|
|
|
type FocusSectionActionType = {
|
|
type: 'FOCUS_SECTION';
|
|
payload: SectionType;
|
|
};
|
|
|
|
type FocusSettingsSectionActionType = {
|
|
type: 'FOCUS_SETTINGS_SECTION';
|
|
payload: SessionSettingCategory;
|
|
};
|
|
|
|
type IsAppFocusedActionType = {
|
|
type: 'IS_APP_FOCUSED';
|
|
payload: boolean;
|
|
};
|
|
|
|
type LeftOverlayModeActionType = {
|
|
type: 'LEFT_OVERLAY_MODE';
|
|
payload: LeftOverlayMode;
|
|
};
|
|
|
|
type ResetLeftOverlayModeActionType = {
|
|
type: 'RESET_OVERLAY_MODE';
|
|
};
|
|
|
|
type RightOverlayModeActionType = {
|
|
type: 'RIGHT_OVERLAY_MODE';
|
|
payload: RightOverlayMode;
|
|
};
|
|
|
|
type ResetRightOverlayModeActionType = {
|
|
type: 'RESET_RIGHT_OVERLAY_MODE';
|
|
};
|
|
|
|
export function showLeftPaneSection(section: SectionType): FocusSectionActionType {
|
|
return {
|
|
type: FOCUS_SECTION,
|
|
payload: section,
|
|
};
|
|
}
|
|
|
|
type SectionActionTypes = FocusSectionActionType | FocusSettingsSectionActionType;
|
|
|
|
export function setIsAppFocused(focused: boolean): IsAppFocusedActionType {
|
|
return {
|
|
type: IS_APP_FOCUSED,
|
|
payload: focused,
|
|
};
|
|
}
|
|
|
|
export type LeftOverlayMode =
|
|
| 'choose-action'
|
|
| 'message'
|
|
| 'open-group'
|
|
| 'closed-group'
|
|
| 'message-requests'
|
|
| 'invite-a-friend';
|
|
|
|
export function setLeftOverlayMode(overlayMode: LeftOverlayMode): LeftOverlayModeActionType {
|
|
return {
|
|
type: LEFT_OVERLAY_MODE,
|
|
payload: overlayMode,
|
|
};
|
|
}
|
|
|
|
export function resetLeftOverlayMode(): ResetLeftOverlayModeActionType {
|
|
return {
|
|
type: RESET_LEFT_OVERLAY_MODE,
|
|
};
|
|
}
|
|
|
|
type RightPanelDefaultState = { type: 'default'; params: null };
|
|
type RightPanelMessageInfoState = {
|
|
type: 'message_info';
|
|
params: { messageId: string; visibleAttachmentIndex: number | undefined };
|
|
};
|
|
type RightPanelDisappearingMessagesState = { type: 'disappearing_messages'; params: null };
|
|
|
|
export type RightOverlayMode =
|
|
| RightPanelDefaultState
|
|
| RightPanelMessageInfoState
|
|
| RightPanelDisappearingMessagesState;
|
|
|
|
export function setRightOverlayMode(overlayMode: RightOverlayMode): RightOverlayModeActionType {
|
|
return {
|
|
type: RIGHT_OVERLAY_MODE,
|
|
payload: overlayMode,
|
|
};
|
|
}
|
|
|
|
export function resetRightOverlayMode(): ResetRightOverlayModeActionType {
|
|
return {
|
|
type: RESET_RIGHT_OVERLAY_MODE,
|
|
};
|
|
}
|
|
|
|
export function showSettingsSection(
|
|
category: SessionSettingCategory
|
|
): FocusSettingsSectionActionType {
|
|
return {
|
|
type: FOCUS_SETTINGS_SECTION,
|
|
payload: category,
|
|
};
|
|
}
|
|
|
|
export const actions = {
|
|
showLeftPaneSection,
|
|
showSettingsSection,
|
|
setLeftOverlayMode,
|
|
resetLeftOverlayMode,
|
|
setRightOverlayMode,
|
|
resetRightOverlayMode,
|
|
};
|
|
|
|
export const initialSectionState: SectionStateType = {
|
|
focusedSection: SectionType.Message,
|
|
focusedSettingsSection: undefined,
|
|
isAppFocused: false,
|
|
leftOverlayMode: undefined,
|
|
rightOverlayMode: { type: 'default', params: null },
|
|
};
|
|
|
|
export type SectionStateType = {
|
|
focusedSection: SectionType;
|
|
focusedSettingsSection?: SessionSettingCategory;
|
|
isAppFocused: boolean;
|
|
leftOverlayMode: LeftOverlayMode | undefined;
|
|
rightOverlayMode: RightOverlayMode | undefined;
|
|
};
|
|
|
|
export const reducer = (
|
|
state: any = initialSectionState,
|
|
{
|
|
type,
|
|
payload,
|
|
}: {
|
|
type: string;
|
|
payload: SectionActionTypes;
|
|
}
|
|
): SectionStateType => {
|
|
switch (type) {
|
|
case FOCUS_SECTION:
|
|
// if we change to something else than settings, reset the focused settings section
|
|
// eslint-disable-next-line no-case-declarations
|
|
const castedPayload = payload as unknown as SectionType;
|
|
|
|
if (castedPayload !== SectionType.Settings) {
|
|
return {
|
|
...state,
|
|
focusedSection: castedPayload,
|
|
focusedSettingsSection: undefined,
|
|
};
|
|
}
|
|
|
|
// on click on the gear icon: show the appearance tab by default
|
|
return {
|
|
...state,
|
|
focusedSection: payload,
|
|
focusedSettingsSection: SessionSettingCategory.Privacy,
|
|
};
|
|
case FOCUS_SETTINGS_SECTION:
|
|
return {
|
|
...state,
|
|
focusedSettingsSection: payload,
|
|
};
|
|
|
|
case IS_APP_FOCUSED:
|
|
return {
|
|
...state,
|
|
isAppFocused: payload,
|
|
};
|
|
case LEFT_OVERLAY_MODE:
|
|
return {
|
|
...state,
|
|
leftOverlayMode: payload,
|
|
};
|
|
case RESET_LEFT_OVERLAY_MODE:
|
|
return {
|
|
...state,
|
|
leftOverlayMode: undefined,
|
|
};
|
|
case RIGHT_OVERLAY_MODE:
|
|
return {
|
|
...state,
|
|
rightOverlayMode: payload,
|
|
};
|
|
case RESET_RIGHT_OVERLAY_MODE:
|
|
return {
|
|
...state,
|
|
rightOverlayMode: undefined,
|
|
};
|
|
default:
|
|
return state;
|
|
}
|
|
};
|