feat: 配置了插件动态导入,新增了一个完成度不高的代码编辑插件

This commit is contained in:
539943419 committed 2024-08-29 12:24:40 +08:00
1 parent 803fd69850
commit 86b3a02237
9 files changed
+414 -35

No files matched your search

+30 -14
View File
@@ -1,5 +1,5 @@
import useViretualPages from "@/hooks/useVirtualPages"
import VirtualDirectory, { VirtualFile } from "./VirtualDirectory"
import useVirtualPages from '@/hooks/useVirtualPages'
import VirtualDirectory, { VirtualFile } from './VirtualDirectory'
type plugin = {
// 用于显示的名字
@@ -18,7 +18,7 @@ export default class PluginCenter {
[key: string]: plugin
}
register(key: string, plugin: plugin){
register(key: string, plugin: plugin) {
this.pluginsMap[key] = plugin
console.log(this.pluginsMap)
}
@@ -26,35 +26,51 @@ export default class PluginCenter {
/**
* 便捷地注册一个组件为插件,触发时直接用新页面打开
*/
registerComponent(key: string,name: string, component: any, filter:(VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) => boolean): void {
registerComponent(
key: string,
name: string,
getComponent: () => any,
filter: (
VDirectorys: VirtualDirectory[],
VFiles: VirtualFile[]
) => boolean
): void {
let _component: any
const views = useVirtualPages()
this.register(key, {
name,
filter,
func: (VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) => {
if(filter(VDirectorys, VFiles) === false){
func: async (
VDirectorys: VirtualDirectory[],
VFiles: VirtualFile[]
) => {
if (filter(VDirectorys, VFiles) === false) {
return
}
const views = useViretualPages()
views.push(component, VDirectorys, VFiles)
if (_component === undefined) _component = await getComponent()
views.push(_component, VDirectorys, VFiles)
}
})
}
getUsablePlugin(VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) {
const usableList = []
for(let key of Object.keys(this.pluginsMap)) {
if(this.pluginsMap[key].filter(VDirectorys, VFiles)) {
for (let key of Object.keys(this.pluginsMap)) {
if (this.pluginsMap[key].filter(VDirectorys, VFiles)) {
usableList.push(key)
}
}
return usableList.map(key=>({
return usableList.map((key) => ({
key,
...this.pluginsMap[key]
}))
}
usePlugin(key: string, VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) {
usePlugin(
key: string,
VDirectorys: VirtualDirectory[],
VFiles: VirtualFile[]
) {
this.pluginsMap[key].func(VDirectorys, VFiles)
}
}
}