import React, { FC, memo, useCallback } from '../../../../lib/teact/teact'; import { ApiChatFolder } from '../../../../api/types'; import { SettingsScreens } from '../../../../types'; import { FolderEditDispatch, FoldersState } from '../../../../hooks/reducers/useFoldersReducer'; import SettingsFoldersMain from './SettingsFoldersMain'; import SettingsFoldersEdit from './SettingsFoldersEdit'; import SettingsFoldersChatFilters from './SettingsFoldersChatFilters'; import './SettingsFolders.scss'; const TRANSITION_DURATION = 200; export type OwnProps = { currentScreen: SettingsScreens; shownScreen: SettingsScreens; state: FoldersState; dispatch: FolderEditDispatch; isActive?: boolean; onScreenSelect: (screen: SettingsScreens) => void; onReset: () => void; }; const SettingsFolders: FC = ({ currentScreen, shownScreen, state, dispatch, isActive, onScreenSelect, onReset, }) => { const handleReset = useCallback(() => { if ( currentScreen === SettingsScreens.FoldersCreateFolder || currentScreen === SettingsScreens.FoldersEditFolder || currentScreen === SettingsScreens.FoldersEditFolderFromChatList ) { setTimeout(() => { dispatch({ type: 'reset' }); }, TRANSITION_DURATION); } if ( currentScreen === SettingsScreens.FoldersIncludedChats || currentScreen === SettingsScreens.FoldersExcludedChats ) { if (state.mode === 'create') { onScreenSelect(SettingsScreens.FoldersCreateFolder); } else { onScreenSelect(SettingsScreens.FoldersEditFolder); } return; } onReset(); }, [ state.mode, dispatch, currentScreen, onReset, onScreenSelect, ]); const handleCreateFolder = useCallback(() => { dispatch({ type: 'reset' }); onScreenSelect(SettingsScreens.FoldersCreateFolder); }, [onScreenSelect, dispatch]); const handleEditFolder = useCallback((folder: ApiChatFolder) => { dispatch({ type: 'editFolder', payload: folder }); onScreenSelect(SettingsScreens.FoldersEditFolder); }, [dispatch, onScreenSelect]); const handleAddIncludedChats = useCallback(() => { dispatch({ type: 'editIncludeFilters' }); onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList ? SettingsScreens.FoldersIncludedChatsFromChatList : SettingsScreens.FoldersIncludedChats); }, [currentScreen, dispatch, onScreenSelect]); const handleAddExcludedChats = useCallback(() => { dispatch({ type: 'editExcludeFilters' }); onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList ? SettingsScreens.FoldersExcludedChatsFromChatList : SettingsScreens.FoldersExcludedChats); }, [currentScreen, dispatch, onScreenSelect]); switch (currentScreen) { case SettingsScreens.Folders: return ( ); case SettingsScreens.FoldersCreateFolder: case SettingsScreens.FoldersEditFolder: case SettingsScreens.FoldersEditFolderFromChatList: return ( ); case SettingsScreens.FoldersIncludedChats: case SettingsScreens.FoldersIncludedChatsFromChatList: return ( ); case SettingsScreens.FoldersExcludedChats: case SettingsScreens.FoldersExcludedChatsFromChatList: return ( ); default: return undefined; } }; export default memo(SettingsFolders);