feat(plugins): access-type + demo-carbets-seed (Phase 3.1 + 2.5)
Plugin access-type : - Migration : enum AccessType (ROAD_AND_RIVER, RIVER_ONLY), champ accessType sur Carbet avec default ROAD_AND_RIVER, roadAccessNote optionnel, pirogueDurationMin rendu nullable + index sur accessType - Schema Prisma mis à jour - Composant <AccessTypeBadge> client, gated par le plugin - Carbet card et fiche enrichies : badge + texte adapté (Pirogue vs Route+pirogue vs Route directe), section Accès enrichie avec roadAccessNote - formatPirogueDuration accepte null Plugin demo-carbets-seed : - Hook onEnable : 3 propriétaires demo (Yann/Émilie/CE Hôpital) + 6 carbets variés (Maroni, Approuague, Comté, Oyapock, Mahury, Kourou) avec mix 3 RIVER_ONLY + 3 ROAD_AND_RIVER, GPS plausibles, descriptions naturelles - Hook onDisable : archive (status=ARCHIVED) les carbets demo via slug prefix - Toutes les fixtures idempotentes (upsert via slug + email)
This commit is contained in:
parent
9b9963403d
commit
5e59202505
10 changed files with 380 additions and 26 deletions
43
src/components/AccessTypeBadge.tsx
Normal file
43
src/components/AccessTypeBadge.tsx
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
"use client";
|
||||
|
||||
import { useIsPluginEnabled } from "@/lib/plugins/client";
|
||||
import type { AccessType } from "@/generated/prisma/enums";
|
||||
|
||||
/**
|
||||
* Badge route+fleuve vs fleuve only. Gated par le plugin `access-type`.
|
||||
* Si le plugin est désactivé, rien n'est rendu — la fiche tombe sur le
|
||||
* comportement legacy (pirogue toujours mentionnée).
|
||||
*/
|
||||
export function AccessTypeBadge({
|
||||
accessType,
|
||||
size = "sm",
|
||||
}: {
|
||||
accessType: AccessType;
|
||||
size?: "sm" | "md";
|
||||
}) {
|
||||
const enabled = useIsPluginEnabled("access-type");
|
||||
if (!enabled) return null;
|
||||
|
||||
const isExpedition = accessType === "RIVER_ONLY";
|
||||
const label = isExpedition ? "🛶 Expédition fleuve" : "🛣️ Route + fleuve";
|
||||
const styles = isExpedition
|
||||
? "bg-[var(--color-karbe-laterite-300)]/25 text-[var(--color-karbe-laterite-700)] ring-[var(--color-karbe-laterite-500)]/30"
|
||||
: "bg-[var(--color-karbe-canopy-50)] text-[var(--color-karbe-canopy-700)] ring-[var(--color-karbe-canopy-500)]/30";
|
||||
const sizing =
|
||||
size === "md"
|
||||
? "px-3 py-1.5 text-xs"
|
||||
: "px-2 py-0.5 text-[11px]";
|
||||
|
||||
return (
|
||||
<span
|
||||
className={`inline-flex items-center gap-1 rounded-full font-medium ring-1 ${styles} ${sizing}`}
|
||||
title={
|
||||
isExpedition
|
||||
? "Accessible uniquement par pirogue depuis un dégrad."
|
||||
: "Accessible par la route et par le fleuve."
|
||||
}
|
||||
>
|
||||
{label}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue