import React from 'react'; import { useStore } from 'App/mstore'; import { BackLink } from 'UI'; import { observer } from 'mobx-react-lite'; import { connect } from 'react-redux'; import { fetchSessions, customSetSessions } from 'Duck/liveSearch'; import { useHistory, useParams } from 'react-router-dom'; import { liveSession, assist, withSiteId, multiview } from 'App/routes'; import AssistSessionsModal from 'App/components/Session_/Player/Controls/AssistSessionsModal'; import { useModal } from 'App/components/Modal'; import LivePlayer from 'App/components/Session/LivePlayer'; import EmptyTile from './EmptyTile' import SessionTileFooter from './SessionTileFooter' function Multiview({ total, fetchSessions, siteId, assistCredendials, customSetSessions, }: { total: number; customSetSessions: (data: any) => void; fetchSessions: (filter: any) => void; siteId: string; assistCredendials: any; list: Record[]; }) { const { showModal, hideModal } = useModal(); const { assistMultiviewStore } = useStore(); const history = useHistory(); // @ts-ignore const { sessionsquery } = useParams(); const onSessionsChange = (sessions: Record[]) => { const sessionIdQuery = encodeURIComponent(sessions.map((s) => s.sessionId).join(',')); return history.replace(withSiteId(multiview(sessionIdQuery), siteId)); }; React.useEffect(() => { assistMultiviewStore.setOnChange(onSessionsChange); if (sessionsquery) { const sessionIds = decodeURIComponent(sessionsquery).split(','); // preset assistMultiviewStore.presetSessions(sessionIds).then((data) => { customSetSessions(data); }); } else { fetchSessions({}); } }, []); const openLiveSession = (e: React.MouseEvent, sessionId: string) => { e.stopPropagation(); assistMultiviewStore.setActiveSession(sessionId); history.push(withSiteId(liveSession(sessionId)+'?multi=true', siteId)); }; const returnToList = () => { assistMultiviewStore.reset() history.push(withSiteId(assist(), siteId)); }; const openListModal = () => { showModal(, { right: true, width: 700 }); }; const replaceSession = (e: React.MouseEvent, sessionId: string) => { e.stopPropagation(); showModal(, { right: true, width: 700 }); }; const deleteSession = (e: React.MouseEvent, sessionId: string) => { e.stopPropagation(); assistMultiviewStore.removeSession(sessionId); }; const emptySpace = 4 - assistMultiviewStore.sessions.length; const placeholder = emptySpace > 0 ? new Array(emptySpace).fill(0) : [] return (
{/* @ts-ignore */}
{`Watching ${assistMultiviewStore.sessions.length} of ${total} Live Sessions`}
{assistMultiviewStore.sortedSessions.map((session: Record) => (
openLiveSession(e, session.sessionId)} className="w-full h-full"> {session.agentToken ? ( ) : (
Loading session
)}
))} {placeholder.map((_, i) => ( ))}
); } export default connect( (state: any) => ({ total: state.getIn(['liveSearch', 'total']), siteId: state.getIn(['site', 'siteId']), }), { fetchSessions, customSetSessions, } )(observer(Multiview));