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: