umi-plugin-react
Version:
React plugin set for umi.
82 lines (75 loc) • 2.12 kB
text/typescript
import { IApi } from 'umi-types';
import { formatConfigs, useConfigKey } from 'umi-plugin-ui/lib/plugins/configuration';
import { configs, groupMap } from './config';
export function getPluginConfig(plugins, name) {
for (const plugin of plugins) {
if (typeof plugin === 'string' && plugin === name) {
return {};
}
if (Array.isArray(plugin) && plugin[0] === name) {
if (typeof plugin[1] === 'object') {
return plugin[1];
} else {
return {};
}
}
}
return null;
}
export default (api: IApi) => {
if (process.env.UMI_UI === 'none') return;
function getConfig(lang) {
const { userConfig } = api.service;
const { plugins } = userConfig.getConfig({ force: true });
const pluginConfig = getPluginConfig(plugins, 'umi-plugin-react');
return formatConfigs(configs, {
lang,
groupMap,
}).map(p => {
const [haveKey, value] = useConfigKey(pluginConfig, p.name);
if (haveKey) {
p.value = value;
}
return p;
});
}
function validateConfig(config) {}
if (api.addUIPlugin) {
api.addUIPlugin(require.resolve('../ui/dist/index.umd'));
}
if (api.onUISocket) {
api.onUISocket(({ action, failure, success }) => {
const { type, payload, lang } = action;
switch (type) {
case 'org.umi.umi-plugin-react.config.list':
success({
data: getConfig(lang),
});
break;
case 'org.umi.umi-plugin-react.config.edit':
let config = payload.key;
if (typeof payload.key === 'string') {
config = {
[payload.key]: payload.value,
};
}
try {
validateConfig(config);
api.service.runCommand('config', {
_: ['set', config],
plugin: 'umi-plugin-react',
});
success({});
} catch (e) {
failure({
message: e.message,
errors: e.errors,
});
}
break;
default:
break;
}
});
}
};