Auto-generate plugin docs (WIP)
This commit is contained in:
parent
6bdb05e678
commit
ee6d622941
44 changed files with 599 additions and 150 deletions
54
dashboard/src/store/docs.ts
Normal file
54
dashboard/src/store/docs.ts
Normal file
|
@ -0,0 +1,54 @@
|
|||
import { get } from "../api";
|
||||
import { Module } from "vuex";
|
||||
import { DocsState, RootState } from "./types";
|
||||
|
||||
export const DocsStore: Module<DocsState, RootState> = {
|
||||
namespaced: true,
|
||||
|
||||
state: {
|
||||
allPlugins: [],
|
||||
loadingAllPlugins: false,
|
||||
|
||||
plugins: {},
|
||||
},
|
||||
|
||||
actions: {
|
||||
async loadAllPlugins({ state, commit }) {
|
||||
if (state.loadingAllPlugins) return;
|
||||
commit("setAllPluginLoadStatus", true);
|
||||
|
||||
const plugins = await get("docs/plugins");
|
||||
plugins.sort((a, b) => {
|
||||
const aName = (a.info.prettyName || a.name).toLowerCase();
|
||||
const bName = (b.info.prettyName || b.name).toLowerCase();
|
||||
if (aName > bName) return 1;
|
||||
if (aName < bName) return -1;
|
||||
return 0;
|
||||
});
|
||||
commit("setAllPlugins", plugins);
|
||||
|
||||
commit("setAllPluginLoadStatus", false);
|
||||
},
|
||||
|
||||
async loadPluginData({ state, commit }, name) {
|
||||
if (state.plugins[name]) return;
|
||||
|
||||
const data = await get(`docs/plugins/${name}`);
|
||||
commit("setPluginData", { name, data });
|
||||
},
|
||||
},
|
||||
|
||||
mutations: {
|
||||
setAllPluginLoadStatus(state: DocsState, status: boolean) {
|
||||
state.loadingAllPlugins = status;
|
||||
},
|
||||
|
||||
setAllPlugins(state: DocsState, plugins) {
|
||||
state.allPlugins = plugins;
|
||||
},
|
||||
|
||||
setPluginData(state: DocsState, { name, data }) {
|
||||
state.plugins[name] = data;
|
||||
},
|
||||
},
|
||||
};
|
|
@ -6,23 +6,27 @@ Vue.use(Vuex);
|
|||
import { RootState } from "./types";
|
||||
import { AuthStore } from "./auth";
|
||||
import { GuildStore } from "./guilds";
|
||||
import { DocsStore } from "./docs";
|
||||
|
||||
export const RootStore = new Vuex.Store<RootState>({
|
||||
modules: {
|
||||
auth: AuthStore,
|
||||
guilds: GuildStore,
|
||||
docs: DocsStore,
|
||||
},
|
||||
});
|
||||
|
||||
// Set up typings so Vue/our components know about the state's types
|
||||
declare module "vue/types/options" {
|
||||
interface ComponentOptions<V extends Vue> {
|
||||
// @ts-ignore
|
||||
store?: Store<RootState>;
|
||||
}
|
||||
}
|
||||
|
||||
declare module "vue/types/vue" {
|
||||
interface Vue {
|
||||
// @ts-ignore
|
||||
$store: Store<RootState>;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,29 @@ export interface GuildState {
|
|||
};
|
||||
}
|
||||
|
||||
export interface ThinDocsPlugin {
|
||||
name: string;
|
||||
info: {
|
||||
name: string;
|
||||
description?: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface DocsPlugin extends ThinDocsPlugin {
|
||||
commands: any[];
|
||||
}
|
||||
|
||||
export interface DocsState {
|
||||
allPlugins: ThinDocsPlugin[];
|
||||
loadingAllPlugins: boolean;
|
||||
|
||||
plugins: {
|
||||
[key: string]: DocsPlugin;
|
||||
};
|
||||
}
|
||||
|
||||
export type RootState = {
|
||||
auth: AuthState;
|
||||
guilds: GuildState;
|
||||
docs: DocsState;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue