БазовийСтруктури данихCoreПлагін областіПлагін з'єднань
Щоб виконати цей гайд, ви можете створити додаток на Codesandbox, вибравши будь-який шаблон клієнтського додатку, або створити додаток локально.
bashnpm i rete rete-area-plugin rete-connection-plugin rete-react-plugin rete-render-utils styled-components react@18 react-dom@18
tsimport { NodeEditor, GetSchemes, ClassicPreset } from "rete"; type Schemes = GetSchemes< ClassicPreset.Node, ClassicPreset.Connection<ClassicPreset.Node, ClassicPreset.Node> >; const editor = new NodeEditor<Schemes>();
де Schemes
— це тип, який допоможе вам з виведенням типів під час налаштування плагіна. Для більш складних прикладів може знадобитися розширити класи ClassicPreset.Node
і ClassicPreset.Connection
.
Створення вузла, який містить один елемент керування та вихідний порт. Майте на увазі, що addNode
є асинхронним методом.
tsconst socket = new ClassicPreset.Socket("socket"); const nodeA = new ClassicPreset.Node("A"); nodeA.addControl("a", new ClassicPreset.InputControl("text", {})); nodeA.addOutput("a", new ClassicPreset.Output(socket)); await editor.addNode(nodeA);
Розмістіть цей код перед викликом addNode
:
tsimport { createRoot } from "react-dom/client"; import { AreaPlugin } from "rete-area-plugin"; import { ReactPlugin, Presets, ReactArea2D } from "rete-react-plugin"; type AreaExtra = ReactArea2D<Schemes>; const area = new AreaPlugin<Schemes, AreaExtra>(container); const render = new ReactPlugin<Schemes, AreaExtra>({ createRoot }); render.addPreset(Presets.classic.setup()); editor.use(area); area.use(render);
де
container
- це HTMLElement, де буде розміщено редакторAreaExtra
дозволяє включати спеціальні візуальні елементи, оскільки за замовчуванням доступні лише node
і connection
tsconst nodeB = new ClassicPreset.Node("B"); nodeB.addControl("b", new ClassicPreset.InputControl("text", {})); nodeB.addInput("b", new ClassicPreset.Input(socket)); await editor.addNode(nodeB);
Давайте встановимо зв'язок між цими вузлами
tsawait editor.addConnection(new ClassicPreset.Connection(nodeA, "a", nodeB, "b"));
На екрані буде показано два вузли, що перекриваються, але ми можемо змінити позицію другого вузла.
tsawait area.translate(nodeB.id, { x: 270, y: 0 });
Ця функція дозволяє користувачам взаємодіяти з вузлами.
tsimport { ConnectionPlugin, Presets as ConnectionPresets } from "rete-connection-plugin" const connection = new ConnectionPlugin<Schemes, AreaExtra>(); connection.addPreset(ConnectionPresets.classic.setup()) area.use(connection);
Використовуйте розширення zoomAt
, щоб автоматично пристосувати в’юпорт відповідно до всіх вузлів.
tsimport { AreaExtensions } from "rete-area-plugin"; AreaExtensions.zoomAt(area, editor.getNodes());
За замовчуванням розміри вузла обчислюються за допомогою clientWidth
/clientHeight
. Якщо цей метод викликається відразу після додавання вузлів, він може не працювати належним чином, доки елемент не буде видно на екрані. Натомість ви можете вказати властивості width
/height
у класі вузла, як продемонстровано на цьому кроці.
Крім того, розширення пропонують різні можливості, як-от можливість вибору вузлів користувачем.
tsAreaExtensions.selectableNodes(area, AreaExtensions.selector(), { accumulating: AreaExtensions.accumulateOnCtrl() });
Для отримання додаткової інформації перегляньте гайд Вибір.
Якщо ваш додаток дозволяє вибирати вузли, користувачі можуть захотіти переглядати вибрані вузли без будь-яких візуальних перешкод. Для полегшення цього передбачено додаткове розширення, яке автоматично виводить вибраний вузол на передній план.
tsAreaExtensions.simpleNodesOrder(area);
Перегляньте повний результат на сторінці прикладу Базовий редактор.