blob: 69fe1494d3a1780da44d1f2d7d4861ae1c0fed64 [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as _ from 'lodash';
import './subscriber-dashboard.scss';
import {IRCordSubscriber, IRCordSubscriberDevice} from '../interfaces/rcord-subscriber.interface';
class RcordSubscriberDashboardCtrl {
static $inject = [
'toastr',
'XosModelStore',
'XosModeldefsCache'
];
public levelOptions = [];
public subscribers: IRCordSubscriber[] = [];
public statusFieldOptions = [];
public slider = {
floor: 0,
ceil: 1000000000,
translate: (value) => {
return `${Math.floor(value / 1000000)} MB`;
}
};
public selectedSubscriber: IRCordSubscriber;
private subscriberDef;
constructor (
private toastr: any,
private XosModelStore: any,
private XosModeldefsCache: any
) {
}
$onInit() {
this.XosModelStore.query('CordSubscriberRoot', '/rcord/cordsubscriberroots')
.subscribe(
res => {
this.subscribers = this.parseSubscribers(res);
}
);
this.levelOptions = [
`G`,
`PG`,
`PG_13`,
`R`,
`X`
];
this.subscriberDef = this.XosModeldefsCache.get('CordSubscriberRoot');
this.statusFieldOptions = _.find(this.subscriberDef.fields, {name: 'status'}).options;
}
public addDevice(subscriber: IRCordSubscriber) {
if (angular.isUndefined(subscriber.service_specific_attribute.devices)) {
subscriber.service_specific_attribute.devices = [];
}
subscriber.service_specific_attribute.devices.push({
name: '',
mac: '',
level: 'PG_13'
});
}
public removeDevice(subscriber: IRCordSubscriber, device: IRCordSubscriberDevice) {
_.remove(subscriber.service_specific_attribute.devices, {name: device.name});
}
public save(subscriber: IRCordSubscriber) {
const item: any = angular.copy(subscriber);
delete item.updated;
_.forEach(Object.keys(item), prop => {
if (prop.indexOf('-formatted') > -1 || prop.indexOf('_ptr') > -1) {
delete item[prop];
}
});
item.service_specific_attribute = JSON.stringify(item.service_specific_attribute);
item.$save()
.then(() => {
this.toastr.success(`Subscriber successfully saved`);
})
.catch(e => {
this.toastr.error(`Error while saving subscriber`);
console.error(e);
});
}
private parseSubscribers(subscribers: IRCordSubscriber) {
return _.map(subscribers, (s) => {
if (angular.isString(s.service_specific_attribute)) {
try {
s.service_specific_attribute = JSON.parse(s.service_specific_attribute);
} catch (e) {
s.service_specific_attribute = {};
}
}
return s;
});
}
$onDestroy() {
this.selectedSubscriber.service_specific_attribute = JSON.stringify(this.selectedSubscriber.service_specific_attribute);
}
}
export const rcordSubscriberDashboard: angular.IComponentOptions = {
template: require('./subscriber-dashboard.html'),
controllerAs: 'vm',
controller: RcordSubscriberDashboardCtrl
}