feat(editor): Add item selector to expression output (#9281)

This commit is contained in:
Elias Meire
2024-05-09 14:45:31 +02:00
committed by GitHub
parent 1c1e4443f4
commit dc5994b185
20 changed files with 313 additions and 98 deletions

View File

@@ -105,7 +105,7 @@ export const useExpressionEditor = ({
const { from, to, text, token } = segment;
if (token === 'Resolvable') {
const { resolved, error, fullError } = resolve(text, hoveringItem.value);
const { resolved, error, fullError } = resolve(text, targetItem.value);
acc.push({
kind: 'resolvable',
from,
@@ -253,7 +253,7 @@ export const useExpressionEditor = ({
return end !== undefined && expressionExtensionNames.value.has(end);
}
function resolve(resolvable: string, hoverItem: TargetItem | null) {
function resolve(resolvable: string, target: TargetItem | null) {
const result: { resolved: unknown; error: boolean; fullError: Error | null } = {
resolved: undefined,
error: false,
@@ -268,7 +268,7 @@ export const useExpressionEditor = ({
let opts;
if (ndvStore.isInputParentOfActiveNode) {
opts = {
targetItem: hoverItem ?? undefined,
targetItem: target ?? undefined,
inputNodeName: ndvStore.ndvInputNodeName,
inputRunIndex: ndvStore.ndvInputRunIndex,
inputBranchIndex: ndvStore.ndvInputBranchIndex,
@@ -306,8 +306,21 @@ export const useExpressionEditor = ({
return result;
}
const hoveringItem = computed(() => {
return ndvStore.hoveringItem;
const targetItem = computed<TargetItem | null>(() => {
if (ndvStore.hoveringItem) {
return ndvStore.hoveringItem;
}
if (ndvStore.expressionOutputItemIndex && ndvStore.ndvInputNodeName) {
return {
nodeName: ndvStore.ndvInputNodeName,
runIndex: ndvStore.ndvInputRunIndex ?? 0,
outputIndex: ndvStore.ndvInputBranchIndex ?? 0,
itemIndex: ndvStore.expressionOutputItemIndex,
};
}
return null;
});
const resolvableSegments = computed<Resolvable[]>(() => {
@@ -372,14 +385,12 @@ export const useExpressionEditor = ({
});
watch(
[
() => workflowsStore.getWorkflowExecution,
() => workflowsStore.getWorkflowRunData,
() => ndvStore.hoveringItemNumber,
],
[() => workflowsStore.getWorkflowExecution, () => workflowsStore.getWorkflowRunData],
debouncedUpdateSegments,
);
watch(targetItem, updateSegments);
watch(resolvableSegments, updateHighlighting);
function setCursorPosition(pos: number | 'lastExpression' | 'end'): void {