import React, { useEffect } from 'react'; import { NoContent, Loader, Pagination, Button } from 'UI'; import SessionItem from 'Shared/SessionItem'; import withPermissions from 'HOCs/withPermissions'; import { KEYS } from 'Types/filter/customFilter'; import { FilterKey } from 'App/types/filter/filterType'; import Select from 'Shared/Select'; import SortOrderButton from 'Shared/SortOrderButton'; import { capitalize } from 'App/utils'; import LiveSessionReloadButton from 'Shared/LiveSessionReloadButton'; import cn from 'classnames'; import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; import { numberWithCommas } from 'App/utils'; import { useStore } from 'App/mstore'; import { observer } from 'mobx-react-lite'; const AUTOREFRESH_INTERVAL = 2 * 60 * 1000; const PER_PAGE = 10; function LiveSessionList() { const { searchStoreLive, sessionStore, customFieldStore } = useStore(); const filter = searchStoreLive.instance; const list = sessionStore.liveSessions; const totalLiveSessions = sessionStore.totalLiveSessions; const loading = sessionStore.loadingLiveSessions; const { currentPage } = searchStoreLive; const metaList = customFieldStore.list; const metaListLoading = customFieldStore.isLoading; let timeoutId: any; const { filters } = filter; const hasUserFilter = filters.map((i: any) => i.key).includes(KEYS.USERID); const sortOptions = [{ label: 'Start Time', value: 'timestamp' }, { label: 'Duration', value: 'duration' }].concat( metaList .map(({ key }: any) => ({ label: capitalize(key), value: key })) ); useEffect(() => { if (metaListLoading) return; const _filter = { ...filter }; let shouldUpdate = false; // Set default sort if not already set if (sortOptions[1] && !filter.sort) { _filter.sort = sortOptions[1].value; shouldUpdate = true; } // Only update filters if there's a change if (shouldUpdate) { searchStoreLive.edit(_filter); } // Start auto-refresh timeout timeout(); // Cleanup on component unmount or re-run return () => { clearTimeout(timeoutId); }; }, [metaListLoading, filter.sort]); // Add necessary dependencies const refetch = () => { void searchStoreLive.fetchSessions(); }; const onUserClick = (userId: string, userAnonymousId: string) => { if (userId) { searchStoreLive.addFilterByKeyAndValue(FilterKey.USERID, userId); } else { searchStoreLive.addFilterByKeyAndValue(FilterKey.USERANONYMOUSID, userAnonymousId); } }; const onSortChange = ({ value }: any) => { searchStoreLive.edit({ sort: value.value }); }; const timeout = () => { timeoutId = setTimeout(() => { refetch(); timeout(); }, AUTOREFRESH_INTERVAL); }; return (

Co-Browse

Sort By