mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-04 00:37:08 +00:00
251 lines
6.7 KiB
TypeScript
251 lines
6.7 KiB
TypeScript
import { Component } from 'rax';
|
||
|
||
class Leaf extends Component {
|
||
static displayName = 'Leaf';
|
||
static componentMetadata = {
|
||
componentName: 'Leaf',
|
||
configure: {
|
||
props: [{
|
||
name: 'children',
|
||
setter: 'StringSetter',
|
||
}],
|
||
// events/className/style/general/directives
|
||
supports: false,
|
||
}
|
||
};
|
||
|
||
render() {
|
||
const { children } = this.props;
|
||
return children;
|
||
}
|
||
}
|
||
|
||
export default Leaf;
|
||
|
||
// import { Component, createElement } from 'rax';
|
||
// import findDOMNode from 'rax-find-dom-node';
|
||
// import { each, get, omit } from 'lodash';
|
||
// import { getView, setNativeNode, createNodeStyleSheet } from '../renderUtils';
|
||
|
||
// import { FaultComponent, HiddenComponent, UnknownComponent } from '../UnusualComponent';
|
||
|
||
// export interface ILeaf {
|
||
// leaf: any;
|
||
// }
|
||
// export default class Leaf extends Component<ILeaf, {}> {
|
||
// static displayName = 'Leaf';
|
||
|
||
// state = {
|
||
// hasError: false,
|
||
// };
|
||
|
||
// willDetach: any[];
|
||
|
||
// styleSheet: any;
|
||
|
||
// context: any;
|
||
// refs: any;
|
||
|
||
// componentWillMount() {
|
||
// const { leaf } = this.props;
|
||
// this.willDetach = [
|
||
// leaf.onPropsChange(() => {
|
||
// // 强制刷新
|
||
// this.setState(this.state);
|
||
// }),
|
||
// leaf.onChildrenChange(() => {
|
||
// // 强制刷新
|
||
// this.setState(this.state);
|
||
// }),
|
||
// leaf.onStatusChange((status: { dropping: boolean }, field: string) => {
|
||
// // console.log({...status}, field)
|
||
// if (status.dropping !== false) {
|
||
// // 当 dropping 为 Insertion 对象时,强制渲染会出错,原因待查
|
||
// return;
|
||
// }
|
||
// if (field === 'dragging' || field === 'dropping' || field === 'pseudo' || field === 'visibility') {
|
||
// // 强制刷新
|
||
// this.setState(this.state);
|
||
// }
|
||
// }),
|
||
// ];
|
||
|
||
// /**
|
||
// * while props replaced
|
||
// * bind the new event on it
|
||
// */
|
||
// leaf.onPropsReplace(() => {
|
||
// this.willDetach[0]();
|
||
// this.willDetach[0] = leaf.onPropsChange(() => {
|
||
// // 强制刷新
|
||
// this.setState(this.state);
|
||
// });
|
||
// });
|
||
// }
|
||
|
||
// componentDidMount() {
|
||
// this.modifyDOM();
|
||
// }
|
||
|
||
// shouldComponentUpdate() {
|
||
// // forceUpdate 的替代方案
|
||
// return true;
|
||
// // const pageCanRefresh = this.leaf.getPage().canRefresh();
|
||
// // if (pageCanRefresh) {
|
||
// // return pageCanRefresh;
|
||
// // }
|
||
// // const getExtProps = obj => {
|
||
// // const { leaf, ...props } = obj;
|
||
// // return props;
|
||
// // };
|
||
// // return !shallowEqual(getExtProps(this.props), getExtProps(nextProps));
|
||
// }
|
||
|
||
// componentDidUpdate() {
|
||
// this.modifyDOM();
|
||
// }
|
||
|
||
// componentWillUnmount() {
|
||
// if (this.willDetach) {
|
||
// this.willDetach.forEach((off) => off());
|
||
// }
|
||
// setNativeNode(this.props.leaf, null);
|
||
// }
|
||
|
||
// componentDidCatch() {
|
||
// this.setState({ hasError: true }, () => {
|
||
// console.log('error');
|
||
// });
|
||
// }
|
||
|
||
// modifyDOM() {
|
||
// const shell = findDOMNode(this);
|
||
// const { leaf } = this.props;
|
||
// // 与 React 不同,rax 的 findDOMNode 找不到节点时,
|
||
// // shell 会是 <!-- empty -->,而不是 null,
|
||
// // 所以这里进行是否为注释的判断
|
||
// if (shell && shell.nodeType !== window.Node.COMMENT_NODE) {
|
||
// setNativeNode(leaf, shell);
|
||
// if (leaf.getStatus('dragging')) {
|
||
// get(shell, 'classList').add('engine-dragging');
|
||
// } else {
|
||
// get(shell, 'classList').remove('engine-dragging');
|
||
// }
|
||
// each(get(shell, 'classList'), (cls) => {
|
||
// if (cls.substring(0, 8) === '-pseudo-') {
|
||
// get(shell, 'classList').remove(cls);
|
||
// }
|
||
// });
|
||
// const pseudo = leaf.getStatus('pseudo');
|
||
// if (pseudo) {
|
||
// get(shell, 'classList').add(`-pseudo-${pseudo}`);
|
||
// }
|
||
// } else {
|
||
// setNativeNode(leaf, null);
|
||
// }
|
||
// }
|
||
|
||
// render() {
|
||
// const props = omit(this.props, ['leaf']);
|
||
// const { leaf } = this.props;
|
||
// const componentName = leaf.getComponentName();
|
||
|
||
// const View = getView(componentName);
|
||
|
||
// const newProps = {
|
||
// _componentName: componentName,
|
||
// };
|
||
|
||
// if (!View) {
|
||
// return createElement(UnknownComponent, {
|
||
// // _componentName: componentName,
|
||
// ...newProps,
|
||
// });
|
||
// }
|
||
|
||
// let staticProps = {
|
||
// ...leaf.getStaticProps(false),
|
||
// ...props,
|
||
// _componentName: componentName,
|
||
// _leaf: leaf,
|
||
// componentId: leaf.getId(),
|
||
// };
|
||
|
||
// if (!leaf.isVisibleInPane()) {
|
||
// return null;
|
||
// }
|
||
|
||
// if (!leaf.isVisible()) {
|
||
// return createElement(HiddenComponent, {
|
||
// ...staticProps,
|
||
// });
|
||
// }
|
||
|
||
// if (this.state.hasError) {
|
||
// return createElement(FaultComponent, {
|
||
// // _componentName: componentName,
|
||
// ...newProps,
|
||
// });
|
||
// }
|
||
|
||
// if (this.styleSheet) {
|
||
// this.styleSheet.parentNode.removeChild(this.styleSheet);
|
||
// }
|
||
|
||
// this.styleSheet = createNodeStyleSheet(staticProps);
|
||
|
||
// if (leaf.ableToModifyChildren()) {
|
||
// const children = leaf
|
||
// .getChildren()
|
||
// .filter((child: any) => child.getComponentName() !== 'Slot')
|
||
// .map((child: any) =>
|
||
// createElement(Leaf, {
|
||
// key: child.getId(),
|
||
// leaf: child,
|
||
// }),
|
||
// );
|
||
// // const insertion = leaf.getStatus('dropping');
|
||
// // InsertionGhost 都是React节点,用Rax渲染会报错,后面这些节点需要通过Rax组件来实现
|
||
// // if (children.length < 1 && insertion && insertion.getIndex() !== null) {
|
||
|
||
// // //children = [];
|
||
// // children = [<InsertionGhost key="insertion" />];
|
||
// // } else if (insertion && insertion.isNearEdge()) {
|
||
// // if (insertion.isNearAfter()) {
|
||
// // children.push(<InsertionGhost key="insertion" />);
|
||
// // } else {
|
||
// // children.unshift(<InsertionGhost key="insertion" />);
|
||
// // }
|
||
// // }
|
||
// staticProps = {
|
||
// ...staticProps,
|
||
// ...this.processSlots(this.props.leaf.getChildren()),
|
||
// };
|
||
|
||
// return createElement(
|
||
// View,
|
||
// {
|
||
// ...staticProps,
|
||
// },
|
||
// children,
|
||
// );
|
||
// }
|
||
|
||
// return createElement(View, {
|
||
// ...staticProps,
|
||
// });
|
||
// }
|
||
|
||
// processSlots(children: Rax.RaxNodeArray) {
|
||
// const slots: any = {};
|
||
// children &&
|
||
// children.length &&
|
||
// children.forEach((child: any) => {
|
||
// if (child.getComponentName() === 'Slot') {
|
||
// slots[child.getPropValue('slotName')] = <Leaf key={child.getId()} leaf={child} />;
|
||
// }
|
||
// });
|
||
// return slots;
|
||
// }
|
||
// }
|