UNPKG

joywok-material-components

Version:

<h1 align="center"> Joywok Material Components </h1>

141 lines (133 loc) 3.97 kB
import React,{ Component } from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; // import dva from 'dva'; // import {connect} from 'dva'; // import { Router,hashHistory,browserHistory,Route} from 'dva/router'; import {generateMixed} from './pubfun'; import EventEmitter from 'events'; import { createMuiTheme,MuiThemeProvider} from '@material-ui/core/styles'; class Container extends Component{ constructor(props) { super(props); this.state = props; } render(){ let Template = this.state.Template; return (<div className={"dialog-w"}> <Template {...this.state.data} events={this.state.events}></Template> </div>) } componentDidMount() { let self = this; this.state.events.on('changeState',function(data){ let newData = Object.assign({},self.state.data,data); self.setState({ data:newData }) }) } } require('./style/dialog.css'); function removeCustomDialog(data){ if($('.modal-'+data.data.containerId).length!=0){ $('.modal-'+data.data.containerId).remove(); } if(typeof(data.nohidebody)=='undefined'){ if($('.dialog').length==0){ $('body').removeClass('overflowhidden').css({overflow:'inherit'}); } } if(typeof(data.stopPropagation)!='undefined'){ $('body').undelegate('.'+data.rootClass, 'click'); } } const Dialog=(props)=>{ var div = document.createElement('div'); let id = generateMixed(16); let rootClass = 'dialog '+(props.rootClass || '') div.setAttribute("class", rootClass); div.setAttribute("id", 'root-' + id); document.body.appendChild(div); if(typeof(props.nohidebody)=='undefined'){ $('body') && $('body').addClass('overflowhidden'); } if(typeof(props.style)!='undefined'){ div.setAttribute("style",props.style); } let myEmitter = new EventEmitter(); const close = () => { $('#root-' + id) && $('#root-' + id).remove(); $('.dialog-child-'+id) && $('.dialog-child-'+id).remove(); div = null; myEmitter = null; removeCustomDialog(props); } let object = { close: close, } object.events = myEmitter; myEmitter.on('cancel',()=>{ if(typeof(props.manualCloase)!='undefined'){ }else{ setTimeout(function(){ $('#root-' + id) && $('#root-' + id).remove(); $('.dialog-child-'+id) && $('.dialog-child-'+id).remove(); div = null; myEmitter = null; removeCustomDialog(props); },300) } }) myEmitter.on('close',()=>{ $('#root-' + id).remove() removeCustomDialog(props); div = null; myEmitter = null; }) myEmitter.on('save',()=>{ if(typeof(props.manualCloase)!='undefined'){ }else{ setTimeout(function(){ $('#root-' + id) && $('#root-' + id).remove(); $('.dialog-child-'+id) && $('.dialog-child-'+id).remove(); removeCustomDialog(props); div = null; myEmitter = null; },300) } }) if(typeof(props.duration)!='undefined'){ setTimeout(function(){ object.close(); },props.duration) } let bbb = props.app || window.app; // console.log( props.app , window.app, 'xxxxx' ) let container = "#root-" + id if(typeof(props.data)=='undefined'){ props.data = {}; } props.data.containerId = id; props.data.close = close; if(typeof(props.autoremove)!='undefined'){ setTimeout(function(){ $('#root-' + id).remove(); $('.dialog-child-'+id).remove(); removeCustomDialog(props); },300) } if(typeof(props.stopPropagation)!='undefined'){ $('body').delegate('.'+props.rootClass, 'click', function(event) { event.stopPropagation() }); } ReactDOM.render( <Provider store={bbb._store}> <MuiThemeProvider theme={createMuiTheme(window.theme)}> <Container data={props.data} Template={props.component} events={myEmitter} ></Container> </MuiThemeProvider> </Provider>,document.getElementById('root-'+id)); return object; } export default Dialog