Commit b1bd98c2 authored by Juorder Gonzalez's avatar Juorder Gonzalez

Merge pull request #34 from ZBoxApp/admins

add/remove domain admins (adding fails to return error)
parents 6473e3b0 5d639210
......@@ -7,6 +7,8 @@ import * as GlobalActions from '../../action_creators/global_actions.jsx';
import * as Client from '../../utils/client.jsx';
import * as Utils from '../../utils/utils.jsx';
import Constants from '../../utils/constants.jsx';
import StatusLabel from '../status_label.jsx';
import {Modal} from 'react-bootstrap';
......@@ -34,18 +36,19 @@ export default class AddAdminModal extends React.Component {
GlobalActions.emitStartLoading();
Client.getAllAccounts(
{
query: `mail=*${query}*`,
domain: this.props.domain.name
query: `mail=*${query}*`
},
(data) => {
const admins = DomainStore.getAdmins(this.props.domain);
let users = [];
if (admins) {
data.account.forEach((u) => {
if (!admins.hasOwnProperty(u.id)) {
users.push(u);
}
});
if (data.account) {
data.account.forEach((u) => {
if (!admins.hasOwnProperty(u.id)) {
users.push(u);
}
});
}
} else {
users = data.account;
}
......@@ -65,8 +68,22 @@ export default class AddAdminModal extends React.Component {
}
handleAddAdmin(e, user) {
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) {
......
......@@ -5,12 +5,15 @@ import React from 'react';
import DomainStore from '../../stores/domain_store.jsx';
import MessageBar from '../message_bar.jsx';
import Panel from '../panel.jsx';
import ToggleModalButton from '../toggle_modal_button.jsx';
import AddAdminModal from './add_admin_modal.jsx';
import * as Utils from '../../utils/utils.jsx';
import Constants from '../../utils/constants.jsx';
export default class DomainAdminList extends React.Component {
constructor(props) {
super(props);
......@@ -29,7 +32,7 @@ export default class DomainAdminList extends React.Component {
getAdmins() {
const domain = this.props.domain;
domain.getAdmins((err, data) => {
const admins = data.account;
const admins = data.account || [];
DomainStore.setAdmins(domain, admins);
this.setState({admins});
});
......@@ -38,7 +41,21 @@ export default class DomainAdminList extends React.Component {
e.preventDefault();
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
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() {
......@@ -64,6 +81,20 @@ export default class DomainAdminList extends React.Component {
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 adminRows = this.state.admins.map((a) => {
return (
......@@ -75,7 +106,7 @@ export default class DomainAdminList extends React.Component {
{a.name}
</td>
<td className='user-name text-center'>
{a.attrs.givenName}
{a.attrs.displayName}
</td>
<td className='user-type text-center'>
</td>
......@@ -156,6 +187,7 @@ export default class DomainAdminList extends React.Component {
<Panel
hasHeader={false}
children={adminContent}
error={messageBar}
/>
);
}
......
......@@ -30,7 +30,7 @@ export default class DomainDetails extends React.Component {
getDomain() {
const domain = DomainStore.getCurrent();
if (domain) {
if (domain && domain.id === this.props.params.id) {
GlobalActions.emitEndLoading();
this.setState({
domain
......@@ -39,6 +39,7 @@ export default class DomainDetails extends React.Component {
Client.getDomain(
this.props.params.id,
(data) => {
DomainStore.setCurrent(data);
this.setState({
domain: data
});
......
......@@ -171,8 +171,9 @@ export default class Mailboxes extends React.Component {
const arrLocked = [];
if (this.state.data) {
total = this.state.data.account.length;
tableResults = this.state.data.account.map((mail) => {
const accounts = this.state.data.account || [];
total = accounts.length;
tableResults = accounts.map((mail) => {
let attrs = mail.attrs;
let statusClass = '';
let status = attrs.zimbraAccountStatus;
......
......@@ -72,11 +72,13 @@ class DomainStoreClass extends EventEmitter {
const admins = {};
adminsArray.forEach((a) => {
admins[a.id] = a;
});
if (adminsArray) {
adminsArray.forEach((a) => {
admins[a.id] = a;
});
this.current.admins = admins;
this.current.admins = admins;
}
}
addAdmin(user) {
......
......@@ -68,9 +68,6 @@ var config = {
}
]
},
sassLoader: {
includePaths: ['node_modules/compass-mixins/lib']
},
plugins: [
new CopyWebpackPlugin([
{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