Deux bugs sur l'écran référent (/mobile-referent) : - Il était resté à l'étape maquette (`PhoneFrame`/`DesignNote`, cadre de téléphone à taille fixe) alors que la vue bénévole avait déjà été convertie en vraie page responsive. Repli sur `positions.data[0]` en l'absence de poste géré par le compte connecté : un référent qui n'est encore désigné sur aucun poste se voyait quand même affiché comme référent du premier poste de l'édition (« Accueil artistes » dans les données de démo) au lieu de voir qu'il n'en a aucun. Réécriture de `MobileLeadPage.tsx` en page responsive (mobile d'abord, `sm:` pour l'élargissement, comme `MobileVolunteerPage.tsx`) : plus de maquette de téléphone, une carte par poste réellement géré (`Position.lead_account_id === account.id`, sans repli), créneau en cours ou à venir calculé sur l'heure réelle (nouveau hook partagé `useNowMinutes`, extrait de la vue bénévole), équipe affectée avec pointage présent/absent (toujours local à l'écran : le pointage sur site reste hors périmètre, CLAUDE.md §5). État vide explicite si le compte n'est référent d'aucun poste. `PhoneFrame`/`DesignNote` n'avaient plus d'autre utilisateur : supprimés avec leurs clés i18n devenues mortes. Non inclus dans ce commit (édités en parallèle par l'utilisateur, laissés en l'état) : backend/app/seed.py, frontend/tailwind.config.js. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
19 lines
693 B
TypeScript
19 lines
693 B
TypeScript
import { useEffect, useState } from 'react';
|
|
|
|
import { nowNaiveMinutes } from '@/lib/time';
|
|
|
|
// Rafraîchit « maintenant » assez souvent pour qu'un repère qui en dépend
|
|
// bouge de façon perceptible sans re-rendre à outrance.
|
|
const REFRESH_MS = 30_000;
|
|
|
|
/** Minutes « murales » actuelles (cf. `nowNaiveMinutes`), retenues en state et
|
|
* rafraîchies périodiquement pour rester réactif sans requête réseau. */
|
|
export function useNowMinutes(): number {
|
|
const [minutes, setMinutes] = useState(() => nowNaiveMinutes());
|
|
useEffect(() => {
|
|
const id = setInterval(() => setMinutes(nowNaiveMinutes()), REFRESH_MS);
|
|
return () => clearInterval(id);
|
|
}, []);
|
|
return minutes;
|
|
}
|