karbe/src/components/AccessTypeBadge.tsx
Claude Integration 5e59202505 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)
2026-05-31 02:56:25 +00:00

43 lines
1.4 KiB
TypeScript

"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>
);
}