Adding interfaces and fixing JSON parsing issues
Change-Id: I8675390ccd11020752d210332c1d7e2297823af2
diff --git a/xos/gui/src/app/subscriber-dashboard/subscriber-dashboard.component.ts b/xos/gui/src/app/subscriber-dashboard/subscriber-dashboard.component.ts
index fb98e4c..8dcff63 100644
--- a/xos/gui/src/app/subscriber-dashboard/subscriber-dashboard.component.ts
+++ b/xos/gui/src/app/subscriber-dashboard/subscriber-dashboard.component.ts
@@ -16,8 +16,9 @@
import * as _ from 'lodash';
import './subscriber-dashboard.scss';
+import {IRCordSubscriber, IRCordSubscriberDevice} from '../interfaces/rcord-subscriber.interface';
-class rcordSubscriberDashboardCtrl {
+class RcordSubscriberDashboardCtrl {
static $inject = [
'toastr',
@@ -26,7 +27,7 @@
];
public levelOptions = [];
- public subscribers = [];
+ public subscribers: IRCordSubscriber[] = [];
public statusFieldOptions = [];
public slider = {
floor: 0,
@@ -35,6 +36,7 @@
return Math.floor(value / 1000000);
}
};
+ public selectedSubscriber: IRCordSubscriber;
private subscriberDef;
@@ -66,40 +68,61 @@
this.statusFieldOptions = _.find(this.subscriberDef.fields, {name: 'status'}).options;
}
- public addDevice(subscriber) {
+ 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, device) {
- _.remove(subscriber.service_specific_attribute.devices, {name:device.name})
+ public removeDevice(subscriber: IRCordSubscriber, device: IRCordSubscriberDevice) {
+ _.remove(subscriber.service_specific_attribute.devices, {name: device.name});
}
- public save(subscriber) {
- console.log(subscriber);
+ public save(subscriber: IRCordSubscriber) {
const item: any = angular.copy(subscriber);
+
+ _.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) {
+ private parseSubscribers(subscribers: IRCordSubscriber) {
return _.map(subscribers, (s) => {
if (angular.isString(s.service_specific_attribute)) {
- s.service_specific_attribute = JSON.parse(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
-};
\ No newline at end of file
+ controller: RcordSubscriberDashboardCtrl
+};