From 9e0ae6ec8245d942de6270231cf0ff4d452bc66b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=87=E7=BA=AF?= Date: Mon, 14 Dec 2020 15:00:29 +0800 Subject: [PATCH] feat: fes-plugin-model done --- .fatherrc.js | 2 +- .../.fatherrc.js | 0 .../package.json | 2 +- .../src/index.js | 10 ++++-- .../src/models/initialState.tpl | 34 +++++++++++++++++++ .../fes-plugin-model/src/template/core.tpl | 25 ++++++++++++++ .../fes-plugin-model/src/template/runtime.tpl | 26 ++++++++++++++ .../src/utils/getModels.js | 0 .../src/utils/getTmpFile.js | 0 .../src/utils/index.js | 0 .../src/models/initialState.tpl | 0 .../fes-plugin-state/src/template/core.tpl | 14 -------- .../fes-plugin-state/src/template/runtime.tpl | 25 -------------- packages/fes-template/package.json | 2 +- packages/fes-template/src/app.js | 16 +++++++++ packages/fes-template/src/pages/index.vue | 11 ++++-- 16 files changed, 121 insertions(+), 46 deletions(-) rename packages/{fes-plugin-state => fes-plugin-model}/.fatherrc.js (100%) rename packages/{fes-plugin-state => fes-plugin-model}/package.json (90%) rename packages/{fes-plugin-state => fes-plugin-model}/src/index.js (93%) create mode 100644 packages/fes-plugin-model/src/models/initialState.tpl create mode 100644 packages/fes-plugin-model/src/template/core.tpl create mode 100644 packages/fes-plugin-model/src/template/runtime.tpl rename packages/{fes-plugin-state => fes-plugin-model}/src/utils/getModels.js (100%) rename packages/{fes-plugin-state => fes-plugin-model}/src/utils/getTmpFile.js (100%) rename packages/{fes-plugin-state => fes-plugin-model}/src/utils/index.js (100%) delete mode 100644 packages/fes-plugin-state/src/models/initialState.tpl delete mode 100644 packages/fes-plugin-state/src/template/core.tpl delete mode 100644 packages/fes-plugin-state/src/template/runtime.tpl diff --git a/.fatherrc.js b/.fatherrc.js index 01b62ebd..9cb72122 100644 --- a/.fatherrc.js +++ b/.fatherrc.js @@ -4,7 +4,7 @@ import { join } from 'path'; // utils must build before core // runtime must build before renderer-react -const headPkgs = ['fes-runtime', 'fes-core', 'fes', 'fes-plugin-built-in', 'fes-plugin-request', 'fes-plugin-access', 'fes-plugin-state']; +const headPkgs = ['fes-runtime', 'fes-core', 'fes', 'fes-plugin-built-in', 'fes-plugin-request', 'fes-plugin-access', 'fes-plugin-model']; const tailPkgs = []; // const otherPkgs = readdirSync(join(__dirname, 'packages')).filter( // (pkg) => diff --git a/packages/fes-plugin-state/.fatherrc.js b/packages/fes-plugin-model/.fatherrc.js similarity index 100% rename from packages/fes-plugin-state/.fatherrc.js rename to packages/fes-plugin-model/.fatherrc.js diff --git a/packages/fes-plugin-state/package.json b/packages/fes-plugin-model/package.json similarity index 90% rename from packages/fes-plugin-state/package.json rename to packages/fes-plugin-model/package.json index 5f7d00e1..7d422cae 100644 --- a/packages/fes-plugin-state/package.json +++ b/packages/fes-plugin-model/package.json @@ -1,5 +1,5 @@ { - "name": "@webank/fes-plugin-state", + "name": "@webank/fes-plugin-model", "version": "1.0.0", "description": "", "main": "lib/index.js", diff --git a/packages/fes-plugin-state/src/index.js b/packages/fes-plugin-model/src/index.js similarity index 93% rename from packages/fes-plugin-state/src/index.js rename to packages/fes-plugin-model/src/index.js index c731913a..0c6c03fe 100644 --- a/packages/fes-plugin-state/src/index.js +++ b/packages/fes-plugin-model/src/index.js @@ -5,7 +5,7 @@ import { lodash, winPath } from '@umijs/utils'; import { getModels } from './utils/getModels'; import { getTmpFile } from './utils/getTmpFile'; -const namespace = 'plugin-state'; +const namespace = 'plugin-model'; export default (api) => { const { @@ -55,7 +55,6 @@ export default (api) => { }); const tmpFiles = getTmpFile(files, additionalModels, paths.absSrcPath); - console.log(tmpFiles); api.writeTmpFile({ path: absCoreFilePath, @@ -77,6 +76,13 @@ export default (api) => { }); }); + api.addPluginExports(() => [ + { + specifiers: ['useModel'], + source: absCoreFilePath + } + ]); + // 注册 getInitialState 方法 api.addRuntimePluginKey(() => 'getInitialState'); diff --git a/packages/fes-plugin-model/src/models/initialState.tpl b/packages/fes-plugin-model/src/models/initialState.tpl new file mode 100644 index 00000000..53be94f6 --- /dev/null +++ b/packages/fes-plugin-model/src/models/initialState.tpl @@ -0,0 +1,34 @@ +import { reactive, toRefs, onMounted } from "vue"; +import { plugin, ApplyPluginsType } from "@@/core/coreExports"; + +async function getInitialState() { + const appGetInitialState = plugin.applyPlugins({ + key: "getInitialState", + type: ApplyPluginsType.modify, + initialValue: {}, + }); + return await appGetInitialState; +} +const initState = reactive({ + initialState: undefined, + loading: true, + error: undefined, +}); + +export default function initalModel() { + const refresh = async () => { + initState.loading = true; + initState.error = undefined; + try { + const res = await getInitialState(); + initState.initialState = res; + initState.loading = false; + } catch (e) { + console.error(e) + initState.loading = false; + initState.error = e; + } + }; + onMounted(refresh); + return toRefs(initState); +} diff --git a/packages/fes-plugin-model/src/template/core.tpl b/packages/fes-plugin-model/src/template/core.tpl new file mode 100644 index 00000000..2cae17a6 --- /dev/null +++ b/packages/fes-plugin-model/src/template/core.tpl @@ -0,0 +1,25 @@ +{{{userImports}}} +{{{extraImports}}} + +export const models = { +{{#extraModels}} + {{{extraModels}}}, +{{/extraModels}} +{{#userModels}} + {{{userModels}}}, +{{/userModels}} +} +const cache = new Map(); +export const useModel = (name) => { + const model = models[name]; + if(model === undefined){ + throw new Error("[plugin-model]: useModel, name is undefined."); + } + if (typeof model !== "function") { + throw new Error("[plugin-model]: useModel is not a function."); + } + if(!cache.has(name)){ + cache.set(name, model()) + } + return cache.get(name) +}; \ No newline at end of file diff --git a/packages/fes-plugin-model/src/template/runtime.tpl b/packages/fes-plugin-model/src/template/runtime.tpl new file mode 100644 index 00000000..242e1ea0 --- /dev/null +++ b/packages/fes-plugin-model/src/template/runtime.tpl @@ -0,0 +1,26 @@ +import { plugin, ApplyPluginsType } from "@@/core/coreExports"; +import { useModel } from "./core.js"; + +export function rootContainer(childComponent, args) { + const useRuntimeConfig = + plugin.applyPlugins({ + key: "initialStateConfig", + type: ApplyPluginsType.modify, + initialValue: {}, + }) || {}; + return { + setup() { + const { loading } = useModel("@@initialState") || {}; + return () => { + if (loading.value) { + return useRuntimeConfig.loading ? ( + + ) : ( + <> + ); + } + return ; + }; + }, + }; +} diff --git a/packages/fes-plugin-state/src/utils/getModels.js b/packages/fes-plugin-model/src/utils/getModels.js similarity index 100% rename from packages/fes-plugin-state/src/utils/getModels.js rename to packages/fes-plugin-model/src/utils/getModels.js diff --git a/packages/fes-plugin-state/src/utils/getTmpFile.js b/packages/fes-plugin-model/src/utils/getTmpFile.js similarity index 100% rename from packages/fes-plugin-state/src/utils/getTmpFile.js rename to packages/fes-plugin-model/src/utils/getTmpFile.js diff --git a/packages/fes-plugin-state/src/utils/index.js b/packages/fes-plugin-model/src/utils/index.js similarity index 100% rename from packages/fes-plugin-state/src/utils/index.js rename to packages/fes-plugin-model/src/utils/index.js diff --git a/packages/fes-plugin-state/src/models/initialState.tpl b/packages/fes-plugin-state/src/models/initialState.tpl deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/fes-plugin-state/src/template/core.tpl b/packages/fes-plugin-state/src/template/core.tpl deleted file mode 100644 index 49412587..00000000 --- a/packages/fes-plugin-state/src/template/core.tpl +++ /dev/null @@ -1,14 +0,0 @@ -{{{userImports}}} -{{{extraImports}}} - -export const models = { -{{#extraModels}} - {{{extraModels}}}, -{{/extraModels}} -{{#userModels}} - {{{userModels}}}, -{{/userModels}} -} -export const useModel = ()=>{ - -} \ No newline at end of file diff --git a/packages/fes-plugin-state/src/template/runtime.tpl b/packages/fes-plugin-state/src/template/runtime.tpl deleted file mode 100644 index a9b53ff6..00000000 --- a/packages/fes-plugin-state/src/template/runtime.tpl +++ /dev/null @@ -1,25 +0,0 @@ -import { defineComponent, reactive, onMounted } from "vue"; -import { plugin, ApplyPluginsType } from "@@/core/coreExports"; -import { useModel } from "./core.js"; - -export function rootContainer(childComponent, args) { - const useRuntimeConfig = - plugin.applyPlugins({ - key: "initialStateConfig", - type: ApplyPluginsType.modify, - initialValue: {}, - }) || {}; - return () => { - const { loading = false } = useModel("@@initialState") || {}; - if (loading) { - return useRuntimeConfig.loading ? ( - - ) : ( - <> -
loading
- - ); - } - return ; - }; -} diff --git a/packages/fes-template/package.json b/packages/fes-template/package.json index 4fb0ad6b..8f175350 100644 --- a/packages/fes-template/package.json +++ b/packages/fes-template/package.json @@ -35,7 +35,7 @@ "vue": "^3.0.2", "@webank/fes": "^2.0.0", "@webank/fes-plugin-access": "^1.0.0", - "@webank/fes-plugin-state": "^1.0.0", + "@webank/fes-plugin-model": "^1.0.0", "ant-design-vue": "2.0.0-rc.3" } } diff --git a/packages/fes-template/src/app.js b/packages/fes-template/src/app.js index c4a5252c..16d09ce1 100644 --- a/packages/fes-template/src/app.js +++ b/packages/fes-template/src/app.js @@ -7,3 +7,19 @@ import PageLoading from '@/components/PageLoading.vue'; export const initialStateConfig = { loading: }; + +/** + * 设置页面初始化状态 + */ +export async function getInitialState() { + const syncFunc = () => new Promise((resolve) => { + setTimeout(() => { + resolve({ + a: 1, + b: 2 + }); + }, 3000); + }); + const res = await syncFunc(); + return res; +} diff --git a/packages/fes-template/src/pages/index.vue b/packages/fes-template/src/pages/index.vue index 017ff890..8918b819 100644 --- a/packages/fes-template/src/pages/index.vue +++ b/packages/fes-template/src/pages/index.vue @@ -7,15 +7,19 @@