Merge pull request #11246 from Budibase/fix/automations-code-editor-bindings

Ensure the Bash automation modal editor is in the correct mode
This commit is contained in:
deanhannigan 2023-07-18 09:57:42 +01:00 committed by GitHub
commit 1da957d781
2 changed files with 53 additions and 22 deletions

View File

@ -15,6 +15,7 @@
Icon, Icon,
Checkbox, Checkbox,
DatePicker, DatePicker,
Detail,
} from "@budibase/bbui" } from "@budibase/bbui"
import CreateWebhookModal from "components/automation/Shared/CreateWebhookModal.svelte" import CreateWebhookModal from "components/automation/Shared/CreateWebhookModal.svelte"
import { automationStore, selectedAutomation } from "builderStore" import { automationStore, selectedAutomation } from "builderStore"
@ -32,7 +33,7 @@
import CodeEditor from "components/common/CodeEditor/CodeEditor.svelte" import CodeEditor from "components/common/CodeEditor/CodeEditor.svelte"
import { import {
bindingsToCompletions, bindingsToCompletions,
jsAutocomplete, hbAutocomplete,
EditorModes, EditorModes,
} from "components/common/CodeEditor" } from "components/common/CodeEditor"
import FilterDrawer from "components/design/settings/controls/FilterEditor/FilterDrawer.svelte" import FilterDrawer from "components/design/settings/controls/FilterEditor/FilterDrawer.svelte"
@ -55,6 +56,7 @@
let drawer let drawer
let fillWidth = true let fillWidth = true
let inputData let inputData
let codeBindingOpen = false
$: filters = lookForFilters(schemaProperties) || [] $: filters = lookForFilters(schemaProperties) || []
$: tempFilters = filters $: tempFilters = filters
@ -70,6 +72,13 @@
$: queryLimit = tableId?.includes("datasource") ? "∞" : "1000" $: queryLimit = tableId?.includes("datasource") ? "∞" : "1000"
$: isTrigger = block?.type === "TRIGGER" $: isTrigger = block?.type === "TRIGGER"
$: isUpdateRow = stepId === ActionStepID.UPDATE_ROW $: isUpdateRow = stepId === ActionStepID.UPDATE_ROW
$: codeMode =
stepId === "EXECUTE_BASH" ? EditorModes.Handlebars : EditorModes.JS
$: stepCompletions =
codeMode === EditorModes.Handlebars
? [hbAutocomplete([...bindingsToCompletions(bindings, codeMode)])]
: []
/** /**
* TODO - Remove after November 2023 * TODO - Remove after November 2023
@ -489,6 +498,18 @@
/> />
{:else if value.customType === "code"} {:else if value.customType === "code"}
<CodeEditorModal> <CodeEditorModal>
{#if codeMode == EditorModes.JS}
<ActionButton
on:click={() => (codeBindingOpen = !codeBindingOpen)}
quiet
icon={codeBindingOpen ? "ChevronDown" : "ChevronRight"}
>
<Detail size="S">Bindings</Detail>
</ActionButton>
{#if codeBindingOpen}
<pre>{JSON.stringify(bindings, null, 2)}</pre>
{/if}
{/if}
<CodeEditor <CodeEditor
value={inputData[key]} value={inputData[key]}
on:change={e => { on:change={e => {
@ -496,19 +517,22 @@
onChange({ detail: e.detail }, key) onChange({ detail: e.detail }, key)
inputData[key] = e.detail inputData[key] = e.detail
}} }}
completions={[ completions={stepCompletions}
jsAutocomplete([ mode={codeMode}
...bindingsToCompletions(bindings, EditorModes.JS), autocompleteEnabled={codeMode != EditorModes.JS}
]),
]}
mode={EditorModes.JS}
height={500} height={500}
/> />
<div class="messaging"> <div class="messaging">
<Icon name="FlashOn" /> {#if codeMode == EditorModes.Handlebars}
<div class="messaging-wrap"> <Icon name="FlashOn" />
<div>Add available bindings by typing <strong>$</strong></div> <div class="messaging-wrap">
</div> <div>
Add available bindings by typing <strong>
&#125;&#125;
</strong>
</div>
</div>
{/if}
</div> </div>
</CodeEditorModal> </CodeEditorModal>
{:else if value.customType === "loopOption"} {:else if value.customType === "loopOption"}

View File

@ -48,6 +48,7 @@
export let mode = EditorModes.Handlebars export let mode = EditorModes.Handlebars
export let value = "" export let value = ""
export let placeholder = null export let placeholder = null
export let autocompleteEnabled = true
// Export a function to expose caret position // Export a function to expose caret position
export const getCaretPosition = () => { export const getCaretPosition = () => {
@ -131,12 +132,6 @@
syntaxHighlighting(oneDarkHighlightStyle, { fallback: true }), syntaxHighlighting(oneDarkHighlightStyle, { fallback: true }),
highlightActiveLineGutter(), highlightActiveLineGutter(),
highlightSpecialChars(), highlightSpecialChars(),
autocompletion({
override: [...completions],
closeOnBlur: true,
icons: false,
optionClass: () => "autocomplete-option",
}),
EditorView.lineWrapping, EditorView.lineWrapping,
EditorView.updateListener.of(v => { EditorView.updateListener.of(v => {
const docStr = v.state.doc?.toString() const docStr = v.state.doc?.toString()
@ -159,11 +154,16 @@
const buildExtensions = base => { const buildExtensions = base => {
const complete = [...base] const complete = [...base]
if (mode.name == "javascript") {
complete.push(javascript()) if (autocompleteEnabled) {
complete.push(highlightWhitespace()) complete.push(
complete.push(lineNumbers()) autocompletion({
complete.push(foldGutter()) override: [...completions],
closeOnBlur: true,
icons: false,
optionClass: () => "autocomplete-option",
})
)
complete.push( complete.push(
EditorView.inputHandler.of((view, from, to, insert) => { EditorView.inputHandler.of((view, from, to, insert) => {
if (insert === "$") { if (insert === "$") {
@ -193,6 +193,13 @@
) )
} }
if (mode.name == "javascript") {
complete.push(javascript())
complete.push(highlightWhitespace())
complete.push(lineNumbers())
complete.push(foldGutter())
}
if (placeholder) { if (placeholder) {
complete.push(placeholderFn(placeholder)) complete.push(placeholderFn(placeholder))
} }