'use client'; import clsx from 'clsx'; import { useState } from 'react'; import { useLibrary } from '@/backend/library/useLibrary'; import { ICstRelocateDTO } from '@/backend/oss/api'; import { useRSForm } from '@/backend/rsform/useRSForm'; import { RelocateUpIcon } from '@/components/DomainIcons'; import PickMultiConstituenta from '@/components/select/PickMultiConstituenta'; import SelectLibraryItem from '@/components/select/SelectLibraryItem'; import MiniButton from '@/components/ui/MiniButton'; import Modal from '@/components/ui/Modal'; import DataLoader from '@/components/wrap/DataLoader'; import { ILibraryItem, LibraryItemID } from '@/models/library'; import { HelpTopic } from '@/models/miscellaneous'; import { IOperation, IOperationSchema } from '@/models/oss'; import { getRelocateCandidates } from '@/models/ossAPI'; import { ConstituentaID } from '@/models/rsform'; import { useDialogsStore } from '@/stores/dialogs'; import { prefixes } from '@/utils/constants'; export interface DlgRelocateConstituentsProps { oss: IOperationSchema; initialTarget?: IOperation; onSubmit: (data: ICstRelocateDTO) => void; } function DlgRelocateConstituents() { const { oss, initialTarget, onSubmit } = useDialogsStore(state => state.props as DlgRelocateConstituentsProps); const { items: libraryItems } = useLibrary(); const [directionUp, setDirectionUp] = useState(true); const [destination, setDestination] = useState(undefined); const [selected, setSelected] = useState([]); const [source, setSource] = useState( libraryItems.find(item => item.id === initialTarget?.result) ); const isValid = !!destination && selected.length > 0; const operation = oss.items.find(item => item.result === source?.id); const sourceSchemas = libraryItems.filter(item => oss.schemas.includes(item.id)); const destinationSchemas = (() => { if (!operation) { return []; } const node = oss.graph.at(operation.id)!; const ids: LibraryItemID[] = directionUp ? node.inputs.map(id => oss.operationByID.get(id)!.result).filter(id => id !== null) : node.outputs.map(id => oss.operationByID.get(id)!.result).filter(id => id !== null); return ids.map(id => libraryItems.find(item => item.id === id)).filter(item => item !== undefined); })(); const sourceData = useRSForm({ itemID: source?.id }); const filteredConstituents = (() => { if (!sourceData.schema || !destination || !operation) { return []; } const destinationOperation = oss.items.find(item => item.result === destination.id); return getRelocateCandidates(operation.id, destinationOperation!.id, sourceData.schema, oss); })(); function toggleDirection() { setDirectionUp(prev => !prev); setDestination(undefined); } function handleSelectSource(newValue: ILibraryItem | undefined) { setSource(newValue); setDestination(undefined); setSelected([]); } function handleSelectDestination(newValue: ILibraryItem | undefined) { setDestination(newValue); setSelected([]); } function handleSubmit() { if (!destination) { return; } onSubmit({ destination: destination.id, items: selected }); } return (
} onClick={toggleDirection} />
{sourceData.schema ? ( ) : null}
); } export default DlgRelocateConstituents;