chore: move SessionSettingsCategory to .d.ts file

and remove the enum (instead use string union)
pull/3080/head
Audric Ackermann 12 months ago
parent 7f7f0fe26c
commit 49ab04d2fd

@ -12,8 +12,8 @@ import {
} from '../../state/ducks/section'; } from '../../state/ducks/section';
import { getFocusedSettingsSection } from '../../state/selectors/section'; import { getFocusedSettingsSection } from '../../state/selectors/section';
import { SessionIcon } from '../icon'; import { SessionIcon } from '../icon';
import { SessionSettingCategory } from '../settings/SessionSettings';
import { LeftPaneSectionHeader } from './LeftPaneSectionHeader'; import { LeftPaneSectionHeader } from './LeftPaneSectionHeader';
import type { SessionSettingCategory } from '../../types/SessionSettingCategory';
const StyledSettingsSectionTitle = styled.strong` const StyledSettingsSectionTitle = styled.strong`
font-family: var(--font-accent), var(--font-default); font-family: var(--font-accent), var(--font-default);
@ -42,42 +42,42 @@ const StyledSettingsListItem = styled.div<{ active: boolean }>`
} }
`; `;
const getCategories = () => { const getCategories = (): Array<{ id: SessionSettingCategory; title: string }> => {
return [ return [
{ {
id: SessionSettingCategory.Privacy, id: 'privacy' as const,
title: window.i18n('privacySettingsTitle'), title: window.i18n('privacySettingsTitle'),
}, },
{ {
id: SessionSettingCategory.Notifications, id: 'notifications' as const,
title: window.i18n('notificationsSettingsTitle'), title: window.i18n('notificationsSettingsTitle'),
}, },
{ {
id: SessionSettingCategory.Conversations, id: 'conversations' as const,
title: window.i18n('conversationsSettingsTitle'), title: window.i18n('conversationsSettingsTitle'),
}, },
{ {
id: SessionSettingCategory.MessageRequests, id: 'messageRequests' as const,
title: window.i18n('openMessageRequestInbox'), title: window.i18n('openMessageRequestInbox'),
}, },
{ {
id: SessionSettingCategory.Appearance, id: 'appearance' as const,
title: window.i18n('appearanceSettingsTitle'), title: window.i18n('appearanceSettingsTitle'),
}, },
{ {
id: SessionSettingCategory.Permissions, id: 'permissions',
title: window.i18n('permissionsSettingsTitle'), title: window.i18n('permissionsSettingsTitle'),
}, },
{ {
id: SessionSettingCategory.Help, id: 'help' as const,
title: window.i18n('helpSettingsTitle'), title: window.i18n('helpSettingsTitle'),
}, },
{ {
id: SessionSettingCategory.RecoveryPhrase, id: 'recoveryPhrase' as const,
title: window.i18n('recoveryPhrase'), title: window.i18n('recoveryPhrase'),
}, },
{ {
id: SessionSettingCategory.ClearData, id: 'ClearData' as const,
title: window.i18n('clearDataSettingsTitle'), title: window.i18n('clearDataSettingsTitle'),
}, },
]; ];
@ -93,7 +93,7 @@ const LeftPaneSettingsCategoryRow = (props: {
const dataTestId = `${title.toLowerCase().replace(' ', '-')}-settings-menu-item`; const dataTestId = `${title.toLowerCase().replace(' ', '-')}-settings-menu-item`;
const isClearData = id === SessionSettingCategory.ClearData; const isClearData = id === 'ClearData';
return ( return (
<StyledSettingsListItem <StyledSettingsListItem
@ -103,15 +103,15 @@ const LeftPaneSettingsCategoryRow = (props: {
role="link" role="link"
onClick={() => { onClick={() => {
switch (id) { switch (id) {
case SessionSettingCategory.MessageRequests: case 'messageRequests':
dispatch(showLeftPaneSection(SectionType.Message)); dispatch(showLeftPaneSection(SectionType.Message));
dispatch(setLeftOverlayMode('message-requests')); dispatch(setLeftOverlayMode('message-requests'));
dispatch(resetConversationExternal()); dispatch(resetConversationExternal());
break; break;
case SessionSettingCategory.RecoveryPhrase: case 'recoveryPhrase':
dispatch(recoveryPhraseModal({})); dispatch(recoveryPhraseModal({}));
break; break;
case SessionSettingCategory.ClearData: case 'ClearData':
dispatch(updateDeleteAccountModal({})); dispatch(updateDeleteAccountModal({}));
break; break;
default: default:

@ -19,6 +19,7 @@ import { CategoryConversations } from './section/CategoryConversations';
import { SettingsCategoryHelp } from './section/CategoryHelp'; import { SettingsCategoryHelp } from './section/CategoryHelp';
import { SettingsCategoryPermissions } from './section/CategoryPermissions'; import { SettingsCategoryPermissions } from './section/CategoryPermissions';
import { SettingsCategoryPrivacy } from './section/CategoryPrivacy'; import { SettingsCategoryPrivacy } from './section/CategoryPrivacy';
import type { SessionSettingCategory } from '../../types/SessionSettingCategory';
export function displayPasswordModal( export function displayPasswordModal(
passwordAction: PasswordAction, passwordAction: PasswordAction,
@ -42,18 +43,6 @@ export function getCallMediaPermissionsSettings() {
return window.getSettingValue('call-media-permissions'); return window.getSettingValue('call-media-permissions');
} }
export enum SessionSettingCategory {
Privacy = 'privacy',
Notifications = 'notifications',
Conversations = 'conversations',
MessageRequests = 'messageRequests',
Appearance = 'appearance',
Permissions = 'permissions',
Help = 'help',
RecoveryPhrase = 'recoveryPhrase',
ClearData = 'ClearData',
}
export interface SettingsViewProps { export interface SettingsViewProps {
category: SessionSettingCategory; category: SessionSettingCategory;
} }
@ -113,25 +102,25 @@ const SettingInCategory = (props: {
switch (category) { switch (category) {
// special case for blocked user // special case for blocked user
case SessionSettingCategory.Conversations: case 'conversations':
return <CategoryConversations />; return <CategoryConversations />;
case SessionSettingCategory.Appearance: case 'appearance':
return <SettingsCategoryAppearance />; return <SettingsCategoryAppearance />;
case SessionSettingCategory.Notifications: case 'notifications':
return <SessionNotificationGroupSettings />; return <SessionNotificationGroupSettings />;
case SessionSettingCategory.Privacy: case 'privacy':
return ( return (
<SettingsCategoryPrivacy onPasswordUpdated={onPasswordUpdated} hasPassword={hasPassword} /> <SettingsCategoryPrivacy onPasswordUpdated={onPasswordUpdated} hasPassword={hasPassword} />
); );
case SessionSettingCategory.Help: case 'help':
return <SettingsCategoryHelp />; return <SettingsCategoryHelp />;
case SessionSettingCategory.Permissions: case 'permissions':
return <SettingsCategoryPermissions />; return <SettingsCategoryPermissions />;
// these three down there have no options, they are just a button // these three down there have no options, they are just a button
case SessionSettingCategory.ClearData: case 'ClearData':
case SessionSettingCategory.MessageRequests: case 'messageRequests':
case SessionSettingCategory.RecoveryPhrase: case 'recoveryPhrase':
default: default:
return null; return null;
} }

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { assertUnreachable } from '../../types/sqlSharedTypes'; import { assertUnreachable } from '../../types/sqlSharedTypes';
import { SessionSettingCategory, SettingsViewProps } from './SessionSettings'; import { SettingsViewProps } from './SessionSettings';
type Props = Pick<SettingsViewProps, 'category'>; type Props = Pick<SettingsViewProps, 'category'>;
@ -26,27 +26,27 @@ export const SettingsHeader = (props: Props) => {
let categoryTitle: string | null = null; let categoryTitle: string | null = null;
switch (category) { switch (category) {
case SessionSettingCategory.Appearance: case 'appearance':
categoryTitle = window.i18n('appearanceSettingsTitle'); categoryTitle = window.i18n('appearanceSettingsTitle');
break; break;
case SessionSettingCategory.Conversations: case 'conversations':
categoryTitle = window.i18n('conversationsSettingsTitle'); categoryTitle = window.i18n('conversationsSettingsTitle');
break; break;
case SessionSettingCategory.Notifications: case 'notifications':
categoryTitle = window.i18n('notificationsSettingsTitle'); categoryTitle = window.i18n('notificationsSettingsTitle');
break; break;
case SessionSettingCategory.Help: case 'help':
categoryTitle = window.i18n('helpSettingsTitle'); categoryTitle = window.i18n('helpSettingsTitle');
break; break;
case SessionSettingCategory.Permissions: case 'permissions':
categoryTitle = window.i18n('permissionsSettingsTitle'); categoryTitle = window.i18n('permissionsSettingsTitle');
break; break;
case SessionSettingCategory.Privacy: case 'privacy':
categoryTitle = window.i18n('privacySettingsTitle'); categoryTitle = window.i18n('privacySettingsTitle');
break; break;
case SessionSettingCategory.ClearData: case 'ClearData':
case SessionSettingCategory.MessageRequests: case 'messageRequests':
case SessionSettingCategory.RecoveryPhrase: case 'recoveryPhrase':
throw new Error(`no header for should be tried to be rendered for "${category}"`); throw new Error(`no header for should be tried to be rendered for "${category}"`);
default: default:

@ -1,7 +1,6 @@
import React from 'react'; import React from 'react';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { SessionToast, SessionToastType } from '../../components/basic/SessionToast'; import { SessionToast, SessionToastType } from '../../components/basic/SessionToast';
import { SessionSettingCategory } from '../../components/settings/SessionSettings';
import { SectionType, showLeftPaneSection, showSettingsSection } from '../../state/ducks/section'; import { SectionType, showLeftPaneSection, showSettingsSection } from '../../state/ducks/section';
// if you push a toast manually with toast...() be sure to set the type attribute of the SessionToast component // if you push a toast manually with toast...() be sure to set the type attribute of the SessionToast component
@ -132,7 +131,7 @@ export function pushedMissedCall(conversationName: string) {
const openPermissionsSettings = () => { const openPermissionsSettings = () => {
window.inboxStore?.dispatch(showLeftPaneSection(SectionType.Settings)); window.inboxStore?.dispatch(showLeftPaneSection(SectionType.Settings));
window.inboxStore?.dispatch(showSettingsSection(SessionSettingCategory.Permissions)); window.inboxStore?.dispatch(showSettingsSection('permissions'));
}; };
export function pushedMissedCallCauseOfPermission(conversationName: string) { export function pushedMissedCallCauseOfPermission(conversationName: string) {

@ -23,7 +23,7 @@ const logger = createLogger({
logger: directConsole, logger: directConsole,
}); });
export const persistConfig = { const persistConfig = {
key: 'root', key: 'root',
storage, storage,
whitelist: ['userConfig'], whitelist: ['userConfig'],

@ -1,5 +1,6 @@
// TODOLATER move into redux slice // TODO move into redux slice
import { SessionSettingCategory } from '../../components/settings/SessionSettings';
import type { SessionSettingCategory } from '../../types/SessionSettingCategory';
export const FOCUS_SECTION = 'FOCUS_SECTION'; export const FOCUS_SECTION = 'FOCUS_SECTION';
export const FOCUS_SETTINGS_SECTION = 'FOCUS_SETTINGS_SECTION'; export const FOCUS_SETTINGS_SECTION = 'FOCUS_SETTINGS_SECTION';
@ -173,7 +174,7 @@ export const reducer = (
return { return {
...state, ...state,
focusedSection: payload, focusedSection: payload,
focusedSettingsSection: SessionSettingCategory.Privacy, focusedSettingsSection: 'privacy',
}; };
case FOCUS_SETTINGS_SECTION: case FOCUS_SETTINGS_SECTION:
return { return {

@ -1,24 +1,25 @@
import { combineReducers } from '@reduxjs/toolkit'; import { combineReducers } from '@reduxjs/toolkit';
import { callReducer as call, CallStateType } from './ducks/call';
import { reducer as conversations, ConversationsStateType } from './ducks/conversations'; import { callReducer as call, CallStateType } from './ducks/call'; // ok: importing only RingingManager.ts which is not importing anything else
import { defaultRoomReducer as defaultRooms, DefaultRoomsState } from './ducks/defaultRooms'; import { reducer as conversations, ConversationsStateType } from './ducks/conversations'; // todo
import { reducer as primaryColor } from './ducks/primaryColor'; import { defaultRoomReducer as defaultRooms, DefaultRoomsState } from './ducks/defaultRooms'; // todo
import { reducer as primaryColor } from './ducks/primaryColor'; // ok: importing only Constants.tsx which is not importing anything else
import { reducer as search, SearchStateType } from './ducks/search'; import { reducer as search, SearchStateType } from './ducks/search';
import { reducer as section, SectionStateType } from './ducks/section'; import { reducer as section, SectionStateType } from './ducks/section';
import { ReduxSogsRoomInfos, SogsRoomInfoState } from './ducks/sogsRoomInfo'; import { ReduxSogsRoomInfos, SogsRoomInfoState } from './ducks/sogsRoomInfo';
import { reducer as theme } from './ducks/theme'; import { reducer as theme } from './ducks/theme'; // ok: importing only Constants.tsx which is not importing anything else
import { reducer as user, UserStateType } from './ducks/user'; import { reducer as user, UserStateType } from './ducks/user'; // ok: not importing anything else
import { PrimaryColorStateType, ThemeStateType } from '../themes/constants/colors'; import { PrimaryColorStateType, ThemeStateType } from '../themes/constants/colors'; // ok: not importing anything else
import { modalReducer as modals, ModalState } from './ducks/modalDialog'; import { modalReducer as modals, ModalState } from './ducks/modalDialog';
import { defaultOnionReducer as onionPaths, OnionState } from './ducks/onion'; import { defaultOnionReducer as onionPaths, OnionState } from './ducks/onion'; // ok: not importing anything else
import { settingsReducer, SettingsState } from './ducks/settings'; import { settingsReducer, SettingsState } from './ducks/settings';
import { import {
reducer as stagedAttachments, reducer as stagedAttachments,
StagedAttachmentsStateType, StagedAttachmentsStateType,
} from './ducks/stagedAttachments'; } from './ducks/stagedAttachments';
import { userConfigReducer as userConfig, UserConfigState } from './ducks/userConfig'; import { userConfigReducer as userConfig, UserConfigState } from './ducks/userConfig'; // ok: not importing anything else
export type StateType = { export type StateType = {
search: SearchStateType; search: SearchStateType;
@ -37,7 +38,7 @@ export type StateType = {
settings: SettingsState; settings: SettingsState;
}; };
export const reducers = { const reducers = {
search, search,
conversations, conversations,
user, user,

@ -1,8 +1,8 @@
import { createSelector } from '@reduxjs/toolkit'; import { createSelector } from '@reduxjs/toolkit';
import { SessionSettingCategory } from '../../components/settings/SessionSettings';
import { LeftOverlayMode, SectionStateType, SectionType } from '../ducks/section'; import { LeftOverlayMode, SectionStateType, SectionType } from '../ducks/section';
import { StateType } from '../reducer'; import { StateType } from '../reducer';
import type { SessionSettingCategory } from '../../types/SessionSettingCategory';
export const getSection = (state: StateType): SectionStateType => state.section; export const getSection = (state: StateType): SectionStateType => state.section;

@ -0,0 +1,10 @@
export type SessionSettingCategory =
| 'privacy'
| 'notifications'
| 'conversations'
| 'messageRequests'
| 'appearance'
| 'permissions'
| 'help'
| 'recoveryPhrase'
| 'ClearData';
Loading…
Cancel
Save