diff --git a/webview/src/view/index.ts b/webview/src/view/index.ts index 30e65e5..81ea994 100644 --- a/webview/src/view/index.ts +++ b/webview/src/view/index.ts @@ -1,26 +1,44 @@ - +// 导入 redux 中的 Store 类型 import type { Store } from 'redux'; +// 导入用于在 VSCode 中添加监听器的函数 import { addListener } from '../vscode'; +// 从 actions 模块中导入所有的 action 创建函数 import * as actions from './actions'; +// 导出 reducers 模块中的 reducer 函数 export { reducer } from './reducers'; +// 导出 state 模块中的所有内容 export * from './state'; +// 导出 actions 模块中的所有内容 export { actions }; +/** + * 初始化 Redux 存储并添加一个监听器来处理来自 VSCode 的消息 + * @param store - Redux 存储对象 + */ export function initStore(store: Store) { + // 使用 addListener 函数添加一个监听器,当接收到消息时,会调用回调函数 addListener((msg) => { + // 从消息中提取 navigation 对象 const { navigation } = msg; + // 根据 navigation 对象的 type 属性来判断消息类型,并分派相应的 action switch (navigation.type) { + // 如果消息类型是 'newconfig',则分派 openNewConfig 动作 case 'newconfig': return store.dispatch(actions.openNewConfig()); + // 如果消息类型是 'editconfig',则进一步处理 case 'editconfig': { + // 从 navigation 对象中提取 config 属性 let { config } = navigation; + // 如果 config 是一个数组,并且长度不为 1,则分派 openConfigLocator 动作 if (Array.isArray(config)) { if (config.length !== 1) { return store.dispatch(actions.openConfigLocator(config, config[0].name)); } + // 如果 config 是一个数组,并且长度为 1,则将 config 数组的第一个元素赋值给 config 变量 config = config[0]; } + // 最后,分派 openConfigEditor 动作 return store.dispatch(actions.openConfigEditor(config)); } }