Commit 91bdf911 authored by Juorder Gonzalez's avatar Juorder Gonzalez Committed by GitHub

Merge pull request #227 from ZBoxApp/issues_beta_v1

fix massixe setter message vacation, alias add and remove, edit mailb…
parents 65e6a796 58021194
1466524663 1466617142
\ No newline at end of file
module.exports = {"main":{"js":"/838029bundle.js"}} module.exports = {"main":{"js":"/419997bundle.js"}}
\ No newline at end of file \ No newline at end of file
...@@ -17,26 +17,50 @@ export default class MultipleTaskModal extends React.Component { ...@@ -17,26 +17,50 @@ export default class MultipleTaskModal extends React.Component {
this.onSubmit = this.onSubmit.bind(this); this.onSubmit = this.onSubmit.bind(this);
this.getOwnAccounts = this.getOwnAccounts.bind(this); this.getOwnAccounts = this.getOwnAccounts.bind(this);
this.handleChangeDate = this.handleChangeDate.bind(this); this.handleChangeDate = this.handleChangeDate.bind(this);
this.handleBlurTextAreaMessage = this.handleBlurTextAreaMessage.bind(this);
this.handleEnabledReplay = this.handleEnabledReplay.bind(this);
this.allAccounts = []; this.allAccounts = [];
this.loop = 0; this.loop = 0;
this.range = 200; this.range = 200;
this.initialDate = Utils.setInitialDate(); this.initialDate = Utils.setInitialDate();
this.dateStart = this.initialDate.formatted;
this.dateEnd = this.initialDate.formatted;
this.timestampStart = this.initialDate.timestamp;
this.timestampEnd = this.initialDate.timestamp;
this.state = { this.state = {
loaded: false loaded: false,
zimbraPrefOutOfOfficeFromDate: this.initialDate.timestamp,
zimbraPrefOutOfOfficeUntilDate: this.initialDate.timestamp,
zimbraPrefOutOfOfficeReplyEnabled: false,
zimbraPrefOutOfOfficeReply: '',
zimbraPrefOutOfOfficeFromDateInput: this.initialDate.formatted,
zimbraPrefOutOfOfficeUntilDateInput: this.initialDate.formatted
}; };
} }
handleChangeDate(x, from) { handleChangeDate(x, from) {
const ref = this.refs[from];
const timestamp = Utils.getInitialDateFromTimestamp(x); const timestamp = Utils.getInitialDateFromTimestamp(x);
const date = Utils.timestampToDate(timestamp);
const states = {};
ref.value = timestamp; states[from] = timestamp;
states[`${from}Input`] = date;
this.setState(states);
}
handleBlurTextAreaMessage(e) {
const zimbraPrefOutOfOfficeReply = e.target.value.trim();
if (zimbraPrefOutOfOfficeReply.length > 0) {
this.setState({
zimbraPrefOutOfOfficeReply
});
}
}
handleEnabledReplay(e) {
this.setState({
zimbraPrefOutOfOfficeReplyEnabled: e.target.checked
});
} }
onSubmit() { onSubmit() {
...@@ -44,13 +68,17 @@ export default class MultipleTaskModal extends React.Component { ...@@ -44,13 +68,17 @@ export default class MultipleTaskModal extends React.Component {
const domain = this.props.data; const domain = this.props.data;
const total = accounts.length; const total = accounts.length;
const collection = []; const collection = [];
const refs = this.refs;
let message = null; let message = null;
let err = false; let err = false;
const isEnabled = refs.zimbraPrefOutOfOfficeReplyEnabled.checked; const isEnabled = this.state.zimbraPrefOutOfOfficeReplyEnabled;
const responseText = this.state.zimbraPrefOutOfOfficeReply;
const start = this.state.zimbraPrefOutOfOfficeFromDate;
const end = this.state.zimbraPrefOutOfOfficeUntilDate;
const start = refs.zimbraPrefOutOfOfficeFromDate.value; if (this.props.show) {
const end = refs.zimbraPrefOutOfOfficeUntilDate.value; this.props.onHide();
}
if ((start > end) && isEnabled) { if ((start > end) && isEnabled) {
message = 'La fecha en la que termina su respuesta automática, debe ser mayor que en la que comienza.'; message = 'La fecha en la que termina su respuesta automática, debe ser mayor que en la que comienza.';
...@@ -83,11 +111,11 @@ export default class MultipleTaskModal extends React.Component { ...@@ -83,11 +111,11 @@ export default class MultipleTaskModal extends React.Component {
const attrs = {}; const attrs = {};
if (isEnabled) { if (isEnabled) {
const formatedStart = document.getElementById('zimbraPrefOutOfOfficeFromDate').value.split('/').reverse().join('') + '000000Z'; const formatedStart = this.state.zimbraPrefOutOfOfficeFromDateInput.split('/').reverse().join('') + '000000Z';
const formatedEnd = document.getElementById('zimbraPrefOutOfOfficeUntilDate').value.split('/').reverse().join('') + '000000Z'; const formatedEnd = this.state.zimbraPrefOutOfOfficeUntilDateInput.split('/').reverse().join('') + '000000Z';
attrs.zimbraPrefOutOfOfficeReplyEnabled = isEnabled.toString().toUpperCase(); attrs.zimbraPrefOutOfOfficeReplyEnabled = isEnabled.toString().toUpperCase();
attrs.zimbraPrefOutOfOfficeReply = refs.zimbraPrefOutOfOfficeReply.value; attrs.zimbraPrefOutOfOfficeReply = responseText;
attrs.zimbraPrefOutOfOfficeFromDate = formatedStart; attrs.zimbraPrefOutOfOfficeFromDate = formatedStart;
attrs.zimbraPrefOutOfOfficeUntilDate = formatedEnd; attrs.zimbraPrefOutOfOfficeUntilDate = formatedEnd;
} else { } else {
...@@ -122,6 +150,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -122,6 +150,7 @@ export default class MultipleTaskModal extends React.Component {
return true; return true;
} }
this.loop++;
setTimeout(() => { setTimeout(() => {
this.onSubmit(); this.onSubmit();
}, 200); }, 200);
...@@ -203,6 +232,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -203,6 +232,7 @@ export default class MultipleTaskModal extends React.Component {
let content = null; let content = null;
let messageLoading = 'Cargando...'; let messageLoading = 'Cargando...';
let labelError = null; let labelError = null;
const {zimbraPrefOutOfOfficeFromDate, zimbraPrefOutOfOfficeUntilDate, zimbraPrefOutOfOfficeReplyEnabled, zimbraPrefOutOfOfficeFromDateInput, zimbraPrefOutOfOfficeUntilDateInput} = this.state;
if (this.state.loading) { if (this.state.loading) {
const message = this.state.messageLoading; const message = this.state.messageLoading;
...@@ -232,7 +262,8 @@ export default class MultipleTaskModal extends React.Component { ...@@ -232,7 +262,8 @@ export default class MultipleTaskModal extends React.Component {
<input <input
type='checkbox' type='checkbox'
className='pretty' className='pretty'
ref='zimbraPrefOutOfOfficeReplyEnabled' defultChecked={zimbraPrefOutOfOfficeReplyEnabled}
onChange={this.handleEnabledReplay}
/> />
<span></span> <span></span>
</div> </div>
...@@ -257,13 +288,12 @@ export default class MultipleTaskModal extends React.Component { ...@@ -257,13 +288,12 @@ export default class MultipleTaskModal extends React.Component {
onChange={(x) => { onChange={(x) => {
this.handleChangeDate(x, 'zimbraPrefOutOfOfficeFromDate'); this.handleChangeDate(x, 'zimbraPrefOutOfOfficeFromDate');
}} }}
defaultText={this.dateStart} defaultText={zimbraPrefOutOfOfficeFromDateInput}
mode={'date'} mode={'date'}
/> />
<input <input
type='hidden' type='hidden'
ref='zimbraPrefOutOfOfficeFromDate' value={zimbraPrefOutOfOfficeFromDate}
value={this.timestampStart}
/> />
</div> </div>
</div> </div>
...@@ -282,7 +312,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -282,7 +312,7 @@ export default class MultipleTaskModal extends React.Component {
readOnly: 'readOnly' readOnly: 'readOnly'
} }
} }
defaultText={this.dateEnd} defaultText={zimbraPrefOutOfOfficeUntilDateInput}
onChange={(x) => { onChange={(x) => {
this.handleChangeDate(x, 'zimbraPrefOutOfOfficeUntilDate'); this.handleChangeDate(x, 'zimbraPrefOutOfOfficeUntilDate');
}} }}
...@@ -290,8 +320,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -290,8 +320,7 @@ export default class MultipleTaskModal extends React.Component {
/> />
<input <input
type='hidden' type='hidden'
ref='zimbraPrefOutOfOfficeUntilDate' value={zimbraPrefOutOfOfficeUntilDate}
value={this.timestampEnd}
/> />
</div> </div>
</div> </div>
...@@ -302,14 +331,14 @@ export default class MultipleTaskModal extends React.Component { ...@@ -302,14 +331,14 @@ export default class MultipleTaskModal extends React.Component {
</label> </label>
<div className='col-sm-8'> <div className='col-sm-8'>
<textarea <textarea
name='response' name='response'
id='responseBox' id='responseBox'
className='form-control' className='form-control'
rows='4' rows='4'
ref='zimbraPrefOutOfOfficeReply' onBlur={this.handleBlurTextAreaMessage}
> >
</textarea> </textarea>
</div> </div>
</div> </div>
</form> </form>
......
...@@ -106,19 +106,19 @@ export default class ImportMassiveModal extends React.Component { ...@@ -106,19 +106,19 @@ export default class ImportMassiveModal extends React.Component {
return null; return null;
} }
onChangeColumn(e, option, key) { onChangeColumn(e, current, selected, key) {
const parent = e.target.parentNode; const parent = e.target.parentNode;
Reflect.deleteProperty(this.disabled, current);
if (option.restart) { if (selected.restart) {
parent.classList.remove('ok-option'); parent.classList.remove('ok-option');
parent.classList.add('missing-option'); parent.classList.add('missing-option');
Reflect.deleteProperty(this.disabled, option.restart);
} }
if (option && !option.restart) { if (selected && !selected.restart) {
parent.classList.remove('missing-option'); parent.classList.remove('missing-option');
parent.classList.add('ok-option'); parent.classList.add('ok-option');
this.disabled[option] = { this.disabled[selected] = {
col: key col: key
}; };
} }
...@@ -423,8 +423,8 @@ export default class ImportMassiveModal extends React.Component { ...@@ -423,8 +423,8 @@ export default class ImportMassiveModal extends React.Component {
className: 'form-control' className: 'form-control'
}} }}
id={key} id={key}
onSelected={(e, option, id) => { onSelected={(e, current, selected, id) => {
this.onChangeColumn(e, option, id); this.onChangeColumn(e, current, selected, id);
}} }}
disabledOptions={this.disabled} disabledOptions={this.disabled}
selected={selected} selected={selected}
......
...@@ -58,18 +58,10 @@ export default class CreateMailBox extends React.Component { ...@@ -58,18 +58,10 @@ export default class CreateMailBox extends React.Component {
const parent = document.getElementById('add-mailbox'); const parent = document.getElementById('add-mailbox');
if (parent) { if (parent) {
this.addEventListenerFixed(parent, 'blur', this.getEnableAccountsFromDomain); Utils.addEventListenerFixed(parent, 'blur', this.getEnableAccountsFromDomain);
} }
} }
addEventListenerFixed(element, type, callback) {
const fixEvents = {
blur: 'focusout'
};
element.addEventListener(type, callback, typeof (fixEvents[type]) !== 'undefined');
}
getEnableAccountsFromDomain(e, currentDomain) { getEnableAccountsFromDomain(e, currentDomain) {
const target = 'react-datalist-input'; const target = 'react-datalist-input';
const hasEvent = e; const hasEvent = e;
...@@ -383,7 +375,10 @@ export default class CreateMailBox extends React.Component { ...@@ -383,7 +375,10 @@ export default class CreateMailBox extends React.Component {
let enableAccounts; let enableAccounts;
if (this.state.loadingEnableAccounts) { if (this.state.loadingEnableAccounts) {
enableAccounts = ( enableAccounts = (
<div className='text-center'> <div
className='text-center'
key={'loader-plans'}
>
<i className='fa fa-refresh fa-spin fa-2x'></i> <i className='fa fa-refresh fa-spin fa-2x'></i>
<p>Cargando casillas disponibles</p> <p>Cargando casillas disponibles</p>
</div> </div>
...@@ -500,6 +495,7 @@ export default class CreateMailBox extends React.Component { ...@@ -500,6 +495,7 @@ export default class CreateMailBox extends React.Component {
this.handleSubmit(e); this.handleSubmit(e);
}} }}
id='createAccount' id='createAccount'
key={'form-create-mailbox'}
> >
<div className='form-group string required'> <div className='form-group string required'>
<label className='string required col-sm-3 control-label'> <label className='string required col-sm-3 control-label'>
......
This diff is collapsed.
...@@ -348,7 +348,7 @@ export default class Mailboxes extends React.Component { ...@@ -348,7 +348,7 @@ export default class Mailboxes extends React.Component {
componentWillUnmount() { componentWillUnmount() {
EventStore.removeMessageListener(this.showMessage); EventStore.removeMessageListener(this.showMessage);
MailboxStore.removeListenerAddMassive(this.showMessage); MailboxStore.removeListenerAddMassive(this.refreshAllAccounts);
$('#sidebar-mailboxes').removeClass('active'); $('#sidebar-mailboxes').removeClass('active');
this.domainName = null; this.domainName = null;
//this.isMounted = false; //this.isMounted = false;
......
...@@ -118,7 +118,7 @@ export default class MailboxDetails extends React.Component { ...@@ -118,7 +118,7 @@ export default class MailboxDetails extends React.Component {
}); });
}).then((mailbox) => { }).then((mailbox) => {
MailboxStore.setCurrent(mailbox); MailboxStore.setCurrent(mailbox);
let items = mailbox.attrs.zimbraMailAlias || null; let items = mailbox.attrs.zimbraMailAlias || [];
if (items) { if (items) {
if (!Array.isArray(items)) { if (!Array.isArray(items)) {
......
...@@ -14,6 +14,7 @@ export default class SelectCol extends React.Component { ...@@ -14,6 +14,7 @@ export default class SelectCol extends React.Component {
} }
handleSelectChange(e, id) { handleSelectChange(e, id) {
const current = this.current;
e.preventDefault(); e.preventDefault();
if (this.props.onSelected) { if (this.props.onSelected) {
const option = e.target; const option = e.target;
...@@ -28,7 +29,7 @@ export default class SelectCol extends React.Component { ...@@ -28,7 +29,7 @@ export default class SelectCol extends React.Component {
} else { } else {
this.current = selected; this.current = selected;
} }
return this.props.onSelected(e, selected, id); return this.props.onSelected(e, current, selected, id);
} }
return null; return null;
} }
......
{ {
"debug": true, "debug": true,
"DEV": true, "DEV": true,
"enableStores" : true, "enableStores" : false,
"zimbraUrl": "http://zimbra.zboxapp.dev:9081/zimbra_proxy/service/admin/soap", "zimbraUrl": "http://zimbra.zboxapp.dev:9081/zimbra_proxy/service/admin/soap",
"zimbraProxy": "https://192.168.1.8:7071", "zimbraProxy": "https://192.168.1.8:7071",
"dnsApiUrl": "http://zimbra.zboxapp.dev:3000", "dnsApiUrl": "http://zimbra.zboxapp.dev:3000",
"webMailUrl": "https://192.168.1.8:8443", "webMailUrl": "https://192.168.1.8:8443",
"timeoutRequest": 60000,
"dns": { "dns": {
"url": "http://zimbra.zboxapp.dev:9081/powerdns_proxy", "url": "http://zimbra.zboxapp.dev:9081/powerdns_proxy",
"token": "otto", "token": "otto",
......
...@@ -57,6 +57,7 @@ function initZimbra() { ...@@ -57,6 +57,7 @@ function initZimbra() {
zimbra = new ZimbraAdminApi({ zimbra = new ZimbraAdminApi({
url: config.zimbraUrl url: config.zimbraUrl
}); });
zimbra.client.options.timeout = config.timeoutRequest;
zimbra.client.token = token; zimbra.client.token = token;
zimbra.client.session = { id: sessionId }; zimbra.client.session = { id: sessionId };
ZimbraStore.setCurrent(zimbra); ZimbraStore.setCurrent(zimbra);
......
...@@ -113,21 +113,25 @@ export default { ...@@ -113,21 +113,25 @@ export default {
active: { active: {
label: 'Activa', label: 'Activa',
isEnabledOnCreate: true, isEnabledOnCreate: true,
isEnabledOnEdit: true,
classes: 'label-success mailbox-status' classes: 'label-success mailbox-status'
}, },
locked: { locked: {
label: 'Inactiva', label: 'Inactiva',
isEnabledOnCreate: true, isEnabledOnCreate: true,
isEnabledOnEdit: true,
classes: 'label-warning mailbox-status' classes: 'label-warning mailbox-status'
}, },
lockout: { lockout: {
label: 'Bloqueada', label: 'Bloqueada',
isEnabledOnCreate: false, isEnabledOnCreate: false,
isEnabledOnEdit: false,
classes: 'label-warning mailbox-status' classes: 'label-warning mailbox-status'
}, },
closed: { closed: {
label: 'Cerrada', label: 'Cerrada',
isEnabledOnCreate: true, isEnabledOnCreate: true,
isEnabledOnEdit: true,
classes: 'label-default mailbox-status' classes: 'label-default mailbox-status'
} }
} }
......
...@@ -612,6 +612,23 @@ export function forceTimestampFromHumanDate(date) { ...@@ -612,6 +612,23 @@ export function forceTimestampFromHumanDate(date) {
return formattedTimeStamp; return formattedTimeStamp;
} }
export function timestampToDate(timestamp) {
const time = parseInt(timestamp, 10);
const generatedDate = new Date(time).toLocaleString();
const date = generatedDate.split(/\s/).shift();
const dateArr = date.split('/');
const dateParts = dateArr.map((item) => {
if (item.length < 2) {
return '0' + item;
}
return item;
});
const newDate = dateParts.join('/');
return newDate;
}
export function setInitialDate() { export function setInitialDate() {
const dateInstance = new Date(); const dateInstance = new Date();
const day = dateInstance.getDate().toString().length < 2 ? '0' + dateInstance.getDate().toString() : dateInstance.getDate(); const day = dateInstance.getDate().toString().length < 2 ? '0' + dateInstance.getDate().toString() : dateInstance.getDate();
...@@ -702,14 +719,14 @@ export function getDomainsCleaned(domains) { ...@@ -702,14 +719,14 @@ export function getDomainsCleaned(domains) {
} }
export function findDomaindIdFromAccount(account, domains) { export function findDomaindIdFromAccount(account, domains) {
const name = account === 'object' ? account.domain : account; const name = typeof account === 'object' ? account.domain : account;
const rightsDomains = domains.filter((domain) => { const rightsDomains = domains.filter((domain) => {
return name === domain.name; return name === domain.name;
}); });
const domainReturned = rightsDomains.length === 1 ? rightsDomains.pop() : null; const domainReturned = rightsDomains.length === 1 ? rightsDomains.pop() : null;
return domainReturned ? domainReturned.id : null; return domainReturned;
} }
export function sortByNames(a, b) { export function sortByNames(a, b) {
...@@ -778,3 +795,11 @@ export function makeRequest(response, dl, resolve, returnAPI, store) { ...@@ -778,3 +795,11 @@ export function makeRequest(response, dl, resolve, returnAPI, store) {
res.data = dl; res.data = dl;
return resolve(res); return resolve(res);
} }
export function addEventListenerFixed(element, type, callback) {
const fixEvents = {
blur: 'focusout'
};
element.addEventListener(type, callback, typeof (fixEvents[type]) !== 'undefined');
}
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