🐛 FIX: FunctionsList changement de page/catégorie
This commit is contained in:
parent
8d7b3278c7
commit
bc249f00e4
@ -9,6 +9,7 @@ import './FunctionsList.css';
|
|||||||
const FunctionsList = (props) => {
|
const FunctionsList = (props) => {
|
||||||
|
|
||||||
const { categoryId } = useRouter().query;
|
const { categoryId } = useRouter().query;
|
||||||
|
let pageFunctions = 1;
|
||||||
|
|
||||||
// State de recherche et de catégories
|
// State de recherche et de catégories
|
||||||
const [, categories] = useAPI('/categories');
|
const [, categories] = useAPI('/categories');
|
||||||
@ -17,7 +18,6 @@ const FunctionsList = (props) => {
|
|||||||
// State pour afficher les fonctions
|
// State pour afficher les fonctions
|
||||||
const [functionsData, setFunctionsData] = useState({ hasMore: true, rows: [] });
|
const [functionsData, setFunctionsData] = useState({ hasMore: true, rows: [] });
|
||||||
const [isLoadingFunctions, setLoadingFunctions] = useState(true);
|
const [isLoadingFunctions, setLoadingFunctions] = useState(true);
|
||||||
const [pageFunctions, setPageFunctions] = useState(1);
|
|
||||||
|
|
||||||
// Récupère la catégorie avec la query categoryId
|
// Récupère la catégorie avec la query categoryId
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -26,18 +26,11 @@ const FunctionsList = (props) => {
|
|||||||
}
|
}
|
||||||
}, [categoryId]);
|
}, [categoryId]);
|
||||||
|
|
||||||
// Récupère les fonctions si la page change
|
|
||||||
useEffect(() => {
|
|
||||||
getFunctionsData().then((data) => setFunctionsData({
|
|
||||||
hasMore: data.hasMore,
|
|
||||||
rows: [...functionsData.rows, ...data.rows]
|
|
||||||
}));
|
|
||||||
}, [pageFunctions]);
|
|
||||||
|
|
||||||
// Récupère les fonctions si la catégorie/recherche change
|
// Récupère les fonctions si la catégorie/recherche change
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
pageFunctions = 1;
|
||||||
getFunctionsData().then((data) => setFunctionsData(data));
|
getFunctionsData().then((data) => setFunctionsData(data));
|
||||||
}, [inputSearch.selectedCategory, inputSearch.search]);
|
}, [inputSearch]);
|
||||||
|
|
||||||
// Permet la pagination au scroll
|
// Permet la pagination au scroll
|
||||||
const observer = useRef();
|
const observer = useRef();
|
||||||
@ -46,7 +39,15 @@ const FunctionsList = (props) => {
|
|||||||
if (observer.current) observer.current.disconnect();
|
if (observer.current) observer.current.disconnect();
|
||||||
observer.current = new IntersectionObserver((entries) => {
|
observer.current = new IntersectionObserver((entries) => {
|
||||||
if (entries[0].isIntersecting && functionsData.hasMore) {
|
if (entries[0].isIntersecting && functionsData.hasMore) {
|
||||||
setPageFunctions(pageFunctions + 1);
|
pageFunctions += 1;
|
||||||
|
getFunctionsData().then((data) => {
|
||||||
|
setFunctionsData((oldData) => {
|
||||||
|
return {
|
||||||
|
hasMore: data.hasMore,
|
||||||
|
rows: [...oldData.rows, ...data.rows]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, { threshold: 1 });
|
}, { threshold: 1 });
|
||||||
if (node) observer.current.observe(node);
|
if (node) observer.current.observe(node);
|
||||||
|
Reference in New Issue
Block a user