Fix list hook state

This commit is contained in:
Infinite
2020-02-17 08:28:55 +01:00
parent 151d69632e
commit 6f07380628

View File

@@ -96,19 +96,19 @@ const useList = <QueryResult extends IQueryResult, QueryData extends IDataItem>(
const totalCount = options.getCount(result); const totalCount = options.getCount(result);
const items = options.getData(result); const items = options.getData(result);
const updateInterfaceConfig = useCallback((filter: ListFilterModel) => { const updateInterfaceConfig = useCallback((updatedFilter: ListFilterModel) => {
setInterfaceState(config => { setInterfaceState(config => {
const data = { ...config } as IInterfaceConfig; const data = { ...config } as IInterfaceConfig;
data.queries = { data.queries = {
[options.filterMode]: { [options.filterMode]: {
filter: filter.makeQueryParameters(), filter: updatedFilter.makeQueryParameters(),
itemsPerPage: filter.itemsPerPage, itemsPerPage: updatedFilter.itemsPerPage,
currentPage: filter.currentPage currentPage: updatedFilter.currentPage
} }
}; };
return data; return data;
}); });
}, [location.search, options.filterMode, setInterfaceState]); }, [options.filterMode, setInterfaceState]);
useEffect(() => { useEffect(() => {
if(interfaceState.loading) if(interfaceState.loading)
@@ -122,9 +122,9 @@ const useList = <QueryResult extends IQueryResult, QueryData extends IDataItem>(
const storedQuery = interfaceState.data?.queries?.[options.filterMode]; const storedQuery = interfaceState.data?.queries?.[options.filterMode];
if (!storedQuery) return; if (!storedQuery) return;
const queryFilter = queryString.parse(location.search); const queryFilter = queryString.parse(history.location.search);
const storedFilter = queryString.parse(storedQuery.filter); const storedFilter = queryString.parse(storedQuery.filter);
const query = location.search ? { const query = history.location.search ? {
sortby: storedFilter.sortby, sortby: storedFilter.sortby,
sortdir: storedFilter.sortdir, sortdir: storedFilter.sortdir,
disp: storedFilter.disp, disp: storedFilter.disp,
@@ -139,12 +139,14 @@ const useList = <QueryResult extends IQueryResult, QueryData extends IDataItem>(
// Compare constructed filter with current filter. // Compare constructed filter with current filter.
// If different it's the result of navigation, and we update the filter. // If different it's the result of navigation, and we update the filter.
const newLocation = { ...location }; const newLocation = { ...history.location };
newLocation.search = newFilter.makeQueryParameters(); newLocation.search = newFilter.makeQueryParameters();
if(newLocation.search !== filter.makeQueryParameters()) { if(newLocation.search !== filter.makeQueryParameters()) {
setFilter(newFilter); setFilter(newFilter);
updateInterfaceConfig(newFilter); updateInterfaceConfig(newFilter);
const newLocation = { ...location }; }
// If constructed search is different from current, update it as well
if(newLocation.search !== location.search) {
newLocation.search = newFilter.makeQueryParameters(); newLocation.search = newFilter.makeQueryParameters();
history.replace(newLocation); history.replace(newLocation);
} }
@@ -152,26 +154,14 @@ const useList = <QueryResult extends IQueryResult, QueryData extends IDataItem>(
filter, filter,
interfaceState.data, interfaceState.data,
interfaceState.loading, interfaceState.loading,
location, history,
location.search,
options.subComponent, options.subComponent,
options.filterMode, options.filterMode,
forageInitialised, forageInitialised,
updateInterfaceConfig updateInterfaceConfig
]); ]);
/*
useEffect(() => {
if (options.subComponent || !forageInitialised) return;
const newFilter = new ListFilterModel(
options.filterMode,
options.subComponent ? undefined : queryString.parse(location.search)
);
setFilter(newFilter);
}, [location, options.filterMode, options.subComponent, setInterfaceState, forageInitialised]);
*/
function getFilter() { function getFilter() {
if (!options.filterHook) { if (!options.filterHook) {
return filter; return filter;