diff --git a/src/core/toast/ToastContext.js b/src/core/toast/ToastContext.js index 7918451..273d197 100644 --- a/src/core/toast/ToastContext.js +++ b/src/core/toast/ToastContext.js @@ -1,6 +1,6 @@ 'use client'; -import React, { createContext, useContext, useState, useCallback } from 'react'; +import React, { createContext, useContext, useState, useCallback, useMemo } from 'react'; const ToastContext = createContext(); @@ -88,7 +88,7 @@ export const ToastProvider = ({ children }) => { }); }, [addToast]); - const value = { + const value = useMemo(() => ({ toasts, addToast, removeToast, @@ -97,7 +97,7 @@ export const ToastProvider = ({ children }) => { error, warning, info, - }; + }), [toasts, addToast, removeToast, clearAllToasts, success, error, warning, info]); return ( diff --git a/src/features/media/components/MediaGrid.client.js b/src/features/media/components/MediaGrid.client.js index fef4fad..fe58ac9 100644 --- a/src/features/media/components/MediaGrid.client.js +++ b/src/features/media/components/MediaGrid.client.js @@ -40,7 +40,7 @@ export default function MediaGrid({ selectedIds = new Set(), emptyMessage = 'Aucun média', }) { - if (loading) { + if (loading && items.length === 0) { return (
{Array.from({ length: 12 }).map((_, i) => ( @@ -59,7 +59,7 @@ export default function MediaGrid({ } return ( -
+
{items.map(media => { const Icon = iconForMime(media.mime_type); const isSelected = selectedIds.has(media.id); diff --git a/src/features/media/pages/MediaPage.client.js b/src/features/media/pages/MediaPage.client.js index b4856a5..44863bb 100644 --- a/src/features/media/pages/MediaPage.client.js +++ b/src/features/media/pages/MediaPage.client.js @@ -204,6 +204,7 @@ const MediaPage = ({ user }) => { const [filters, setFilters] = useState({ search: '', kind: '', visibility: '' }); const [selected, setSelected] = useState(null); + const { error: toastError } = toast; const fetchItems = useCallback(async () => { setLoading(true); try { @@ -217,11 +218,11 @@ const MediaPage = ({ user }) => { const data = await response.json(); setItems(data.media || []); } catch (err) { - toast.error(err.message || 'Échec du chargement'); + toastError(err.message || 'Échec du chargement'); } finally { setLoading(false); } - }, [filters, toast]); + }, [filters, toastError]); useEffect(() => { fetchItems();