import React from "react"
import "./viewLayout.less"
import ReactGridLayout from 'react-grid-layout'
import { Modal } from 'antd'
import { connect } from 'dva'
import EmptyContent from '../common/emptyContent/index'
import DataPreview from '../common/dataPreview/dataPreview'
import ViewLayoutItem from './viewLayoutItem';
class ViewLayout extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
previewItem: null,
visiblePreviewBox: false,
screenWidth: document.documentElement.clientWidth || document.body.clientWidth,
screenHeight: document.documentElement.clientHeight || document.body.clientHeight,
editingKey: null,
richTextReadOnly: false,
};
}
componentDidMount() {
window.addEventListener('resize', this.onWindowResize);
}
componentWillUnmount() {
window.removeEventListener('resize', this.onWindowResize);
}
onWindowResize = () => {
this.setState({
screenWidth: document.documentElement.clientWidth || document.body.clientWidth,
screenHeight: document.documentElement.clientHeight || document.body.clientHeight
});
}
createElement = (item, isPreview, reload) => {
const { code, layout } = item;
return
}
onLayoutChange = (layout) => {
const { dispatch } = this.props;
if(!(layout.length === 1 && layout[0].i === 'default-chartview')) {
dispatch({ type: 'dashboardDesigner/changeLayout', layout });
}
}
onResize = (Layout, oldItem, newItem, placeholder, e, element) => {
const viewContentRef = this.viewContentRef;
let box = viewContentRef.getBoundingClientRect();
let bottomY = box.y + box.height;
if(bottomY - e.clientY <= 5) { // 鼠标接近容器底部时滚动条滚到底
window.clearTimeout(this.scrollToBottomKey);
this.scrollToBottomKey = window.setTimeout(this.scrollToBottom, 50);
}
}
scrollToBottom = () => {
const viewContentRef = this.viewContentRef;
viewContentRef.scrollTo && viewContentRef.scrollTo(0, viewContentRef.scrollHeight - viewContentRef.clientHeight)
}
showPreviewBox = (item) => {
this.setState({
previewItem: item,
visiblePreviewBox: true,
lastViewCode: item.code,
lastPage: item.chartOption ? item.chartOption.page : 1,
lastPageSize: item.chartOption ? item.chartOption.pageSize : 0,
});
}
hidePreviewBox = () => {
const { dashboardDesigner, dispatch } = this.props;
const { lastViewCode, lastPage, lastPageSize } = this.state;
let item = dashboardDesigner.items.find(x => x.code === lastViewCode)
this.setState({
previewItem: null,
visiblePreviewBox: false
});
if(item.chartOption) {
dispatch({ type: 'setItemFields', code: lastViewCode, fields: [
{ name: 'chartOption', value: { ...item.chartOption, page: lastPage, pageSize: lastPageSize } }
] });
}
}
render() {
const { dashboardDesigner, contentSize, dispatch } = this.props;
const { editingKey } = this.state;
const { editMode, minLayoutHeight, layoutMargin, theme: themeName } = dashboardDesigner;
const { visiblePreviewBox, previewItem } = this.state;
const children = dashboardDesigner.items.map((item) => this.createElement(item, false, !item.chartOption));
console.log(contentSize);
return ( this.viewContentRef = node}>
{(children.length === 0) ?
: children}
{visiblePreviewBox && previewItem.chartType === 'dataView' &&
{
dispatch({ type: 'dashboardDesigner/fetchDataList', item: previewItem, mandatory: true, page, pageSize });
}}
/>}
{visiblePreviewBox && previewItem.chartType !== 'dataView' &&
{!!previewItem && this.createElement(dashboardDesigner.items.find(item => item.code === previewItem.code), true, false)}
}
);
}
}
export default connect(({ present: { main, dashboardDesigner } }) => ({ main, dashboardDesigner }))(ViewLayout);