Fix frontend

This commit is contained in:
Ivan 2024-07-21 22:50:43 +03:00
parent b9ab054a00
commit fbaf17ea58
3 changed files with 62 additions and 75 deletions

View File

@ -8,9 +8,12 @@ import { useOssEdit } from '../OssEditContext';
interface InputNodeProps { interface InputNodeProps {
id: string; id: string;
data: {
label: string;
};
} }
function InputNode({ id }: InputNodeProps) { function InputNode({ id, data }: InputNodeProps) {
const controller = useOssEdit(); const controller = useOssEdit();
console.log(controller.isMutable); console.log(controller.isMutable);
@ -26,29 +29,21 @@ function InputNode({ id }: InputNodeProps) {
return ( return (
<> <>
<Handle type='target' position={Position.Bottom} /> <Handle type='target' position={Position.Bottom} />
<div> <div className='flex justify-between'>
<div className='flex-grow text-center'>{data.label}</div>
<div className='cc-icons'>
<MiniButton <MiniButton
className='float-right'
icon={<CiSquareRemove className='icon-red' />}
title='Удалить'
onClick={handleDelete}
color={'red'}
/>
<div>
Тип: <strong>Ввод</strong>
</div>
<div>
{/* Схема:{controller.getBind(id) === undefined ? '' : controller.getBind(id)} */}
<strong>
<MiniButton
className='float-right'
icon={<PiPlugsConnected className='icon-green' />} icon={<PiPlugsConnected className='icon-green' />}
title='Привязать схему' title='Привязать схему'
onClick={() => { onClick={() => {
handleClick(); handleClick();
}} }}
/> />
</strong> <MiniButton
icon={<CiSquareRemove className='icon-red' size='1rem' />}
title='Удалить'
onClick={handleDelete}
/>
</div> </div>
</div> </div>
</> </>

View File

@ -1,10 +1,8 @@
'use client'; 'use client';
import { useCallback, useMemo } from 'react'; import { useCallback, useLayoutEffect, useMemo } from 'react';
import { import {
Edge,
EdgeChange, EdgeChange,
Node,
NodeChange, NodeChange,
NodeTypes, NodeTypes,
ProOptions, ProOptions,
@ -30,38 +28,31 @@ function OssFlow() {
const controller = useOssEdit(); const controller = useOssEdit();
const viewport = useViewport(); const viewport = useViewport();
const initialNodes: Node[] = useMemo( const [nodes, setNodes, onNodesChange] = useNodesState([]);
() => const [edges, setEdges, onEdgesChange] = useEdgesState([]);
!model.schema
? [] useLayoutEffect(() => {
: model.schema.items.map(operation => ({ if (!model.schema) {
setNodes([]);
setEdges([]);
return;
}
setNodes(
model.schema.items.map(operation => ({
id: String(operation.id), id: String(operation.id),
data: { label: operation.alias }, data: { label: operation.alias },
position: { x: operation.position_x, y: operation.position_y }, position: { x: operation.position_x, y: operation.position_y },
type: operation.operation_type.toString() type: operation.operation_type.toString()
})), }))
[model.schema]
); );
// const initialNodes = [ setEdges(
// { id: '1', data: { label: '-' }, position: { x: 100, y: 100 } }, model.schema.arguments.map((argument, index) => ({
// { id: '2', data: { label: 'Node 2' }, position: { x: 100, y: 200 } }
// ];
const initialEdges: Edge[] = useMemo(
() =>
!model.schema
? []
: model.schema.arguments.map((argument, index) => ({
id: String(index), id: String(index),
source: String(argument.argument), source: String(argument.argument),
target: String(argument.operation) target: String(argument.operation)
})), }))
[model.schema]
); );
// const initialEdges = [{ id: 'e1-2', source: '1', target: '2' }]; }, [model.schema, setNodes, setEdges]);
const [nodes, onNodesChange] = useNodesState<Node>(initialNodes);
const [edges, onEdgesChange] = useEdgesState<Edge>(initialEdges);
const getPositions = useCallback( const getPositions = useCallback(
() => () =>
@ -75,7 +66,6 @@ function OssFlow() {
const handleNodesChange = useCallback( const handleNodesChange = useCallback(
(changes: NodeChange[]) => { (changes: NodeChange[]) => {
// @ts-expect-error TODO: Figure out internal type errors in ReactFlow
onNodesChange(changes); onNodesChange(changes);
}, },
[onNodesChange] [onNodesChange]
@ -83,7 +73,6 @@ function OssFlow() {
const handleEdgesChange = useCallback( const handleEdgesChange = useCallback(
(changes: EdgeChange[]) => { (changes: EdgeChange[]) => {
// @ts-expect-error TODO: Figure out internal type errors in ReactFlow
onEdgesChange(changes); onEdgesChange(changes);
}, },
[onEdgesChange] [onEdgesChange]
@ -116,6 +105,8 @@ function OssFlow() {
fitView fitView
proOptions={proOptions} proOptions={proOptions}
nodeTypes={OssNodeTypes} nodeTypes={OssNodeTypes}
maxZoom={2}
minZoom={0.75}
/> />
), ),
[nodes, edges, proOptions, handleNodesChange, handleEdgesChange, OssNodeTypes] [nodes, edges, proOptions, handleNodesChange, handleEdgesChange, OssNodeTypes]

View File

@ -34,21 +34,22 @@
} }
} }
.Flow { .react-flow__node-input,
flex-grow: 1;
font-size: 12px;
}
.react-flow__node-input {
border: 1px solid #555;
padding: 10px;
width: 150px;
border-radius: 5px;
}
.react-flow__node-synthesis { .react-flow__node-synthesis {
border: 1px solid #555; border: 1px solid;
padding: 10px; padding: 2px;
width: 250px; width: 120px;
border-radius: 5px; border-radius: 5px;
background-color: var(--cl-bg-120);
color: var(--cl-fg-100);
border-color: var(--cl-bg-40);
background-color: var(--cl-bg-120);
&.dark {
color: var(--cd-fg-100);
border-color: var(--cd-bg-40);
background-color: var(--cd-bg-120);
}
} }