jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
42 lines • 1.27 kB
JavaScript
import React, { useEffect, useState } from 'react';
import { observer } from 'jjb-lc-formily/reactive-react';
import { useTree, useWorkbench } from '../hooks';
import { Viewport } from '../containers';
import { requestIdle } from 'jjb-lc-designable/shared';
export const ViewPanel = observer(props => {
const [visible, setVisible] = useState(true);
const workbench = useWorkbench();
const tree = useTree();
useEffect(() => {
if (workbench.type === props.type) {
requestIdle(() => {
requestAnimationFrame(() => {
setVisible(true);
});
});
} else {
setVisible(false);
}
}, [workbench.type]);
if (workbench.type !== props.type) return null;
const render = () => {
return props.children(tree, payload => {
tree.from(payload);
tree.takeSnapshot();
});
};
if (workbench.type === 'DESIGNABLE') return /*#__PURE__*/React.createElement(Viewport, {
dragTipsDirection: props.dragTipsDirection
}, render());
return /*#__PURE__*/React.createElement("div", {
style: {
overflow: props.scrollable ? 'overlay' : 'hidden',
height: '100%',
cursor: 'auto',
userSelect: 'text'
}
}, visible && render());
});
ViewPanel.defaultProps = {
scrollable: true
};