You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

194 lines
4.5 KiB

define(function(require) {
var $ = require('jquery'),
_ = require('lodash'),
monster = require('monster'),
chart = require('chart');
var app = {
requests: {
},
subscribe: {
'voip.featureCodes.render': 'featureCodesRender'
},
categories: {
qubicle: [
'qubicle login',
'qubicle set ready',
'qubicle set away',
'qubicle logout'
],
call_forward: [
'call_forward[action=activate]',
'call_forward[action=deactivate]',
'call_forward[action=toggle]',
'call_forward[action=update]',
'call_forward[action=on_busy_enable]',
'call_forward[action=on_busy_disable]',
'call_forward[action=no_answer_enable]',
'call_forward[action=no_answer_disable]'
],
hotdesk: [
'hotdesk[action=login]',
'hotdesk[action=logout]',
'hotdesk[action=toggle]'
],
parking: [
'park_and_retrieve',
'valet',
'retrieve'
],
do_not_disturb: [
'donotdisturb[action="enable"]',
'donotdisturb[action="disable"]',
'donotdisturb[action="toggle"]'
],
misc: [
'voicemail[action=check]',
'voicemail[action="direct"]',
'intercom',
'privacy[mode=full]',
'directory',
'time',
'call_waiting[action=enable]',
'call_waiting[action=disable]',
'sound_test_service',
'call_recording',
'move'
]
},
featureCodesRender: function(args) {
var self = this,
parent = args.parent || $('.right-content'),
callback = args.callback;
self.featureCodesLoadData(function(featureCodesData) {
var template = $(self.getTemplate({
name: 'layout',
data: {
featureCodes: self.featureCodesFormatData(featureCodesData)
},
submodule: 'featureCodes'
}));
monster.ui.tooltips(template);
self.featureCodesBindEvents({
parent: parent,
template: template,
featureCodes: featureCodesData
});
parent
.empty()
.append(template);
callback && callback();
});
},
featureCodesLoadData: function(callback) {
var self = this;
self.callApi({
resource: 'callflow.list',
data: {
accountId: self.accountId,
filters: {
'has_key': 'featurecode'
}
},
success: function(data, status) {
callback && callback(data.data);
}
});
},
featureCodesFormatData: function(featureCodeData) {
var self = this,
defaultCategories = _.map(self.categories, function(codecs, category) {
return {
key: category,
items: codecs
};
});
return _
.chain(featureCodeData)
.filter(function(callflow) {
// Some old callflows have been created with the feature code key, so we check
// to make sure they also have a name associated
return _.has(callflow, 'featurecode.name');
})
.groupBy(function(callflow) {
var string = callflow.featurecode.name.match(/^(\w+){1}/)[0],
category = _.has(self.categories, string)
? string
: 'misc',
defaultCategory = _.find(defaultCategories, function(category) {
return _.includes(category.items, string);
});
return _.get(defaultCategory, 'key', category);
})
.map(function(codes, category) {
return {
label: self.i18n.active().featureCodes.categories[category],
items: _
.chain(codes)
.map(function(code) {
var i18n = _.get(self.i18n.active().featureCodes.labels, code.featurecode.name);
return {
hasStar: (
!_.isEmpty(code.numbers)
&& _.startsWith(code.numbers[0], '*')
) || (
!_.isEmpty(code.patterns)
&& code.patterns[0].match(/^(\^?\\\*)/)
),
label: _.get(i18n, 'label', _.capitalize(code.featurecode.name)),
number: _.has(code.featurecode, 'number')
? _.replace(code.featurecode.number, /\\/g, '')
: '',
tooltip: _.get(i18n, 'tooltip')
};
})
.sortBy(function(code) {
var number = _.toNumber(code.number);
return _.isNaN(number) ? -1 : number;
})
.value()
};
})
.sortBy('label')
.value();
},
featureCodesBindEvents: function(args) {
var self = this,
parent = args.parent,
template = args.template;
template.find('.main-number-link').on('click', function(e) {
e.preventDefault();
var leftMenu = parent.parents('#voip_container').find('.left-menu');
leftMenu.find('.category')
.removeClass('active');
leftMenu.find('.category#strategy')
.addClass('active');
parent.empty();
monster.pub('voip.strategy.render', {
parent: parent
});
});
}
};
return app;
});