Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import { ElMessage } from 'element-plus' import { onMounted, onUnmounted, ref, type Ref } from 'vue' import type { Workflow } from '@/types/generated/Workflow' import { useWorkflowList } from './useWorkflowList' import { SUCCESS_MESSAGES } from '@/constants' export function useWorkflowListSelection(workflows: Ref<Workflow[]>) { const { duplicateWorkflow } = useWorkflowList() const selectedWorkflowId = ref<string | null>(null) const copiedWorkflow = ref<Workflow | null>(null) function selectWorkflow(workflowId: string) { selectedWorkflowId.value = selectedWorkflowId.value === workflowId ? null : workflowId } function clearSelection() { selectedWorkflowId.value = null } function copyWorkflow() { if (!selectedWorkflowId.value) return const workflow = workflows.value.find((w) => w.id === selectedWorkflowId.value) if (workflow) { copiedWorkflow.value = workflow ElMessage.success(SUCCESS_MESSAGES.COPIED) } } async function pasteWorkflow() { if (!copiedWorkflow.value) return await duplicateWorkflow( copiedWorkflow.value.id, `${copiedWorkflow.value.name} (Copy)` ) } function handleKeyDown(event: KeyboardEvent) { if ((event.ctrlKey || event.metaKey) && event.key === 'c') { copyWorkflow() } if ((event.ctrlKey || event.metaKey) && event.key === 'v') { pasteWorkflow() } if (event.key === 'Escape') { clearSelection() } } onMounted(() => { document.addEventListener('keydown', handleKeyDown) }) onUnmounted(() => { document.removeEventListener('keydown', handleKeyDown) }) return { selectedWorkflowId, copiedWorkflow, selectWorkflow, clearSelection, copyWorkflow, pasteWorkflow, } } |