import React, { useEffect, useState } from 'react'; import { Loader, Icon } from 'UI'; import { connect } from 'react-redux'; import { fetchInsights } from 'Duck/sessions'; import SelectorsList from './components/SelectorsList/SelectorsList'; import { PlayerContext } from 'App/components/Session/playerContext'; import { compareJsonObjects } from 'App/utils'; import Select from 'Shared/Select'; import SelectDateRange from 'Shared/SelectDateRange'; import Period from 'Types/app/period'; const JUMP_OFFSET = 1000; interface Props { filters: any; fetchInsights: (filters: Record) => void; insights: any; events: Array; urlOptions: Array; loading: boolean; host: string; setActiveTab: (tab: string) => void; } function PageInsightsPanel({ filters, fetchInsights, events = [], insights, urlOptions, host, loading = true, setActiveTab }: Props) { const { player: Player } = React.useContext(PlayerContext) const markTargets = (t: any) => Player.markTargets(t) const defaultValue = urlOptions && urlOptions[0] ? urlOptions[0].value : ''; const [insightsFilters, setInsightsFilters] = useState({ ...filters, url: host + defaultValue }); const prevInsights = React.useRef(); const period = Period({ start: insightsFilters.startDate, end: insightsFilters.endDate, rangeName: insightsFilters.rangeValue, }); const onDateChange = (e: any) => { const { startDate, endDate, rangeValue } = e.toJSON(); setInsightsFilters({ ...insightsFilters, startDate, endDate, rangeValue }); }; useEffect(() => { markTargets(insights.toJS()); return () => { markTargets(null); }; }, [insights]); useEffect(() => { const changed = !compareJsonObjects(prevInsights.current, insightsFilters); if (!changed) { return } if (urlOptions && urlOptions[0]) { const url = insightsFilters.url ? insightsFilters.url : host + urlOptions[0].value; Player.pause(); fetchInsights({ ...insightsFilters, url }); markTargets([]); } prevInsights.current = insightsFilters; }, [insightsFilters]); const onPageSelect = ({ value }: any) => { const event = events.find((item) => item.url === value.value); Player.jump(event.time + JUMP_OFFSET); setInsightsFilters({ ...insightsFilters, url: host + value.value }); }; return (
Clicks
{ setActiveTab(''); }} className="ml-auto flex items-center justify-center bg-white cursor-pointer" >
In Page