Skip to content

Commit 4325fe0

Browse files
committed
Migrate relevant file selection to the main preview interface and remove the standalone modal
1 parent e280175 commit 4325fe0

22 files changed

Lines changed: 472 additions & 442 deletions

File tree

apps/editor/src/commands/apply-chat-response-command/apply-chat-response-command.ts

Lines changed: 65 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { get_checkpoint_path } from '../checkpoints-command/utils'
99
import { PanelProvider } from '@/views/panel/backend/panel-provider'
1010
import { dictionary } from '@shared/constants/dictionary'
1111
import { WorkspaceProvider } from '@/context/providers/workspace/workspace-provider'
12-
import { response_preview_promise_resolve } from './utils/preview/preview'
12+
import { get_response_preview_promise_resolve } from './utils/preview/preview'
1313
import { get_diff_stats } from './utils/preview/diff-utils'
1414
import { create_safe_path } from '@/utils/path-sanitizer'
1515
import {
@@ -32,7 +32,6 @@ import {
3232
import { parse_response } from './utils/clipboard-parser'
3333

3434
let in_progress = false
35-
let placeholder_created_at_for_update: number | undefined
3635

3736
interface SavedEditorState {
3837
uri: string
@@ -84,7 +83,9 @@ export const apply_chat_response_command = (params: {
8483
return
8584
}
8685

87-
if (in_progress && !response_preview_promise_resolve) {
86+
const resolve_fn = get_response_preview_promise_resolve()
87+
88+
if (in_progress && !resolve_fn) {
8889
return
8990
}
9091

@@ -94,26 +95,30 @@ export const apply_chat_response_command = (params: {
9495
response: chat_response,
9596
is_single_root_folder_workspace
9697
})
97-
const is_relevant_files = clipboard_items.some(
98-
(item) => item.type == 'relevant-files'
99-
)
100-
101-
if (response_preview_promise_resolve && !is_relevant_files) {
98+
if (resolve_fn) {
10299
const history = params.panel_provider.response_history
103100

104-
const new_item: ResponseHistoryItem = {
105-
response: chat_response,
106-
raw_instructions: args?.raw_instructions,
107-
created_at: Date.now(),
108-
url: args?.url,
109-
api_configuration: args?.api_configuration
110-
}
101+
let created_at_for_switch: number
111102

112-
history.push(new_item)
113-
params.panel_provider.send_message({
114-
command: 'RESPONSE_HISTORY',
115-
history
116-
})
103+
if (!args?.created_at) {
104+
const new_item: ResponseHistoryItem = {
105+
response: chat_response,
106+
raw_instructions: args?.raw_instructions,
107+
created_at: Date.now(),
108+
url: args?.url,
109+
api_configuration: args?.api_configuration,
110+
is_unviewed: true
111+
}
112+
113+
created_at_for_switch = new_item.created_at
114+
history.push(new_item)
115+
params.panel_provider.send_message({
116+
command: 'RESPONSE_HISTORY',
117+
history
118+
})
119+
} else {
120+
created_at_for_switch = args.created_at
121+
}
117122

118123
if (params.panel_provider.preview_switch_choice_resolver) {
119124
// The "switch preview" modal is already visible for a previous
@@ -129,8 +134,8 @@ export const apply_chat_response_command = (params: {
129134
params.panel_provider.preview_switch_choice_resolver = undefined
130135

131136
if (choice == 'Switch') {
132-
placeholder_created_at_for_update = new_item.created_at
133-
response_preview_promise_resolve({ accepted_files: [] })
137+
args = { ...args, created_at: created_at_for_switch }
138+
resolve_fn({ accepted_files: [] })
134139
if (ongoing_preview_cleanup_promise) {
135140
await ongoing_preview_cleanup_promise
136141
}
@@ -141,10 +146,27 @@ export const apply_chat_response_command = (params: {
141146
}
142147

143148
in_progress = true
149+
150+
if (args?.created_at) {
151+
const target_created_at = args.created_at
152+
const history = params.panel_provider.response_history
153+
const existing = history.find((i) => i.created_at === target_created_at)
154+
if (existing && existing.is_unviewed !== false) {
155+
existing.is_unviewed = false
156+
params.panel_provider.send_message({
157+
command: 'RESPONSE_HISTORY',
158+
history
159+
})
160+
}
161+
}
162+
144163
let before_checkpoint: Checkpoint | undefined
145164
let saved_tab_groups: SavedTabGroups | undefined
146165

147166
try {
167+
const is_relevant_files = clipboard_items.some(
168+
(i) => i.type == 'relevant-files'
169+
)
148170
if (!is_relevant_files) {
149171
// Save current tab groups before entering preview
150172
saved_tab_groups = {
@@ -167,6 +189,7 @@ export const apply_chat_response_command = (params: {
167189

168190
const has_valid_blocks =
169191
(args?.files_with_content && args.files_with_content.length > 0) ||
192+
(args?.relevant_files && args.relevant_files.length > 0) ||
170193
clipboard_items.some(
171194
(item) =>
172195
item.type == 'file' ||
@@ -314,41 +337,28 @@ export const apply_chat_response_command = (params: {
314337
}
315338
const history = params.panel_provider.response_history
316339

317-
if (placeholder_created_at_for_update) {
318-
const item_to_update = history.find(
319-
(i) => i.created_at === placeholder_created_at_for_update
320-
)
321-
if (item_to_update) {
322-
item_to_update.files = files_for_history
323-
item_to_update.lines_added = total_lines_added
324-
item_to_update.lines_removed = total_lines_removed
325-
}
326-
created_at_for_preview = placeholder_created_at_for_update
327-
placeholder_created_at_for_update = undefined
328-
} else {
329-
const item_to_update =
330-
args?.created_at &&
331-
history.find((i) => i.created_at === args.created_at)
332-
333-
if (item_to_update) {
334-
item_to_update.files = files_for_history
335-
item_to_update.lines_added = total_lines_added
336-
item_to_update.lines_removed = total_lines_removed
337-
} else {
338-
created_at_for_preview = Date.now()
339-
const new_item: ResponseHistoryItem = {
340-
response: preview_data.chat_response,
341-
raw_instructions: args?.raw_instructions,
342-
created_at: created_at_for_preview,
343-
lines_added: total_lines_added,
344-
lines_removed: total_lines_removed,
345-
files: files_for_history,
346-
url: args?.url,
347-
api_configuration: args?.api_configuration
348-
}
340+
const item_to_update =
341+
args?.created_at &&
342+
history.find((i) => i.created_at === args.created_at)
349343

350-
history.push(new_item)
344+
if (item_to_update) {
345+
item_to_update.files = files_for_history
346+
item_to_update.lines_added = total_lines_added
347+
item_to_update.lines_removed = total_lines_removed
348+
} else {
349+
created_at_for_preview = Date.now()
350+
const new_item: ResponseHistoryItem = {
351+
response: preview_data.chat_response,
352+
raw_instructions: args?.raw_instructions,
353+
created_at: created_at_for_preview,
354+
lines_added: total_lines_added,
355+
lines_removed: total_lines_removed,
356+
files: files_for_history,
357+
url: args?.url,
358+
api_configuration: args?.api_configuration
351359
}
360+
361+
history.push(new_item)
352362
}
353363

354364
params.panel_provider.send_message({

0 commit comments

Comments
 (0)