feat: refresh buttons invalidate cache and show spinner during refresh
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m56s
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m56s
- Add revalidateForRefresh(scope, id) server action for home/library/series - Library/Series wrappers: revalidate cache then router.refresh(), 400ms delay for animation - Home: revalidate home-data + path before refresh - RefreshButton uses refreshLibrary from RefreshContext when not passed as prop - Library/Series pages pass id to wrapper for context and pull-to-refresh - read-progress: pass 'max' to revalidateTag for Next 16 types Made-with: Cursor
This commit is contained in:
@@ -1,31 +1,35 @@
|
||||
"use client";
|
||||
|
||||
import { useState, type ReactNode } from "react";
|
||||
import { useState, useCallback, type ReactNode } from "react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { RefreshButton } from "@/components/library/RefreshButton";
|
||||
import { PullToRefreshIndicator } from "@/components/common/PullToRefreshIndicator";
|
||||
import { usePullToRefresh } from "@/hooks/usePullToRefresh";
|
||||
import { revalidateForRefresh } from "@/app/actions/refresh";
|
||||
|
||||
interface HomeClientWrapperProps {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
const REFRESH_ANIMATION_MS = 400;
|
||||
|
||||
export function HomeClientWrapper({ children }: HomeClientWrapperProps) {
|
||||
const router = useRouter();
|
||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||
|
||||
const handleRefresh = async () => {
|
||||
const handleRefresh = useCallback(async () => {
|
||||
try {
|
||||
setIsRefreshing(true);
|
||||
// Re-fetch server-side data
|
||||
await revalidateForRefresh("home", "home");
|
||||
router.refresh();
|
||||
await new Promise((r) => setTimeout(r, REFRESH_ANIMATION_MS));
|
||||
return { success: true };
|
||||
} catch (_error) {
|
||||
return { success: false, error: "Erreur lors du rafraîchissement de la page d'accueil" };
|
||||
} finally {
|
||||
setIsRefreshing(false);
|
||||
}
|
||||
};
|
||||
}, [router]);
|
||||
|
||||
const pullToRefresh = usePullToRefresh({
|
||||
onRefresh: async () => {
|
||||
|
||||
Reference in New Issue
Block a user