mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
fix(editor): fix for executions view auto-refresh and new workflow saving (#4462)
* 🐛 Fixing auto-refresh and save workflow bugs. Added executions filtering based on current workflow settings * ✔️ Fixing a lint error
This commit is contained in:
committed by
GitHub
parent
c66929f53d
commit
dbac7955f9
@@ -9,6 +9,7 @@
|
|||||||
@filterUpdated="onFilterUpdated"
|
@filterUpdated="onFilterUpdated"
|
||||||
@loadMore="loadMore"
|
@loadMore="loadMore"
|
||||||
@retryExecution="onRetryExecution"
|
@retryExecution="onRetryExecution"
|
||||||
|
@refresh="loadAutoRefresh"
|
||||||
/>
|
/>
|
||||||
<div :class="$style.content" v-if="!hidePreview">
|
<div :class="$style.content" v-if="!hidePreview">
|
||||||
<router-view name="executionPreview" @deleteCurrentExecution="onDeleteCurrentExecution" @retryExecution="onRetryExecution"/>
|
<router-view name="executionPreview" @deleteCurrentExecution="onDeleteCurrentExecution" @retryExecution="onRetryExecution"/>
|
||||||
@@ -25,7 +26,7 @@
|
|||||||
import ExecutionsSidebar from '@/components/ExecutionsView/ExecutionsSidebar.vue';
|
import ExecutionsSidebar from '@/components/ExecutionsView/ExecutionsSidebar.vue';
|
||||||
import { MODAL_CANCEL, MODAL_CLOSE, MODAL_CONFIRMED, PLACEHOLDER_EMPTY_WORKFLOW_ID, VIEWS, WEBHOOK_NODE_TYPE } from '@/constants';
|
import { MODAL_CANCEL, MODAL_CLOSE, MODAL_CONFIRMED, PLACEHOLDER_EMPTY_WORKFLOW_ID, VIEWS, WEBHOOK_NODE_TYPE } from '@/constants';
|
||||||
import { IExecutionsListResponse, IExecutionsSummary, INodeUi, ITag, IWorkflowDb } from '@/Interface';
|
import { IExecutionsListResponse, IExecutionsSummary, INodeUi, ITag, IWorkflowDb } from '@/Interface';
|
||||||
import { IConnection, IConnections, IDataObject, INodeTypeDescription, INodeTypeNameVersion, NodeHelpers } from 'n8n-workflow';
|
import { IConnection, IConnections, IDataObject, INodeTypeDescription, INodeTypeNameVersion, IWorkflowSettings, NodeHelpers } from 'n8n-workflow';
|
||||||
import mixins from 'vue-typed-mixins';
|
import mixins from 'vue-typed-mixins';
|
||||||
import { restApi } from '../mixins/restApi';
|
import { restApi } from '../mixins/restApi';
|
||||||
import { showMessage } from '../mixins/showMessage';
|
import { showMessage } from '../mixins/showMessage';
|
||||||
@@ -73,6 +74,11 @@ export default mixins(restApi, showMessage, executionHelpers, debounceHelper, wo
|
|||||||
totalFinishedExecutionsCount(): number {
|
totalFinishedExecutionsCount(): number {
|
||||||
return this.$store.getters['workflows/getTotalFinishedExecutionsCount'];
|
return this.$store.getters['workflows/getTotalFinishedExecutionsCount'];
|
||||||
},
|
},
|
||||||
|
isWorkflowSavingManualExecutions(): boolean {
|
||||||
|
const workflowSettings: IWorkflowSettings = this.$store.getters.workflowSettings;
|
||||||
|
const saveManualExecutionsDefault = this.$store.getters.saveManualExecutions;
|
||||||
|
return workflowSettings.saveManualExecutions === undefined ? saveManualExecutionsDefault: workflowSettings.saveManualExecutions as boolean;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch:{
|
watch:{
|
||||||
$route (to: Route, from: Route) {
|
$route (to: Route, from: Route) {
|
||||||
@@ -242,6 +248,7 @@ export default mixins(restApi, showMessage, executionHelpers, debounceHelper, wo
|
|||||||
const alreadyPresentExecutionIds = existingExecutions.map(exec => parseInt(exec.id, 10));
|
const alreadyPresentExecutionIds = existingExecutions.map(exec => parseInt(exec.id, 10));
|
||||||
let lastId = 0;
|
let lastId = 0;
|
||||||
const gaps = [] as number[];
|
const gaps = [] as number[];
|
||||||
|
let updatedActiveExecution = null;
|
||||||
|
|
||||||
for(let i = fetchedExecutions.length - 1; i >= 0; i--) {
|
for(let i = fetchedExecutions.length - 1; i >= 0; i--) {
|
||||||
const currentItem = fetchedExecutions[i];
|
const currentItem = fetchedExecutions[i];
|
||||||
@@ -262,6 +269,9 @@ export default mixins(restApi, showMessage, executionHelpers, debounceHelper, wo
|
|||||||
|
|
||||||
if (existingStillRunning && currentFinished) {
|
if (existingStillRunning && currentFinished) {
|
||||||
existingExecutions[executionIndex] = currentItem;
|
existingExecutions[executionIndex] = currentItem;
|
||||||
|
if (currentItem.id === this.activeExecution.id) {
|
||||||
|
updatedActiveExecution = currentItem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -280,6 +290,9 @@ export default mixins(restApi, showMessage, executionHelpers, debounceHelper, wo
|
|||||||
|
|
||||||
existingExecutions = existingExecutions.filter(execution => !gaps.includes(parseInt(execution.id, 10)) && lastId >= parseInt(execution.id, 10));
|
existingExecutions = existingExecutions.filter(execution => !gaps.includes(parseInt(execution.id, 10)) && lastId >= parseInt(execution.id, 10));
|
||||||
this.$store.commit('workflows/setCurrentWorkflowExecutions', existingExecutions);
|
this.$store.commit('workflows/setCurrentWorkflowExecutions', existingExecutions);
|
||||||
|
if (updatedActiveExecution !== null) {
|
||||||
|
this.$store.commit('workflows/setActiveWorkflowExecution', updatedActiveExecution);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async loadExecutions(): Promise<IExecutionsSummary[]> {
|
async loadExecutions(): Promise<IExecutionsSummary[]> {
|
||||||
if (!this.currentWorkflow) {
|
if (!this.currentWorkflow) {
|
||||||
@@ -288,6 +301,11 @@ export default mixins(restApi, showMessage, executionHelpers, debounceHelper, wo
|
|||||||
try {
|
try {
|
||||||
const executions: IExecutionsSummary[] =
|
const executions: IExecutionsSummary[] =
|
||||||
await this.$store.dispatch('workflows/loadCurrentWorkflowExecutions', this.filter);
|
await this.$store.dispatch('workflows/loadCurrentWorkflowExecutions', this.filter);
|
||||||
|
|
||||||
|
// Don't show running manual executions if workflow is set up not to save them
|
||||||
|
if (!this.isWorkflowSavingManualExecutions) {
|
||||||
|
return executions.filter(ex => ex.finished === true || ex.mode !== 'manual');
|
||||||
|
}
|
||||||
return executions;
|
return executions;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.$showError(
|
this.$showError(
|
||||||
|
|||||||
@@ -683,7 +683,7 @@ export const workflowHelpers = mixins(
|
|||||||
async saveCurrentWorkflow({id, name, tags}: {id?: string, name?: string, tags?: string[]} = {}, redirect = true): Promise<boolean> {
|
async saveCurrentWorkflow({id, name, tags}: {id?: string, name?: string, tags?: string[]} = {}, redirect = true): Promise<boolean> {
|
||||||
const currentWorkflow = id || this.$route.params.name;
|
const currentWorkflow = id || this.$route.params.name;
|
||||||
|
|
||||||
if (!currentWorkflow) {
|
if (!currentWorkflow || ['new', PLACEHOLDER_EMPTY_WORKFLOW_ID].includes(currentWorkflow)) {
|
||||||
return this.saveAsNewWorkflow({name, tags}, redirect);
|
return this.saveAsNewWorkflow({name, tags}, redirect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { makeRestApiRequest } from '@/api/helpers';
|
|
||||||
import { getCurrentExecutions, getFinishedExecutions, getNewWorkflow } from '@/api/workflows';
|
import { getCurrentExecutions, getFinishedExecutions, getNewWorkflow } from '@/api/workflows';
|
||||||
import { DUPLICATE_POSTFFIX, MAX_WORKFLOW_NAME_LENGTH, DEFAULT_NEW_WORKFLOW_NAME } from '@/constants';
|
import { DUPLICATE_POSTFFIX, MAX_WORKFLOW_NAME_LENGTH, DEFAULT_NEW_WORKFLOW_NAME } from '@/constants';
|
||||||
import { IDataObject } from 'n8n-workflow';
|
import { IDataObject } from 'n8n-workflow';
|
||||||
|
|||||||
Reference in New Issue
Block a user