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.
ngcp-csc-ui/src/api/subscriber.js

215 lines
6.3 KiB

import _ from 'lodash';
import Vue from 'vue';
import { getJsonBody } from './utils'
export function getPreferences(id) {
return new Promise((resolve, reject)=>{
Vue.http.get('/api/subscriberpreferences/' + id).then((result)=>{
resolve(getJsonBody(result.body));
}).catch((err)=>{
reject(err);
});
});
}
export function setPreference(id, field, value) {
return new Promise((resolve, reject)=>{
var headers = {};
headers['Content-Type'] = 'application/json-patch+json';
Promise.resolve().then((result)=>{
return Vue.http.patch('/api/subscriberpreferences/' + id, [{
op: 'replace',
path: '/'+ field,
value: value
}], { headers: headers });
}).then(()=>{
resolve();
}).catch((err)=>{
if(err.status === 422) {
Vue.http.patch('/api/subscriberpreferences/' + id, [{
op: 'add',
path: '/'+ field,
value: value
}], { headers: headers }).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
});
} else {
reject(err);
}
});
});
}
export function prependItemToArrayPreference(id, field, value) {
return new Promise((resolve, reject)=>{
Promise.resolve().then(()=>{
return getPreferences(id);
}).then((result)=>{
var prefs = _.cloneDeep(result);
delete prefs._links;
prefs[field] = _.get(prefs, field, []);
prefs[field] = [value].concat(prefs[field]);
return Vue.http.put('/api/subscriberpreferences/' + id, prefs);
}).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
});
});
}
export function appendItemToArrayPreference(id, field, value) {
return new Promise((resolve, reject)=>{
Promise.resolve().then(()=>{
return getPreferences(id);
}).then((result)=>{
var prefs = _.cloneDeep(result);
delete prefs._links;
prefs[field] = _.get(prefs, field, []);
prefs[field].push(value);
return Vue.http.put('/api/subscriberpreferences/' + id, prefs);
}).then(()=>{
resolve();
}).catch((err)=>{
reject();
});
});
}
export function editItemInArrayPreference(id, field, itemIndex, value) {
return new Promise((resolve, reject)=>{
Promise.resolve().then(()=>{
return getPreferences(id);
}).then((result)=>{
var prefs = _.cloneDeep(result);
delete prefs._links;
if(_.isArray(prefs[field]) && itemIndex < prefs[field].length) {
prefs[field][itemIndex] = value;
return Vue.http.put('/api/subscriberpreferences/' + id, prefs);
} else {
return Promise.reject(new Error('Array index does not exists'));
}
}).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
});
});
}
export function removeItemFromArrayPreference(id, field, itemIndex) {
return new Promise((resolve, reject)=>{
Promise.resolve().then(()=>{
return getPreferences(id);
}).then((result)=>{
var prefs = _.cloneDeep(result);
delete prefs._links;
prefs[field] = _.get(prefs, field, []);
_.remove(prefs[field], (value, index)=>{
return index === itemIndex;
});
return Vue.http.put('/api/subscriberpreferences/' + id, prefs);
}).then(()=>{
resolve();
}).catch((err)=>{
reject();
});
});
}
export function setBlockInMode(id, value) {
return setPreference(id, 'block_in_mode', value);
}
export function enableBlockIn(id) {
return setBlockInMode(id, true);
}
export function disableBlockIn(id) {
return setBlockInMode(id, false);
}
export function addToBlockInList(id, number) {
return prependItemToArrayPreference(id, 'block_in_list', number);
}
export function editBlockInList(id, index, number) {
return editItemInArrayPreference(id, 'block_in_list', index, number);
}
export function removeFromBlockInList(id, index) {
return removeItemFromArrayPreference(id, 'block_in_list', index);
}
export function setBlockOutMode(id, value) {
return setPreference(id, 'block_out_mode', value);
}
export function enableBlockOut(id) {
return setBlockOutMode(id, true);
}
export function disableBlockOut(id) {
return setBlockOutMode(id, false);
}
export function addToBlockOutList(id, number) {
return prependItemToArrayPreference(id, 'block_out_list', number);
}
export function editBlockOutList(id, index, number) {
return editItemInArrayPreference(id, 'block_out_list', index, number);
}
export function removeFromBlockOutList(id, index) {
return removeItemFromArrayPreference(id, 'block_out_list', index);
}
export function setPrivacy(id, value) {
return setPreference(id, 'clir', value);
}
export function enablePrivacy(id) {
return setPrivacy(id, true);
}
export function disablePrivacy(id) {
return setPrivacy(id, false);
}
export function createSubscriber(subscriber) {
return new Promise((resolve, reject)=>{
Vue.http.post('/api/subscribers/', subscriber, {
params: {
customer_id: subscriber.customer_id
}
}).then((res)=>{
resolve(_.last(_.split(res.headers.get('Location'), '/')));
}).catch((err)=>{
if(err.status === 422) {
reject(new Error(err.body.message));
} else {
reject(err);
}
});
});
}
// export function deleteSubscriber(id) {
// return new Promise((resolve, reject)=>{
// Vue.http.delete('/api/subscribers/', null, {
// }).then((res)=>{
// resolve(_.last(_.split(res.headers.get('Location'), '/')));
// }).catch((err)=>{
// if(err.status === 422) {
// reject(new Error(err.body.message));
// } else {
// reject(err);
// }
// });
// });
// }