Commit 06606994 authored by Elias Nahum's avatar Elias Nahum

Domain edit with the ability to move between companies

parent b6f96f9d
......@@ -69,12 +69,16 @@ export default class CreateDomain extends React.Component {
handleSubmit(e) {
e.preventDefault();
GlobalActions.emitStartLoading();
const elementList = document.querySelectorAll('.has-error');
Array.from(elementList).forEach((el) => el.classList.remove('has-error'));
Utils.validateInputRequired(this.refs).
then(() => {
const plans = Object.keys(this.state.plans);
const zimbraDomainCOSMaxAccounts = [];
const name = this.refs.domainName.value.trim();
const businessCategory = this.refs.account.value.trim();
const businessCategory = this.refs.company.value.trim();
plans.forEach((p) => {
zimbraDomainCOSMaxAccounts.push(`${this.refs[`plan-${p}`].getAttribute('data-id')}:${this.refs[`plan-${p}`].value || 0}`);
......@@ -105,6 +109,7 @@ export default class CreateDomain extends React.Component {
GlobalActions.emitEndLoading();
error.refs = true;
error.type = error.typeError;
error.node.closest('.form-group').classList.add('has-error');
return this.setState({error});
});
}
......@@ -124,11 +129,7 @@ export default class CreateDomain extends React.Component {
}
let errorBar;
let formClass = 'simple_form form-horizontal mailbox-form';
if (error) {
if (error.refs) {
formClass += ' has-error';
}
errorBar = (
<MessageBar
message={error.message}
......@@ -187,7 +188,7 @@ export default class CreateDomain extends React.Component {
const form = (
<form
className={formClass}
className='simple_form form-horizontal mailbox-form'
onSubmit={this.handleSubmit}
>
<div className='form-group string required'>
......@@ -211,15 +212,15 @@ export default class CreateDomain extends React.Component {
<div className='form-group string'>
<label className='string required col-sm-3 control-label'>
<abbr title='requerido'>{'*'}</abbr>
{'Cuenta'}
{'Empresa'}
</label>
<div className='col-sm-8'>
<select
className='form-control select required'
data-required='true'
data-message='Debe especificar a que cuenta corresponde el dominio'
ref='account'
data-message='Debe especificar a que empresa corresponde el dominio'
ref='company'
defaultValue={this.state.companyId}
>
{companiesOptions}
......
This diff is collapsed.
......@@ -67,49 +67,71 @@ class CompanyStoreClass {
}
}
addDomainAdmins(companyId, domain) {
function findDomain(company) {
const domains = company.domains;
let index = -1;
modifyDomain(prevCompanyId, domain) {
if (this.companies) {
const domainCompanyId = domain.attrs.businessCategory;
const prevCompany = this.companies[prevCompanyId];
const newCompany = this.companies[domainCompanyId];
if (domains) {
domains.forEach((d, i) => {
if (d.id === domain.id) {
index = i;
return false;
}
return true;
});
if (prevCompanyId !== domainCompanyId) {
if (newCompany) {
this.addDomain(newCompany.id, domain);
}
return index;
if (prevCompany) {
const index = findDomain(prevCompany, domain);
prevCompany.domains.splice(index, 1);
}
} else if (prevCompany) {
const index = findDomain(prevCompany, domain);
replaceDomain(prevCompany, domain, index);
}
function replaceDomain(company, index) {
if (index >= 0) {
company.domains[index] = domain;
} else {
company.domains.push(domain);
}
}
addDomainAdmins(companyId, domain) {
const currentCompany = this.getCurrent();
const company = this.getCompanyById(companyId);
let index = -1;
if (currentCompany && currentCompany.id === companyId) {
index = findDomain(currentCompany);
index = findDomain(currentCompany, domain);
replaceDomain(currentCompany, index);
replaceDomain(currentCompany, domain, index);
if (company) {
this.companies[companyId] = currentCompany;
}
} else if (company) {
index = findDomain(company);
index = findDomain(company, domain);
replaceDomain(company, domain, index);
}
}
}
function findDomain(company, domain) {
const domains = company.domains;
let index = -1;
replaceDomain(company, index);
if (domains) {
domains.forEach((d, i) => {
if (d.id === domain.id) {
index = i;
return false;
}
return true;
});
}
return index;
}
function replaceDomain(company, domain, index) {
if (index >= 0) {
company.domains[index] = domain;
} else {
company.domains.push(domain);
}
}
......
......@@ -247,6 +247,25 @@ export function createDomain(domain, success, error) {
);
}
export function modifyDomain(domain, success, error) {
initZimbra().then(
(zimbra) => {
zimbra.modifyDomain(domain.id, domain.attrs, (err, data) => {
if (err) {
const e = handleError('modifyDomain', err);
return error(e);
}
return success(data);
});
},
(err) => {
const e = handleError('modifyDomain', err);
return error(e);
}
);
}
export function addDistributionList(name, attrs, success, error) {
initZimbra().then(
(zimbra) => {
......
......@@ -170,7 +170,7 @@ export function validateInputRequired(refs) {
}
for (const ref in refs) {
if (refs.hasOwnProperty(ref)) {
if (refs.hasOwnProperty(ref) && refs[ref].hasAttribute) {
if (refs[ref].hasAttribute('data-required') && refs[ref].getAttribute('data-required') === 'true' && refs[ref].value === '') {
let message;
if (refs[ref].getAttribute('data-message') && refs[ref].getAttribute('data-message').length > 0) {
......
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