mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
chore: Lintfix and format (no-changelog) (#13705)
Some checks failed
Test Master / install-and-build (push) Has been cancelled
Test Master / Unit tests (18.x) (push) Has been cancelled
Test Master / Unit tests (20.x) (push) Has been cancelled
Test Master / Unit tests (22.4) (push) Has been cancelled
Test Master / Lint (push) Has been cancelled
Test Master / Notify Slack on failure (push) Has been cancelled
Some checks failed
Test Master / install-and-build (push) Has been cancelled
Test Master / Unit tests (18.x) (push) Has been cancelled
Test Master / Unit tests (20.x) (push) Has been cancelled
Test Master / Unit tests (22.4) (push) Has been cancelled
Test Master / Lint (push) Has been cancelled
Test Master / Notify Slack on failure (push) Has been cancelled
This commit is contained in:
parent
9e83ff51da
commit
d2dd1796a8
2
.github/workflows/ci-postgres-mysql.yml
vendored
2
.github/workflows/ci-postgres-mysql.yml
vendored
|
@ -130,7 +130,7 @@ jobs:
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
service-name: [ 'mysql-8.0.13', 'mysql-8.4' ]
|
service-name: ['mysql-8.0.13', 'mysql-8.4']
|
||||||
env:
|
env:
|
||||||
DB_MYSQLDB_PASSWORD: password
|
DB_MYSQLDB_PASSWORD: password
|
||||||
steps:
|
steps:
|
||||||
|
|
|
@ -15,7 +15,7 @@ github_checks:
|
||||||
flags:
|
flags:
|
||||||
tests:
|
tests:
|
||||||
paths:
|
paths:
|
||||||
- "**"
|
- '**'
|
||||||
carryforward: true
|
carryforward: true
|
||||||
|
|
||||||
component_management:
|
component_management:
|
||||||
|
@ -24,7 +24,7 @@ component_management:
|
||||||
- type: project
|
- type: project
|
||||||
target: auto
|
target: auto
|
||||||
branches:
|
branches:
|
||||||
- "!master"
|
- '!master'
|
||||||
individual_components:
|
individual_components:
|
||||||
- component_id: backend_packages
|
- component_id: backend_packages
|
||||||
name: Backend
|
name: Backend
|
||||||
|
|
|
@ -65,7 +65,7 @@ withDefaults(defineProps<ActionBoxProps>(), {
|
||||||
:class="$style.callout"
|
:class="$style.callout"
|
||||||
>
|
>
|
||||||
<N8nText color="text-base">
|
<N8nText color="text-base">
|
||||||
<span size="small" v-n8n-html="calloutText"></span>
|
<span v-n8n-html="calloutText" size="small"></span>
|
||||||
</N8nText>
|
</N8nText>
|
||||||
</N8nCallout>
|
</N8nCallout>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -71,7 +71,7 @@ const onTooltipClick = (item: string, event: MouseEvent) => emit('tooltipClick',
|
||||||
<div v-for="item in items" :key="item.id" :class="$style.accordionItem">
|
<div v-for="item in items" :key="item.id" :class="$style.accordionItem">
|
||||||
<n8n-tooltip :disabled="!item.tooltip">
|
<n8n-tooltip :disabled="!item.tooltip">
|
||||||
<template #content>
|
<template #content>
|
||||||
<div @click="onTooltipClick(item.id, $event)" v-n8n-html="item.tooltip"></div>
|
<div v-n8n-html="item.tooltip" @click="onTooltipClick(item.id, $event)"></div>
|
||||||
</template>
|
</template>
|
||||||
<N8nIcon :icon="item.icon" :color="item.iconColor" size="small" class="mr-2xs" />
|
<N8nIcon :icon="item.icon" :color="item.iconColor" size="small" class="mr-2xs" />
|
||||||
</n8n-tooltip>
|
</n8n-tooltip>
|
||||||
|
|
|
@ -198,11 +198,11 @@ const onCheckboxChange = (index: number) => {
|
||||||
<div
|
<div
|
||||||
v-if="!loading"
|
v-if="!loading"
|
||||||
ref="editor"
|
ref="editor"
|
||||||
|
v-n8n-html="htmlContent"
|
||||||
:class="$style[theme]"
|
:class="$style[theme]"
|
||||||
@click="onClick"
|
@click="onClick"
|
||||||
@mousedown="onMouseDown"
|
@mousedown="onMouseDown"
|
||||||
@change="onChange"
|
@change="onChange"
|
||||||
v-n8n-html="htmlContent"
|
|
||||||
/>
|
/>
|
||||||
<div v-else :class="$style.markdown">
|
<div v-else :class="$style.markdown">
|
||||||
<div v-for="(_, index) in loadingBlocks" :key="index">
|
<div v-for="(_, index) in loadingBlocks" :key="index">
|
||||||
|
|
|
@ -74,9 +74,9 @@ const onClick = (event: MouseEvent) => {
|
||||||
<slot>
|
<slot>
|
||||||
<span
|
<span
|
||||||
:id="`${id}-content`"
|
:id="`${id}-content`"
|
||||||
|
v-n8n-html="displayContent"
|
||||||
:class="showFullContent ? $style['expanded'] : $style['truncated']"
|
:class="showFullContent ? $style['expanded'] : $style['truncated']"
|
||||||
role="region"
|
role="region"
|
||||||
v-n8n-html="displayContent"
|
|
||||||
/>
|
/>
|
||||||
</slot>
|
</slot>
|
||||||
</N8nText>
|
</N8nText>
|
||||||
|
|
|
@ -90,7 +90,7 @@ const scrollRight = () => scroll(50);
|
||||||
>
|
>
|
||||||
<N8nTooltip :disabled="!option.tooltip" placement="bottom">
|
<N8nTooltip :disabled="!option.tooltip" placement="bottom">
|
||||||
<template #content>
|
<template #content>
|
||||||
<div @click="handleTooltipClick(option.value, $event)" v-n8n-html="option.tooltip" />
|
<div v-n8n-html="option.tooltip" @click="handleTooltipClick(option.value, $event)" />
|
||||||
</template>
|
</template>
|
||||||
<a
|
<a
|
||||||
v-if="option.href"
|
v-if="option.href"
|
||||||
|
|
|
@ -5,11 +5,10 @@ import { getDropdownItems } from '@/__tests__/utils';
|
||||||
import { createProjectListItem } from '@/__tests__/data/projects';
|
import { createProjectListItem } from '@/__tests__/data/projects';
|
||||||
import { createUser } from '@/__tests__/data/users';
|
import { createUser } from '@/__tests__/data/users';
|
||||||
|
|
||||||
import { DELETE_USER_MODAL_KEY } from '@/constants';
|
import { DELETE_USER_MODAL_KEY, STORES } from '@/constants';
|
||||||
import { ProjectTypes } from '@/types/projects.types';
|
import { ProjectTypes } from '@/types/projects.types';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { useUsersStore } from '@/stores/users.store';
|
import { useUsersStore } from '@/stores/users.store';
|
||||||
import { STORES } from '@/constants';
|
|
||||||
|
|
||||||
const ModalStub = {
|
const ModalStub = {
|
||||||
template: `
|
template: `
|
||||||
|
|
|
@ -424,9 +424,9 @@ async function onAskAssistantClick() {
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="(error.description || error.context?.descriptionKey) && !isSubNodeError"
|
v-if="(error.description || error.context?.descriptionKey) && !isSubNodeError"
|
||||||
|
v-n8n-html="getErrorDescription()"
|
||||||
data-test-id="node-error-description"
|
data-test-id="node-error-description"
|
||||||
class="node-error-view__header-description"
|
class="node-error-view__header-description"
|
||||||
v-n8n-html="getErrorDescription()"
|
|
||||||
></div>
|
></div>
|
||||||
|
|
||||||
<div v-if="isSubNodeError">
|
<div v-if="isSubNodeError">
|
||||||
|
|
|
@ -185,9 +185,9 @@ const onResizeThrottle = useThrottleFn(onResize, 10);
|
||||||
{{ i18n.baseText('expressionEdit.expression') }}
|
{{ i18n.baseText('expressionEdit.expression') }}
|
||||||
</N8nText>
|
</N8nText>
|
||||||
<N8nText
|
<N8nText
|
||||||
|
v-n8n-html="i18n.baseText('expressionTip.javascript')"
|
||||||
:class="$style.tip"
|
:class="$style.tip"
|
||||||
size="small"
|
size="small"
|
||||||
v-n8n-html="i18n.baseText('expressionTip.javascript')"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ onBeforeUnmount(() => {
|
||||||
>
|
>
|
||||||
</ExpressionOutput>
|
</ExpressionOutput>
|
||||||
</n8n-text>
|
</n8n-text>
|
||||||
<div :class="$style.footer" v-if="!isReadOnly">
|
<div v-if="!isReadOnly" :class="$style.footer">
|
||||||
<InlineExpressionTip
|
<InlineExpressionTip
|
||||||
:editor-state="editorState"
|
:editor-state="editorState"
|
||||||
:selection="selection"
|
:selection="selection"
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { nextTick } from 'vue';
|
import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';
|
||||||
import { onBeforeUnmount, onMounted, ref } from 'vue';
|
|
||||||
import type { EventBus } from '@n8n/utils/event-bus';
|
import type { EventBus } from '@n8n/utils/event-bus';
|
||||||
import { createEventBus } from '@n8n/utils/event-bus';
|
import { createEventBus } from '@n8n/utils/event-bus';
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ onMounted(() => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :class="containerClasses" data-test-id="n8n-logo">
|
<div :class="containerClasses" data-test-id="n8n-logo">
|
||||||
<LogoIcon :class="$style.logo" ref="logo" />
|
<LogoIcon ref="logo" :class="$style.logo" />
|
||||||
<LogoText v-if="showLogoText" :class="$style.logoText" />
|
<LogoText v-if="showLogoText" :class="$style.logoText" />
|
||||||
<div v-if="showReleaseChannelTag" :class="$style.releaseChannelTag">{{ releaseChannel }}</div>
|
<div v-if="showReleaseChannelTag" :class="$style.releaseChannelTag">{{ releaseChannel }}</div>
|
||||||
<slot />
|
<slot />
|
||||||
|
|
|
@ -11,8 +11,8 @@ withDefaults(defineProps<Props>(), {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
:class="[$style.dragPill, canDrop ? $style.droppablePill : $style.defaultPill]"
|
|
||||||
v-n8n-html="html"
|
v-n8n-html="html"
|
||||||
|
:class="[$style.dragPill, canDrop ? $style.droppablePill : $style.defaultPill]"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ onBeforeUnmount(() => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div v-if="!createNodeActive" :class="$style.nodeButtonsWrapper">
|
<div v-if="!createNodeActive" :class="$style.nodeButtonsWrapper">
|
||||||
<div :class="$style.nodeCreatorButton" ref="wrapperRef" data-test-id="node-creator-plus-button">
|
<div ref="wrapperRef" :class="$style.nodeCreatorButton" data-test-id="node-creator-plus-button">
|
||||||
<KeyboardShortcutTooltip
|
<KeyboardShortcutTooltip
|
||||||
:label="i18n.baseText('nodeView.openNodesPanel')"
|
:label="i18n.baseText('nodeView.openNodesPanel')"
|
||||||
:shortcut="{ keys: ['Tab'] }"
|
:shortcut="{ keys: ['Tab'] }"
|
||||||
|
|
|
@ -145,8 +145,6 @@ function onCommunityNodeTooltipClick(event: MouseEvent) {
|
||||||
|
|
||||||
<template v-if="isCommunityNode" #tooltip>
|
<template v-if="isCommunityNode" #tooltip>
|
||||||
<p
|
<p
|
||||||
:class="$style.communityNodeIcon"
|
|
||||||
@click="onCommunityNodeTooltipClick"
|
|
||||||
v-n8n-html="
|
v-n8n-html="
|
||||||
i18n.baseText('generic.communityNode.tooltip', {
|
i18n.baseText('generic.communityNode.tooltip', {
|
||||||
interpolate: {
|
interpolate: {
|
||||||
|
@ -155,12 +153,14 @@ function onCommunityNodeTooltipClick(event: MouseEvent) {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
|
:class="$style.communityNodeIcon"
|
||||||
|
@click="onCommunityNodeTooltipClick"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template #dragContent>
|
<template #dragContent>
|
||||||
<div
|
<div
|
||||||
ref="draggableDataTransfer"
|
|
||||||
v-show="dragging"
|
v-show="dragging"
|
||||||
|
ref="draggableDataTransfer"
|
||||||
:class="$style.draggable"
|
:class="$style.draggable"
|
||||||
:style="draggableStyle"
|
:style="draggableStyle"
|
||||||
>
|
>
|
||||||
|
|
|
@ -250,9 +250,9 @@ onMounted(() => {
|
||||||
</template>
|
</template>
|
||||||
<template v-else #empty>
|
<template v-else #empty>
|
||||||
<p
|
<p
|
||||||
|
v-n8n-html="i18n.baseText('nodeCreator.actionsCategory.noMatchingTriggers')"
|
||||||
:class="$style.resetSearch"
|
:class="$style.resetSearch"
|
||||||
@click="resetSearch"
|
@click="resetSearch"
|
||||||
v-n8n-html="i18n.baseText('nodeCreator.actionsCategory.noMatchingTriggers')"
|
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</CategorizedItemsRenderer>
|
</CategorizedItemsRenderer>
|
||||||
|
@ -289,10 +289,10 @@ onMounted(() => {
|
||||||
</n8n-info-tip>
|
</n8n-info-tip>
|
||||||
<p
|
<p
|
||||||
v-else
|
v-else
|
||||||
|
v-n8n-html="i18n.baseText('nodeCreator.actionsCategory.noMatchingActions')"
|
||||||
:class="$style.resetSearch"
|
:class="$style.resetSearch"
|
||||||
data-test-id="actions-panel-no-matching-actions"
|
data-test-id="actions-panel-no-matching-actions"
|
||||||
@click="resetSearch"
|
@click="resetSearch"
|
||||||
v-n8n-html="i18n.baseText('nodeCreator.actionsCategory.noMatchingActions')"
|
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</CategorizedItemsRenderer>
|
</CategorizedItemsRenderer>
|
||||||
|
@ -300,12 +300,12 @@ onMounted(() => {
|
||||||
</OrderSwitcher>
|
</OrderSwitcher>
|
||||||
<div v-if="containsAPIAction" :class="$style.apiHint">
|
<div v-if="containsAPIAction" :class="$style.apiHint">
|
||||||
<span
|
<span
|
||||||
@click.prevent="addHttpNode"
|
|
||||||
v-n8n-html="
|
v-n8n-html="
|
||||||
i18n.baseText('nodeCreator.actionsList.apiCall', {
|
i18n.baseText('nodeCreator.actionsList.apiCall', {
|
||||||
interpolate: { node: subcategory ?? '' },
|
interpolate: { node: subcategory ?? '' },
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
|
@click.prevent="addHttpNode"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -136,7 +136,7 @@ watch(
|
||||||
:elements="item.children"
|
:elements="item.children"
|
||||||
expanded
|
expanded
|
||||||
:category="item.title"
|
:category="item.title"
|
||||||
@selected="(child) => wrappedEmit('selected', child)"
|
@selected="(child: INodeCreateElement) => wrappedEmit('selected', child)"
|
||||||
>
|
>
|
||||||
</CategorizedItemsRenderer>
|
</CategorizedItemsRenderer>
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ const nodeType = computed((): INodeTypeDescription | null => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const isNodeRunning = computed(() => {
|
const isNodeRunning = computed(() => {
|
||||||
if (!uiStore.isActionActive['workflowRunning'] || codeGenerationInProgress.value) return false;
|
if (!uiStore.isActionActive.workflowRunning || codeGenerationInProgress.value) return false;
|
||||||
const triggeredNode = workflowsStore.executedNode;
|
const triggeredNode = workflowsStore.executedNode;
|
||||||
return (
|
return (
|
||||||
workflowsStore.isNodeExecuting(node.value?.name ?? '') || triggeredNode === node.value?.name
|
workflowsStore.isNodeExecuting(node.value?.name ?? '') || triggeredNode === node.value?.name
|
||||||
|
|
|
@ -1013,7 +1013,7 @@ async function optionSelected(command: string) {
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
props.eventBus.on('optionSelected', optionSelected);
|
props.eventBus.on('optionSelected', optionSelected);
|
||||||
|
|
||||||
tempValue.value = displayValue.value as string;
|
tempValue.value = displayValue.value;
|
||||||
|
|
||||||
if (node.value) {
|
if (node.value) {
|
||||||
nodeName.value = node.value.name;
|
nodeName.value = node.value.name;
|
||||||
|
@ -1029,7 +1029,7 @@ onMounted(() => {
|
||||||
displayValue.value !== null &&
|
displayValue.value !== null &&
|
||||||
displayValue.value.toString().charAt(0) !== '#'
|
displayValue.value.toString().charAt(0) !== '#'
|
||||||
) {
|
) {
|
||||||
const newValue = rgbaToHex(displayValue.value as string);
|
const newValue = rgbaToHex(displayValue.value);
|
||||||
if (newValue !== null) {
|
if (newValue !== null) {
|
||||||
tempValue.value = newValue;
|
tempValue.value = newValue;
|
||||||
}
|
}
|
||||||
|
@ -1100,12 +1100,12 @@ watch(
|
||||||
// Do not set for color with alpha else wrong value gets displayed in field
|
// Do not set for color with alpha else wrong value gets displayed in field
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tempValue.value = displayValue.value as string;
|
tempValue.value = displayValue.value;
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
watch(remoteParameterOptionsLoading, () => {
|
watch(remoteParameterOptionsLoading, () => {
|
||||||
tempValue.value = displayValue.value as string;
|
tempValue.value = displayValue.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Focus input field when changing between fixed and expression
|
// Focus input field when changing between fixed and expression
|
||||||
|
@ -1625,8 +1625,8 @@ onUpdated(async () => {
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="option.description"
|
v-if="option.description"
|
||||||
class="option-description"
|
|
||||||
v-n8n-html="getOptionsOptionDescription(option)"
|
v-n8n-html="getOptionsOptionDescription(option)"
|
||||||
|
class="option-description"
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
</N8nOption>
|
</N8nOption>
|
||||||
|
@ -1658,8 +1658,8 @@ onUpdated(async () => {
|
||||||
<div class="option-headline">{{ getOptionsOptionDisplayName(option) }}</div>
|
<div class="option-headline">{{ getOptionsOptionDisplayName(option) }}</div>
|
||||||
<div
|
<div
|
||||||
v-if="option.description"
|
v-if="option.description"
|
||||||
class="option-description"
|
|
||||||
v-n8n-html="getOptionsOptionDescription(option)"
|
v-n8n-html="getOptionsOptionDescription(option)"
|
||||||
|
class="option-description"
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
</N8nOption>
|
</N8nOption>
|
||||||
|
|
|
@ -46,13 +46,13 @@ const simplyText = computed(() => {
|
||||||
[$style.highlight]: highlight,
|
[$style.highlight]: highlight,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<span data-test-id="parameter-input-hint" v-n8n-html="simplyText"></span>
|
<span v-n8n-html="simplyText" data-test-id="parameter-input-hint"></span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-else
|
v-else
|
||||||
ref="hintTextRef"
|
ref="hintTextRef"
|
||||||
:class="{ [$style.singleline]: singleLine, [$style.highlight]: highlight }"
|
|
||||||
v-n8n-html="sanitizeHtml(hint)"
|
v-n8n-html="sanitizeHtml(hint)"
|
||||||
|
:class="{ [$style.singleline]: singleLine, [$style.highlight]: highlight }"
|
||||||
></div>
|
></div>
|
||||||
</n8n-text>
|
</n8n-text>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { renderComponent } from '@/__tests__/render';
|
import { renderComponent } from '@/__tests__/render';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { within } from '@testing-library/vue';
|
import { within, waitFor } from '@testing-library/vue';
|
||||||
import { waitFor } from '@testing-library/vue';
|
|
||||||
import ParameterOptions from './ParameterOptions.vue';
|
import ParameterOptions from './ParameterOptions.vue';
|
||||||
import { setActivePinia, createPinia } from 'pinia';
|
import { setActivePinia, createPinia } from 'pinia';
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ defineExpose({
|
||||||
<div class="option-headline">
|
<div class="option-headline">
|
||||||
{{ option.name }}
|
{{ option.name }}
|
||||||
</div>
|
</div>
|
||||||
<div class="option-description" v-n8n-html="option.description" />
|
<div v-n8n-html="option.description" class="option-description" />
|
||||||
</div>
|
</div>
|
||||||
</N8nOption>
|
</N8nOption>
|
||||||
</N8nSelect>
|
</N8nSelect>
|
||||||
|
|
|
@ -431,7 +431,7 @@ watch(refDebounced(search, 500), (term) => {
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #content>
|
<template #content>
|
||||||
<div :class="[$style.table]" v-if="changes.workflows.length">
|
<div v-if="changes.workflows.length" :class="[$style.table]">
|
||||||
<div :class="[$style.tableHeader]">
|
<div :class="[$style.tableHeader]">
|
||||||
<N8nCheckbox
|
<N8nCheckbox
|
||||||
:class="$style.selectAll"
|
:class="$style.selectAll"
|
||||||
|
|
|
@ -9,7 +9,7 @@ defineProps<{
|
||||||
<div class="titled-list">
|
<div class="titled-list">
|
||||||
<p v-text="title" />
|
<p v-text="title" />
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="item in items" :key="item" class="titled-list-item" v-n8n-html="item" />
|
<li v-for="item in items" :key="item" v-n8n-html="item" class="titled-list-item" />
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -163,7 +163,7 @@ const isListeningForEvents = computed(() => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const workflowRunning = computed(() => {
|
const workflowRunning = computed(() => {
|
||||||
return uiStore.isActionActive['workflowRunning'];
|
return uiStore.isActionActive.workflowRunning;
|
||||||
});
|
});
|
||||||
|
|
||||||
const isActivelyPolling = computed(() => {
|
const isActivelyPolling = computed(() => {
|
||||||
|
|
|
@ -55,8 +55,8 @@ const nodeName = (node: IVersionNode): string => {
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
v-if="version.description"
|
v-if="version.description"
|
||||||
:class="$style.description"
|
|
||||||
v-n8n-html="version.description"
|
v-n8n-html="version.description"
|
||||||
|
:class="$style.description"
|
||||||
></div>
|
></div>
|
||||||
<div v-if="version.nodes && version.nodes.length > 0" :class="$style.nodes">
|
<div v-if="version.nodes && version.nodes.length > 0" :class="$style.nodes">
|
||||||
<NodeIcon
|
<NodeIcon
|
||||||
|
|
|
@ -216,8 +216,8 @@ watch(
|
||||||
<n8n-tooltip placement="top">
|
<n8n-tooltip placement="top">
|
||||||
<template #content>
|
<template #content>
|
||||||
<div
|
<div
|
||||||
@click="displayActivationError"
|
|
||||||
v-n8n-html="i18n.baseText('workflowActivator.theWorkflowIsSetToBeActiveBut')"
|
v-n8n-html="i18n.baseText('workflowActivator.theWorkflowIsSetToBeActiveBut')"
|
||||||
|
@click="displayActivationError"
|
||||||
></div>
|
></div>
|
||||||
</template>
|
</template>
|
||||||
<font-awesome-icon icon="exclamation-triangle" @click="displayActivationError" />
|
<font-awesome-icon icon="exclamation-triangle" @click="displayActivationError" />
|
||||||
|
|
|
@ -257,8 +257,8 @@ onBeforeMount(() => {
|
||||||
}}</label>
|
}}</label>
|
||||||
<AnnotationTagsDropdown
|
<AnnotationTagsDropdown
|
||||||
id="execution-filter-annotation-tags"
|
id="execution-filter-annotation-tags"
|
||||||
:placeholder="locale.baseText('workflowOpen.filterWorkflows')"
|
|
||||||
v-model="filter.annotationTags"
|
v-model="filter.annotationTags"
|
||||||
|
:placeholder="locale.baseText('workflowOpen.filterWorkflows')"
|
||||||
:create-enabled="false"
|
:create-enabled="false"
|
||||||
data-test-id="executions-filter-annotation-tags-select"
|
data-test-id="executions-filter-annotation-tags-select"
|
||||||
@update:model-value="onAnnotationTagsChange"
|
@update:model-value="onAnnotationTagsChange"
|
||||||
|
|
|
@ -177,7 +177,7 @@ const onTagsEditEsc = () => {
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-for="attr in Object.keys(activeExecution?.customData)"
|
v-for="attr in Object.keys(activeExecution?.customData)"
|
||||||
v-bind:key="attr"
|
:key="attr"
|
||||||
:class="$style.customDataEntry"
|
:class="$style.customDataEntry"
|
||||||
>
|
>
|
||||||
<n8n-text :class="$style.key" size="small" color="text-base">
|
<n8n-text :class="$style.key" size="small" color="text-base">
|
||||||
|
|
|
@ -144,8 +144,13 @@ const slots = defineSlots<{
|
||||||
filters: Record<string, boolean | string | string[]>;
|
filters: Record<string, boolean | string | string[]>;
|
||||||
setKeyValue: (key: string, value: unknown) => void;
|
setKeyValue: (key: string, value: unknown) => void;
|
||||||
}): unknown;
|
}): unknown;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
default(props: {
|
||||||
default(props: { data: any; updateItemSize: (data: any) => void }): unknown;
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
data: any;
|
||||||
|
columns?: DatatableColumn[];
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
updateItemSize?: (data: any) => void;
|
||||||
|
}): unknown;
|
||||||
item(props: { item: unknown; index: number }): unknown;
|
item(props: { item: unknown; index: number }): unknown;
|
||||||
breadcrumbs(): unknown;
|
breadcrumbs(): unknown;
|
||||||
}>();
|
}>();
|
||||||
|
@ -418,7 +423,7 @@ const getColumns = () => {
|
||||||
if ('columns' in props.typeProps) {
|
if ('columns' in props.typeProps) {
|
||||||
return props.typeProps.columns;
|
return props.typeProps.columns;
|
||||||
}
|
}
|
||||||
return {};
|
return [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const sendSortingTelemetry = () => {
|
const sendSortingTelemetry = () => {
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
|
import { deepCopy } from 'n8n-workflow';
|
||||||
import type {
|
import type {
|
||||||
IDataObject,
|
IDataObject,
|
||||||
IRunExecutionData,
|
IRunExecutionData,
|
||||||
NodeApiError,
|
NodeApiError,
|
||||||
NodeError,
|
NodeError,
|
||||||
NodeOperationError,
|
NodeOperationError,
|
||||||
|
INode,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
import { deepCopy, type INode } from 'n8n-workflow';
|
|
||||||
import { useWorkflowHelpers } from './useWorkflowHelpers';
|
import { useWorkflowHelpers } from './useWorkflowHelpers';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { useNDVStore } from '@/stores/ndv.store';
|
import { useNDVStore } from '@/stores/ndv.store';
|
||||||
|
|
|
@ -1684,9 +1684,9 @@ export function useCanvasOperations({ router }: { router: ReturnType<typeof useR
|
||||||
nodeHelpers.assignWebhookId(node);
|
nodeHelpers.assignWebhookId(node);
|
||||||
|
|
||||||
if (node.parameters.path) {
|
if (node.parameters.path) {
|
||||||
node.parameters.path = node.webhookId as string;
|
node.parameters.path = node.webhookId;
|
||||||
} else if ((node.parameters.options as IDataObject).path) {
|
} else if ((node.parameters.options as IDataObject).path) {
|
||||||
(node.parameters.options as IDataObject).path = node.webhookId as string;
|
(node.parameters.options as IDataObject).path = node.webhookId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ export function usePushConnection({ router }: { router: ReturnType<typeof useRou
|
||||||
receivedData.type === 'nodeExecuteBefore' ||
|
receivedData.type === 'nodeExecuteBefore' ||
|
||||||
receivedData.type === 'executionStarted'
|
receivedData.type === 'executionStarted'
|
||||||
) {
|
) {
|
||||||
if (!uiStore.isActionActive['workflowRunning']) {
|
if (!uiStore.isActionActive.workflowRunning) {
|
||||||
// No workflow is running so ignore the messages
|
// No workflow is running so ignore the messages
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ export function usePushConnection({ router }: { router: ReturnType<typeof useRou
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receivedData.type === 'executionFinished' || receivedData.type === 'executionRecovered') {
|
if (receivedData.type === 'executionFinished' || receivedData.type === 'executionRecovered') {
|
||||||
if (!uiStore.isActionActive['workflowRunning']) {
|
if (!uiStore.isActionActive.workflowRunning) {
|
||||||
// No workflow is running so ignore the messages
|
// No workflow is running so ignore the messages
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ export function useRunWorkflow(useRunWorkflowOpts: { router: ReturnType<typeof u
|
||||||
}): Promise<IExecutionPushResponse | undefined> {
|
}): Promise<IExecutionPushResponse | undefined> {
|
||||||
const workflow = workflowHelpers.getCurrentWorkflow();
|
const workflow = workflowHelpers.getCurrentWorkflow();
|
||||||
|
|
||||||
if (uiStore.isActionActive['workflowRunning']) {
|
if (uiStore.isActionActive.workflowRunning) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -395,7 +395,7 @@ export function executeData(
|
||||||
!workflowRunData[parentNodeName][runIndex] ||
|
!workflowRunData[parentNodeName][runIndex] ||
|
||||||
!workflowRunData[parentNodeName][runIndex].hasOwnProperty('data') ||
|
!workflowRunData[parentNodeName][runIndex].hasOwnProperty('data') ||
|
||||||
workflowRunData[parentNodeName][runIndex].data === undefined ||
|
workflowRunData[parentNodeName][runIndex].data === undefined ||
|
||||||
!workflowRunData[parentNodeName][runIndex].data!.hasOwnProperty(inputName)
|
!workflowRunData[parentNodeName][runIndex].data.hasOwnProperty(inputName)
|
||||||
) {
|
) {
|
||||||
executeData.data = {};
|
executeData.data = {};
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -61,6 +61,7 @@ import {
|
||||||
NodeHelpers,
|
NodeHelpers,
|
||||||
SEND_AND_WAIT_OPERATION,
|
SEND_AND_WAIT_OPERATION,
|
||||||
Workflow,
|
Workflow,
|
||||||
|
TelemetryHelpers,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
import { findLast, pick, isEqual } from 'lodash-es';
|
import { findLast, pick, isEqual } from 'lodash-es';
|
||||||
|
|
||||||
|
@ -82,7 +83,6 @@ import { useProjectsStore } from '@/stores/projects.store';
|
||||||
import type { ProjectSharingData } from '@/types/projects.types';
|
import type { ProjectSharingData } from '@/types/projects.types';
|
||||||
import type { PushPayload } from '@n8n/api-types';
|
import type { PushPayload } from '@n8n/api-types';
|
||||||
import { useTelemetry } from '@/composables/useTelemetry';
|
import { useTelemetry } from '@/composables/useTelemetry';
|
||||||
import { TelemetryHelpers } from 'n8n-workflow';
|
|
||||||
import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
|
import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { useSettingsStore } from './settings.store';
|
import { useSettingsStore } from './settings.store';
|
||||||
|
|
|
@ -13,7 +13,7 @@ const getBrowserId = () => {
|
||||||
browserId = crypto.randomUUID();
|
browserId = crypto.randomUUID();
|
||||||
localStorage.setItem(BROWSER_ID_STORAGE_KEY, browserId);
|
localStorage.setItem(BROWSER_ID_STORAGE_KEY, browserId);
|
||||||
}
|
}
|
||||||
return browserId!;
|
return browserId;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const NO_NETWORK_ERROR_CODE = 999;
|
export const NO_NETWORK_ERROR_CODE = 999;
|
||||||
|
|
|
@ -37,7 +37,7 @@ export function updateDynamicConnections(
|
||||||
parameterData.name === 'parameters.options.fallbackOutput'
|
parameterData.name === 'parameters.options.fallbackOutput'
|
||||||
) {
|
) {
|
||||||
const curentFallbackOutput = (node.parameters?.options as { fallbackOutput: string })
|
const curentFallbackOutput = (node.parameters?.options as { fallbackOutput: string })
|
||||||
?.fallbackOutput as string;
|
?.fallbackOutput;
|
||||||
if (curentFallbackOutput === 'extra') {
|
if (curentFallbackOutput === 'extra') {
|
||||||
if (!parameterData.value || parameterData.value !== 'extra') {
|
if (!parameterData.value || parameterData.value !== 'extra') {
|
||||||
connections[node.name].main = connections[node.name].main.slice(0, -1);
|
connections[node.name].main = connections[node.name].main.slice(0, -1);
|
||||||
|
|
|
@ -284,7 +284,7 @@ export function getGenericHints({
|
||||||
if (hasNodeRun && workflowNode.parameters.limit) {
|
if (hasNodeRun && workflowNode.parameters.limit) {
|
||||||
if (nodeOutputData.length === workflowNode.parameters.limit) {
|
if (nodeOutputData.length === workflowNode.parameters.limit) {
|
||||||
nodeHints.push({
|
nodeHints.push({
|
||||||
message: `Limit of ${workflowNode.parameters.limit as number} items reached. There may be more items that aren't being returned. Tweak the 'Return All' or 'Limit' parameters to access more items.`,
|
message: `Limit of ${workflowNode.parameters.limit} items reached. There may be more items that aren't being returned. Tweak the 'Return All' or 'Limit' parameters to access more items.`,
|
||||||
location: 'outputPane',
|
location: 'outputPane',
|
||||||
whenToDisplay: 'afterExecution',
|
whenToDisplay: 'afterExecution',
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,8 +7,7 @@ import { useUsersStore } from '@/stores/users.store';
|
||||||
import type { IUser } from '@/Interface';
|
import type { IUser } from '@/Interface';
|
||||||
import { useI18n } from '@/composables/useI18n';
|
import { useI18n } from '@/composables/useI18n';
|
||||||
import { useProjectsStore } from '@/stores/projects.store';
|
import { useProjectsStore } from '@/stores/projects.store';
|
||||||
import type { ProjectIcon } from '@/types/projects.types';
|
import type { ProjectIcon, Project, ProjectRelation } from '@/types/projects.types';
|
||||||
import { type Project, type ProjectRelation } from '@/types/projects.types';
|
|
||||||
import { useToast } from '@/composables/useToast';
|
import { useToast } from '@/composables/useToast';
|
||||||
import { VIEWS } from '@/constants';
|
import { VIEWS } from '@/constants';
|
||||||
import ProjectDeleteDialog from '@/components/Projects/ProjectDeleteDialog.vue';
|
import ProjectDeleteDialog from '@/components/Projects/ProjectDeleteDialog.vue';
|
||||||
|
|
|
@ -10,15 +10,12 @@ import type { PublicInstalledPackage } from 'n8n-workflow';
|
||||||
|
|
||||||
import { useCommunityNodesStore } from '@/stores/communityNodes.store';
|
import { useCommunityNodesStore } from '@/stores/communityNodes.store';
|
||||||
import { useUIStore } from '@/stores/ui.store';
|
import { useUIStore } from '@/stores/ui.store';
|
||||||
import { onBeforeUnmount, ref } from 'vue';
|
import { onBeforeUnmount, ref, computed, onBeforeMount, onMounted } from 'vue';
|
||||||
import { useExternalHooks } from '@/composables/useExternalHooks';
|
import { useExternalHooks } from '@/composables/useExternalHooks';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { usePushConnection } from '@/composables/usePushConnection';
|
import { usePushConnection } from '@/composables/usePushConnection';
|
||||||
import { usePushConnectionStore } from '@/stores/pushConnection.store';
|
import { usePushConnectionStore } from '@/stores/pushConnection.store';
|
||||||
import { computed } from 'vue';
|
|
||||||
import { useI18n } from '@/composables/useI18n';
|
import { useI18n } from '@/composables/useI18n';
|
||||||
import { onBeforeMount } from 'vue';
|
|
||||||
import { onMounted } from 'vue';
|
|
||||||
import { useTelemetry } from '@/composables/useTelemetry';
|
import { useTelemetry } from '@/composables/useTelemetry';
|
||||||
|
|
||||||
const PACKAGE_COUNT_THRESHOLD = 31;
|
const PACKAGE_COUNT_THRESHOLD = 31;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, nextTick, onBeforeMount, onMounted } from 'vue';
|
import { computed, nextTick, onBeforeMount, onMounted, ref, getCurrentInstance } from 'vue';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
import { useWorkflowsStore } from '@/stores/workflows.store';
|
import { useWorkflowsStore } from '@/stores/workflows.store';
|
||||||
import { hasPermission } from '@/utils/rbac/permissions';
|
import { hasPermission } from '@/utils/rbac/permissions';
|
||||||
|
@ -13,7 +13,6 @@ import { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow
|
||||||
import EventDestinationCard from '@/components/SettingsLogStreaming/EventDestinationCard.ee.vue';
|
import EventDestinationCard from '@/components/SettingsLogStreaming/EventDestinationCard.ee.vue';
|
||||||
import { createEventBus } from '@n8n/utils/event-bus';
|
import { createEventBus } from '@n8n/utils/event-bus';
|
||||||
import { useDocumentTitle } from '@/composables/useDocumentTitle';
|
import { useDocumentTitle } from '@/composables/useDocumentTitle';
|
||||||
import { ref, getCurrentInstance } from 'vue';
|
|
||||||
import { useI18n } from '@/composables/useI18n';
|
import { useI18n } from '@/composables/useI18n';
|
||||||
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
|
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
|
||||||
|
|
||||||
|
|
|
@ -139,9 +139,7 @@ async function onSubmit(values: { [key: string]: string | boolean }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQueryParameter(key: 'inviterId' | 'inviteeId'): string | null {
|
function getQueryParameter(key: 'inviterId' | 'inviteeId'): string | null {
|
||||||
return !route.query[key] || typeof route.query[key] !== 'string'
|
return !route.query[key] || typeof route.query[key] !== 'string' ? null : route.query[key];
|
||||||
? null
|
|
||||||
: (route.query[key] as string);
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,7 @@ export async function prepareFormReturnItem(
|
||||||
|
|
||||||
if (field.fieldType === 'html') {
|
if (field.fieldType === 'html') {
|
||||||
if (field.elementName) {
|
if (field.elementName) {
|
||||||
returnItem.json[field.elementName as string] = value;
|
returnItem.json[field.elementName] = value;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue