From aca96dd5f24e3f9547fd2fb8c1a63493893c6fe7 Mon Sep 17 00:00:00 2001 From: Nivedin <53208152+nivedin@users.noreply.github.com> Date: Tue, 23 Jan 2024 22:05:05 +0530 Subject: [PATCH] refactor: add option to disable context menu (#3717) --- .../src/components/http/PreRequestScript.vue | 1 + .../src/components/http/Tests.vue | 1 + .../src/components/smart/EnvInput.vue | 23 +++++++++++++++---- .../src/composables/codemirror.ts | 14 ++++++++--- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/packages/hoppscotch-common/src/components/http/PreRequestScript.vue b/packages/hoppscotch-common/src/components/http/PreRequestScript.vue index ecfb456f..08c80a11 100644 --- a/packages/hoppscotch-common/src/components/http/PreRequestScript.vue +++ b/packages/hoppscotch-common/src/components/http/PreRequestScript.vue @@ -99,6 +99,7 @@ useCodemirror( linter, completer, environmentHighlights: false, + contextMenuEnabled: false, }) ) diff --git a/packages/hoppscotch-common/src/components/http/Tests.vue b/packages/hoppscotch-common/src/components/http/Tests.vue index 2f22b873..63316fe5 100644 --- a/packages/hoppscotch-common/src/components/http/Tests.vue +++ b/packages/hoppscotch-common/src/components/http/Tests.vue @@ -95,6 +95,7 @@ useCodemirror( linter, completer, environmentHighlights: false, + contextMenuEnabled: false, }) ) diff --git a/packages/hoppscotch-common/src/components/smart/EnvInput.vue b/packages/hoppscotch-common/src/components/smart/EnvInput.vue index 2ab85602..1868dc13 100644 --- a/packages/hoppscotch-common/src/components/smart/EnvInput.vue +++ b/packages/hoppscotch-common/src/components/smart/EnvInput.vue @@ -79,6 +79,7 @@ const props = withDefaults( readonly?: boolean autoCompleteSource?: string[] inspectionResults?: InspectorResult[] | undefined + contextMenuEnabled?: boolean }>(), { modelValue: "", @@ -91,6 +92,7 @@ const props = withDefaults( autoCompleteSource: undefined, inspectionResult: undefined, inspectionResults: undefined, + contextMenuEnabled: true, } ) @@ -359,8 +361,11 @@ const initView = (el: any) => { handleTextSelection() }, 140) - el.addEventListener("mouseup", debounceFn) - el.addEventListener("keyup", debounceFn) + // Only add event listeners if context menu is enabled in the component + if (props.contextMenuEnabled) { + el.addEventListener("mouseup", debounceFn) + el.addEventListener("keyup", debounceFn) + } const extensions: Extension = [ EditorView.contentAttributes.of({ "aria-label": props.placeholder }), @@ -396,7 +401,7 @@ const initView = (el: any) => { ev.preventDefault() }, scroll(event) { - if (event.target) { + if (event.target && props.contextMenuEnabled) { handleTextSelection() } }, @@ -405,7 +410,6 @@ const initView = (el: any) => { class { update(update: ViewUpdate) { if (props.readonly) return - if (update.docChanged) { const prevValue = clone(cachedValue.value) @@ -436,6 +440,17 @@ const initView = (el: any) => { clipboardEv = null pastedValue = null } + + if (props.contextMenuEnabled) { + // close the context menu if text is being updated in the editor + invokeAction("contextmenu.open", { + position: { + top: 0, + left: 0, + }, + text: null, + }) + } } } } diff --git a/packages/hoppscotch-common/src/composables/codemirror.ts b/packages/hoppscotch-common/src/composables/codemirror.ts index 3babd368..5de42610 100644 --- a/packages/hoppscotch-common/src/composables/codemirror.ts +++ b/packages/hoppscotch-common/src/composables/codemirror.ts @@ -63,6 +63,8 @@ type CodeMirrorOptions = { additionalExts?: Extension[] + contextMenuEnabled?: boolean + // callback on editor update onUpdate?: (view: ViewUpdate) => void } @@ -208,6 +210,9 @@ export function useCodemirror( ): { cursor: Ref<{ line: number; ch: number }> } { const { subscribeToStream } = useStreamSubscriber() + // Set default value for contextMenuEnabled if not provided + options.contextMenuEnabled = options.contextMenuEnabled ?? true + const additionalExts = new Compartment() const language = new Compartment() const lineWrapping = new Compartment() @@ -272,8 +277,11 @@ export function useCodemirror( handleTextSelection() }, 140) - el.addEventListener("mouseup", debounceFn) - el.addEventListener("keyup", debounceFn) + // Only add event listeners if context menu is enabled in the editor + if (options.contextMenuEnabled) { + el.addEventListener("mouseup", debounceFn) + el.addEventListener("keyup", debounceFn) + } if (options.onUpdate) { options.onUpdate(update) @@ -312,7 +320,7 @@ export function useCodemirror( ), EditorView.domEventHandlers({ scroll(event) { - if (event.target) { + if (event.target && options.contextMenuEnabled) { handleTextSelection() } },