openreplay/frontend/app/hooks/useSessionSearchQueryHandler.ts
Delirium 309a9fd970
feat: tag and watch (UI/Tracker) (#1822)
* feat(ui/tracker): start tag n watch

* fix(tracker): test coverage, fix some watcher api

* fix(tracker): add intersectionobserver, adjust tests

* feat(tracker): relay + apollo plugins

* feat(ui): tags search

* feat(ui): tags name edit

* feat(ui): tags search icon

* feat(ui): icons for tabs in player

* feat(ui): save and find button

* feat(tracker): save tags in session storage (just in case)

* feat(ui): improve loading

* feat(ui): fix icon names gen

* feat(ui): fix typo
2024-01-19 11:11:27 +01:00

46 lines
1.2 KiB
TypeScript

import { useEffect, useState } from 'react';
import { useHistory } from 'react-router';
import { createUrlQuery, getFiltersFromQuery } from 'App/utils/search';
interface Props {
onBeforeLoad?: () => Promise<any>;
appliedFilter: any;
applyFilter: any;
loading: boolean;
}
const useSessionSearchQueryHandler = (props: Props) => {
const [beforeHookLoaded, setBeforeHookLoaded] = useState(!props.onBeforeLoad);
const { appliedFilter, applyFilter, loading } = props;
const history = useHistory();
useEffect(() => {
const applyFilterFromQuery = async () => {
if (!loading) {
if (props.onBeforeLoad) {
await props.onBeforeLoad();
setBeforeHookLoaded(true);
}
const filter = getFiltersFromQuery(history.location.search, appliedFilter);
applyFilter(filter, true, false);
}
};
void applyFilterFromQuery();
}, [loading]);
useEffect(() => {
const generateUrlQuery = () => {
if (!loading && beforeHookLoaded) {
const search: any = createUrlQuery(appliedFilter);
history.replace({ search });
}
};
generateUrlQuery();
}, [appliedFilter, loading, beforeHookLoaded]);
return null;
};
export default useSessionSearchQueryHandler;