import React, { useEffect } from 'react'; import FilterList from 'Shared/Filters/FilterList'; import FilterSelection from 'Shared/Filters/FilterSelection'; import SaveFilterButton from 'Shared/SaveFilterButton'; import { connect } from 'react-redux'; import { Button } from 'UI'; import { edit, addFilter, fetchSessions, updateFilter } from 'Duck/search'; import { debounce } from 'App/utils'; import useSessionSearchQueryHandler from 'App/hooks/useSessionSearchQueryHandler'; let debounceFetch: any = () => {} interface Props { appliedFilter: any; edit: typeof edit; addFilter: typeof addFilter; saveRequestPayloads: boolean; metaLoading?: boolean fetchSessions: typeof fetchSessions; updateFilter: typeof updateFilter; } function SessionSearch(props: Props) { const { appliedFilter, saveRequestPayloads = false, metaLoading } = props; const hasEvents = appliedFilter.filters.filter((i: any) => i.isEvent).size > 0; const hasFilters = appliedFilter.filters.filter((i: any) => !i.isEvent).size > 0; useSessionSearchQueryHandler({ appliedFilter, applyFilter: props.updateFilter }); useEffect(() => { debounceFetch = debounce(() => props.fetchSessions(), 500); }, []) const onAddFilter = (filter: any) => { props.addFilter(filter); }; const onUpdateFilter = (filterIndex: any, filter: any) => { const newFilters = appliedFilter.filters.map((_filter: any, i: any) => { if (i === filterIndex) { return filter; } else { return _filter; } }); props.updateFilter({ ...appliedFilter, filters: newFilters, }); debounceFetch() }; const onRemoveFilter = (filterIndex: any) => { const newFilters = appliedFilter.filters.filter((_filter: any, i: any) => { return i !== filterIndex; }); props.updateFilter({ filters: newFilters, }); debounceFetch() }; const onChangeEventsOrder = (e: any, { value }: any) => { props.updateFilter({ eventsOrder: value, }); debounceFetch() }; return !metaLoading && ( <> {hasEvents || hasFilters ? (