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);