mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-01 13:40:41 +00:00
87 lines
2.1 KiB
TypeScript
87 lines
2.1 KiB
TypeScript
import React, { PureComponent } from 'react';
|
|
import { PluginProps, UtilItem, UtilsMap } from '@ali/lowcode-types';
|
|
import get from 'lodash/get';
|
|
import { UtilsPane, UtilTypeInfo } from './pane';
|
|
|
|
import './index.scss';
|
|
import { DEFAULT_UTILS_TYPES } from './utils-types';
|
|
import { DEFAULT_UTILS } from './utils-defaults';
|
|
|
|
const PLUGIN_NAME = 'utilsPane';
|
|
|
|
export interface UtilsPaneProps extends PluginProps {
|
|
/**
|
|
* 支持的 Util 的类型
|
|
*/
|
|
utilsTypes?: UtilTypeInfo[];
|
|
|
|
/**
|
|
* 初始的 Utils (若 schema 中尚未定义 utils)
|
|
*/
|
|
initialUtils?: UtilItem[];
|
|
}
|
|
|
|
interface State {
|
|
active: boolean;
|
|
}
|
|
|
|
export default class UtilsPanePlugin extends PureComponent<UtilsPaneProps, State> {
|
|
static displayName = 'UtilsPanePlugin';
|
|
|
|
static defaultProps = {
|
|
initialUtils: DEFAULT_UTILS,
|
|
};
|
|
|
|
state = {
|
|
active: false,
|
|
};
|
|
|
|
constructor(props: UtilsPaneProps) {
|
|
super(props);
|
|
this.state.active = true;
|
|
|
|
const { editor } = this.props;
|
|
|
|
// @todo pluginName, to unsubscribe
|
|
// 第一次 active 事件不会触发监听器
|
|
editor.on('skeleton.panel-dock.active', (pluginName) => {
|
|
if (pluginName === PLUGIN_NAME) {
|
|
this.setState({ active: true });
|
|
}
|
|
});
|
|
|
|
editor.on('skeleton.panel-dock.unactive', (pluginName) => {
|
|
if (pluginName === PLUGIN_NAME) {
|
|
this.setState({ active: false });
|
|
}
|
|
});
|
|
}
|
|
|
|
render() {
|
|
const { initialUtils = DEFAULT_UTILS, utilsTypes = DEFAULT_UTILS_TYPES, editor } = this.props;
|
|
const { active } = this.state;
|
|
|
|
if (!active) return null;
|
|
|
|
const projectSchema = editor.get('designer').project.getSchema() ?? {};
|
|
|
|
return (
|
|
<UtilsPane
|
|
initialUtils={initialUtils}
|
|
utilTypes={utilsTypes}
|
|
schema={get(projectSchema, 'utils')}
|
|
onSchemaChange={this.handleSchemaChange}
|
|
/>
|
|
);
|
|
}
|
|
|
|
private handleSchemaChange = (utilsMap: UtilsMap) => {
|
|
const { editor } = this.props;
|
|
|
|
// @TODO 姿势是否最优?
|
|
if (editor.get('designer')) {
|
|
editor.get('designer').project.set('utils', utilsMap);
|
|
}
|
|
};
|
|
}
|