* 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
46 lines
1.2 KiB
TypeScript
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;
|