Skip to content

Commit abfba9d

Browse files
committed
Enable visual highlighting for the currently selected preset or group in the UI
1 parent c1632a8 commit abfba9d

4 files changed

Lines changed: 37 additions & 3 deletions

File tree

packages/ui/src/components/editor/Presets/Presets.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Checkbox } from '../Checkbox'
44
import cn from 'classnames'
55
import { ReactSortable } from 'react-sortablejs'
66
import { Icon } from '../Icon'
7-
import { useState } from 'react'
7+
import { useState, useEffect } from 'react'
88
import { CHATBOTS } from '@shared/constants/chatbots'
99

1010
export const chatbot_to_icon: Record<keyof typeof CHATBOTS, Icon.Variant> = {
@@ -55,6 +55,7 @@ export namespace Presets {
5555
on_preset_duplicate: (name: string) => void
5656
on_preset_delete: (name: string) => void
5757
on_toggle_default_preset: (name: string) => void
58+
selected_preset_or_group_name?: string
5859
translations: {
5960
my_chat_presets: string
6061
set_presets_opening_by_default: string
@@ -89,6 +90,15 @@ export const Presets: React.FC<Presets.Props> = (props) => {
8990
Record<Presets.Props['web_mode'], string>
9091
>({} as any)
9192

93+
useEffect(() => {
94+
if (props.selected_preset_or_group_name) {
95+
set_highlighted_preset_name((prev) => ({
96+
...prev,
97+
[props.web_mode]: props.selected_preset_or_group_name
98+
}))
99+
}
100+
}, [props.selected_preset_or_group_name])
101+
92102
const get_is_preset_disabled = (preset: Presets.Preset) =>
93103
preset.chatbot &&
94104
(!props.is_connected ||

packages/vscode/src/view/backend/message-handlers/handle-send-prompt.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,8 @@ export const handle_send_prompt = async (params: {
209209
async function show_preset_quick_pick(
210210
presets: ConfigPresetFormat[],
211211
context: vscode.ExtensionContext,
212-
mode: string
212+
mode: string,
213+
provider: ViewProvider
213214
): Promise<string[]> {
214215
const last_selected_item = context.workspaceState.get<string | undefined>(
215216
get_last_selected_preset_key(mode),
@@ -280,6 +281,10 @@ async function show_preset_quick_pick(
280281
get_last_selected_preset_key(mode),
281282
selected_name
282283
)
284+
provider.send_message({
285+
command: 'SELECTED_PRESETS',
286+
names: [selected_name]
287+
})
283288
resolve([selected_name])
284289
} else {
285290
resolve([])
@@ -615,6 +620,10 @@ async function resolve_presets(params: {
615620
}
616621

617622
const group_name = selected.name
623+
params.provider.send_message({
624+
command: 'SELECTED_PRESETS',
625+
names: [group_name]
626+
})
618627
params.context.workspaceState.update(
619628
last_selected_group_state_key,
620629
group_name
@@ -668,6 +677,7 @@ async function resolve_presets(params: {
668677
return show_preset_quick_pick(
669678
all_presets,
670679
params.context,
671-
params.provider.web_mode
680+
params.provider.web_mode,
681+
params.provider
672682
)
673683
}

packages/vscode/src/view/frontend/home/Home.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ export const Home: React.FC<Props> = (props) => {
5959
useState<boolean>(false)
6060
const [can_apply_clipboard, set_can_apply_clipboard] =
6161
useState<boolean>(false)
62+
const [selected_preset_or_group_name, set_selected_preset_or_group_name] =
63+
useState<string>()
6264
const [can_revert, set_can_revert] = useState<boolean>(false)
6365

6466
const is_in_code_completions_mode =
@@ -122,6 +124,11 @@ export const Home: React.FC<Props> = (props) => {
122124
case 'CAN_REVERT_CHANGED':
123125
set_can_revert(message.can_revert)
124126
break
127+
case 'SELECTED_PRESETS':
128+
if (message.names.length > 0) {
129+
set_selected_preset_or_group_name(message.names[0])
130+
}
131+
break
125132
}
126133
}
127134

@@ -537,6 +544,9 @@ export const Home: React.FC<Props> = (props) => {
537544
on_code_completion_with_quick_pick_click={
538545
handle_code_completion_with_quick_pick_click
539546
}
547+
selected_preset_or_group_name={
548+
selected_preset_or_group_name
549+
}
540550
caret_position_to_set={caret_position_to_set}
541551
on_caret_position_set={() => set_caret_position_to_set(undefined)}
542552
/>

packages/vscode/src/view/frontend/home/HomeView/HomeView.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ type Props = {
6868
on_code_completion_with_quick_pick_click: () => void
6969
caret_position_to_set?: number
7070
on_caret_position_set?: () => void
71+
selected_preset_or_group_name?: string
7172
}
7273

7374
const web_mode_labels: Record<WebMode, string> = {
@@ -449,6 +450,9 @@ export const HomeView: React.FC<Props> = (props) => {
449450
no_preset_enabled_or_selected_in_this_group:
450451
'No preset is enabled or selected in this group'
451452
}}
453+
selected_preset_or_group_name={
454+
props.selected_preset_or_group_name
455+
}
452456
/>
453457
</>
454458
)}

0 commit comments

Comments
 (0)