import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { useQueryClient } from '@tanstack/react-query'; import { useGetDocument, useEditDocument, getGetDocumentQueryKey, } from '../generated/anthoLumeAPIV1'; import type { EditDocumentBody } from '../generated/model'; import { formatDuration } from '../utils/formatters'; import { useToastMutation } from '../hooks/useMutationWithToast'; import { ActivityIcon, DownloadIcon, EditIcon, InfoIcon, CloseIcon, CheckIcon } from '../icons'; import { Field, FieldLabel, FieldValue, FieldActions, LoadingState } from '../components'; const iconButtonClassName = 'cursor-pointer text-content-muted hover:text-content'; interface EditableFieldProps { label: string; value: string; multiline?: boolean; valueClassName?: string; onSave: (value: string) => Promise; } function EditableField({ label, value, multiline = false, valueClassName, onSave, }: EditableFieldProps) { const [isEditing, setIsEditing] = useState(false); const [draft, setDraft] = useState(value); const startEdit = () => { setDraft(value); setIsEditing(true); }; // Keep Editor Open On Failure - Only close once the save actually succeeds so a failed edit isn't silently lost. const confirm = async () => { if (await onSave(draft)) setIsEditing(false); }; return ( {label} {isEditing ? (
) : ( )}
} > {isEditing ? (
{multiline ? (