This commit is contained in:
Generated
+11178
-11225
File diff suppressed because it is too large
Load Diff
@@ -73,8 +73,8 @@ export default function ProductsScreen() {
|
|||||||
return () => pulse.stop();
|
return () => pulse.stop();
|
||||||
}, [scaleAnim]);
|
}, [scaleAnim]);
|
||||||
|
|
||||||
const fetchProducts = useCallback(async () => {
|
const fetchProducts = useCallback(async (silent = false) => {
|
||||||
setError(null);
|
if (!silent) setError(null);
|
||||||
try {
|
try {
|
||||||
let response: any;
|
let response: any;
|
||||||
if (selectedCategory === "tous") {
|
if (selectedCategory === "tous") {
|
||||||
@@ -82,17 +82,35 @@ export default function ProductsScreen() {
|
|||||||
} else {
|
} else {
|
||||||
response = await getProductsByCategory(selectedCategory);
|
response = await getProductsByCategory(selectedCategory);
|
||||||
}
|
}
|
||||||
const list = response?.data || response?.products || [];
|
const list: Product[] = Array.isArray(response?.data || response?.products)
|
||||||
setProducts(Array.isArray(list) ? list : []);
|
? (response?.data || response?.products)
|
||||||
|
: [];
|
||||||
|
if (silent) {
|
||||||
|
setProducts((prev) =>
|
||||||
|
prev.map((p) => {
|
||||||
|
const updated = list.find((r) => r.id === p.id);
|
||||||
|
return updated ? { ...p, stock: updated.stock } : p;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
setProducts(list);
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
setError("Impossible de charger les produits");
|
if (!silent) {
|
||||||
setProducts([]);
|
setError("Impossible de charger les produits");
|
||||||
|
setProducts([]);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
if (!silent) {
|
||||||
setRefreshing(false);
|
setLoading(false);
|
||||||
|
setRefreshing(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, [selectedCategory]);
|
}, [selectedCategory]);
|
||||||
|
|
||||||
|
const fetchProductsRef = useRef(fetchProducts);
|
||||||
|
useEffect(() => { fetchProductsRef.current = fetchProducts; }, [fetchProducts]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const catObj = categories.find((c) => c.name === selectedCategory);
|
const catObj = categories.find((c) => c.name === selectedCategory);
|
||||||
if (catObj?.is_coming_soon) {
|
if (catObj?.is_coming_soon) {
|
||||||
@@ -102,6 +120,8 @@ export default function ProductsScreen() {
|
|||||||
}
|
}
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
fetchProducts();
|
fetchProducts();
|
||||||
|
const interval = setInterval(() => fetchProductsRef.current(true), 30_000);
|
||||||
|
return () => clearInterval(interval);
|
||||||
}, [selectedCategory, categories, fetchProducts]);
|
}, [selectedCategory, categories, fetchProducts]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user