import React, { useEffect } from 'react'; import { fetchLiveList } from 'Duck/sessions'; import { connect } from 'react-redux'; import { NoContent, Loader, LoadMoreButton } from 'UI'; import { List, Map } from 'immutable'; import SessionItem from 'Shared/SessionItem'; import withPermissions from 'HOCs/withPermissions' import { KEYS } from 'Types/filter/customFilter'; import { applyFilter, addAttribute } from 'Duck/filters'; import { FilterCategory, FilterKey } from 'App/types/filter/filterType'; import { addFilterByKeyAndValue, updateCurrentPage, updateSort } from 'Duck/liveSearch'; import DropdownPlain from 'Shared/DropdownPlain'; import SortOrderButton from 'Shared/SortOrderButton'; import { TimezoneDropdown } from 'UI'; import { capitalize } from 'App/utils'; import LiveSessionReloadButton from 'Shared/LiveSessionReloadButton'; const AUTOREFRESH_INTERVAL = .5 * 60 * 1000 const PER_PAGE = 20; interface Props { loading: Boolean, list: List, fetchLiveList: () => Promise, applyFilter: () => void, filters: any, addAttribute: (obj) => void, addFilterByKeyAndValue: (key: FilterKey, value: string) => void, updateCurrentPage: (page: number) => void, currentPage: number, metaList: any, updateSort: (sort: any) => void, sort: any, } function LiveSessionList(props: Props) { const { loading, filters, list, currentPage, metaList = [], sort } = props; var timeoutId; const hasUserFilter = filters.map(i => i.key).includes(KEYS.USERID); const [sessions, setSessions] = React.useState(list); const sortOptions = metaList.map(i => ({ text: capitalize(i), value: i })).toJS(); const displayedCount = Math.min(currentPage * PER_PAGE, sessions.size); const addPage = () => props.updateCurrentPage(props.currentPage + 1) useEffect(() => { if (filters.size === 0) { props.addFilterByKeyAndValue(FilterKey.USERID, ''); } }, []); useEffect(() => { if (metaList.size === 0 || !!sort.field) return; if ( sortOptions[0]) { props.updateSort({ field: sortOptions[0].value }); } }, [metaList]); useEffect(() => { const filteredSessions = filters.size > 0 ? props.list.filter(session => { let hasValidFilter = true; filters.forEach(filter => { if (!hasValidFilter) return; const _values = filter.value.filter(i => i !== '' && i !== null && i !== undefined).map(i => i.toLowerCase()); if (filter.key === FilterKey.USERID) { const _userId = session.userId ? session.userId.toLowerCase() : ''; hasValidFilter = _values.length > 0 ? (_values.includes(_userId) && hasValidFilter) || _values.some(i => _userId.includes(i)) : hasValidFilter; } if (filter.category === FilterCategory.METADATA) { const _source = session.metadata[filter.key] ? session.metadata[filter.key].toLowerCase() : ''; hasValidFilter = _values.length > 0 ? (_values.includes(_source) && hasValidFilter) || _values.some(i => _source.includes(i)) : hasValidFilter; } }) return hasValidFilter; }) : props.list; setSessions(filteredSessions); }, [filters, list]); useEffect(() => { props.fetchLiveList(); timeout(); return () => { clearTimeout(timeoutId) } }, []) const onUserClick = (userId, userAnonymousId) => { if (userId) { props.addFilterByKeyAndValue(FilterKey.USERID, userId); } else { props.addFilterByKeyAndValue(FilterKey.USERANONYMOUSID, userAnonymousId); } } const onSortChange = (e, { value }) => { props.updateSort({ field: value }); } const timeout = () => { timeoutId = setTimeout(() => { props.fetchLiveList(); timeout(); }, AUTOREFRESH_INTERVAL); } return (

Live Sessions {sessions.size}

Timezone
Sort By
props.updateSort({ order: state })} sortOrder={sort.order} />
See how to {'enable Assist'} and ensure you're using tracker-assist v3.5.0 or higher. } image={} show={ !loading && sessions && sessions.size === 0} > {sessions && sessions.sortBy(i => i.metadata[sort.field]).update(list => { return sort.order === 'desc' ? list.reverse() : list; }).take(displayedCount).map(session => ( ))}
) } export default withPermissions(['ASSIST_LIVE'])(connect( (state) => ({ list: state.getIn(['sessions', 'liveSessions']), loading: state.getIn([ 'sessions', 'loading' ]), filters: state.getIn([ 'liveSearch', 'instance', 'filters' ]), currentPage: state.getIn(["liveSearch", "currentPage"]), metaList: state.getIn(['customFields', 'list']).map(i => i.key), sort: state.getIn(['liveSearch', 'sort']), }), { fetchLiveList, applyFilter, addAttribute, addFilterByKeyAndValue, updateCurrentPage, updateSort, } )(LiveSessionList));