feat(frontend): refactor OutputComponent to use external dropdown menu component

This commit is contained in:
anovazzi1 2024-05-28 15:35:38 -03:00
commit 77cb85b7f2

View file

@ -16,6 +16,8 @@ import {
specialCharsRegex, specialCharsRegex,
} from "../constants/constants"; } from "../constants/constants";
import { downloadFlowsFromDatabase } from "../controllers/API"; import { downloadFlowsFromDatabase } from "../controllers/API";
import getFieldTitle from "../customNodes/utils/get-field-title";
import { DESCRIPTIONS } from "../flow_constants";
import { import {
APIClassType, APIClassType,
APIKindType, APIKindType,
@ -37,8 +39,6 @@ import {
updateEdgesHandleIdsType, updateEdgesHandleIdsType,
} from "../types/utils/reactflowUtils"; } from "../types/utils/reactflowUtils";
import { createRandomKey, toTitleCase } from "./utils"; import { createRandomKey, toTitleCase } from "./utils";
import { DESCRIPTIONS } from "../flow_constants";
import getFieldTitle from "../customNodes/utils/get-field-title";
const uid = new ShortUniqueId({ length: 5 }); const uid = new ShortUniqueId({ length: 5 });
export function checkChatInput(nodes: Node[]) { export function checkChatInput(nodes: Node[]) {
@ -413,27 +413,40 @@ export function updateEdgesHandleIds({
export function updateNewOutput({ nodes, edges }: updateEdgesHandleIdsType) { export function updateNewOutput({ nodes, edges }: updateEdgesHandleIdsType) {
let newEdges = cloneDeep(edges); let newEdges = cloneDeep(edges);
let newNodes = cloneDeep(nodes); let newNodes = cloneDeep(nodes);
newNodes.forEach((node) => {
if (
!node.data.node?.outputs &&
(node.data.node?.base_classes ?? []).length > 0
) {
const selected = node.data.node?.base_classes[0]!;
node.data.node!.outputs = [
{ types: node.data.node!.base_classes, selected: selected },
];
newEdges.forEach((edge) => { newEdges.forEach((edge) => {
if (edge.source === node.id && edge.sourceHandle) { if (edge.sourceHandle && edge.targetHandle) {
let newSourceHandle: sourceHandleType = scapeJSONParse( let newSourceHandle: sourceHandleType = scapeJSONParse(edge.sourceHandle);
edge.sourceHandle, let newTargetHandle: targetHandleType = scapeJSONParse(edge.targetHandle);
let intersection;
if (newTargetHandle.inputTypes && newTargetHandle.inputTypes.length > 0) {
//conjuction subtraction
intersection = newSourceHandle.baseClasses.filter((type) =>
newTargetHandle.inputTypes!.includes(type),
); );
} else {
intersection = newSourceHandle.baseClasses.filter(
(type) => type === newTargetHandle.type,
);
}
const selected = intersection[0];
newSourceHandle.baseClasses = [selected]; newSourceHandle.baseClasses = [selected];
const id = newSourceHandle.id;
const sourceNodeIndex = newNodes.findIndex((node) => node.id === id);
if (sourceNodeIndex > -1) {
const sourceNode = newNodes[sourceNodeIndex];
if (
!sourceNode.data.node?.outputs ||
sourceNode.data.node!.outputs!.length === 0
) {
sourceNode.data.node!.outputs = [
{ types: sourceNode.data.node!.base_classes, selected: selected },
];
}
}
edge.sourceHandle = scapedJSONStringfy(newSourceHandle); edge.sourceHandle = scapedJSONStringfy(newSourceHandle);
edge.data.sourceHandle = newSourceHandle; edge.data.sourceHandle = newSourceHandle;
} }
}); });
}
});
return { nodes: newNodes, edges: newEdges }; return { nodes: newNodes, edges: newEdges };
} }