@@ -16,6 +16,7 @@ import {
1616 ChatPromptOptionAcknowledgedMessage ,
1717 STOP_CHAT_RESPONSE ,
1818 StopChatResponseMessage ,
19+ OPEN_FILE_DIALOG ,
1920} from '@aws/chat-client-ui-types'
2021import {
2122 ChatResult ,
@@ -60,6 +61,10 @@ import {
6061 ruleClickRequestType ,
6162 pinnedContextNotificationType ,
6263 activeEditorChangedNotificationType ,
64+ ShowOpenDialogRequestType ,
65+ ShowOpenDialogParams ,
66+ openFileDialogRequestType ,
67+ OpenFileDialogResult ,
6368} from '@aws/language-server-runtimes/protocol'
6469import { v4 as uuidv4 } from 'uuid'
6570import * as vscode from 'vscode'
@@ -316,6 +321,19 @@ export function registerMessageListeners(
316321 }
317322 break
318323 }
324+ case OPEN_FILE_DIALOG : {
325+ // openFileDialog is the event emitted from webView to open
326+ // file system
327+ const result = await languageClient . sendRequest < OpenFileDialogResult > (
328+ openFileDialogRequestType . method ,
329+ message . params
330+ )
331+ void provider . webview ?. postMessage ( {
332+ command : openFileDialogRequestType . method ,
333+ params : result ,
334+ } )
335+ break
336+ }
319337 case quickActionRequestType . method : {
320338 const quickActionPartialResultToken = uuidv4 ( )
321339 const quickActionDisposable = languageClient . onProgress (
@@ -461,6 +479,24 @@ export function registerMessageListeners(
461479 }
462480 } )
463481
482+ languageClient . onRequest ( ShowOpenDialogRequestType . method , async ( params : ShowOpenDialogParams ) => {
483+ try {
484+ const uris = await vscode . window . showOpenDialog ( {
485+ canSelectFiles : params . canSelectFiles ?? true ,
486+ canSelectFolders : params . canSelectFolders ?? false ,
487+ canSelectMany : params . canSelectMany ?? false ,
488+ filters : params . filters ,
489+ defaultUri : params . defaultUri ? vscode . Uri . parse ( params . defaultUri , false ) : undefined ,
490+ title : params . title ,
491+ } )
492+ const urisString = uris ?. map ( ( uri ) => uri . fsPath )
493+ return { uris : urisString || [ ] }
494+ } catch ( err ) {
495+ languageClient . error ( `[VSCode Client] Failed to open file dialog: ${ ( err as Error ) . message } ` )
496+ return { uris : [ ] }
497+ }
498+ } )
499+
464500 languageClient . onRequest < ShowDocumentParams , ShowDocumentResult > (
465501 ShowDocumentRequest . method ,
466502 async ( params : ShowDocumentParams ) : Promise < ShowDocumentParams | ResponseError < ShowDocumentResult > > => {
0 commit comments