From f9fe76a1a5274e23aa11c2ccadf8b7e6481d5632 Mon Sep 17 00:00:00 2001 From: Flawid DSouza Date: Tue, 5 Mar 2024 21:02:45 +0530 Subject: [PATCH] feat(ui): Socket Panel > Highlight valid and invalid environment variables in payload edit box --- .../src/components/CodeMirrorSingleLine.vue | 48 ++++++++++++------- packages/ui/src/components/SocketPanel.vue | 15 +++--- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/packages/ui/src/components/CodeMirrorSingleLine.vue b/packages/ui/src/components/CodeMirrorSingleLine.vue index 14da4c1b..0dc37525 100644 --- a/packages/ui/src/components/CodeMirrorSingleLine.vue +++ b/packages/ui/src/components/CodeMirrorSingleLine.vue @@ -9,6 +9,28 @@ import { history, historyKeymap } from '@codemirror/commands' import { envVarDecoration } from '@/utils/codemirror-extensions' function getExtensions(vueInstance) { + const singleLineEnforcers = [] + + if(!vueInstance.allowMultipleLines) { + // From: https://discuss.codemirror.net/t/codemirror-6-single-line-and-or-avoid-carriage-return/2979/2 + [ + EditorState.transactionFilter.of(tr => tr.newDoc.lines > 1 ? [] : tr), + EditorView.domEventHandlers({ + paste: (event, view) => { + const content = event.clipboardData.getData('text/plain') + + if(content.includes('\n')) { + event.preventDefault() + const contentWithoutNewLines = content.replace(/[\n\r]/g, '') + const transaction = view.state.replaceSelection(contentWithoutNewLines) + const update = view.state.update(transaction) + view.update([update]) + } + } + }) + ].forEach(enforcer => singleLineEnforcers.push(enforcer)) + } + const extensions = [ history(), EditorView.updateListener.of(v => { @@ -17,21 +39,7 @@ function getExtensions(vueInstance) { vueInstance.$emit('update:modelValue', v.state.doc.toString()) } }), - // From: https://discuss.codemirror.net/t/codemirror-6-single-line-and-or-avoid-carriage-return/2979/2 - EditorState.transactionFilter.of(tr => tr.newDoc.lines > 1 ? [] : tr), - EditorView.domEventHandlers({ - paste: (event, view) => { - const content = event.clipboardData.getData('text/plain') - - if(content.includes('\n')) { - event.preventDefault() - const contentWithoutNewLines = content.replace(/[\n\r]/g, '') - const transaction = view.state.replaceSelection(contentWithoutNewLines) - const update = view.state.update(transaction) - view.update([update]) - } - } - }), + ...singleLineEnforcers, keymap.of([ ...historyKeymap ]), @@ -48,7 +56,7 @@ function getExtensions(vueInstance) { function createState(vueInstance) { return EditorState.create({ - doc: vueInstance.modelValue, + doc: typeof vueInstance.modelValue === 'string' ? vueInstance.modelValue : '', extensions: getExtensions(vueInstance) }) } @@ -71,6 +79,10 @@ export default { type: Boolean, default: false }, + allowMultipleLines: { + type: Boolean, + default: false + }, disabled: { type: Boolean, default: false @@ -118,6 +130,10 @@ export default {