UNPKG

react-cms-data-view

Version:
329 lines (251 loc) 7.95 kB
import React, {Component} from 'react'; import {Container} from 'flux/utils'; import Message from '../../View/GridView'; // import MessageCreator from './components/message-creator'; // import css from './main.css'; // import MessageActions from './actions/message-actions'; import DataStore from '../../Data/Store'; import Pagination from '../../Pagination'; // import { Dispatcher } from 'flux'; import Table, { TableBody, TableCell, TableHead, TableRow } from 'material-ui/Table'; import Button from 'material-ui/Button'; import Dispatcher from '../../Dispatcher/'; const defaultProps = { page: 1, limit: 10, query: '', connector_url: 'assets/components/modxsite/connectors/connector.php', requestParams: null, } export default class GridPanel extends Component { constructor(props) { super(props); this.dispatcher = new Dispatcher(); // var store = new MessageStore(this.dispatcher); // console.log('MessageStore', MessageStore); this.store = new DataStore(this.dispatcher); // console.log('store', store); // this.actions = new MessageActions(this.store); this.state = { limit: props.limit, page: props.page, query: props.query, requestParams: props.requestParams, // data: this.store.getState().toArray(), }; } loadItems(params){ if(this.state.inRequest === true){ return; } let {requestParams} = this.state; var body = new FormData(); var data = { format: "json", limit: this.state.limit, page: this.state.page, query: this.state.query, count: 1, }; if(requestParams){ Object.assign(data, requestParams); } if(params){ Object.assign(data, params); } for(var i in data){ var value = data[i]; if(value === null || value === undefined){ continue; } body.append(i, value); }; var newState = { errors: { }, inRequest: false, } fetch(this.props.connector_url +'?pub_action=' + this.props.connector_path +'getdata',{ credentials: 'same-origin', method: "POST", body: body, }) .then(function (response) { return response.json() }) .then(function (data) { if(data.success){ // newState.items = data.object || []; newState.total = data.total || 0; this.dispatcher.dispatch('SET_DATA', data.object || []); } else{ if(data.data && data.data.length){ data.data.map(function(error){ if(error.msg != ''){ errors[error.id] = error.msg; } }, this); } var error = data.message || "Ошибка выполнения запроса"; if(this.props.addInformerMessage){ this.props.addInformerMessage(error); } else{ console.error(error); } } // if(!this.state.errors){ // this.state.errors = {}; // } // Object.assign(this.state.errors, errors.login_error); this.setState(newState); }.bind(this)) .catch((error) => { console.error('Request failed', error); this.setState(newState); } ); this.setState({ inRequest: true, }); } componentWillReceiveProps(nextProps){ if(nextProps.requestParams != this.props.requestParams){ this.setState({ requestParams: nextProps.requestParams, }); } return true; } componentDidMount() { // this.listener = this.store.messages.addListener(this.onStateChange.bind(this)); this.dispatcher.register((payload) => { // console.log('componentDidUpdate payload.actionType', payload, payload.type); switch (payload.type) { case this.store.actions.LOAD: this.loadItems(payload.object); break; } // this.setState(prevState => { // console.log('componentDidUpdate prevState', prevState.data && prevState.data[0] && prevState.data[0].username); // return { // data: lodash.cloneDeep(this.store.getState().toArray()), // } // }); // this.forceUpdate(); // this.loadItems(); }); this.loadItems(); // this.listener = this.store.messages.addListener(this.onStateChanges.bind(this)); // this.listener = this.store.messages.addListener(this.onStateChanges2.bind(this)); } // componentWillUnmount() { // this.listener.remove(); // } componentDidUpdate(prevProps, prevState){ // console.log('componentDidUpdate', prevState); // console.log('componentDidUpdate', this.state); // console.log('componentDidUpdate', prevState.data); // console.log('componentDidUpdate', prevState.data.toJS()); // console.log('componentDidUpdate', this.state.data.toJS()); // console.log('componentDidUpdate', this.state.data); // console.log('componentDidUpdate', prevState.data); // console.log('componentDidUpdate', prevState.data[0].username); // console.log('componentDidUpdate', this.state.data[0].username); if(prevState.page != this.state.page){ this.loadItems(); } } // addMessage(newContent) { // // this.actions.messages.create(newContent); // this.dispatcher.dispatch({ // type: 'CREATE_MESSAGE', // content: newContent // }); // } // onStateChange(a,b,c) { // console.log('onStateChange'); // console.log('ABC', a,b,c); // console.log('listener', this.listener); // console.log('dispatcher', this.dispatcher); // console.log('store', this.store); // this.setState({ // data: this.store.messages.getState(), // }); // } // onStateChanges(a,b,c) { // console.log('onStateChanges', this.listener); // console.log('this.store.messages', this.store.messages); // console.log('this.dispatcher', this.dispatcher); // // this.setState({ // // messages: { // // data: this.store.messages.getState(), // // }, // // }); // } // onStateChanges2(a,b,c) { // console.log('onStateChanges2', a,b,c); // // this.setState({ // // messages: { // // data: this.store.messages.getState(), // // }, // // }); // } // <MessageCreator create={this.addMessage.bind(this)} /> removeMessage(message){ this.dispatcher.dispatch(this.store.actions.REMOVE, message) } // <MessageCreator // store={this.store.messages} // /> // { // this.state.data.map(message => { // var o = <Message // key={i} // id={message.id} // author={message.author} // content={message.content} // createdAt={message.createdAt} // remove={this.removeMessage.bind(this, message)} // /> // i++; // return o; // }) // } render(){ var toolbar = this.renderToolbar(); var view = this.renderView(); var pagination = this.renderPagination(); return ( <div> {toolbar} {view} {pagination} </div> ); } renderToolbar(){ return null; } renderView(){ let {View} = this.props; return <View // data={this.state.data} grid={this} store={this.store} {...this.props} /> } renderPagination(){ return <Pagination classes={this.props.classes || {}} limit={this.state.limit} page={this.state.page} total={this.state.total || 0} onChangePage={(page) => this.setState({page})} />; } } GridPanel.defaultProps = defaultProps; // remove={this.dispatcher.dispatch.bind(this, this.store.messages.actions.REMOVE, i)}