import type { FC } from '../../../../lib/teact/teact'; import React, { memo, useMemo, useCallback, useEffect, } from '../../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../../global'; import type { ApiChatFolder } from '../../../../api/types'; import { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config'; import { LOCAL_TGS_URLS } from '../../../common/helpers/animatedAssets'; import { throttle } from '../../../../util/schedulers'; import { getFolderDescriptionText } from '../../../../global/helpers'; import useLang from '../../../../hooks/useLang'; import useHistoryBack from '../../../../hooks/useHistoryBack'; import { useFolderManagerForChatsCount } from '../../../../hooks/useFolderManager'; import ListItem from '../../../ui/ListItem'; import Button from '../../../ui/Button'; import Loading from '../../../ui/Loading'; import AnimatedIcon from '../../../common/AnimatedIcon'; type OwnProps = { isActive?: boolean; onCreateFolder: () => void; onEditFolder: (folder: ApiChatFolder) => void; onReset: () => void; }; type StateProps = { orderedFolderIds?: number[]; foldersById: Record; recommendedChatFolders?: ApiChatFolder[]; }; const runThrottledForLoadRecommended = throttle((cb) => cb(), 60000, true); const MAX_ALLOWED_FOLDERS = 10; const SettingsFoldersMain: FC = ({ isActive, onCreateFolder, onEditFolder, onReset, orderedFolderIds, foldersById, recommendedChatFolders, }) => { const { loadRecommendedChatFolders, addChatFolder, showDialog, } = getActions(); // Due to the parent Transition, this component never gets unmounted, // that's why we use throttled API call on every update. useEffect(() => { runThrottledForLoadRecommended(() => { loadRecommendedChatFolders(); }); }, [loadRecommendedChatFolders]); const handleCreateFolder = useCallback(() => { if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) { showDialog({ data: { message: 'DIALOG_FILTERS_TOO_MUCH', hasErrorKey: true, }, }); return; } onCreateFolder(); }, [foldersById, showDialog, onCreateFolder]); const lang = useLang(); useHistoryBack({ isActive, onBack: onReset, }); const chatsCountByFolderId = useFolderManagerForChatsCount(); const userFolders = useMemo(() => { if (!orderedFolderIds) { return undefined; } return orderedFolderIds.map((id) => { const folder = foldersById[id]; return { id: folder.id, title: folder.title, subtitle: getFolderDescriptionText(lang, folder, chatsCountByFolderId[folder.id]), }; }); }, [orderedFolderIds, foldersById, lang, chatsCountByFolderId]); const handleCreateFolderFromRecommended = useCallback((folder: ApiChatFolder) => { if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) { showDialog({ data: { message: 'DIALOG_FILTERS_TOO_MUCH', hasErrorKey: true, }, }); return; } addChatFolder({ folder }); }, [foldersById, addChatFolder, showDialog]); return (

{lang('CreateNewFilterInfo')}

{lang('Filters')}

{userFolders?.length ? userFolders.map((folder) => ( onEditFolder(foldersById[folder.id])} > {folder.title} {folder.subtitle} )) : userFolders && !userFolders.length ? (

You have no folders yet.

) : }
{(recommendedChatFolders && Boolean(recommendedChatFolders.length)) && (

{lang('FilterRecommended')}

{recommendedChatFolders.map((folder) => ( handleCreateFolderFromRecommended(folder)} >
{folder.title} {folder.description}
))}
)}
); }; export default memo(withGlobal( (global): StateProps => { const { orderedIds: orderedFolderIds, byId: foldersById, recommended: recommendedChatFolders, } = global.chatFolders; return { orderedFolderIds, foldersById, recommendedChatFolders, }; }, )(SettingsFoldersMain));