|
|
|
@ -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));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|