import React, { useEffect, useState } from 'react'; import { SlideModal, NoContent, Dropdown, Icon, TimezoneDropdown, Loader } from 'UI'; import SessionItem from 'Shared/SessionItem'; import stl from './SessionListModal.module.css'; import { connect } from 'react-redux'; import { fetchSessionList, setActiveWidget } from 'Duck/customMetrics'; import { DateTime } from 'luxon'; import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; interface Props { loading: boolean; list: any; fetchSessionList: (params) => void; activeWidget: any; setActiveWidget: (widget) => void; } function SessionListModal(props: Props) { const { activeWidget, loading, list } = props; const [seriesOptions, setSeriesOptions] = useState([ { text: 'All', value: 'all' }, ]); const [activeSeries, setActiveSeries] = useState('all'); useEffect(() => { if (!activeWidget || !activeWidget.widget) return; props.fetchSessionList({ metricId: activeWidget.widget.metricId, startDate: activeWidget.startTimestamp, endDate: activeWidget.endTimestamp, filters: activeWidget.filters || [], }); }, [activeWidget]); useEffect(() => { if (!list) return; const seriesOptions = list.map(item => ({ text: item.seriesName, value: item.seriesId, })); setSeriesOptions([ { text: 'All', value: 'all' }, ...seriesOptions, ]); }, [list]); const getListSessionsBySeries = (seriesId) => { const arr: any = [] list.forEach(element => { if (seriesId === 'all') { const sessionIds = arr.map(i => i.sessionId); arr.push(...element.sessions.filter(i => !sessionIds.includes(i.sessionId))); } else { if (element.seriesId === seriesId) { arr.push(...element.sessions) } } }); return arr; } const writeOption = (e, { name, value }) => setActiveSeries(value); const filteredSessions = getListSessionsBySeries(activeSeries); const startTime = DateTime.fromMillis(activeWidget.startTimestamp).toFormat('LLL dd, yyyy HH:mm a'); const endTime = DateTime.fromMillis(activeWidget.endTimestamp).toFormat('LLL dd, yyyy HH:mm a'); return (
{ activeWidget.widget.name }
)} isDisplayed={ !!activeWidget } onClose={ () => props.setActiveWidget(null)} content={ activeWidget && (
Showing all sessions between {startTime} and {endTime}
Timezone
{ activeWidget.widget.metricType !== 'table' && (
Series } />
)} {/* Series */}
No recordings found!
} // animatedIcon="no-results" > { filteredSessions.map(session => ) } )} /> ); } export default connect(state => ({ loading: state.getIn(['customMetrics', 'fetchSessionList', 'loading']), list: state.getIn(['customMetrics', 'sessionList']), // activeWidget: state.getIn(['customMetrics', 'activeWidget']), }), { fetchSessionList, setActiveWidget })(SessionListModal);