scripts/apps/highlights/controllers/HighlightsConfig.ts
import _ from 'lodash';
import {gettext} from 'core/utils';
HighlightsConfig.$inject = ['$scope', 'highlightsService', 'desks', 'api', 'notify', 'modal'];
export function HighlightsConfig($scope, highlightsService, desks, api, notify, modal) {
highlightsService.get().then((items) => {
items._items = _.sortBy(items._items, (i) => i.name.toLowerCase());
$scope.configurations = items;
});
$scope.configEdit = {};
$scope.modalActive = false;
var limits = {
group: 45,
highlight: 40,
};
$scope.limits = limits;
var _config;
$scope.edit = function(config) {
clearErrorMessages();
$scope.modalActive = true;
$scope.configEdit = _.create(config);
$scope.assignedDesks = deskList(config.desks);
_config = config;
if (!$scope.configEdit.auto_insert) {
$scope.configEdit.auto_insert = 'now/d'; // today
}
};
$scope.cancel = function() {
$scope.modalActive = false;
};
$scope.save = function() {
var _new = !_config._id;
$scope.configEdit.desks = assignedDesks();
$scope.configEdit.groups = ['main'];
highlightsService.saveConfig(_config, $scope.configEdit).then((item) => {
$scope.message = null;
if (_new) {
$scope.configurations._items.unshift(item);
}
$scope.modalActive = false;
$scope.configurations._items = _.sortBy($scope.configurations._items, (i) => i.name.toLowerCase());
}, (response) => {
errorMessage(response);
});
function errorMessage(response) {
if (response.data && response.data._issues && response.data._issues.name
&& response.data._issues.name.unique) {
$scope._errorUniqueness = true;
} else {
$scope.message = gettext('There was a problem while saving highlights configuration');
}
}
};
$scope.remove = function(config) {
modal.confirm(gettext('Are you sure you want to delete configuration?'))
.then(() => {
highlightsService.removeConfig(config).then(() => {
_.remove($scope.configurations._items, config);
notify.success(gettext('Configuration deleted.'), 3000);
});
});
};
$scope.getHourVal = function(hour) {
return 'now-' + hour + 'h';
};
function deskList(arr) {
return _.map($scope.desks, (d) => ({
_id: d._id,
name: d.name,
included: isIncluded(arr, d._id),
}));
}
function isIncluded(arr, id) {
return _.findIndex(arr, (c) => c === id) > -1;
}
function assignedDesks() {
return _.map(_.filter($scope.assignedDesks, {included: true}),
(desk: any) => desk._id);
}
$scope.handleEdit = function($event) {
clearErrorMessages();
if (!_.isNil($scope.configEdit.name)) {
$scope._errorLimits = $scope.configEdit.name.length > $scope.limits.highlight ? true : null;
}
};
function clearErrorMessages() {
if ($scope._errorUniqueness || $scope._errorLimits) {
$scope._errorUniqueness = null;
$scope._errorLimits = null;
}
$scope.message = null;
}
}