@uiw-admin/plugins
Version:
148 lines (137 loc) • 3.87 kB
text/typescript
import path from 'path';
export interface TempProps {
lazyModelsStr: string;
importStr: string;
addModelStr: string;
typeModels: string;
createModelsStr: string;
models: string;
lazyLoad: boolean;
}
// 模板
export default (str: TempProps, isTS: boolean) => {
if (!isTS) {
return `
import {
init,
Models,
Model,
RematchRootState,
RematchDispatch,
createModel,
} from '@rematch/core';
import loading from '@rematch/loading';
${str.importStr}
${!str.lazyLoad ? str.createModelsStr : ''}
export const models = {
${!str.lazyLoad ? str.models : ''}
}
export const store = init({
models,
plugins: [loading()],
});
export const { dispatch, addModel } = store;
`;
}
return `
// @ts-ignore
import {
init,
Models,
Model,
RematchRootState,
RematchDispatch,
createModel,
} from '@rematch/core';
import loading, { ExtraModelsFromLoading } from '@rematch/loading';
${str.importStr}
${!str.lazyLoad ? str.createModelsStr : ''}
export const models = {
${!str.lazyLoad ? str.models : ''}
}
export interface RootModel extends Models<RootModel> {
${str.typeModels}
}
export type FullModel = ExtraModelsFromLoading<RootModel>
export const store = init<RootModel, FullModel>({
models,
plugins: [loading()],
});
export const { dispatch, addModel } = store;
export type Store = typeof store;
export type AddModel = typeof addModel;
export type Dispatch = RematchDispatch<RootModel>;
export type RootState = RematchRootState<RootModel, FullModel>;
export type ModelDefault<T = any> = Model<RootModel, T>;
`;
};
export const createModelsTempStr = (
modelArr: {
path: string;
filename: string;
modelName?: string;
isCreateModel: boolean;
}[],
lazyLoad: boolean,
isTS: boolean,
) => {
let importStr = '';
let lazyModelsStr = '';
let typeModels = '';
let addModelStr = '';
let createModelsStr = '';
let models = '';
const Reg = new RegExp(`^${path.resolve(process.cwd(), 'src/models/')}`);
modelArr.forEach((item, index) => {
const { path: paths, filename, modelName, isCreateModel } = item;
const pathUrls = `${paths}`.replace(/\\/g, '/').replace(/\.(js|ts)/, '');
const names = modelName || filename;
importStr =
importStr + `import ${names}Model${index} from "${pathUrls}";\n`;
if ((lazyLoad && Reg.test(item.path)) || !lazyLoad) {
lazyModelsStr =
lazyModelsStr +
`const ${names}Model${index} = (await import("${pathUrls}")).default;\n`;
if (isCreateModel) {
addModelStr =
addModelStr +
`store.addModel({ name: "${names}", ...${names}Model${index} });\n`;
createModelsStr =
createModelsStr + `const ${names}Model = ${names}Model${index};\n`;
} else {
if (isTS) {
addModelStr =
addModelStr +
`store.addModel({ name: "${names}", ...createModel<RootModel>()(${names}Model${index}) });\n`;
createModelsStr =
createModelsStr +
`const ${names}Model = createModel<RootModel>()(${names}Model${index});\n`;
} else {
addModelStr =
addModelStr +
`store.addModel({ name: "${names}", ...createModel()(${names}Model${index}) });\n`;
createModelsStr =
createModelsStr +
`const ${names}Model = createModel()(${names}Model${index});\n`;
}
}
models = models + `${names}:${names}Model,\n`;
}
if (isTS) {
typeModels = typeModels + ` ${names}:typeof ${names}Model${index},\n`;
}
});
return {
importStr,
lazyModelsStr,
typeModels,
addModelStr,
models,
lazyLoad,
createModelsStr,
};
};
export const createTemp = (pathUrl: string, filename: string) => {
const path = `${pathUrl}`.replace(/\\/g, '/');
return `createModels(require("${path}").default,"${filename}");\n`;
};