import React from 'react'; import {Container, Segment, List, Menu, Item, Grid} from 'semantic-ui-react'; import DeviceList from './DeviceList'; import ModbusModal from './ModbusModal'; import IOPanel from './IOPanel'; import IOModal from './IOModal'; import AIOModal from './AIOModal'; const defIOModalState = { open: false, data: {}, type: 0 } const defAIOModalState = { open: false, list: [], iouid: 0 } class ModbusPage extends React.Component { state = { mbModal: false, mbType: 0, mbData: {}, showDev: "", ioModal:{ ...defIOModalState }, aioModal:{ ...defAIOModalState } } componentDidMount() { this.props.getList(); this.props.router.setRouteLeaveHook(this.props.route, () => { this.props.clearList(); }); } componentWillReceiveProps(nprop) { if(this.state.aioModal.open) { this.openAIOModal(this.state.aioModal.iouid, nprop.list); } } delModbus = id => { if(!id) return ; this.props.delModbus({id}); } openModbusModal = (type, data = {}) => { this.setState({ mbModal: true, mbType: type, mbData: data }); } closeModbusModal = () => { this.setState({ mbModal: false, mbData: {} }) } submitModbusModal = (type, data = {}) => { let {i18n} = this.props; if(type == 1 && (!data.id)) return this.props.showDialog(i18n&&i18n.t ? i18n.t('tip.input_empty') : ''); if(!data.name || !('node' in data) || data.node.length == 0) return this.props.showDialog(i18n&&i18n.t ? i18n.t('tip.input_empty') : ''); if(type == 1){ this.props.editModbus(data); }else{ this.props.addModbus(data); } this.closeModbusModal(); } selectDevToShow = (uid) => { this.setState({ showDev: uid }); this.props.getMBData({id: uid}); } openIOModal = (type, data = {}) => { this.setState({ ioModal: { open: true, type, data } }); } closeIOModal = () =>{ this.setState({ ioModal: { ...defIOModalState } }) } submitIOModal = (type, data) => { let {i18n} = this.props; if((type == 1 && !data.id) || !('addr' in data) || !('num' in data) || !('type' in data)) return this.props.showDialog(i18n.t('tip.input_empty')); if(data.datalen == 0) return this.props.showDialog('資料長度不能為0'); data.devuid = this.state.showDev; if(type == 1){ this.props.editIOList(data); }else{ data.id = this.state.showDev; this.props.addIOList(data); } this.closeIOModal(); } delIOList = (id) => { if(!id) return ; this.props.delIOList({id, devuid: this.state.showDev}); } openAIOModal = (id, nlist = []) => { if(!id) return ; let slist = nlist.length == 0 ? this.props.list : nlist; let dev = slist.filter(t => { if(t.uid == this.state.showDev) return t; }); if(dev.length == 0) return ; let aio = dev[0].aioset || []; let list = aio.filter(t => { if(t.iouid == id) return t; }); this.setState({ aioModal:{ open: true, list, iouid: id } }); } closeAIOModal = () => { this.setState({ aioModal:{ ...defAIOModalState } }); } submitAIO = (type, data) => { data.devuid = this.state.showDev; if(type == 1){ this.props.editAIO(data); }else{ this.props.addAIO(data); } // this.closeAIOModal(); } delAIO = (id) => { if(!id) return ; this.props.delAIO({id, devuid: this.state.showDev}); } render() { let {i18n, list} = this.props; let dev = list.filter(t => { if(t.uid == this.state.showDev) return t; }); return ( {this.openModbusModal(0)}}/> 0} data={dev[0]} ioModal={this.openIOModal} delIOList={this.delIOList} getStatus={this.props.getMBIOStatus} showAIOSet={this.openAIOModal} /> ) } } export default ModbusPage;