This commit is contained in:
Sam Rose 2025-03-12 16:47:26 +00:00
parent f20f70d7c0
commit 929c759247
No known key found for this signature in database
7 changed files with 25 additions and 4 deletions

View File

@ -1059,6 +1059,7 @@
inputData[key] = e.detail inputData[key] = e.detail
}} }}
completions={stepCompletions} completions={stepCompletions}
{bindings}
mode={codeMode} mode={codeMode}
autocompleteEnabled={codeMode !== EditorModes.JS} autocompleteEnabled={codeMode !== EditorModes.JS}
bind:getCaretPosition bind:getCaretPosition

View File

@ -152,6 +152,7 @@
<div class="field-wrap json-field"> <div class="field-wrap json-field">
<CodeEditor <CodeEditor
value={readableValue} value={readableValue}
{bindings}
on:blur={e => { on:blur={e => {
onChange({ onChange({
row: { row: {

View File

@ -59,7 +59,11 @@
import { javascript } from "@codemirror/lang-javascript" import { javascript } from "@codemirror/lang-javascript"
import { EditorModes } from "./" import { EditorModes } from "./"
import { themeStore } from "@/stores/portal" import { themeStore } from "@/stores/portal"
import { FeatureFlag, type EditorMode } from "@budibase/types" import {
type EnrichedBinding,
FeatureFlag,
type EditorMode,
} from "@budibase/types"
import { tooltips } from "@codemirror/view" import { tooltips } from "@codemirror/view"
import type { BindingCompletion, CodeValidator } from "@/types" import type { BindingCompletion, CodeValidator } from "@/types"
import { validateHbsTemplate } from "./validator/hbs" import { validateHbsTemplate } from "./validator/hbs"
@ -80,6 +84,7 @@
export let readonly = false export let readonly = false
export let readonlyLineNumbers = false export let readonlyLineNumbers = false
export let dropdown = DropdownPosition.Relative export let dropdown = DropdownPosition.Relative
export let bindings: EnrichedBinding[] = []
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
@ -100,7 +105,8 @@
let promptInput: TextArea let promptInput: TextArea
$: aiGenEnabled = $: aiGenEnabled =
featureFlag.isEnabled(FeatureFlag.AI_JS_GENERATION) && featureFlag.isEnabled(FeatureFlag.AI_JS_GENERATION) &&
mode.name === "javascript" mode.name === "javascript" &&
!readonly
$: { $: {
if (autofocus && isEditorInitialised) { if (autofocus && isEditorInitialised) {
@ -165,7 +171,7 @@
popoverWidth = 30 popoverWidth = 30
let code = "" let code = ""
try { try {
const resp = await API.generateJs({ prompt }) const resp = await API.generateJs({ prompt, bindings })
code = resp.code code = resp.code
} catch (e) { } catch (e) {
console.error(e) console.error(e)
@ -189,6 +195,7 @@
suggestedCode = null suggestedCode = null
previousContents = null previousContents = null
resetPopover() resetPopover()
dispatch("change", editor.state.doc.toString())
} }
const rejectSuggestion = () => { const rejectSuggestion = () => {
@ -513,6 +520,11 @@
bind:this={popover} bind:this={popover}
minWidth={popoverWidth} minWidth={popoverWidth}
anchor={popoverAnchor} anchor={popoverAnchor}
on:close={() => {
if (suggestedCode) {
acceptSuggestion()
}
}}
align="left-outside" align="left-outside"
> >
{#if promptLoading} {#if promptLoading}

View File

@ -359,6 +359,7 @@
bind:getCaretPosition bind:getCaretPosition
bind:insertAtPos bind:insertAtPos
{completions} {completions}
{bindings}
{validations} {validations}
autofocus={autofocusEditor} autofocus={autofocusEditor}
placeholder={placeholder || placeholder={placeholder ||
@ -372,6 +373,7 @@
value={jsValue ? decodeJSBinding(jsValue) : ""} value={jsValue ? decodeJSBinding(jsValue) : ""}
on:change={onChangeJSValue} on:change={onChangeJSValue}
{completions} {completions}
{bindings}
{validations} {validations}
mode={EditorModes.JS} mode={EditorModes.JS}
bind:getCaretPosition bind:getCaretPosition

View File

@ -144,6 +144,7 @@
on:change={onChangeJSValue} on:change={onChangeJSValue}
on:blur on:blur
completions={jsCompletions} completions={jsCompletions}
{bindings}
mode={EditorModes.JS} mode={EditorModes.JS}
bind:getCaretPosition bind:getCaretPosition
bind:insertAtPos bind:insertAtPos

@ -1 +1 @@
Subproject commit a44aec4935713412feaaddb50b5075a5e748c575 Subproject commit 0a71c9147ab8ac184013e6ce197b689e160ff663

View File

@ -1,6 +1,10 @@
import { EnrichedBinding } from "../../ui"
export interface GenerateJsRequest { export interface GenerateJsRequest {
prompt: string prompt: string
bindings?: EnrichedBinding[]
} }
export interface GenerateJsResponse { export interface GenerateJsResponse {
code: string code: string
} }