mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-13 18:27:40 +02:00
« Server Action "…" was not found on the server » n'est pas une panne du snapshot : Next.js identifie chaque Server Action par un hash calculé à la compilation, et un onglet ouvert avant un nouveau build continue d'envoyer les anciens identifiants. La seule issue est de recharger la page. - src/lib/stale-action.ts : détection de cette erreur + message utilisateur. - Grille et Snapshots : au lieu d'afficher l'erreur technique brute, on propose « Recharger la page ». Les brouillons de la Grille sont persistés (localStorage), recharger ne perd rien. - SuccessModal accepte `variant="error"` : icône d'alerte rouge au lieu de la coche verte, et surtout plus de fermeture automatique au bout de 3 s — un message d'échec doit rester lisible. Les erreurs s'affichaient jusqu'ici sous une coche de succès. - SuccessModal accepte une action secondaire optionnelle, et joue son animation d'entrée en CSS au lieu d'un setState synchrone dans un effet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DfqUihgixw4K1AmJhizWiu
27 lines
1.3 KiB
TypeScript
27 lines
1.3 KiB
TypeScript
/**
|
|
* CollectFlow — Détection des Server Actions périmées après un déploiement.
|
|
*
|
|
* Next.js identifie chaque Server Action par un hash calculé **à la compilation**.
|
|
* Après un nouveau build (déploiement, redémarrage du conteneur), les hashs
|
|
* changent : un onglet resté ouvert continue d'envoyer les anciens identifiants,
|
|
* et le serveur répond
|
|
*
|
|
* Server Action "4010b9…" was not found on the server.
|
|
*
|
|
* Ce n'est pas une panne applicative : c'est le client qui est périmé. La seule
|
|
* issue est de recharger la page pour récupérer le bundle courant.
|
|
*
|
|
* Les brouillons de la Grille sont persistés dans le store zustand
|
|
* (localStorage) : recharger ne perd pas le travail en cours.
|
|
*/
|
|
|
|
/** Message affiché à l'utilisateur quand son onglet est périmé. */
|
|
export const STALE_ACTION_MESSAGE =
|
|
"L'application a été mise à jour depuis l'ouverture de cet onglet. Rechargez la page pour continuer — vos modifications en cours sont conservées.";
|
|
|
|
/** true si l'erreur vient d'une Server Action absente du serveur (bundle périmé). */
|
|
export function isStaleServerActionError(err: unknown): boolean {
|
|
const message = err instanceof Error ? err.message : String(err ?? "");
|
|
return /server action/i.test(message) && /not\s+be?\s*found|was not found|failed-to-find-server-action/i.test(message);
|
|
}
|