/** * ShareDialog - Modal for generating share links for medication schedules * Allows sharing schedule view for a specific person */ import { Check, Copy, Link2, X } from "lucide-react"; import { useTranslation } from "react-i18next"; export interface ShareDialogProps { show: boolean; sharePeople: string[]; shareSelectedPerson: string; onShareSelectedPersonChange: (person: string) => void; shareSelectedDays: number; onShareSelectedDaysChange: (days: number) => void; shareGenerating: boolean; shareLink: string | null; onShareLinkChange: (link: string | null) => void; shareCopied: boolean; onShareCopiedChange: (copied: boolean) => void; onClose: () => void; onGenerateShareLink: () => Promise; onCopyShareLink: () => void; } export function ShareDialog({ show, sharePeople, shareSelectedPerson, onShareSelectedPersonChange, shareSelectedDays, onShareSelectedDaysChange, shareGenerating, shareLink, onShareLinkChange, shareCopied, onShareCopiedChange, onClose, onGenerateShareLink, onCopyShareLink, }: ShareDialogProps) { const { t } = useTranslation(); const closeLabel = t("common.close"); const copyLabel = shareCopied ? t("share.copied") : t("share.copyLink"); // ESC is handled by the global handler in App.tsx to avoid double history.back() if (!show) return null; return (
{ if (e.key !== "Escape") e.stopPropagation(); }} >
e.stopPropagation()} onKeyDown={(e) => { if (e.key !== "Escape") e.stopPropagation(); }} >

{t("share.description")}

{(() => { if (sharePeople.length === 0) { return (

{t("share.noPeople")}

); } if (shareLink) { return (

{t("share.linkGenerated")}

(e.target as HTMLInputElement).select()} />
{shareCopied && {t("share.copied")}}
); } return (
); })()}
); }