Skip to content

Commit

Permalink
Refactor FilterProvider to use usePageFilter internally
Browse files Browse the repository at this point in the history
At the end FilterProvider should be replaced with usePageFilter
completely.
  • Loading branch information
bjoernricks committed Jun 7, 2024
1 parent 2ee883c commit 3786b01
Showing 1 changed file with 6 additions and 113 deletions.
119 changes: 6 additions & 113 deletions src/web/entities/filterprovider.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

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,
Expand All @@ -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 (
<React.Fragment>
{showChildren ? children({filter: returnedFilter}) : <Loading />}
{isLoadingFilter ? <Loading /> : children({filter: returnedFilter})}
</React.Fragment>
);
};
Expand All @@ -156,5 +51,3 @@ FilterProvider.propTypes = {
};

export default FilterProvider;

// vim: set ts=2 sw=2 tw=80:

0 comments on commit 3786b01

Please sign in to comment.