mirror of
https://github.com/strapi/strapi.git
synced 2025-11-10 23:29:33 +00:00
refetch on filter delete
Signed-off-by: Ky <virginie.ky@gmail.com>
This commit is contained in:
parent
8b0f4bb994
commit
41987c5c79
@ -1,5 +1,5 @@
|
|||||||
import React, { useReducer, useState, useEffect, useRef } from 'react';
|
import React, { useReducer, useState, useEffect } from 'react';
|
||||||
import { isEqual, includes, toString } from 'lodash';
|
import { includes, toString } from 'lodash';
|
||||||
import { useHistory, useLocation } from 'react-router-dom';
|
import { useHistory, useLocation } from 'react-router-dom';
|
||||||
import { Header } from '@buffetjs/custom';
|
import { Header } from '@buffetjs/custom';
|
||||||
import { useDebounce, useIsMounted } from '@buffetjs/hooks';
|
import { useDebounce, useIsMounted } from '@buffetjs/hooks';
|
||||||
@ -21,6 +21,7 @@ import {
|
|||||||
generatePageFromStart,
|
generatePageFromStart,
|
||||||
generateStartFromPage,
|
generateStartFromPage,
|
||||||
} from '../../utils';
|
} from '../../utils';
|
||||||
|
import useDeepCompareMemoize from '../../hooks/useDeepCompareMemoize';
|
||||||
import Container from '../../components/Container';
|
import Container from '../../components/Container';
|
||||||
import ControlsWrapper from '../../components/ControlsWrapper';
|
import ControlsWrapper from '../../components/ControlsWrapper';
|
||||||
import Padded from '../../components/Padded';
|
import Padded from '../../components/Padded';
|
||||||
@ -55,6 +56,7 @@ const HomePage = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
handleChangeParams({ target: { name: '_q', value: searchValue } });
|
handleChangeParams({ target: { name: '_q', value: searchValue } });
|
||||||
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [debouncedSearch]);
|
}, [debouncedSearch]);
|
||||||
|
|
||||||
@ -65,20 +67,14 @@ const HomePage = () => {
|
|||||||
type: 'SET_PARAMS',
|
type: 'SET_PARAMS',
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const useDeepCompareMemoize = value => {
|
|
||||||
const ref = useRef();
|
|
||||||
|
|
||||||
if (!isEqual(value, ref.current)) {
|
|
||||||
ref.current = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ref.current;
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchListData();
|
fetchListData();
|
||||||
|
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [useDeepCompareMemoize(searchParams)]);
|
}, [useDeepCompareMemoize(searchParams)]);
|
||||||
|
|
||||||
const deleteMedia = async id => {
|
const deleteMedia = async id => {
|
||||||
@ -186,24 +182,28 @@ const HomePage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleChangeParams = ({ target: { name, value } }) => {
|
const handleChangeParams = ({ target: { name, value } }) => {
|
||||||
let updatedQueryParams;
|
let updatedQueryParams = generateNewSearch({ [name]: value });
|
||||||
|
let paramsValue = value;
|
||||||
|
|
||||||
if (name === 'filters') {
|
if (name === 'filters') {
|
||||||
const filters = [...generateFiltersFromSearch(search), value];
|
const filters = [...generateFiltersFromSearch(search), value];
|
||||||
|
|
||||||
updatedQueryParams = generateNewSearch({ [name]: filters });
|
updatedQueryParams = generateNewSearch({ [name]: filters });
|
||||||
} else {
|
paramsValue = filters;
|
||||||
updatedQueryParams = generateNewSearch({ [name]: value });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const newSearch = generateSearchFromFilters(updatedQueryParams);
|
if (name === '_limit') {
|
||||||
|
updatedQueryParams = generateNewSearch({ [name]: value, _start: 0 });
|
||||||
|
}
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: 'SET_PARAM',
|
type: 'SET_PARAM',
|
||||||
name,
|
name,
|
||||||
value,
|
value: paramsValue,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const newSearch = generateSearchFromFilters(updatedQueryParams);
|
||||||
|
|
||||||
push({ search: encodeURI(newSearch) });
|
push({ search: encodeURI(newSearch) });
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -236,6 +236,13 @@ const HomePage = () => {
|
|||||||
const filters = generateFiltersFromSearch(search).filter(
|
const filters = generateFiltersFromSearch(search).filter(
|
||||||
(filter, filterIndex) => filterIndex !== index
|
(filter, filterIndex) => filterIndex !== index
|
||||||
);
|
);
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: 'SET_PARAM',
|
||||||
|
name: 'filters',
|
||||||
|
value: filters,
|
||||||
|
});
|
||||||
|
|
||||||
const updatedQueryParams = generateNewSearch({ filters });
|
const updatedQueryParams = generateNewSearch({ filters });
|
||||||
|
|
||||||
const newSearch = generateSearchFromFilters(updatedQueryParams);
|
const newSearch = generateSearchFromFilters(updatedQueryParams);
|
||||||
|
|||||||
@ -49,13 +49,19 @@ const reducer = (state, action) => {
|
|||||||
case 'SET_PARAM': {
|
case 'SET_PARAM': {
|
||||||
const { name, value } = action;
|
const { name, value } = action;
|
||||||
|
|
||||||
|
if (name === '_limit') {
|
||||||
|
return state
|
||||||
|
.updateIn(['searchParams', name], () => value)
|
||||||
|
.updateIn(['searchParams', '_start'], () => 0);
|
||||||
|
}
|
||||||
|
|
||||||
return state.updateIn(['searchParams', name], () => value);
|
return state.updateIn(['searchParams', name], () => value);
|
||||||
}
|
}
|
||||||
case 'SET_PARAMS': {
|
case 'SET_PARAMS': {
|
||||||
const { params } = action;
|
const { params } = action;
|
||||||
|
|
||||||
return state.update('searchParams', searchParams => {
|
return state.update('searchParams', searchParams => {
|
||||||
return searchParams.mergeDeep(params);
|
return searchParams.mergeDeep(fromJS(params));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
case 'TOGGLE_SELECT_ALL': {
|
case 'TOGGLE_SELECT_ALL': {
|
||||||
|
|||||||
@ -3,10 +3,11 @@ import { isEmpty, toString } from 'lodash';
|
|||||||
const generateStringParamsFromQuery = query => {
|
const generateStringParamsFromQuery = query => {
|
||||||
let params = '';
|
let params = '';
|
||||||
|
|
||||||
Object.keys(query).forEach(key => {
|
Object.keys(query)
|
||||||
const value = query[key];
|
.filter(key => !isEmpty(toString(query[key])))
|
||||||
|
.forEach(key => {
|
||||||
|
const value = query[key];
|
||||||
|
|
||||||
if (!isEmpty(toString(query[key]))) {
|
|
||||||
if (key === 'filters') {
|
if (key === 'filters') {
|
||||||
value.forEach(item => {
|
value.forEach(item => {
|
||||||
if (item.name.includes('mime') && item.value === 'file') {
|
if (item.name.includes('mime') && item.value === 'file') {
|
||||||
@ -24,8 +25,7 @@ const generateStringParamsFromQuery = query => {
|
|||||||
} else {
|
} else {
|
||||||
params += `&${key}=${value}`;
|
params += `&${key}=${value}`;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
|
|
||||||
return params.substring(1);
|
return params.substring(1);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -0,0 +1,15 @@
|
|||||||
|
import { useRef } from 'react';
|
||||||
|
import { isEqual } from 'lodash';
|
||||||
|
|
||||||
|
// Adapted from https://github.com/sandiiarov/use-deep-compare/blob/master/src/useDeepCompareMemoize.ts
|
||||||
|
const useDeepCompareMemoize = value => {
|
||||||
|
const ref = useRef();
|
||||||
|
|
||||||
|
if (!isEqual(value, ref.current)) {
|
||||||
|
ref.current = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ref.current;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useDeepCompareMemoize;
|
||||||
Loading…
x
Reference in New Issue
Block a user