import React from "react"
import "./viewLayout.less"
import ReactGridLayout from 'react-grid-layout'
import { Icon, Modal, Tooltip } from 'antd'
import { connect } from 'dva'
import ChartView from './chartView'
class ViewLayout extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
visiblePreviewBox: false,
screenWidth: document.documentElement.clientWidth || document.body.clientWidth,
screenHeight: document.documentElement.clientHeight || document.body.clientHeight
};
}
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) => {
const { dispatch, main, dashboardDesigner } = this.props;
const { currentUser } = main;
const { editMode } = dashboardDesigner;
const { code, name, viewType, layout, chartCode, filters } = item;
return (
{name}
{viewType !== 'richText' && !!filters && filters.length > 0 && f.filterLabel).join(',') + '】'}>
}
{!isPreview && viewType !== 'richText' && this.showPreviewBox(item)}/>}
{editMode && item.creatorCode === currentUser.code && viewType !== 'richText' && {
dispatch({ type: 'dashboard/remoteModify' });
dispatch({ type: 'chartDesigner/reset' });
dispatch({ type: 'main/redirect', path: '/chart/' + chartCode });
}}/>}
{!isPreview && editMode && item.creatorCode === currentUser.code && {
dispatch({ type: 'dashboardDesigner/deleteItem', item });
}} />}
{isPreview && }
)
}
onLayoutChange = (layout) => {
const { dispatch, reset } = this.props;
dispatch({ type: 'dashboardDesigner/changeLayout', layout });
setTimeout(() => {
reset();
}, 500)
}
onResize = () => {
const { reset } = this.props;
reset();
}
showPreviewBox = (item) => {
this.setState({
previewItem: item,
visiblePreviewBox: true
});
}
hidePreviewBox = () => {
this.setState({
visiblePreviewBox: false
});
}
render() {
const { dashboardDesigner, contentSize } = this.props;
const { editMode } = dashboardDesigner;
const { visiblePreviewBox, previewItem } = this.state;
const children = dashboardDesigner.items.map((item) => this.createElement(item));
return (
{children}
{previewItem && this.createElement(previewItem, true)}
);
}
}
export default connect(({ present: { main, dashboardDesigner } }) => ({ main, dashboardDesigner }))(ViewLayout);