import { useEffect, useId, useRef, useState } from 'react'; import { NavIcon } from '../NavIcon'; import { resolveTriggerOptionsForValue } from '../../lib/emailTriggerEvents'; import { __ } from '../../lib/i18n'; function IconEnvelope(props: { className?: string }) { return ( ); } function IconBolt(props: { className?: string }) { return ( ); } function OptionRowIcon({ kind }: { kind: 'none' | 'event' }) { if (kind === 'none') { return ( ); } return ( ); } type Props = { value: string; onChange: (nextKey: string) => void; disabled?: boolean; }; /** * Rich trigger picker: title + key badge + description per row (matches Sikshya admin reference UI). */ export function TriggerEventSelect(props: Props) { const { value, onChange, disabled } = props; const listId = useId(); const wrapRef = useRef(null); const [open, setOpen] = useState(false); const options = resolveTriggerOptionsForValue(value); const selected = options.find((o) => o.key === value) ?? options[0]; useEffect(() => { if (!open) { return; } const onDoc = (e: MouseEvent) => { const el = wrapRef.current; if (el && !el.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener('mousedown', onDoc); return () => document.removeEventListener('mousedown', onDoc); }, [open]); useEffect(() => { const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') { setOpen(false); } }; if (open) { window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); } }, [open]); return ( !disabled && setOpen((o) => !o)} className={`flex w-full items-center gap-3 rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-left shadow-sm transition dark:border-slate-600 dark:bg-slate-800 ${ disabled ? 'cursor-not-allowed opacity-60' : 'hover:border-slate-300 dark:hover:border-slate-500' }`} > {selected.title} {selected.badgeLabel} {open ? ( {__('Select an event to trigger this email, or choose “No event” for sequence / manual use.', 'sikshya')} {options.map((opt) => { const isActive = opt.key === value; return ( { onChange(opt.key); setOpen(false); }} className={`flex w-full items-start gap-3 px-3 py-2.5 text-left transition ${ isActive ? 'bg-sky-50 dark:bg-sky-950/40' : 'hover:bg-slate-50 dark:hover:bg-slate-800/80' }`} > {opt.title} {opt.badgeLabel} {opt.description} {isActive ? ( ) : ( )} ); })} ) : null} ); }
{selected.badgeLabel}
{__('Select an event to trigger this email, or choose “No event” for sequence / manual use.', 'sikshya')}
{opt.badgeLabel}
{opt.description}