import React from 'react'
import '../../models/dashboardDesigner'
import { Modal, Radio, Row, Col, Table, Input, message } from 'antd'
import { connect } from 'dva'
import { dateFormat } from '../../utils/baseUtils'
import 'braft-editor/dist/braft.css'
import './chooseChartBox.less'
const { Search } = Input
class ChooseChartBox extends React.Component {
constructor(props) {
super(props);
this.state = {
filterLabel: '',
selectedRecord: -1,
screenWidth: document.documentElement.clientWidth || document.body.clientWidth,
screenHeight: document.documentElement.clientHeight || document.body.clientHeight
};
}
componentDidMount() {
const { dispatch } = this.props;
dispatch({ type: 'chart/fetchList' });
window.addEventListener('resize', this.onWindowResize);
}
onWindowResize = () => {
this.setState({
screenWidth: document.documentElement.clientWidth || document.body.clientWidth,
screenHeight: document.documentElement.clientHeight || document.body.clientHeight
});
}
changeSelected = (record) => {
this.setState({
selectedRecord: record
});
}
okHandler = (model) => {
const { selectedRecord } = this.state;
const { dispatch, hideBox } = this.props;
if(selectedRecord) {
dispatch({ type: 'dashboardDesigner/addChart', chart: selectedRecord });
hideBox();
}else {
message.warning('未选中图表');
}
}
handleChange = (content) => {
}
handleRawChange = (rawContent) => {
}
static editorProps = {
height: 300,
contentFormat: 'raw',
initialContent: '
Hello World!
',
onChange: () => {},
onRawChange: () => {},
image: true, // 开启图片插入功能?
}
render() {
const { visibleBox, hideBox, dashboardDesigner, chart } = this.props;
const { selectedRecord, screenWidth, screenHeight } = this.state;
const tableBodyWidth = screenWidth * 0.8 - 10 - 10 - 18;
const tableBodyHeight = screenHeight * 0.8 - 65 - 53 - 38 - 130;
const tableRowHeight = 38;
const reg = new RegExp('([+ \\- & | ! ( ) { } \\[ \\] ^ \" ~ * ? : ( ) \/])', 'g'); // 需要转义的字符
let filterLabel = this.state.filterLabel.replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1'); // 添加转义符号
const columns = [{
title: '选择',
key: 'selected',
width: 50,
render: (text, record) => {
// return i.chartCode===record.code)!==-1 || selectedRecord.findIndex(s => s.code === record.code) !== -1 } disabled={dashboardDesigner.items.findIndex(i => i.chartCode===record.code)!==-1}/>
return i.chartCode===record.code)!==-1 || selectedRecord.code === record.code }
disabled={dashboardDesigner.items.findIndex(i => i.chartCode===record.code)!==-1}
/>
}
}, {
title: '名称',
dataIndex: 'name',
key: 'name',
width: 100,
render: (text, record) => {
return
{ filterLabel ?
(text.split(new RegExp(`(${filterLabel})`, 'i')).map((fragment, i) => {
return (
fragment.toLowerCase().replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1') === filterLabel.toLowerCase() ?
{fragment} :
fragment
)
}
)) : text
}
}
}, {
title: '创建人',
dataIndex: 'creator',
key: 'creator',
width: 100
}, {
title: '创建时间',
dataIndex: 'createTime',
key: 'createTime',
width: 120,
render: (text) => dateFormat(new Date(text), 'yyyy-MM-dd')
}, {
title: '说明',
dataIndex: 'description',
key: 'description',
width: 200,
render: (text, record) => {
return (
{ filterLabel ?
((text || '').split(new RegExp(`(${filterLabel})`, 'i')).map((fragment, i) => {
return (
fragment.toLowerCase().replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1') === filterLabel.toLowerCase() ?
{fragment} :
fragment
)
}
)) : text
}
)
}
}]
return (
选择图表
{
this.setState({
filterLabel: e.target.value
});
}}
/>
}
visible={visibleBox}
onOk={() => {this.setState({ filterLabel: '', selectedRecord: -1 });this.okHandler()}}
onCancel={() => {this.setState({ filterLabel: '', selectedRecord: -1 });hideBox()}}
maskClosable={false}
destroyOnClose={true}
>
({
...c,
width: 100
}))}
dataSource={chart.list.map((l, i) => ({ ...l, key: i})).filter(l => {
let regLabel = new RegExp('(' + filterLabel + '){1}', 'ig');
return (l.name || '').search(regLabel) !== -1 || (l.description || '').search(regLabel) !== -1;
})}
size='small'
scroll={{ x: columns ? columns.length * 100 : tableBodyWidth, y: tableBodyHeight }}
pagination={{ defaultPageSize: Math.floor(tableBodyHeight/tableRowHeight) || 10 }}
onRow={(record) => {
return {
onClick: () => {
if(dashboardDesigner.items.findIndex(i => i.chartCode===record.code)===-1) {
this.changeSelected(record);
}
}
};
}}
/>
)
}
}
function mapStateToProps({ present: { dashboardDesigner, chart } }) {
return { dashboardDesigner, chart };
}
export default connect(mapStateToProps)(ChooseChartBox)