diff --git a/src/web/entities/filterprovider.jsx b/src/web/entities/filterprovider.jsx index bebae70ff0..d6186839e7 100644 --- a/src/web/entities/filterprovider.jsx +++ b/src/web/entities/filterprovider.jsx @@ -16,30 +16,12 @@ * along with this program. If not, see . */ -import React, {useEffect, useState} from 'react'; - -import {useSelector, useDispatch, shallowEqual} from 'react-redux'; - -import {ROWS_PER_PAGE_SETTING_ID} from 'gmp/commands/users'; - -import Filter, { - DEFAULT_FALLBACK_FILTER, - DEFAULT_ROWS_PER_PAGE, -} from 'gmp/models/filter'; - -import {isDefined} from 'gmp/utils/identity'; +import React from 'react'; import Loading from 'web/components/loading/loading'; -import getPage from 'web/store/pages/selectors'; -import {pageFilter as setPageFilter} from 'web/store/pages/actions'; -import {loadUserSettingDefault} from 'web/store/usersettings/defaults/actions'; -import {getUserSettingsDefaults} from 'web/store/usersettings/defaults/selectors'; -import {loadUserSettingsDefaultFilter} from 'web/store/usersettings/defaultfilters/actions'; -import {getUserSettingsDefaultFilter} from 'web/store/usersettings/defaultfilters/selectors'; - import PropTypes from 'web/utils/proptypes'; -import useGmp from 'web/utils/useGmp'; +import usePageFilter from 'web/hooks/usePageFilter'; const FilterProvider = ({ children, @@ -48,100 +30,13 @@ const FilterProvider = ({ pageName = gmpname, locationQuery = {}, }) => { - const gmp = useGmp(); - const dispatch = useDispatch(); - - let returnedFilter; - - const defaultSettingFilter = useSelector(state => { - const defaultFilterSel = getUserSettingsDefaultFilter(state, gmpname); - return defaultFilterSel.getFilter(); - }); - - const defaultSettingsFilterError = useSelector(state => { - const defaultFilterSel = getUserSettingsDefaultFilter(state, gmpname); - return defaultFilterSel.getError(); + const [returnedFilter, isLoadingFilter] = usePageFilter(pageName, { + fallbackFilter, + locationQueryFilterString: locationQuery?.filter, }); - - useEffect(() => { - if ( - !isDefined(defaultSettingFilter) && - !isDefined(defaultSettingsFilterError) - ) { - dispatch(loadUserSettingsDefaultFilter(gmp)(gmpname)); - } - }, [ - defaultSettingFilter, - defaultSettingsFilterError, - dispatch, - gmp, - gmpname, - ]); - - let [rowsPerPage, rowsPerPageError] = useSelector(state => { - const userSettingDefaultSel = getUserSettingsDefaults(state); - return [ - userSettingDefaultSel.getValueByName('rowsperpage'), - userSettingDefaultSel.getError(), - ]; - }, shallowEqual); - - useEffect(() => { - if (!isDefined(rowsPerPage)) { - dispatch(loadUserSettingDefault(gmp)(ROWS_PER_PAGE_SETTING_ID)); - } - }, [returnedFilter, rowsPerPage, gmp, dispatch]); - - const [locationQueryFilter, setLocationQueryFilter] = useState( - isDefined(locationQuery.filter) - ? Filter.fromString(locationQuery.filter) - : undefined, - ); - - useEffect(() => { - if (isDefined(locationQuery.filter)) { - dispatch( - setPageFilter(pageName, Filter.fromString(locationQuery.filter)), - ); - } - setLocationQueryFilter(undefined); - }, []); // eslint-disable-line react-hooks/exhaustive-deps - - const pageFilter = useSelector(state => getPage(state).getFilter(pageName)); - - if (isDefined(locationQueryFilter)) { - returnedFilter = locationQueryFilter; - } else if (isDefined(pageFilter)) { - returnedFilter = pageFilter; - } else if ( - isDefined(defaultSettingFilter) && - !isDefined(defaultSettingsFilterError) && - defaultSettingFilter !== null - ) { - returnedFilter = defaultSettingFilter; - } else if (isDefined(fallbackFilter)) { - returnedFilter = fallbackFilter; - } else { - returnedFilter = DEFAULT_FALLBACK_FILTER; - } - - if (!isDefined(rowsPerPage) && isDefined(rowsPerPageError)) { - rowsPerPage = DEFAULT_ROWS_PER_PAGE; - } - - if (!returnedFilter.has('rows') && isDefined(rowsPerPage)) { - returnedFilter = returnedFilter.copy().set('rows', rowsPerPage); - } - - const showChildren = - isDefined(returnedFilter) && - (isDefined(defaultSettingFilter) || - isDefined(defaultSettingsFilterError)) && - isDefined(rowsPerPage); - return ( - {showChildren ? children({filter: returnedFilter}) : } + {isLoadingFilter ? : children({filter: returnedFilter})} ); }; @@ -156,5 +51,3 @@ FilterProvider.propTypes = { }; export default FilterProvider; - -// vim: set ts=2 sw=2 tw=80: