Files
Automata/packages/editor-ui/src/composables/useWorkflowActivate.ts
Mutasem Aldmour 50bd5b9080 feat: Update NPS Value Survey (#9638)
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
Co-authored-by: Tomi Turtiainen <10324676+tomi@users.noreply.github.com>
2024-06-11 10:23:30 +02:00

136 lines
4.0 KiB
TypeScript

import { useStorage } from '@/composables/useStorage';
import {
LOCAL_STORAGE_ACTIVATION_FLAG,
PLACEHOLDER_EMPTY_WORKFLOW_ID,
WORKFLOW_ACTIVE_MODAL_KEY,
} from '@/constants';
import { useUIStore } from '@/stores/ui.store';
import { useWorkflowsStore } from '@/stores/workflows.store';
import { useExternalHooks } from '@/composables/useExternalHooks';
import { useRouter } from 'vue-router';
import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
import { useTelemetry } from '@/composables/useTelemetry';
import { useToast } from '@/composables/useToast';
import { useI18n } from '@/composables/useI18n';
import { ref } from 'vue';
import { useNpsSurveyStore } from '@/stores/npsSurvey.store';
export function useWorkflowActivate() {
const updatingWorkflowActivation = ref(false);
const router = useRouter();
const workflowHelpers = useWorkflowHelpers({ router });
const workflowsStore = useWorkflowsStore();
const uiStore = useUIStore();
const telemetry = useTelemetry();
const toast = useToast();
const i18n = useI18n();
const npsSurveyStore = useNpsSurveyStore();
//methods
const updateWorkflowActivation = async (
workflowId: string | undefined,
newActiveState: boolean,
telemetrySource?: string,
) => {
updatingWorkflowActivation.value = true;
const nodesIssuesExist = workflowsStore.nodesIssuesExist;
let currWorkflowId: string | undefined = workflowId;
if (!currWorkflowId || currWorkflowId === PLACEHOLDER_EMPTY_WORKFLOW_ID) {
const saved = await workflowHelpers.saveCurrentWorkflow();
if (!saved) {
updatingWorkflowActivation.value = false;
return;
}
currWorkflowId = workflowsStore.workflowId;
}
const isCurrentWorkflow = currWorkflowId === workflowsStore.workflowId;
const activeWorkflows = workflowsStore.activeWorkflows;
const isWorkflowActive = activeWorkflows.includes(currWorkflowId);
const telemetryPayload = {
workflow_id: currWorkflowId,
is_active: newActiveState,
previous_status: isWorkflowActive,
ndv_input: telemetrySource === 'ndv',
};
telemetry.track('User set workflow active status', telemetryPayload);
void useExternalHooks().run('workflowActivate.updateWorkflowActivation', telemetryPayload);
try {
if (isWorkflowActive && newActiveState) {
toast.showMessage({
title: i18n.baseText('workflowActivator.workflowIsActive'),
type: 'success',
});
updatingWorkflowActivation.value = false;
return;
}
if (isCurrentWorkflow && nodesIssuesExist && newActiveState) {
toast.showMessage({
title: i18n.baseText(
'workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title',
),
message: i18n.baseText(
'workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.message',
),
type: 'error',
});
updatingWorkflowActivation.value = false;
return;
}
await workflowHelpers.updateWorkflow(
{ workflowId: currWorkflowId, active: newActiveState },
!uiStore.stateIsDirty,
);
} catch (error) {
const newStateName = newActiveState ? 'activated' : 'deactivated';
toast.showError(
error,
i18n.baseText('workflowActivator.showError.title', {
interpolate: { newStateName },
}) + ':',
);
updatingWorkflowActivation.value = false;
return;
}
const activationEventName = isCurrentWorkflow
? 'workflow.activeChangeCurrent'
: 'workflow.activeChange';
void useExternalHooks().run(activationEventName, {
workflowId: currWorkflowId,
active: newActiveState,
});
updatingWorkflowActivation.value = false;
if (isCurrentWorkflow) {
if (newActiveState && useStorage(LOCAL_STORAGE_ACTIVATION_FLAG).value !== 'true') {
uiStore.openModal(WORKFLOW_ACTIVE_MODAL_KEY);
} else {
await npsSurveyStore.fetchPromptsData();
}
}
};
const activateCurrentWorkflow = async (telemetrySource?: string) => {
const workflowId = workflowsStore.workflowId;
return await updateWorkflowActivation(workflowId, true, telemetrySource);
};
return {
activateCurrentWorkflow,
updateWorkflowActivation,
updatingWorkflowActivation,
};
}