Frontend : nettoyage des reliquats du statut d'affectation
Le gros de la suppression a été fait dans 8d333de ; il restait des libellés :
- i18n : « CONFIRMÉS / IDÉAL » → « AFFECTÉS / IDÉAL », note de bas de grille
sans « proposés », clé mobileVol.slotConfirmed → slotAssigned
- components/ui.tsx : tons de Badge « confirmed » / « proposed » (inutilisés)
- ConfigMail : texte d'email par défaut sans « confirmer chaque créneau »
typecheck + lint + build + smoke : OK
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8d333deb23
commit
977bd4dc34
@@ -102,15 +102,13 @@ export function Chip({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type BadgeTone = 'confirmed' | 'proposed' | 'success' | 'info' | 'warn' | 'danger' | 'neutral';
|
type BadgeTone = 'success' | 'info' | 'warn' | 'danger' | 'neutral';
|
||||||
|
|
||||||
export function Badge({ tone, children }: { tone: BadgeTone; children: ReactNode }) {
|
export function Badge({ tone, children }: { tone: BadgeTone; children: ReactNode }) {
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
className={cx(
|
className={cx(
|
||||||
'inline-flex items-center border-2 px-[6px] py-[3px] font-display text-[8.5px] font-extrabold uppercase tracking-wide',
|
'inline-flex items-center border-2 px-[6px] py-[3px] font-display text-[8.5px] font-extrabold uppercase tracking-wide',
|
||||||
tone === 'confirmed' && 'border-ink bg-green text-white',
|
|
||||||
tone === 'proposed' && 'border-ink border-dashed bg-paper text-ink',
|
|
||||||
tone === 'success' && 'border-ink bg-green text-white',
|
tone === 'success' && 'border-ink bg-green text-white',
|
||||||
tone === 'info' && 'border-ink bg-blue text-ink',
|
tone === 'info' && 'border-ink bg-blue text-ink',
|
||||||
tone === 'warn' && 'border-ink bg-yellow-soft text-ink',
|
tone === 'warn' && 'border-ink bg-yellow-soft text-ink',
|
||||||
|
|||||||
@@ -86,8 +86,8 @@
|
|||||||
"grille.legend.incomplete": "INCOMPLET",
|
"grille.legend.incomplete": "INCOMPLET",
|
||||||
"grille.legend.complete": "COMPLET",
|
"grille.legend.complete": "COMPLET",
|
||||||
"grille.positionsCount": "{count} POSTES",
|
"grille.positionsCount": "{count} POSTES",
|
||||||
"grille.assignedRequired": "CONFIRMÉS / IDÉAL",
|
"grille.assignedRequired": "AFFECTÉS / IDÉAL",
|
||||||
"grille.footnote": "Chaque cellule est un créneau. Nombre = confirmés, + = proposés, / = effectif idéal. Cliquer ouvre le panneau d'affectation à droite.",
|
"grille.footnote": "Chaque cellule est un créneau. Nombre = bénévoles affectés, / = effectif idéal. Cliquer ouvre le panneau d'affectation à droite.",
|
||||||
"grille.panel.empty.title": "Cliquez une cellule de la grille pour affecter des bénévoles.",
|
"grille.panel.empty.title": "Cliquez une cellule de la grille pour affecter des bénévoles.",
|
||||||
"grille.panel.empty.body": "Le panneau s'ouvre ici, sans quitter la grille : candidats triés par charge, alertes bloquantes et avertissements du moteur de validation.",
|
"grille.panel.empty.body": "Le panneau s'ouvre ici, sans quitter la grille : candidats triés par charge, alertes bloquantes et avertissements du moteur de validation.",
|
||||||
"grille.panel.slotDuration": "CRÉNEAU DE {hours} H",
|
"grille.panel.slotDuration": "CRÉNEAU DE {hours} H",
|
||||||
@@ -127,7 +127,7 @@
|
|||||||
"mobileVol.slots": "{count} CRÉNEAUX",
|
"mobileVol.slots": "{count} CRÉNEAUX",
|
||||||
"mobileVol.hours": "{count} HEURES",
|
"mobileVol.hours": "{count} HEURES",
|
||||||
"mobileVol.location": "📍 {location}",
|
"mobileVol.location": "📍 {location}",
|
||||||
"mobileVol.slotConfirmed": "✓ TU ES ATTENDU SUR CE CRÉNEAU",
|
"mobileVol.slotAssigned": "✓ TU ES ATTENDU SUR CE CRÉNEAU",
|
||||||
"mobileVol.noSlots": "Aucun créneau pour l'instant. La coordination t'affectera bientôt.",
|
"mobileVol.noSlots": "Aucun créneau pour l'instant. La coordination t'affectera bientôt.",
|
||||||
"mobileVol.noAccount": "Ce compte n'est rattaché à aucun bénévole. Contactez la coordination.",
|
"mobileVol.noAccount": "Ce compte n'est rattaché à aucun bénévole. Contactez la coordination.",
|
||||||
"mobileVol.detailsUnavailable": "Le détail des créneaux (poste, horaires) n'est pas encore exposé aux bénévoles par l'API.",
|
"mobileVol.detailsUnavailable": "Le détail des créneaux (poste, horaires) n'est pas encore exposé aux bénévoles par l'API.",
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ export function MobileVolunteerPage() {
|
|||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
<div className="mt-[11px] flex min-h-[52px] items-center justify-center border-[3px] border-ink bg-green font-display text-[15px] font-black text-white">
|
<div className="mt-[11px] flex min-h-[52px] items-center justify-center border-[3px] border-ink bg-green font-display text-[15px] font-black text-white">
|
||||||
{t('mobileVol.slotConfirmed')}
|
{t('mobileVol.slotAssigned')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export function ConfigMail() {
|
|||||||
const [replyTo, setReplyTo] = useState('marie.bertin@lessonsdautomne.fr');
|
const [replyTo, setReplyTo] = useState('marie.bertin@lessonsdautomne.fr');
|
||||||
const [subject, setSubject] = useState('Ton planning bénévole a été mis à jour');
|
const [subject, setSubject] = useState('Ton planning bénévole a été mis à jour');
|
||||||
const [body, setBody] = useState(
|
const [body, setBody] = useState(
|
||||||
"Salut {prenom},\n\nTon planning vient d'être mis à jour. Tu as {nb_creneaux} créneaux, soit {nb_heures} heures.\n\nMerci de confirmer chaque créneau depuis ton planning personnel.",
|
"Salut {prenom},\n\nTon planning vient d'être mis à jour. Tu as {nb_creneaux} créneaux, soit {nb_heures} heures.\n\nRetrouve le détail sur ton planning personnel.",
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user