816 lines
32 KiB
JavaScript
Executable File
816 lines
32 KiB
JavaScript
Executable File
import { d as defineComponent, h as createElementBlock, g as openBlock, n as normalizeClass, i as createVNode, aa as _sfc_main$4, _ as _export_sfc, a1 as useWorkflowsStore, a2 as useRoute, r as ref, x as computed, aB as getResourcePermissions, cb as resolveDirective, e as createBlock, f as createCommentVNode, l as unref, E as ElDropdown, w as withCtx, q as N8nButton, c as useI18n, aK as N8nBadge, k as createTextVNode, t as toDisplayString, j as createBaseVNode, m as N8nHeading, F as Fragment, A as renderList, p as N8nText, b2 as withDirectives, a as useToast, aZ as useExecutionsStore, a8 as resolveComponent, aq as createEventBus, al as useTelemetry, dB as useExecutionHelpers, v as useSettingsStore, aE as EnterpriseEditionFeature, dC as _sfc_main$6, dJ as RouterLink, V as VIEWS, H as ElDropdownMenu, I as ElDropdownItem, am as useMessage, an as MODAL_CONFIRM } from "./index-CeNA_ukL.js";
|
|
import { _ as _sfc_main$5 } from "./AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-Dwq22y10.js";
|
|
import { W as WorkflowPreview } from "./WorkflowPreview-BZs8Di_n.js";
|
|
import { u as useExecutionDebugging } from "./useExecutionDebugging-DDy8bilm.js";
|
|
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
__name: "VoteButtons",
|
|
props: {
|
|
vote: {}
|
|
},
|
|
emits: ["vote-click"],
|
|
setup(__props, { emit: __emit }) {
|
|
const emit = __emit;
|
|
const onVoteClick = (vote) => {
|
|
emit("vote-click", vote);
|
|
};
|
|
return (_ctx, _cache) => {
|
|
const _component_n8n_icon_button = _sfc_main$4;
|
|
return openBlock(), createElementBlock("div", {
|
|
class: normalizeClass(_ctx.$style.ratingIcon)
|
|
}, [
|
|
createVNode(_component_n8n_icon_button, {
|
|
class: normalizeClass([_ctx.$style.icon, _ctx.vote === "up" && _ctx.$style.up]),
|
|
type: "tertiary",
|
|
text: "",
|
|
size: "small",
|
|
icon: "thumbs-up",
|
|
onClick: _cache[0] || (_cache[0] = ($event) => onVoteClick("up"))
|
|
}, null, 8, ["class"]),
|
|
createVNode(_component_n8n_icon_button, {
|
|
class: normalizeClass([_ctx.$style.icon, _ctx.vote === "down" && _ctx.$style.down]),
|
|
type: "tertiary",
|
|
text: "",
|
|
size: "small",
|
|
icon: "thumbs-down",
|
|
onClick: _cache[1] || (_cache[1] = ($event) => onVoteClick("down"))
|
|
}, null, 8, ["class"])
|
|
], 2);
|
|
};
|
|
}
|
|
});
|
|
const ratingIcon = "_ratingIcon_1gp02_123";
|
|
const icon = "_icon_1gp02_127";
|
|
const up = "_up_1gp02_130";
|
|
const down = "_down_1gp02_130";
|
|
const style0$3 = {
|
|
ratingIcon,
|
|
icon,
|
|
up,
|
|
down
|
|
};
|
|
const cssModules$3 = {
|
|
"$style": style0$3
|
|
};
|
|
const __unplugin_components_3 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__cssModules", cssModules$3]]);
|
|
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
__name: "WorkflowExecutionAnnotationPanel.ee",
|
|
props: {
|
|
execution: {}
|
|
},
|
|
setup(__props) {
|
|
const props = __props;
|
|
const workflowsStore = useWorkflowsStore();
|
|
const route = useRoute();
|
|
const i18n = useI18n();
|
|
const annotationDropdownRef = ref(null);
|
|
const isDropdownVisible = ref(false);
|
|
const workflowId = computed(() => route.params.name);
|
|
const workflowPermissions = computed(
|
|
() => getResourcePermissions(workflowsStore.getWorkflowById(workflowId.value)?.scopes).workflow
|
|
);
|
|
const customDataLength = computed(() => {
|
|
return props.execution?.customData ? Object.keys(props.execution?.customData).length : 0;
|
|
});
|
|
function onEllipsisButtonBlur(event) {
|
|
if (annotationDropdownRef.value && event.relatedTarget === null) {
|
|
annotationDropdownRef.value.handleClose();
|
|
}
|
|
}
|
|
function onDropdownVisibleChange(visible) {
|
|
isDropdownVisible.value = visible;
|
|
}
|
|
return (_ctx, _cache) => {
|
|
const _component_n8n_badge = N8nBadge;
|
|
const _component_N8nButton = N8nButton;
|
|
const _component_n8n_heading = N8nHeading;
|
|
const _component_n8n_text = N8nText;
|
|
const _directive_n8n_html = resolveDirective("n8n-html");
|
|
return _ctx.execution ? (openBlock(), createBlock(unref(ElDropdown), {
|
|
key: 0,
|
|
ref_key: "annotationDropdownRef",
|
|
ref: annotationDropdownRef,
|
|
trigger: "click",
|
|
onVisibleChange: onDropdownVisibleChange
|
|
}, {
|
|
dropdown: withCtx(() => [
|
|
createBaseVNode("div", {
|
|
ref: "container",
|
|
class: normalizeClass(["execution-annotation-panel", _ctx.$style.container]),
|
|
"data-test-id": "execution-annotation-panel"
|
|
}, [
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.section)
|
|
}, [
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.heading)
|
|
}, [
|
|
createVNode(_component_n8n_heading, {
|
|
tag: "h3",
|
|
size: "small",
|
|
color: "text-dark"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(i18n).baseText("generic.annotationData")), 1)
|
|
]),
|
|
_: 1
|
|
})
|
|
], 2),
|
|
_ctx.execution?.customData && Object.keys(_ctx.execution?.customData).length > 0 ? (openBlock(), createElementBlock("div", {
|
|
key: 0,
|
|
class: normalizeClass(_ctx.$style.metadata)
|
|
}, [
|
|
(openBlock(true), createElementBlock(Fragment, null, renderList(Object.keys(_ctx.execution?.customData), (attr) => {
|
|
return openBlock(), createElementBlock("div", {
|
|
key: attr,
|
|
class: normalizeClass(_ctx.$style.customDataEntry)
|
|
}, [
|
|
createVNode(_component_n8n_text, {
|
|
class: normalizeClass(_ctx.$style.key),
|
|
size: "small",
|
|
color: "text-base"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(attr), 1)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["class"]),
|
|
createVNode(_component_n8n_text, {
|
|
class: normalizeClass(_ctx.$style.value),
|
|
size: "small",
|
|
color: "text-base"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(_ctx.execution?.customData[attr]), 1)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["class"])
|
|
], 2);
|
|
}), 128))
|
|
], 2)) : (openBlock(), createElementBlock("div", {
|
|
key: 1,
|
|
class: normalizeClass(_ctx.$style.noResultsContainer),
|
|
"data-test-id": "execution-annotation-data-empty"
|
|
}, [
|
|
createVNode(_component_n8n_text, {
|
|
color: "text-base",
|
|
size: "small",
|
|
align: "center"
|
|
}, {
|
|
default: withCtx(() => [
|
|
withDirectives(createBaseVNode("span", null, null, 512), [
|
|
[_directive_n8n_html, unref(i18n).baseText("executionAnnotationView.data.notFound")]
|
|
])
|
|
]),
|
|
_: 1
|
|
})
|
|
], 2))
|
|
], 2)
|
|
], 2)
|
|
]),
|
|
default: withCtx(() => [
|
|
createVNode(_component_N8nButton, {
|
|
title: unref(i18n).baseText("executionDetails.additionalActions"),
|
|
disabled: !workflowPermissions.value.update,
|
|
icon: "list-checks",
|
|
class: normalizeClass({
|
|
[_ctx.$style.highlightDataButton]: true,
|
|
[_ctx.$style.highlightDataButtonActive]: customDataLength.value > 0,
|
|
[_ctx.$style.highlightDataButtonOpen]: isDropdownVisible.value
|
|
}),
|
|
size: "small",
|
|
type: "secondary",
|
|
"data-test-id": "execution-preview-ellipsis-button",
|
|
onBlur: onEllipsisButtonBlur
|
|
}, {
|
|
default: withCtx(() => [
|
|
customDataLength.value > 0 ? (openBlock(), createBlock(_component_n8n_badge, {
|
|
key: 0,
|
|
class: normalizeClass(_ctx.$style.badge),
|
|
theme: "primary"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(customDataLength.value.toString()), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["class"])) : createCommentVNode("", true)
|
|
]),
|
|
_: 1
|
|
}, 8, ["title", "disabled", "class"])
|
|
]),
|
|
_: 1
|
|
}, 512)) : createCommentVNode("", true);
|
|
};
|
|
}
|
|
});
|
|
const highlightDataButton$1 = "_highlightDataButton_snwak_123";
|
|
const highlightDataButtonActive$1 = "_highlightDataButtonActive_snwak_128";
|
|
const highlightDataButtonOpen$1 = "_highlightDataButtonOpen_snwak_132";
|
|
const badge$1 = "_badge_snwak_138";
|
|
const container = "_container_snwak_142";
|
|
const section = "_section_snwak_154";
|
|
const metadata = "_metadata_snwak_163";
|
|
const heading = "_heading_snwak_167";
|
|
const controls = "_controls_snwak_174";
|
|
const customDataEntry = "_customDataEntry_snwak_186";
|
|
const key = "_key_snwak_193";
|
|
const noResultsContainer = "_noResultsContainer_snwak_197";
|
|
const style0$2 = {
|
|
highlightDataButton: highlightDataButton$1,
|
|
highlightDataButtonActive: highlightDataButtonActive$1,
|
|
highlightDataButtonOpen: highlightDataButtonOpen$1,
|
|
badge: badge$1,
|
|
container,
|
|
section,
|
|
metadata,
|
|
heading,
|
|
controls,
|
|
customDataEntry,
|
|
key,
|
|
noResultsContainer,
|
|
"execution-annotation-panel": "_execution-annotation-panel_snwak_202",
|
|
"el-skeleton__item": "_el-skeleton__item_snwak_202"
|
|
};
|
|
const cssModules$2 = {
|
|
"$style": style0$2
|
|
};
|
|
const WorkflowExecutionAnnotationPanel = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__cssModules", cssModules$2]]);
|
|
const _hoisted_1$1 = { key: 1 };
|
|
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
__name: "WorkflowExecutionAnnotationTags.ee",
|
|
props: {
|
|
execution: {}
|
|
},
|
|
setup(__props) {
|
|
const props = __props;
|
|
const locale = useI18n();
|
|
const telemetry = useTelemetry();
|
|
const { showError } = useToast();
|
|
const executionsStore = useExecutionsStore();
|
|
const tagIds = computed(() => props.execution.annotation?.tags.map((tag) => tag.id) ?? []);
|
|
const tags2 = computed(() => props.execution.annotation?.tags);
|
|
const tagsEventBus = createEventBus();
|
|
const isTagsEditEnabled = ref(false);
|
|
const appliedTagIds = ref([]);
|
|
const tagsSaving = ref(false);
|
|
const tagsHasChanged = (prev, curr) => {
|
|
if (prev.length !== curr.length) {
|
|
return true;
|
|
}
|
|
const set = new Set(prev);
|
|
return curr.reduce((acc, val) => acc || !set.has(val), false);
|
|
};
|
|
const onTagsEditEnable = () => {
|
|
appliedTagIds.value = tagIds.value;
|
|
isTagsEditEnabled.value = true;
|
|
tagsEventBus.emit("focus");
|
|
};
|
|
const onTagsBlur = async () => {
|
|
if (!props.execution) {
|
|
return;
|
|
}
|
|
const currentTagIds = tagIds.value ?? [];
|
|
const newTagIds = appliedTagIds.value;
|
|
if (!tagsHasChanged(currentTagIds, newTagIds)) {
|
|
isTagsEditEnabled.value = false;
|
|
return;
|
|
}
|
|
if (tagsSaving.value) {
|
|
return;
|
|
}
|
|
tagsSaving.value = true;
|
|
try {
|
|
await executionsStore.annotateExecution(props.execution.id, { tags: newTagIds });
|
|
if (newTagIds.length > 0) {
|
|
telemetry.track("User added execution annotation tag", {
|
|
tag_ids: newTagIds,
|
|
execution_id: props.execution.id
|
|
});
|
|
}
|
|
} catch (e) {
|
|
showError(e, "executionAnnotationView.tag.error");
|
|
}
|
|
tagsSaving.value = false;
|
|
isTagsEditEnabled.value = false;
|
|
};
|
|
const onTagsEditEsc = () => {
|
|
isTagsEditEnabled.value = false;
|
|
};
|
|
return (_ctx, _cache) => {
|
|
const _component_N8nButton = N8nButton;
|
|
const _component_el_tag = resolveComponent("el-tag");
|
|
return openBlock(), createElementBlock("div", {
|
|
class: normalizeClass(_ctx.$style.executionDetailsTags)
|
|
}, [
|
|
createBaseVNode("span", {
|
|
class: normalizeClass(_ctx.$style.tags),
|
|
"data-test-id": "annotation-tags-container"
|
|
}, [
|
|
isTagsEditEnabled.value ? (openBlock(), createBlock(_sfc_main$5, {
|
|
key: 0,
|
|
ref: "dropdown",
|
|
modelValue: appliedTagIds.value,
|
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => appliedTagIds.value = $event),
|
|
"create-enabled": true,
|
|
"event-bus": unref(tagsEventBus),
|
|
placeholder: unref(locale).baseText("executionAnnotationView.chooseOrCreateATag"),
|
|
class: "tags-edit",
|
|
"data-test-id": "workflow-tags-dropdown",
|
|
onBlur: onTagsBlur,
|
|
onEsc: onTagsEditEsc
|
|
}, null, 8, ["modelValue", "event-bus", "placeholder"])) : tagIds.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
createVNode(_component_N8nButton, {
|
|
class: normalizeClass([_ctx.$style.addTagButton, "clickable"]),
|
|
label: unref(locale).baseText("executionAnnotationView.addTag"),
|
|
type: "secondary",
|
|
size: "mini",
|
|
outline: false,
|
|
text: true,
|
|
"data-test-id": "new-tag-link",
|
|
icon: "plus",
|
|
onClick: onTagsEditEnable
|
|
}, null, 8, ["class", "label"])
|
|
])) : (openBlock(), createElementBlock("span", {
|
|
key: 2,
|
|
class: normalizeClass([
|
|
"tags-container",
|
|
// FIXME: There are some global styles for tags relying on this classname
|
|
_ctx.$style.tagsContainer
|
|
]),
|
|
"data-test-id": "execution-annotation-tags",
|
|
onClick: onTagsEditEnable
|
|
}, [
|
|
(openBlock(true), createElementBlock(Fragment, null, renderList(tags2.value, (tag) => {
|
|
return openBlock(), createElementBlock("span", {
|
|
key: tag.id,
|
|
class: "clickable"
|
|
}, [
|
|
createVNode(_component_el_tag, {
|
|
title: tag.name,
|
|
type: "info",
|
|
size: "small",
|
|
"disable-transitions": true
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(tag.name), 1)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["title"])
|
|
]);
|
|
}), 128)),
|
|
createBaseVNode("span", {
|
|
class: normalizeClass(_ctx.$style.addTagWrapper)
|
|
}, [
|
|
createVNode(_component_N8nButton, {
|
|
class: normalizeClass([_ctx.$style.addTagButton, _ctx.$style.addTagButtonIconOnly, "clickable"]),
|
|
type: "secondary",
|
|
size: "mini",
|
|
outline: false,
|
|
text: true,
|
|
"data-test-id": "new-tag-link",
|
|
icon: "plus",
|
|
onClick: onTagsEditEnable
|
|
}, null, 8, ["class"])
|
|
], 2)
|
|
], 2))
|
|
], 2)
|
|
], 2);
|
|
};
|
|
}
|
|
});
|
|
const tags = "_tags_19zht_123";
|
|
const addTagButton = "_addTagButton_19zht_128";
|
|
const addTagButtonIconOnly = "_addTagButtonIconOnly_19zht_149";
|
|
const tagsContainer = "_tagsContainer_19zht_154";
|
|
const style0$1 = {
|
|
tags,
|
|
addTagButton,
|
|
addTagButtonIconOnly,
|
|
tagsContainer
|
|
};
|
|
const cssModules$1 = {
|
|
"$style": style0$1
|
|
};
|
|
const WorkflowExecutionAnnotationTags = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__cssModules", cssModules$1]]);
|
|
const _hoisted_1 = ["data-test-id"];
|
|
const _hoisted_2 = { class: "retry-button" };
|
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
__name: "WorkflowExecutionsPreview",
|
|
props: {
|
|
execution: {}
|
|
},
|
|
emits: ["deleteCurrentExecution", "retryExecution", "stopExecution"],
|
|
setup(__props, { emit: __emit }) {
|
|
const props = __props;
|
|
const emit = __emit;
|
|
const route = useRoute();
|
|
const locale = useI18n();
|
|
const { showError } = useToast();
|
|
const executionHelpers = useExecutionHelpers();
|
|
const message = useMessage();
|
|
const executionDebugging = useExecutionDebugging();
|
|
const workflowsStore = useWorkflowsStore();
|
|
const settingsStore = useSettingsStore();
|
|
const retryDropdownRef = ref(null);
|
|
const workflowId = computed(() => route.params.name);
|
|
const workflowPermissions = computed(
|
|
() => getResourcePermissions(workflowsStore.getWorkflowById(workflowId.value)?.scopes).workflow
|
|
);
|
|
const executionId = computed(() => route.params.executionId);
|
|
const nodeId = computed(() => route.params.nodeId);
|
|
const executionUIDetails = computed(
|
|
() => props.execution ? executionHelpers.getUIDetails(props.execution) : null
|
|
);
|
|
const debugButtonData = computed(
|
|
() => props.execution?.status === "success" ? {
|
|
text: locale.baseText("executionsList.debug.button.copyToEditor"),
|
|
type: "secondary"
|
|
} : {
|
|
text: locale.baseText("executionsList.debug.button.debugInEditor"),
|
|
type: "primary"
|
|
}
|
|
);
|
|
const isRetriable = computed(
|
|
() => !!props.execution && executionHelpers.isExecutionRetriable(props.execution)
|
|
);
|
|
const isAnnotationEnabled = computed(
|
|
() => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.AdvancedExecutionFilters]
|
|
);
|
|
const hasAnnotation = computed(
|
|
() => !!props.execution?.annotation && (props.execution?.annotation.vote || props.execution?.annotation.tags.length > 0)
|
|
);
|
|
const executionsStore = useExecutionsStore();
|
|
const activeExecution = computed(() => {
|
|
return executionsStore.activeExecution;
|
|
});
|
|
const vote = computed(() => activeExecution.value?.annotation?.vote || null);
|
|
async function onDeleteExecution() {
|
|
const confirmationText = [
|
|
hasAnnotation.value && locale.baseText("executionDetails.confirmMessage.annotationsNote"),
|
|
locale.baseText("executionDetails.confirmMessage.message")
|
|
].filter(Boolean).join(" ");
|
|
const deleteConfirmed = await message.confirm(
|
|
confirmationText,
|
|
locale.baseText("executionDetails.confirmMessage.headline"),
|
|
{
|
|
type: "warning",
|
|
confirmButtonText: locale.baseText("executionDetails.confirmMessage.confirmButtonText"),
|
|
cancelButtonText: ""
|
|
}
|
|
);
|
|
if (deleteConfirmed !== MODAL_CONFIRM) {
|
|
return;
|
|
}
|
|
emit("deleteCurrentExecution");
|
|
}
|
|
function handleRetryClick(command) {
|
|
if (props.execution) {
|
|
emit("retryExecution", { execution: props.execution, command });
|
|
}
|
|
}
|
|
function handleStopClick() {
|
|
emit("stopExecution");
|
|
}
|
|
function onRetryButtonBlur(event) {
|
|
if (retryDropdownRef.value && event.relatedTarget === null) {
|
|
retryDropdownRef.value.handleClose();
|
|
}
|
|
}
|
|
const onVoteClick = async (voteValue) => {
|
|
if (!activeExecution.value) {
|
|
return;
|
|
}
|
|
const voteToSet = voteValue === vote.value ? null : voteValue;
|
|
try {
|
|
await executionsStore.annotateExecution(activeExecution.value.id, { vote: voteToSet });
|
|
} catch (e) {
|
|
showError(e, "executionAnnotationView.vote.error");
|
|
}
|
|
};
|
|
return (_ctx, _cache) => {
|
|
const _component_N8nText = N8nText;
|
|
const _component_N8nButton = N8nButton;
|
|
const _component_N8nSpinner = _sfc_main$6;
|
|
const _component_VoteButtons = __unplugin_components_3;
|
|
const _component_N8nIconButton = _sfc_main$4;
|
|
return executionUIDetails.value?.name === "new" ? (openBlock(), createElementBlock("div", {
|
|
key: 0,
|
|
class: normalizeClass(_ctx.$style.newInfo)
|
|
}, [
|
|
createVNode(_component_N8nText, {
|
|
class: normalizeClass(_ctx.$style.newMessage),
|
|
color: "text-light"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionDetails.newMessage")), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["class"]),
|
|
createVNode(_component_N8nButton, {
|
|
class: "mt-l",
|
|
type: "tertiary",
|
|
onClick: handleStopClick
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionsList.stopExecution")), 1)
|
|
]),
|
|
_: 1
|
|
})
|
|
], 2)) : executionUIDetails.value?.name === "running" ? (openBlock(), createElementBlock("div", {
|
|
key: 1,
|
|
class: normalizeClass(_ctx.$style.runningInfo)
|
|
}, [
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.spinner)
|
|
}, [
|
|
createVNode(_component_N8nSpinner, { type: "ring" })
|
|
], 2),
|
|
createVNode(_component_N8nText, {
|
|
class: normalizeClass(_ctx.$style.runningMessage),
|
|
color: "text-light"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionDetails.runningMessage")), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["class"]),
|
|
createVNode(_component_N8nButton, {
|
|
"data-test-id": "stop-execution",
|
|
class: "mt-l",
|
|
type: "tertiary",
|
|
disabled: !workflowPermissions.value.execute,
|
|
onClick: handleStopClick
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionsList.stopExecution")), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["disabled"])
|
|
], 2)) : executionUIDetails.value ? (openBlock(), createElementBlock("div", {
|
|
key: 2,
|
|
class: normalizeClass(_ctx.$style.previewContainer)
|
|
}, [
|
|
_ctx.execution ? (openBlock(), createElementBlock("div", {
|
|
key: 0,
|
|
class: normalizeClass(_ctx.$style.executionDetails),
|
|
"data-test-id": `execution-preview-details-${executionId.value}`
|
|
}, [
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.executionDetailsLeft)
|
|
}, [
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.executionTitle)
|
|
}, [
|
|
createVNode(_component_N8nText, {
|
|
size: "large",
|
|
color: "text-dark",
|
|
bold: true,
|
|
"data-test-id": "execution-time"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(executionUIDetails.value?.startTime), 1)
|
|
]),
|
|
_: 1
|
|
}),
|
|
isAnnotationEnabled.value && _ctx.execution ? (openBlock(), createBlock(_component_VoteButtons, {
|
|
key: 0,
|
|
"data-test-id": "execution-preview-vote-buttons",
|
|
vote: vote.value,
|
|
class: normalizeClass(_ctx.$style.voteButtons),
|
|
onVoteClick
|
|
}, null, 8, ["vote", "class"])) : createCommentVNode("", true)
|
|
], 2),
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.executionDetailsInfo)
|
|
}, [
|
|
executionUIDetails.value?.name === "running" ? (openBlock(), createBlock(_component_N8nSpinner, {
|
|
key: 0,
|
|
size: "small",
|
|
class: normalizeClass([_ctx.$style.spinner, "mr-4xs"])
|
|
}, null, 8, ["class"])) : createCommentVNode("", true),
|
|
createVNode(_component_N8nText, {
|
|
size: "medium",
|
|
class: normalizeClass([_ctx.$style.status, _ctx.$style[executionUIDetails.value.name]]),
|
|
"data-test-id": "execution-preview-label"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(executionUIDetails.value.label), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["class"]),
|
|
_cache[1] || (_cache[1] = createTextVNode(" " + toDisplayString(" ") + " ")),
|
|
executionUIDetails.value?.showTimestamp === false ? (openBlock(), createBlock(_component_N8nText, {
|
|
key: 1,
|
|
color: "text-base",
|
|
size: "medium"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(" | ID#" + toDisplayString(_ctx.execution.id), 1)
|
|
]),
|
|
_: 1
|
|
})) : executionUIDetails.value.name === "running" ? (openBlock(), createBlock(_component_N8nText, {
|
|
key: 2,
|
|
color: "text-base",
|
|
size: "medium"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionDetails.runningTimeRunning", {
|
|
interpolate: { time: executionUIDetails.value?.runningTime }
|
|
})) + " | ID#" + toDisplayString(_ctx.execution.id), 1)
|
|
]),
|
|
_: 1
|
|
})) : executionUIDetails.value.name !== "waiting" ? (openBlock(), createBlock(_component_N8nText, {
|
|
key: 3,
|
|
color: "text-base",
|
|
size: "medium",
|
|
"data-test-id": "execution-preview-id"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionDetails.runningTimeFinished", {
|
|
interpolate: { time: executionUIDetails.value?.runningTime ?? "unknown" }
|
|
})) + " | ID#" + toDisplayString(_ctx.execution.id), 1)
|
|
]),
|
|
_: 1
|
|
})) : createCommentVNode("", true)
|
|
], 2),
|
|
_ctx.execution.mode === "retry" ? (openBlock(), createElementBlock("div", {
|
|
key: 0,
|
|
class: normalizeClass(_ctx.$style.executionDetailsRetry)
|
|
}, [
|
|
createVNode(_component_N8nText, {
|
|
color: "text-base",
|
|
size: "small"
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionDetails.retry")) + " ", 1),
|
|
createVNode(unref(RouterLink), {
|
|
class: normalizeClass(_ctx.$style.executionLink),
|
|
to: {
|
|
name: unref(VIEWS).EXECUTION_PREVIEW,
|
|
params: {
|
|
workflowId: _ctx.execution.workflowId,
|
|
executionId: _ctx.execution.retryOf
|
|
}
|
|
}
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(" #" + toDisplayString(_ctx.execution.retryOf), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["class", "to"])
|
|
]),
|
|
_: 1
|
|
})
|
|
], 2)) : createCommentVNode("", true),
|
|
isAnnotationEnabled.value && _ctx.execution ? (openBlock(), createBlock(WorkflowExecutionAnnotationTags, {
|
|
key: 1,
|
|
execution: _ctx.execution
|
|
}, null, 8, ["execution"])) : createCommentVNode("", true)
|
|
], 2),
|
|
createBaseVNode("div", {
|
|
class: normalizeClass(_ctx.$style.actions)
|
|
}, [
|
|
createVNode(unref(RouterLink), {
|
|
to: {
|
|
name: unref(VIEWS).EXECUTION_DEBUG,
|
|
params: {
|
|
name: _ctx.execution.workflowId,
|
|
executionId: _ctx.execution.id
|
|
}
|
|
}
|
|
}, {
|
|
default: withCtx(() => [
|
|
createVNode(_component_N8nButton, {
|
|
size: "medium",
|
|
type: debugButtonData.value.type,
|
|
class: normalizeClass(_ctx.$style.debugLink),
|
|
disabled: !workflowPermissions.value.update
|
|
}, {
|
|
default: withCtx(() => [
|
|
createBaseVNode("span", {
|
|
"data-test-id": "execution-debug-button",
|
|
onClick: _cache[0] || (_cache[0] = //@ts-ignore
|
|
(...args) => unref(executionDebugging).handleDebugLinkClick && unref(executionDebugging).handleDebugLinkClick(...args))
|
|
}, toDisplayString(debugButtonData.value.text), 1)
|
|
]),
|
|
_: 1
|
|
}, 8, ["type", "class", "disabled"])
|
|
]),
|
|
_: 1
|
|
}, 8, ["to"]),
|
|
isRetriable.value ? (openBlock(), createBlock(unref(ElDropdown), {
|
|
key: 0,
|
|
ref: "retryDropdown",
|
|
trigger: "click",
|
|
onCommand: handleRetryClick
|
|
}, {
|
|
dropdown: withCtx(() => [
|
|
createVNode(unref(ElDropdownMenu), null, {
|
|
default: withCtx(() => [
|
|
createVNode(unref(ElDropdownItem), { command: "current-workflow" }, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionsList.retryWithCurrentlySavedWorkflow")), 1)
|
|
]),
|
|
_: 1
|
|
}),
|
|
createVNode(unref(ElDropdownItem), { command: "original-workflow" }, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(unref(locale).baseText("executionsList.retryWithOriginalWorkflow")), 1)
|
|
]),
|
|
_: 1
|
|
})
|
|
]),
|
|
_: 1
|
|
})
|
|
]),
|
|
default: withCtx(() => [
|
|
createBaseVNode("span", _hoisted_2, [
|
|
createVNode(_component_N8nIconButton, {
|
|
size: "medium",
|
|
type: "tertiary",
|
|
title: unref(locale).baseText("executionsList.retryExecution"),
|
|
disabled: !workflowPermissions.value.update,
|
|
icon: "redo-2",
|
|
"data-test-id": "execution-preview-retry-button",
|
|
onBlur: onRetryButtonBlur
|
|
}, null, 8, ["title", "disabled"])
|
|
])
|
|
]),
|
|
_: 1
|
|
}, 512)) : createCommentVNode("", true),
|
|
isAnnotationEnabled.value && activeExecution.value ? (openBlock(), createBlock(WorkflowExecutionAnnotationPanel, {
|
|
key: 1,
|
|
execution: activeExecution.value
|
|
}, null, 8, ["execution"])) : createCommentVNode("", true),
|
|
createVNode(_component_N8nIconButton, {
|
|
title: unref(locale).baseText("executionDetails.deleteExecution"),
|
|
disabled: !workflowPermissions.value.update,
|
|
icon: "trash-2",
|
|
size: "medium",
|
|
type: "tertiary",
|
|
"data-test-id": "execution-preview-delete-button",
|
|
onClick: onDeleteExecution
|
|
}, null, 8, ["title", "disabled"])
|
|
], 2)
|
|
], 10, _hoisted_1)) : createCommentVNode("", true),
|
|
(openBlock(), createBlock(WorkflowPreview, {
|
|
key: executionId.value,
|
|
mode: "execution",
|
|
"loader-type": "spinner",
|
|
"execution-id": executionId.value,
|
|
"execution-mode": _ctx.execution?.mode || "",
|
|
"node-id": nodeId.value
|
|
}, null, 8, ["execution-id", "execution-mode", "node-id"]))
|
|
], 2)) : createCommentVNode("", true);
|
|
};
|
|
}
|
|
});
|
|
const previewContainer = "_previewContainer_1v3g2_123";
|
|
const executionDetails = "_executionDetails_1v3g2_129";
|
|
const executionDetailsLeft = "_executionDetailsLeft_1v3g2_147";
|
|
const executionTitle = "_executionTitle_1v3g2_153";
|
|
const voteButtons = "_voteButtons_1v3g2_159";
|
|
const spinner = "_spinner_1v3g2_163";
|
|
const running = "_running_1v3g2_169";
|
|
const waiting = "_waiting_1v3g2_174";
|
|
const success = "_success_1v3g2_178";
|
|
const error = "_error_1v3g2_182";
|
|
const newInfo = "_newInfo_1v3g2_186";
|
|
const runningInfo = "_runningInfo_1v3g2_187";
|
|
const newMessage = "_newMessage_1v3g2_194";
|
|
const runningMessage = "_runningMessage_1v3g2_195";
|
|
const debugLink = "_debugLink_1v3g2_201";
|
|
const actions = "_actions_1v3g2_206";
|
|
const highlightDataButton = "_highlightDataButton_1v3g2_211";
|
|
const highlightDataButtonActive = "_highlightDataButtonActive_1v3g2_216";
|
|
const highlightDataButtonOpen = "_highlightDataButtonOpen_1v3g2_220";
|
|
const badge = "_badge_1v3g2_226";
|
|
const style0 = {
|
|
previewContainer,
|
|
executionDetails,
|
|
executionDetailsLeft,
|
|
executionTitle,
|
|
voteButtons,
|
|
spinner,
|
|
running,
|
|
waiting,
|
|
success,
|
|
error,
|
|
newInfo,
|
|
runningInfo,
|
|
newMessage,
|
|
runningMessage,
|
|
debugLink,
|
|
actions,
|
|
highlightDataButton,
|
|
highlightDataButtonActive,
|
|
highlightDataButtonOpen,
|
|
badge
|
|
};
|
|
const cssModules = {
|
|
"$style": style0
|
|
};
|
|
const WorkflowExecutionsPreview = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
|
|
export {
|
|
WorkflowExecutionsPreview as default
|
|
};
|