2024-07-29 16:56:24 +03:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
import { useMemo } from 'react';
|
|
|
|
|
2024-08-14 21:50:28 +03:00
|
|
|
import PickMultiOperation from '@/components/select/PickMultiOperation';
|
2024-07-29 16:56:24 +03:00
|
|
|
import FlexColumn from '@/components/ui/FlexColumn';
|
|
|
|
import Label from '@/components/ui/Label';
|
|
|
|
import { IOperationSchema, OperationID } from '@/models/oss';
|
|
|
|
|
|
|
|
interface TabArgumentsProps {
|
|
|
|
oss: IOperationSchema;
|
|
|
|
target: OperationID;
|
|
|
|
inputs: OperationID[];
|
|
|
|
setInputs: React.Dispatch<React.SetStateAction<OperationID[]>>;
|
|
|
|
}
|
|
|
|
|
|
|
|
function TabArguments({ oss, inputs, target, setInputs }: TabArgumentsProps) {
|
|
|
|
const potentialCycle = useMemo(() => [target, ...oss.graph.expandAllOutputs([target])], [target, oss.graph]);
|
|
|
|
const filtered = useMemo(
|
|
|
|
() => oss.items.filter(item => !potentialCycle.includes(item.id)),
|
|
|
|
[oss.items, potentialCycle]
|
|
|
|
);
|
|
|
|
return (
|
2024-12-12 13:19:12 +03:00
|
|
|
<div className='cc-fade-in cc-column'>
|
2024-07-29 16:56:24 +03:00
|
|
|
<FlexColumn>
|
|
|
|
<Label text={`Выбор аргументов: [ ${inputs.length} ]`} />
|
|
|
|
<PickMultiOperation items={filtered} selected={inputs} setSelected={setInputs} rows={8} />
|
|
|
|
</FlexColumn>
|
2024-12-12 13:19:12 +03:00
|
|
|
</div>
|
2024-07-29 16:56:24 +03:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default TabArguments;
|