'use client'; import { useEffect, useState } from 'react'; import { useIsProcessingLibrary } from '@/backend/library/useIsProcessingLibrary'; import { useVersionDelete } from '@/backend/library/useVersionDelete'; import { useVersionUpdate } from '@/backend/library/useVersionUpdate'; import { IconReset, IconSave } from '@/components/Icons'; import MiniButton from '@/components/ui/MiniButton'; import Modal from '@/components/ui/Modal'; import TextArea from '@/components/ui/TextArea'; import TextInput from '@/components/ui/TextInput'; import { ILibraryItemVersioned, IVersionInfo, VersionID } from '@/models/library'; import { useDialogsStore } from '@/stores/dialogs'; import TableVersions from './TableVersions'; export interface DlgEditVersionsProps { item: ILibraryItemVersioned; afterDelete: (targetVersion: VersionID) => void; } function DlgEditVersions() { const { item, afterDelete } = useDialogsStore(state => state.props as DlgEditVersionsProps); const processing = useIsProcessingLibrary(); const { versionDelete } = useVersionDelete(); const { versionUpdate } = useVersionUpdate(); const [selected, setSelected] = useState(undefined); const [version, setVersion] = useState(''); const [description, setDescription] = useState(''); const isValid = selected && item.versions.every(ver => ver.id === selected.id || ver.version != version); const isModified = selected && (selected.version != version || selected.description != description); function handleDeleteVersion(targetVersion: VersionID) { versionDelete({ itemID: item.id, versionID: targetVersion }, () => afterDelete(targetVersion)); } function handleUpdate() { if (!isModified || !selected || processing || !isValid) { return; } versionUpdate({ versionID: selected.id, data: { version: version, description: description } }); } function handleReset() { if (!selected) { return false; } setVersion(selected?.version ?? ''); setDescription(selected?.description ?? ''); } useEffect(() => { setVersion(selected?.version ?? ''); setDescription(selected?.description ?? ''); }, [selected]); return ( setSelected(item.versions.find(ver => ver.id === versionID))} selected={selected?.id} />
setVersion(event.target.value)} />
} onClick={handleUpdate} /> } />