1- // import * as vscode from 'vscode'
2- // import start from './start'
3- // // import ReactPanel from '../views/createWebview'
1+ import * as vscode from 'vscode'
2+ import { join } from 'path'
3+ import { setStorage } from '../storage'
4+ import ReactWebView from '../ReactWebView'
5+ import * as CR from '../../typings'
46
5- // import runTest from './runTest'
6- // // import loadSolution from './loadSolution'
7- // // import quit from './quit'
7+ const COMMANDS = {
8+ START : 'coderoad.start' ,
9+ OPEN_WEBVIEW : 'coderoad.open_webview' ,
10+ OPEN_FILE : 'coderoad.open_file' ,
11+ RUN_TEST : 'coderoad.test_run' ,
12+ }
813
9- // const COMMANDS = {
10- // // TUTORIAL_SETUP: 'coderoad.tutorial_setup',
11- // START: 'coderoad.start',
12- // OPEN_WEBVIEW: 'coderoad.open_webview',
13- // RUN_TEST: 'coderoad.test_run',
14- // // LOAD_SOLUTION: 'coderoad.solution_load',
15- // // QUIT: 'coderoad.quit',
16- // }
14+ interface CreateCommandProps {
15+ context : vscode . ExtensionContext ,
16+ machine : CR . StateMachine
17+ }
1718
19+ // React panel webview
20+ let webview : any ;
1821
19- // export default (context: vscode.ExtensionContext): void => {
20- // const commands = {
21- // [COMMANDS.START]: () => {
22- // start(context)
23- // },
24- // [COMMANDS.OPEN_WEBVIEW]: () => {
25- // // ReactPanel.createOrShow(context.extensionPath);
26- // },
27- // [COMMANDS.RUN_TEST]: () => {
28- // runTest()
29- // },
30- // // [COMMANDS.LOAD_SOLUTION]: loadSolution,
31- // // [COMMANDS.QUIT]: () => quit(context.subscriptions),
32- // }
22+ export const createCommands = ( { context, machine } : CreateCommandProps ) => ( {
23+ [ COMMANDS . START ] : ( ) => {
24+ // set local storage workspace
25+ setStorage ( context . workspaceState )
3326
34- // for (const cmd in commands) {
35- // const command: vscode.Disposable = vscode.commands.registerCommand(cmd, commands[cmd])
36- // context.subscriptions.push(command)
37- // }
38- // }
27+ // activate machine
28+ webview = new ReactWebView ( context . extensionPath , machine . onReceive )
29+ machine . activate ( )
30+ } ,
31+ [ COMMANDS . OPEN_WEBVIEW ] : ( ) => {
32+ webview . createOrShow ( ) ;
33+ } ,
34+ [ COMMANDS . OPEN_FILE ] : async ( relativeFilePath : string ) => {
35+ try {
36+ const workspaceRoot = vscode . workspace . rootPath
37+ if ( ! workspaceRoot ) {
38+ throw new Error ( 'No workspace root path' )
39+ }
40+ const absoluteFilePath = join ( workspaceRoot , relativeFilePath )
41+ const doc = await vscode . workspace . openTextDocument ( absoluteFilePath )
42+ await vscode . window . showTextDocument ( doc , vscode . ViewColumn . One )
43+ } catch ( error ) {
44+ console . log ( `Failed to open file ${ relativeFilePath } ` , error )
45+ }
46+ }
47+ } )
0 commit comments