/** * MigrationBanner Component * * Displays a compact floating notification in top-right corner when migration is required. * Non-blocking: allows users to continue using the app while showing the reminder. */ import { useState } from "react"; import { AlertTriangle, X } from "lucide-react"; import { Button } from "@/components/ds/ui/button"; import { toast } from "sonner"; import { useTranslate } from "ra-core"; import { dismissMigrationReminder, type MigrationStatus, } from "@/lib/migration-check"; interface MigrationBannerProps { /** Migration status from checkMigrationStatus */ status: MigrationStatus; /** Callback when banner is dismissed */ onDismiss?: () => void; /** Callback when user clicks to open modal */ onLearnMore?: () => void; } export function MigrationBanner({ status, onDismiss, onLearnMore, }: MigrationBannerProps) { const [isVisible, setIsVisible] = useState(true); const translate = useTranslate(); if (!isVisible) return null; const handleDismiss = () => { dismissMigrationReminder(); setIsVisible(false); onDismiss?.(); }; const handleClick = () => { if (onLearnMore) { onLearnMore(); } else { // Fallback: copy command navigator.clipboard.writeText("npx realtimex-crm migrate"); toast.success(translate("crm.migration.banner.command_copied")); } }; return (

{translate("crm.migration.banner.title")}

{translate("crm.migration.banner.subtitle", { version: status.appVersion, })}

); }