mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-11 17:26:32 +02:00
- Grille : réglages écrits dans le localStorage au plus toutes les 500 ms (immédiatement à la fermeture), tendance réseau et texte de recherche calculés une fois par ligne, courbe de tendance mémorisée, barre du bas abonnée au seul nombre de modifications. - Commandes : appels « franco » 6 par 6 ; dernière réception limitée aux fournisseurs du cadencier (résultats identiques sur la base de test). - Dépendances inutilisées retirées (react-query, @google/genai, ai, react-markdown, remark-gfm, xlsx, @radix-ui/react-dropdown-menu) ; pnpm-lock.yaml supprimé (npm est utilisé par Docker et le README). - Code mort et journaux de build retirés. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcA129WzGTH6zxPHFBGWmn
61 lines
2.1 KiB
TypeScript
61 lines
2.1 KiB
TypeScript
/**
|
|
* Les gammes d'assortiment : code, nom et couleurs — source unique.
|
|
*
|
|
* Les couleurs étaient définies trois fois (liste déroulante, filtre, actions
|
|
* groupées) et le sens des lettres n'apparaissait que dans la barre d'actions
|
|
* groupées : ailleurs, l'utilisateur ne voyait que « A », « B »…
|
|
*/
|
|
|
|
export type CodeGamme = "A" | "B" | "C" | "Y" | "Z";
|
|
|
|
export interface Gamme {
|
|
code: CodeGamme;
|
|
/** Nom court : « Cœur », « Sortie »… */
|
|
nom: string;
|
|
/** Phrase d'explication pour les infobulles. */
|
|
description: string;
|
|
/** Classes de pastille (fond, bordure, texte) lisibles en clair comme en sombre. */
|
|
classes: string;
|
|
}
|
|
|
|
export const GAMMES: readonly Gamme[] = [
|
|
{
|
|
code: "A",
|
|
nom: "Cœur",
|
|
description: "Produit permanent, au cœur de l'assortiment.",
|
|
classes: "border-emerald-500/40 bg-emerald-500/10 text-emerald-800 dark:text-emerald-300",
|
|
},
|
|
{
|
|
code: "B",
|
|
nom: "Complémentaire",
|
|
description: "Produit qui complète l'offre du rayon.",
|
|
classes: "border-blue-500/40 bg-blue-500/10 text-blue-800 dark:text-blue-300",
|
|
},
|
|
{
|
|
code: "C",
|
|
nom: "Saisonnier",
|
|
description: "Produit présent selon la saison.",
|
|
classes: "border-amber-500/40 bg-amber-500/10 text-amber-800 dark:text-amber-300",
|
|
},
|
|
{
|
|
code: "Y",
|
|
nom: "En veille",
|
|
description: "Produit mis en attente : il n'est plus commandé pour l'instant.",
|
|
classes: "border-violet-500/40 bg-violet-500/10 text-violet-800 dark:text-violet-300",
|
|
},
|
|
{
|
|
code: "Z",
|
|
nom: "Sortie",
|
|
description: "Produit à retirer de l'assortiment.",
|
|
classes: "border-rose-500/40 bg-rose-500/10 text-rose-800 dark:text-rose-300",
|
|
},
|
|
];
|
|
|
|
/** Pastille d'un produit sans gamme. */
|
|
export const CLASSES_SANS_GAMME = "border-slate-400/40 bg-slate-500/10 text-slate-700 dark:text-slate-300";
|
|
|
|
export function trouverGamme(code: string | null | undefined): Gamme | undefined {
|
|
if (!code) return undefined;
|
|
return GAMMES.find((g) => g.code === code.trim());
|
|
}
|