diff --git a/src/components/AdvancedEventLab/AdvancedEventLabTagsEditor.tsx b/src/components/AdvancedEventLab/AdvancedEventLabTagsEditor.tsx index 05d9471a..f896b41f 100644 --- a/src/components/AdvancedEventLab/AdvancedEventLabTagsEditor.tsx +++ b/src/components/AdvancedEventLab/AdvancedEventLabTagsEditor.tsx @@ -8,20 +8,20 @@ import { CollapsibleTrigger } from '@/components/ui/collapsible' import { - formatComposerTagValuesInput, + composerTagRowFromNostrTag, newComposerTagRow, normalizeComposerExtraTags, - parseComposerTagValuesInput, type ComposerExtraTagRow } from '@/lib/composer-extra-tags' import { cn } from '@/lib/utils' import { ChevronDown, Plus, Trash2 } from 'lucide-react' +import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' export function labTagsToEditableRows(tags: string[][]): ComposerExtraTagRow[] { const normalized = tags.filter((t) => Array.isArray(t) && String(t[0] ?? '').trim()) if (!normalized.length) return [newComposerTagRow()] - return normalized.map((tag) => newComposerTagRow([...tag])) + return normalized.map((tag) => composerTagRowFromNostrTag([...tag])) } export function editableRowsToLabTags(rows: ComposerExtraTagRow[]): string[][] { @@ -38,21 +38,15 @@ export default function AdvancedEventLabTagsEditor({ className?: string }) { const { t } = useTranslation() + const filledCount = rows.filter((r) => r.name.trim()).length + const [open, setOpen] = useState(filledCount > 0) - const updateRow = (id: string, patch: Partial<{ name: string; valuesRaw: string }>) => { - onChange( - rows.map((row) => { - if (row.id !== id) return row - const name = patch.name !== undefined ? patch.name : (row.tag[0] ?? '') - const valuesRaw = - patch.valuesRaw !== undefined ? patch.valuesRaw : formatComposerTagValuesInput(row.tag) - const vals = parseComposerTagValuesInput(valuesRaw) - return { - ...row, - tag: name.trim() ? [name.trim(), ...vals] : vals.length ? ['', ...vals] : ['', ''] - } - }) - ) + useEffect(() => { + if (filledCount > 0) setOpen(true) + }, [filledCount]) + + const updateRow = (id: string, patch: Partial>) => { + onChange(rows.map((row) => (row.id === id ? { ...row, ...patch } : row))) } const removeRow = (id: string) => { @@ -62,15 +56,11 @@ export default function AdvancedEventLabTagsEditor({ const addRow = () => { onChange([...rows, newComposerTagRow()]) + setOpen(true) } - const filledCount = rows.filter((r) => (r.tag[0] ?? '').trim()).length - return ( - 0} - className={cn('rounded-lg border bg-muted/30', className)} - > + {t('advancedLabTagsTitle', { defaultValue: 'Event tags' })} @@ -89,49 +79,45 @@ export default function AdvancedEventLabTagsEditor({ })}

- {rows.map((row) => { - const name = row.tag[0] ?? '' - const valuesRaw = formatComposerTagValuesInput(row.tag) - return ( -
-
- - updateRow(row.id, { name: e.target.value })} - /> -
-
- -