import React, { memo, useMemo, useRef, } from '../../../lib/teact/teact'; import { getActions, getGlobal, withGlobal } from '../../../global'; import type { ApiUser } from '../../../api/types'; import type { WebApp } from '../../../global/types'; import { selectTabState, selectUser } from '../../../global/selectors'; import buildClassName from '../../../util/buildClassName'; import { unique } from '../../../util/iteratees'; import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; import AvatarList from '../../common/AvatarList'; import Icon from '../../common/icons/Icon'; import Button from '../../ui/Button'; import styles from './MinimizedWebAppModal.module.scss'; type StateProps = { activeTabBot?: ApiUser; isMinimizedState?: boolean; openedWebApps?: Record; }; const MinimizedWebAppModal = ({ activeTabBot, isMinimizedState, openedWebApps, }: StateProps) => { const { changeWebAppModalState, closeWebAppModal, } = getActions(); const oldLang = useOldLang(); const lang = useLang(); // eslint-disable-next-line no-null/no-null const ref = useRef(null); const openedWebAppsValues = useMemo(() => { return openedWebApps && Object.values(openedWebApps); }, [openedWebApps]); const openedTabsCount = openedWebAppsValues?.length; const peers = useMemo(() => { if (!openedTabsCount) return []; const global = getGlobal(); const activeTabBotId = activeTabBot?.id; const openedApps = unique([activeTabBotId, ...openedWebAppsValues.map((app) => app.botId)]); const bots = openedApps.map((id) => id && selectUser(global, id)).filter(Boolean).slice(0, 3); return bots; }, [openedTabsCount, activeTabBot, openedWebAppsValues]); const handleCloseClick = useLastCallback(() => { closeWebAppModal(); }); const handleExpandClick = useLastCallback(() => { changeWebAppModalState({ state: 'maximized' }); }); if (!isMinimizedState) return undefined; function renderTitle() { const activeTabName = peers.length > 0 && peers[0]?.firstName; const title = openedTabsCount && activeTabName && openedTabsCount > 1 ? `${lang('MiniAppsMoreTabs', { botName: activeTabName, count: openedTabsCount - 1, }, { pluralValue: openedTabsCount - 1, })}` : activeTabName; return (
{title}
); } return (
{renderTitle()}
); }; export default memo(withGlobal( (global): StateProps => { const tabState = selectTabState(global); const webApps = tabState.webApps; const { botId } = webApps?.activeWebApp || {}; const { modalState, openedWebApps } = webApps || {}; const isMinimizedState = modalState === 'minimized'; const activeTabBot = botId ? selectUser(global, botId) : undefined; return { activeTabBot, isMinimizedState, openedWebApps, }; }, )(MinimizedWebAppModal));