Commit d3ead1ca authored by Juorder Antonio's avatar Juorder Antonio

fix add and remove members and allowers in distribution list

parent fab81c33
module.exports = {"main":{"js":"/220021bundle.js"}} module.exports = {"main":{"js":"/976919bundle.js"}}
\ No newline at end of file \ No newline at end of file
...@@ -28,16 +28,16 @@ export default class DistributionLists extends React.Component { ...@@ -28,16 +28,16 @@ export default class DistributionLists extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.isStoreEnabled = true; this.isStoreEnabled = window.manager_config.enableStores;
this.getDistributionLists = this.getDistributionLists.bind(this); this.getDistributionLists = this.getDistributionLists.bind(this);
this.showMessage = this.showMessage.bind(this); this.showMessage = this.showMessage.bind(this);
this.onDeleteMember = this.onDeleteMember.bind(this); this.onDeleteMember = this.onDeleteMember.bind(this);
this.onDeleteOwner = this.onDeleteOwner.bind(this); this.onDeleteOwner = this.onDeleteOwner.bind(this);
this.onSubmitMembers = this.onSubmitMembers.bind(this);
this.onCancelMember = this.onCancelMember.bind(this); this.onCancelMember = this.onCancelMember.bind(this);
this.onCancelOwner = this.onCancelOwner.bind(this); this.onCancelOwner = this.onCancelOwner.bind(this);
this.onExportMembers = this.onExportMembers.bind(this); this.onExportMembers = this.onExportMembers.bind(this);
this.onExportAllowers = this.onExportAllowers.bind(this); this.onExportAllowers = this.onExportAllowers.bind(this);
this.makeRequest = this.makeRequest.bind(this);
this.domain = null; this.domain = null;
this.isGlobalAdmin = UserStore.isGlobalAdmin(); this.isGlobalAdmin = UserStore.isGlobalAdmin();
...@@ -63,6 +63,54 @@ export default class DistributionLists extends React.Component { ...@@ -63,6 +63,54 @@ export default class DistributionLists extends React.Component {
Utils.exportAsCSV(data, 'allowers', title, true); Utils.exportAsCSV(data, 'allowers', title, true);
} }
makeRequest(response, dl, resolve, store) {
const keys = Object.keys(response).sort();
const item = keys[0];
const res = store || {};
const action = item.match(/(remove|add)/gi);
if (action) {
var element = response[item];
if (element && element.length) {
const pop = element.pop();
const target = typeof pop === 'object' ? pop.name || pop.id : pop;
const label = action[0] === 'remove' ? 'eliminar' : 'agregar';
return dl[item](target, (er, success) => {
if (success) {
if (res.completed) {
res.completed.push({
action: label,
target
});
} else {
res.completed = [{
action: label,
target
}];
}
const api = success.api ? success : dl;
return this.makeRequest(response, api, resolve, res);
}
er.action = label;
er.target = target;
if (res.error) {
res.error.push(er);
} else {
res.error = [er];
}
return this.makeRequest(response, dl, resolve, res);
});
} else {
Reflect.deleteProperty(response, item);
return this.makeRequest(response, dl, resolve, res);
}
}
res.data = dl;
return resolve(res);
}
getDistributionLists() { getDistributionLists() {
const domain = this.isStoreEnabled ? DomainStore.getCurrent() : null; const domain = this.isStoreEnabled ? DomainStore.getCurrent() : null;
const id = this.props.params.id; const id = this.props.params.id;
...@@ -109,7 +157,7 @@ export default class DistributionLists extends React.Component { ...@@ -109,7 +157,7 @@ export default class DistributionLists extends React.Component {
DomainStore.setMembers(data.distributionsList.members); DomainStore.setMembers(data.distributionsList.members);
} }
this.setState({ return this.setState({
distributionsList: data.distributionsList, distributionsList: data.distributionsList,
members: this.isStoreEnabled ? DomainStore.getMembers() : data.distributionsList.members, members: this.isStoreEnabled ? DomainStore.getMembers() : data.distributionsList.members,
owners: this.isStoreEnabled ? DomainStore.getOwners() : data.owners, owners: this.isStoreEnabled ? DomainStore.getOwners() : data.owners,
...@@ -125,233 +173,73 @@ export default class DistributionLists extends React.Component { ...@@ -125,233 +173,73 @@ export default class DistributionLists extends React.Component {
}); });
} }
onSubmitOwners(response) { onSubmitActions(response) {
if (response.refresh) { return new Promise((resolve) => {
response.refresh.forEach((member) => { return this.makeRequest(response, this.state.distributionsList, resolve);
if (this.isStoreEnabled) { }).then((data) => {
DomainStore.addOwners(member);
}
});
}
this.multipleActionsOwners(response, this.state.distributionsList).then((res) => {
//const newOwners = this.isStoreEnabled ? DomainStore.getOwners() : null;
const errors = []; const errors = [];
const limit = res.length; if (data.error) {
data.error.forEach((err) => {
for (let i = 0; i < limit; i++) {
const items = res[i];
if (items.error) {
const action = (items.action === 'remove') ? 'eliminar' : 'agregar';
errors.push({ errors.push({
error: `Hubo un error al ${action} ${items.item}, debido a : ${items.error.extra.reason}`, error: `Hubo un error al ${err.action} ${err.target}, debido a : ${err.extra.reason}`,
type: MessagesType.ERROR type: MessagesType.ERROR
}); });
} });
} }
if (errors.length !== limit) { if (data.completed) {
errors.push({ errors.push({
error: 'Se han guardado los datos para permitidos éxitosamente.', error: 'Se han guardado los datos éxitosamente.',
type: MessagesType.SUCCESS type: MessagesType.SUCCESS
}); });
} }
if (this.state.domain) { const dl = data.data;
const id = this.props.params.id;
Client.getDistributionList(id, (success) => {
success.getOwners((error, owners) => {
if (owners) {
if (this.isStoreEnabled) {
DomainStore.setOwners(owners);
}
this.setState({
owners,
error: errors
});
response.reset(); if (response.target.match(/owner/gi)) {
} return dl.getOwners((err, owners) => {
}); if (owners) {
}, (err) => { this.setState({
return err; owners,
error: errors.length > 0 ? errors : null,
distributionsList: dl
});
}
}); });
} }
});
}
onSubmitMembers(response) {
if (response.refresh) {
response.refresh.forEach((member) => {
if (this.isStoreEnabled) {
DomainStore.addMember(member);
}
});
}
this.multipleActionsMembers(response, this.state.distributionsList).then((res) => { const id = this.props.params.id;
const newMembers = this.isStoreEnabled ? DomainStore.getMembers() : null; return Client.getDistributionList(id, (success) => {
const errors = []; const dl = success;
const limit = res.length;
for (let i = 0; i < limit; i++) {
const items = res[i];
if (items.error) {
const action = (items.action === 'remove') ? 'eliminar' : 'agregar';
errors.push({
error: `Hubo un error al ${action} ${items.item}, debido a : ${items.error.extra.reason}`,
type: MessagesType.ERROR
});
}
}
if (errors.length !== limit) { return this.setState({
errors.push({ error: errors.length > 0 ? errors : null,
error: 'Se han guardado los datos para miembros éxitosamente.', distributionsList: dl,
type: MessagesType.SUCCESS members: dl.members
});
}, (error) => {
return GlobalActions.emitMessage({
error: error.message,
typeError: MessagesType.ERROR
}); });
}
this.setState({
members: newMembers,
error: errors
}); });
}).finally(() => {
response.reset(); response.reset();
}); });
} }
multipleActionsMembers(response, account) {
const promises = [];
if (response.add || response.remove) {
if (response.add) {
const add = new Promise((resolve) => {
account.addMembers(response.add, (error) => {
const res = {};
if (error) {
res.isCompleted = false;
res.action = 'add';
res.error = error;
return resolve(res);
}
response.add.forEach((member) => {
if (this.isStoreEnabled) {
DomainStore.addMember(member);
}
});
res.isCompleted = true;
res.action = 'add';
return resolve(res);
});
});
promises.push(add);
}
if (response.remove) {
const remove = new Promise((resolve) => {
account.removeMembers(response.remove, (error) => {
const res = {};
if (error) {
res.isCompleted = false;
res.action = 'remove';
res.error = error;
return resolve(res);
}
response.remove.forEach((member) => {
if (this.isStoreEnabled) {
DomainStore.removeMember(member);
}
});
res.isCompleted = true;
res.action = 'remove';
return resolve(res);
});
});
promises.push(remove);
}
}
return Promise.all(promises);
}
multipleActionsOwners(response, account) {
const promises = [];
for (const key in response) {
if (response.hasOwnProperty(key) && key === 'add') {
const array = response[key];
const limit = array.length;
for (let index = 0; index < limit; index++) {
const res = {};
const newPermitido = array[index];
const promesa = new Promise((resolve) => {
account.addOwner(newPermitido, (error) => {
if (error) {
res.isCompleted = false;
res.item = newPermitido;
res.action = key;
res.error = error;
} else {
res.isCompleted = true;
res.item = newPermitido;
res.action = key;
}
return resolve(res);
});
});
promises.push(promesa);
}
}
if (response.hasOwnProperty(key) && key === 'remove') {
const array = response[key];
const limit = array.length;
for (let index = 0; index < limit; index++) {
const res = {};
const permitido = array[index].name || array[index].id;
const promesa = new Promise((resolve) => {
account.removeOwner(permitido, (error) => {
if (error) {
res.isCompleted = false;
res.item = response[key][index];
res.action = key;
res.error = error;
} else {
res.isCompleted = true;
res.item = response[key][index];
res.action = key;
}
return resolve(res);
});
});
promises.push(promesa);
}
}
}
return Promise.all(promises);
}
onDeleteMember(member) { onDeleteMember(member) {
if (this.isStoreEnabled) { if (this.isStoreEnabled) {
DomainStore.removeMember(member); DomainStore.removeMember(member);
} }
const currentMembers = this.isStoreEnabled ? DomainStore.getMembers() : null;
let currentMembers = this.isStoreEnabled ? DomainStore.getMembers() : null;
if (!currentMembers) {
currentMembers = this.state.members.filter((target) => {
return target !== member;
});
}
this.setState({ this.setState({
members: currentMembers, members: currentMembers,
...@@ -367,7 +255,12 @@ export default class DistributionLists extends React.Component { ...@@ -367,7 +255,12 @@ export default class DistributionLists extends React.Component {
} }
}); });
const newMembers = this.isStoreEnabled ? DomainStore.getMembers() : null; let newMembers = this.isStoreEnabled ? DomainStore.getMembers() : null;
if (!newMembers) {
newMembers = this.state.members;
newMembers.push(...response);
}
this.setState({ this.setState({
members: newMembers, members: newMembers,
...@@ -382,7 +275,14 @@ export default class DistributionLists extends React.Component { ...@@ -382,7 +275,14 @@ export default class DistributionLists extends React.Component {
if (this.isStoreEnabled) { if (this.isStoreEnabled) {
DomainStore.removeOwner(owner); DomainStore.removeOwner(owner);
} }
const currentOwners = this.isStoreEnabled ? DomainStore.getOwners() : null;
let currentOwners = this.isStoreEnabled ? DomainStore.getOwners() : null;
if (!currentOwners) {
currentOwners = this.state.owners.filter((target) => {
return target !== owner;
});
}
this.setState({ this.setState({
owners: currentOwners, owners: currentOwners,
...@@ -398,7 +298,11 @@ export default class DistributionLists extends React.Component { ...@@ -398,7 +298,11 @@ export default class DistributionLists extends React.Component {
} }
}); });
const newOwners = this.isStoreEnabled ? DomainStore.getOwners() : null; let newOwners = this.isStoreEnabled ? DomainStore.getOwners() : null;
if (!newOwners) {
newOwners = this.state.owners;
newOwners.push(...response);
}
this.setState({ this.setState({
owners: newOwners, owners: newOwners,
...@@ -435,7 +339,7 @@ export default class DistributionLists extends React.Component { ...@@ -435,7 +339,7 @@ export default class DistributionLists extends React.Component {
const domain = this.state.domain; const domain = this.state.domain;
const owners = this.state.owners; const owners = this.state.owners;
const arrayMembers = this.state.members; const arrayMembers = this.state.members;
const membersFormatted = Utils.getMembers(data.members, 'Miembros'); const membersFormatted = Utils.getMembers(arrayMembers, 'Miembros');
if (owners.length > 0) { if (owners.length > 0) {
isPrivate = ( isPrivate = (
...@@ -489,7 +393,7 @@ export default class DistributionLists extends React.Component { ...@@ -489,7 +393,7 @@ export default class DistributionLists extends React.Component {
name={'Miembros'} name={'Miembros'}
data={arrayMembers} data={arrayMembers}
onApplyChanges={(response) => { onApplyChanges={(response) => {
this.onSubmitMembers(response); this.onSubmitActions(response);
}} }}
hasExport={true} hasExport={true}
isEmail={true} isEmail={true}
...@@ -502,6 +406,7 @@ export default class DistributionLists extends React.Component { ...@@ -502,6 +406,7 @@ export default class DistributionLists extends React.Component {
onExport={(members) => { onExport={(members) => {
this.onExportMembers(members); this.onExportMembers(members);
}} }}
nameFunc={'Members'}
/> />
); );
...@@ -510,7 +415,7 @@ export default class DistributionLists extends React.Component { ...@@ -510,7 +415,7 @@ export default class DistributionLists extends React.Component {
name={'Permitidos'} name={'Permitidos'}
data={owners} data={owners}
onApplyChanges={(response) => { onApplyChanges={(response) => {
this.onSubmitOwners(response); this.onSubmitActions(response);
}} }}
hasExport={true} hasExport={true}
isEmail={true} isEmail={true}
...@@ -523,6 +428,7 @@ export default class DistributionLists extends React.Component { ...@@ -523,6 +428,7 @@ export default class DistributionLists extends React.Component {
onExport={(allowers) => { onExport={(allowers) => {
this.onExportAllowers(allowers); this.onExportAllowers(allowers);
}} }}
nameFunc={'Owner'}
/> />
); );
} }
...@@ -581,14 +487,14 @@ export default class DistributionLists extends React.Component { ...@@ -581,14 +487,14 @@ export default class DistributionLists extends React.Component {
permitidos: allows permitidos: allows
}; };
const not = false; /*const not = false;
//if (!this.isGlobalAdmin) { //if (!this.isGlobalAdmin) {
if (not) { if (not) {
tabNamesArray = ['Miembros']; tabNamesArray = ['Miembros'];
tabs = { tabs = {
miembros: members miembros: members
}; };
} }*/
panelTabs = ( panelTabs = (
<PanelTab <PanelTab
......
...@@ -274,21 +274,22 @@ export default class PanelActions extends React.Component { ...@@ -274,21 +274,22 @@ export default class PanelActions extends React.Component {
onSubmit() { onSubmit() {
const response = {}; const response = {};
response.reset = this.reset; response.reset = this.reset;
response.target = this.props.nameFunc;
this.refs.savebutton.setAttribute('disabled', 'disabled'); /*this.refs.savebutton.setAttribute('disabled', 'disabled');
this.refs.savebutton.innerHTML = 'Aplicando Cambios...'; this.refs.savebutton.innerHTML = 'Aplicando Cambios...';*/
if (this.forAdd.length > 0) { if (this.forAdd.length > 0) {
response.add = this.forAdd; response['add' + Utils.titleCase(this.props.nameFunc)] = this.forAdd;
} }
if (this.forRemove.length > 0) { if (this.forRemove.length > 0) {
response.remove = this.forRemove; response['remove' + Utils.titleCase(this.props.nameFunc)] = this.forRemove;
} }
if (this.refresh.length > 0) { /*if (this.refresh.length > 0) {
response.refresh = this.refresh; response.refresh = this.refresh;
} }*/
this.props.onApplyChanges(response); this.props.onApplyChanges(response);
} }
...@@ -656,7 +657,8 @@ PanelActions.propTypes = { ...@@ -656,7 +657,8 @@ PanelActions.propTypes = {
hasExport: React.PropTypes.bool, hasExport: React.PropTypes.bool,
showNameOnButton: React.PropTypes.bool, showNameOnButton: React.PropTypes.bool,
onExport: React.PropTypes.func, onExport: React.PropTypes.func,
isEmail: React.PropTypes.bool isEmail: React.PropTypes.bool,
nameFunc: React.PropTypes.string.isRequired
}; };
PanelActions.defaultProps = { PanelActions.defaultProps = {
......
...@@ -267,20 +267,17 @@ export default class PanelActions extends React.Component { ...@@ -267,20 +267,17 @@ export default class PanelActions extends React.Component {
onSubmit() { onSubmit() {
const response = {}; const response = {};
response.reset = this.reset; response.reset = this.reset;
response.target = this.props.nameFunc;
this.refs.savebutton.setAttribute('disabled', 'disabled'); //this.refs.savebutton.setAttribute('disabled', 'disabled');
this.refs.savebutton.innerHTML = 'Aplicando Cambios...'; //this.refs.savebutton.innerHTML = 'Aplicando Cambios...';
if (this.forAdd.length > 0) { if (this.forAdd.length > 0) {
response.add = this.forAdd; response['add' + Utils.titleCase(this.props.nameFunc)] = this.forAdd;
} }
if (this.forRemove.length > 0) { if (this.forRemove.length > 0) {
response.remove = this.forRemove; response['remove' + Utils.titleCase(this.props.nameFunc)] = this.forRemove;
}
if (this.refresh.length > 0) {
response.refresh = this.refresh;
} }
if (this.props.onApplyChanges) { if (this.props.onApplyChanges) {
...@@ -656,7 +653,8 @@ PanelActions.propTypes = { ...@@ -656,7 +653,8 @@ PanelActions.propTypes = {
hasExport: React.PropTypes.bool, hasExport: React.PropTypes.bool,
showNameOnButton: React.PropTypes.bool, showNameOnButton: React.PropTypes.bool,
onExport: React.PropTypes.func, onExport: React.PropTypes.func,
isEmail: React.PropTypes.bool isEmail: React.PropTypes.bool,
nameFunc: React.PropTypes.string.isRequired
}; };
PanelActions.defaultProps = { PanelActions.defaultProps = {
......
...@@ -375,7 +375,7 @@ export function exportAsCSV(data, target, title, hasLabel) { ...@@ -375,7 +375,7 @@ export function exportAsCSV(data, target, title, hasLabel) {
for (var j = 0; j < keys.length; j++) { for (var j = 0; j < keys.length; j++) {
let col = null; let col = null;
if (typeof item === 'object') { if (typeof item === 'object' && item.attrs) {
col = status[item.attrs[keys[j]]] || item.attrs[keys[j]]; col = status[item.attrs[keys[j]]] || item.attrs[keys[j]];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment