Commit 48a7327b authored by Juorder Antonio's avatar Juorder Antonio

Merge branch 'master' of https://github.com/ZBoxApp/manager-react

parents 34d41c73 b1bd98c2
...@@ -53,6 +53,7 @@ export default class Companies extends React.Component { ...@@ -53,6 +53,7 @@ export default class Companies extends React.Component {
return Promise.all(domains).then((comps) => { return Promise.all(domains).then((comps) => {
CompaniesStore.setCompanies(comps); CompaniesStore.setCompanies(comps);
self.setState({ self.setState({
companies: comps companies: comps
}); });
...@@ -102,7 +103,7 @@ export default class Companies extends React.Component { ...@@ -102,7 +103,7 @@ export default class Companies extends React.Component {
return rej(err); return rej(err);
} }
d.admins = admins; d.admins = admins.account;
return solve(d); return solve(d);
}); });
}); });
......
...@@ -23,7 +23,9 @@ export default class CompanyAdmins extends React.Component { ...@@ -23,7 +23,9 @@ export default class CompanyAdmins extends React.Component {
if (domains) { if (domains) {
domains.forEach((d) => { domains.forEach((d) => {
Reflect.apply(Array.prototype.push, admins, d.admins); if (d.admins) {
Reflect.apply(Array.prototype.push, admins, d.admins);
}
}); });
} }
......
...@@ -98,8 +98,7 @@ export default class CompaniesDetails extends React.Component { ...@@ -98,8 +98,7 @@ export default class CompaniesDetails extends React.Component {
if (err) { if (err) {
return rej(err); return rej(err);
} }
d.admins = admins.account;
d.admins = admins;
return solve(d); return solve(d);
}); });
}); });
......
...@@ -7,6 +7,8 @@ import * as GlobalActions from '../../action_creators/global_actions.jsx'; ...@@ -7,6 +7,8 @@ import * as GlobalActions from '../../action_creators/global_actions.jsx';
import * as Client from '../../utils/client.jsx'; import * as Client from '../../utils/client.jsx';
import * as Utils from '../../utils/utils.jsx'; import * as Utils from '../../utils/utils.jsx';
import Constants from '../../utils/constants.jsx';
import StatusLabel from '../status_label.jsx'; import StatusLabel from '../status_label.jsx';
import {Modal} from 'react-bootstrap'; import {Modal} from 'react-bootstrap';
...@@ -34,18 +36,19 @@ export default class AddAdminModal extends React.Component { ...@@ -34,18 +36,19 @@ export default class AddAdminModal extends React.Component {
GlobalActions.emitStartLoading(); GlobalActions.emitStartLoading();
Client.getAllAccounts( Client.getAllAccounts(
{ {
query: `mail=*${query}*`, query: `mail=*${query}*`
domain: this.props.domain.name
}, },
(data) => { (data) => {
const admins = DomainStore.getAdmins(this.props.domain); const admins = DomainStore.getAdmins(this.props.domain);
let users = []; let users = [];
if (admins) { if (admins) {
data.account.forEach((u) => { if (data.account) {
if (!admins.hasOwnProperty(u.id)) { data.account.forEach((u) => {
users.push(u); if (!admins.hasOwnProperty(u.id)) {
} users.push(u);
}); }
});
}
} else { } else {
users = data.account; users = data.account;
} }
...@@ -65,8 +68,22 @@ export default class AddAdminModal extends React.Component { ...@@ -65,8 +68,22 @@ export default class AddAdminModal extends React.Component {
} }
handleAddAdmin(e, user) { handleAddAdmin(e, user) {
e.preventDefault(); e.preventDefault();
console.log(user); //eslint-disable-line no-console
DomainStore.addAdmin(user); this.props.domain.addAdmin(
user.name,
(error) => {
if (error) {
return this.setState({
error: {
message: error.extra.reason,
type: Constants.MessageType.ERROR
}
});
}
return DomainStore.addAdmin(user);
}
);
} }
shouldComponentUpdate(nextProps, nextState) { shouldComponentUpdate(nextProps, nextState) {
......
...@@ -5,12 +5,15 @@ import React from 'react'; ...@@ -5,12 +5,15 @@ import React from 'react';
import DomainStore from '../../stores/domain_store.jsx'; import DomainStore from '../../stores/domain_store.jsx';
import MessageBar from '../message_bar.jsx';
import Panel from '../panel.jsx'; import Panel from '../panel.jsx';
import ToggleModalButton from '../toggle_modal_button.jsx'; import ToggleModalButton from '../toggle_modal_button.jsx';
import AddAdminModal from './add_admin_modal.jsx'; import AddAdminModal from './add_admin_modal.jsx';
import * as Utils from '../../utils/utils.jsx'; import * as Utils from '../../utils/utils.jsx';
import Constants from '../../utils/constants.jsx';
export default class DomainAdminList extends React.Component { export default class DomainAdminList extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
...@@ -28,7 +31,8 @@ export default class DomainAdminList extends React.Component { ...@@ -28,7 +31,8 @@ export default class DomainAdminList extends React.Component {
} }
getAdmins() { getAdmins() {
const domain = this.props.domain; const domain = this.props.domain;
domain.getAdmins((err, admins) => { domain.getAdmins((err, data) => {
const admins = data.account || [];
DomainStore.setAdmins(domain, admins); DomainStore.setAdmins(domain, admins);
this.setState({admins}); this.setState({admins});
}); });
...@@ -37,7 +41,21 @@ export default class DomainAdminList extends React.Component { ...@@ -37,7 +41,21 @@ export default class DomainAdminList extends React.Component {
e.preventDefault(); e.preventDefault();
if (confirm(`¿Seguro quieres eliminar a ${admin.name} como administrador del dominio?`)) { //eslint-disable-line no-alert if (confirm(`¿Seguro quieres eliminar a ${admin.name} como administrador del dominio?`)) { //eslint-disable-line no-alert
// previo a esto hay que remover el usuario como admin del dominio // previo a esto hay que remover el usuario como admin del dominio
DomainStore.removeAdmin(admin.id); this.props.domain.removeAdmin(
admin.name,
(error) => {
if (error) {
return this.setState({
error: {
message: error.extra.reason,
type: Constants.MessageType.ERROR
}
});
}
return DomainStore.removeAdmin(admin.id);
}
);
} }
} }
onAdminsChange() { onAdminsChange() {
...@@ -63,6 +81,20 @@ export default class DomainAdminList extends React.Component { ...@@ -63,6 +81,20 @@ export default class DomainAdminList extends React.Component {
return <div/>; return <div/>;
} }
let messageBar;
if (this.state.error) {
const error = this.state.error;
messageBar = (
<MessageBar
message={error.message}
type={error.type}
canClose={true}
autoclose={true}
autocloseInSecs={5}
/>
);
}
const domain = this.props.domain; const domain = this.props.domain;
const adminRows = this.state.admins.map((a) => { const adminRows = this.state.admins.map((a) => {
return ( return (
...@@ -74,7 +106,7 @@ export default class DomainAdminList extends React.Component { ...@@ -74,7 +106,7 @@ export default class DomainAdminList extends React.Component {
{a.name} {a.name}
</td> </td>
<td className='user-name text-center'> <td className='user-name text-center'>
{a.attrs.givenName} {a.attrs.displayName}
</td> </td>
<td className='user-type text-center'> <td className='user-type text-center'>
</td> </td>
...@@ -155,6 +187,7 @@ export default class DomainAdminList extends React.Component { ...@@ -155,6 +187,7 @@ export default class DomainAdminList extends React.Component {
<Panel <Panel
hasHeader={false} hasHeader={false}
children={adminContent} children={adminContent}
error={messageBar}
/> />
); );
} }
......
...@@ -30,7 +30,7 @@ export default class DomainDetails extends React.Component { ...@@ -30,7 +30,7 @@ export default class DomainDetails extends React.Component {
getDomain() { getDomain() {
const domain = DomainStore.getCurrent(); const domain = DomainStore.getCurrent();
if (domain) { if (domain && domain.id === this.props.params.id) {
GlobalActions.emitEndLoading(); GlobalActions.emitEndLoading();
this.setState({ this.setState({
domain domain
...@@ -39,6 +39,7 @@ export default class DomainDetails extends React.Component { ...@@ -39,6 +39,7 @@ export default class DomainDetails extends React.Component {
Client.getDomain( Client.getDomain(
this.props.params.id, this.props.params.id,
(data) => { (data) => {
DomainStore.setCurrent(data);
this.setState({ this.setState({
domain: data domain: data
}); });
......
...@@ -171,8 +171,9 @@ export default class Mailboxes extends React.Component { ...@@ -171,8 +171,9 @@ export default class Mailboxes extends React.Component {
const arrLocked = []; const arrLocked = [];
if (this.state.data) { if (this.state.data) {
total = this.state.data.account.length; const accounts = this.state.data.account || [];
tableResults = this.state.data.account.map((mail) => { total = accounts.length;
tableResults = accounts.map((mail) => {
let attrs = mail.attrs; let attrs = mail.attrs;
let statusClass = ''; let statusClass = '';
let status = attrs.zimbraAccountStatus; let status = attrs.zimbraAccountStatus;
......
...@@ -72,11 +72,13 @@ class DomainStoreClass extends EventEmitter { ...@@ -72,11 +72,13 @@ class DomainStoreClass extends EventEmitter {
const admins = {}; const admins = {};
adminsArray.forEach((a) => { if (adminsArray) {
admins[a.id] = a; adminsArray.forEach((a) => {
}); admins[a.id] = a;
});
this.current.admins = admins; this.current.admins = admins;
}
} }
addAdmin(user) { addAdmin(user) {
......
...@@ -11,8 +11,6 @@ import * as GlobalActions from '../action_creators/global_actions.jsx'; ...@@ -11,8 +11,6 @@ import * as GlobalActions from '../action_creators/global_actions.jsx';
import * as Utils from './utils.jsx'; import * as Utils from './utils.jsx';
import Constants from './constants.jsx'; import Constants from './constants.jsx';
// arguments.callee.name
// función que maneja el error como corresponde // función que maneja el error como corresponde
function handleError(methodName, err) { function handleError(methodName, err) {
if (err.extra && if (err.extra &&
...@@ -474,3 +472,43 @@ export function search(query, success, error) { ...@@ -474,3 +472,43 @@ export function search(query, success, error) {
} }
); );
} }
export function batchRequest(requestArray, success, error) {
initZimbra().then(
(zimbra) => {
zimbra.makeBatchRequest(
requestArray,
(err, data) => {
if (err) {
const e = handleError('batchRequest', err);
return error(e);
}
return success(data);
});
},
(err) => {
const e = handleError('batchRequest', err);
return error(e);
}
);
}
export function getAllCos(success, error) {
initZimbra().then(
(zimbra) => {
zimbra.getAllCos((err, data) => {
if (err) {
const e = handleError('getAllCos', err);
return error(e);
}
return success(data);
});
},
(err) => {
const e = handleError('getAllCos', err);
return error(e);
}
);
}
...@@ -281,3 +281,17 @@ export function getPlansFromDomain(domain) { ...@@ -281,3 +281,17 @@ export function getPlansFromDomain(domain) {
export function titleCase(string) { export function titleCase(string) {
return string.charAt(0).toUpperCase() + string.slice(1); return string.charAt(0).toUpperCase() + string.slice(1);
} }
export function getEnabledPlansByCos(cosArray) {
const configPlans = global.window.manager_config.plans;
const plans = {};
cosArray.forEach((cos) => {
const key = cos.name;
if (configPlans.hasOwnProperty(key) && configPlans[key]) {
plans[key] = cos.id;
}
});
return plans;
}
...@@ -68,9 +68,6 @@ var config = { ...@@ -68,9 +68,6 @@ var config = {
} }
] ]
}, },
sassLoader: {
includePaths: ['node_modules/compass-mixins/lib']
},
plugins: [ plugins: [
new CopyWebpackPlugin([ new CopyWebpackPlugin([
{from: 'src/config', to: 'config'} {from: 'src/config', to: 'config'}
......
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