UNPKG

react-cms-data-view

Version:
457 lines (313 loc) 8.88 kB
export function request(connector_url, connector_path, params, options){ let defaultOptions = { showErrorMessage: true, callback: null, method: 'POST', }; options = options || {}; options = Object.assign(defaultOptions, options); let showErrorMessage = options.showErrorMessage; let callback = options.callback; let method = options.method; let {addInformerMessage} = this.props.documentActions; var body = new FormData(); var data = { }; 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); }; fetch(connector_url +'?pub_action=' + connector_path,{ credentials: 'same-origin', method: method, body: body, }) .then(function (response) { return response.json() }) .then(function (data) { let errors = {}; if(data.success){ } 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 || "Ошибка выполнения запроса"; showErrorMessage && addInformerMessage && addInformerMessage({ text: error, autohide: 4000, }); } if(callback){ callback(data, errors); } this.forceUpdate(); }.bind(this)) .catch((error) => { console.error('Request failed', error); if(callback){ callback(data, {}); } } ); this.forceUpdate(); return; } export function loadItems(connector_url, connector_path, store, params, callback){ let {addInformerMessage} = this.props.documentActions; let { } = this.state; let dispatcher = store.getDispatcher(); var body = new FormData(); var data = { format: "json", count: 1, }; 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); }; fetch(connector_url +'?pub_action=' + connector_path +'getdata',{ credentials: 'same-origin', method: "POST", body: body, }) .then(function (response) { return response.json() }) .then(function (data) { if(data.success){ dispatcher.dispatch(store.actions["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 || "Ошибка выполнения запроса"; addInformerMessage && addInformerMessage({ text: error, autohide: 4000, }); } if(callback){ callback(data, errors); } this.forceUpdate(); }.bind(this)) .catch((error) => { console.error('Request failed', error); } ); this.forceUpdate(); return; } export function saveItem(connector_url, connector_path, store, item, callback){ // console.log('saveItem STORE UPDATE', item, store); if( !item || item._sending === true ){ return; } let {addInformerMessage} = this.props.documentActions; let dispatcher = store.getDispatcher(); item._sending = true; var action = item.id && item.id > 0 ? 'update' : 'create'; var options = options || {}; var body = new FormData(); var data = item; for(var i in data){ var value = data[i]; if(value === undefined){ continue; } // Пропускаем свойства-объекты if( typeof value === "object" && !Array.isArray(value) && value !== null ){ continue; } // Пропускаем временные свойства if(/^\_/.test(i)){ continue; } // console.log('Form item', i, value, Array.isArray(value)); body.append(i, value); }; fetch(this.props.connector_url + '?pub_action='+ connector_path + action,{ credentials: 'same-origin', method: options.method || "POST", body: body, }) .then(function (response) { return response.json() }) .then((data) => { // console.log('DATA', data); // self.setState({items: data.object}); var errors = {}; if(data.success === true){ // var items = lodash.clone(this.state.items); var newObject = data.object || {}; Object.assign(newObject, { _isDirty: false, }); dispatcher.dispatch(store.actions["SAVE"], item, newObject); } else{ if(data.data && data.data.length){ data.data.map(function(error){ var value = error.msg; if(value && value != ''){ errors[error.id] = value; } }); } errors.error_message = data.message; addInformerMessage && addInformerMessage({ text: data.message || "Ошибка выполнения запроса", autohide: 4000, }); // this.forceUpdate(); } // newState.errors = this.state.errors || {}; // newState.errors[item.id || 0] = errors; item._errors = errors; if(callback){ callback(data, errors); } // this.forceUpdate(); item._sending = false; // console.log('saveItem STORE UPDATE 2', item, store); this.forceUpdate(); }) .catch((error) => { console.error('Request failed', error, this); addInformerMessage && addInformerMessage({ text: data.message || "Ошибка выполнения запроса", autohide: 4000, }); } ); this.forceUpdate(); return; } export function removeItem(connector_url, connector_path, store, item, callback){ // console.log('saveItem STORE UPDATE', item, store); if( !item || item._sending === true ){ return; } let {addInformerMessage} = this.props.documentActions; let dispatcher = store.getDispatcher(); item._sending = true; var action = 'remove'; var options = options || {}; var body = new FormData(); var data = item; for(var i in data){ var value = data[i]; if(value === undefined){ continue; } // Пропускаем свойства-объекты if( typeof value === "object" && !Array.isArray(value) && value !== null ){ continue; } // Пропускаем временные свойства if(/^\_/.test(i)){ continue; } // console.log('Form item', i, value, Array.isArray(value)); body.append(i, value); }; fetch(this.props.connector_url + '?pub_action='+ connector_path + action,{ credentials: 'same-origin', method: options.method || "POST", body: body, }) .then(function (response) { return response.json() }) .then((data) => { // console.log('DATA', data); // self.setState({items: data.object}); var errors = {}; if(data.success === true){ // var items = lodash.clone(this.state.items); var newObject = data.object || {}; Object.assign(newObject, { _isDirty: false, }); dispatcher.dispatch(store.actions["REMOVE"], item, newObject); } else{ if(data.data && data.data.length){ data.data.map(function(error){ var value = error.msg; if(value && value != ''){ errors[error.id] = value; } }); } errors.error_message = data.message; addInformerMessage && addInformerMessage({ text: data.message || "Ошибка выполнения запроса", autohide: 4000, }); // this.forceUpdate(); } // newState.errors = this.state.errors || {}; // newState.errors[item.id || 0] = errors; item._errors = errors; if(callback){ callback(data, errors); } // this.forceUpdate(); item._sending = false; // console.log('saveItem STORE UPDATE 2', item, store); this.forceUpdate(); }) .catch((error) => { console.error('Request failed', error, this); addInformerMessage && addInformerMessage({ text: data.message || "Ошибка выполнения запроса", autohide: 4000, }); } ); this.forceUpdate(); return; }