'use client'; import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; import { urls } from '@/app/urls'; 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, IVersionData, IVersionInfo, VersionID } from '@/models/library'; import { useDialogsStore } from '@/stores/dialogs'; import { information } from '@/utils/labels'; import TableVersions from './TableVersions'; export interface DlgEditVersionsProps { item: ILibraryItemVersioned; } function DlgEditVersions() { const { item } = useDialogsStore(state => state.props as DlgEditVersionsProps); const router = useConceptNavigation(); 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(versionID: VersionID) { versionDelete({ itemID: item.id, versionID: versionID }, () => { toast.success(information.versionDestroyed); if (versionID === versionID) { router.push(urls.schema(item.id)); } }); } function handleUpdate() { if (!isModified || !selected || processing || !isValid) { return; } const data: IVersionData = { version: version, description: description }; versionUpdate( { itemID: item.id, // versionID: selected.id, data: data }, () => toast.success(information.changesSaved) ); } 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} /> } />