TT#23175 CallBlocking: As a Customer I want to add a new number

Change-Id: Idf59aff6496dcbf1911ec3eab6931d1c826141db
changes/66/16166/3
Hans-Peter Herzog 8 years ago
parent 3b8f5a4d10
commit 24daa2070b

@ -1,6 +1,7 @@
import Vue from 'vue';
import { enableBlockIn, disableBlockIn, getPreferences } from './subscriber';
import { enableBlockIn, disableBlockIn,
getPreferences, addToBlockInList } from './subscriber';
export function enableIncomingCallBlocking(id) {
return enableBlockIn(id);
@ -14,10 +15,25 @@ export function getIncomingCallBlocking(id) {
return new Promise((resolve, reject)=>{
getPreferences(id).then((result)=>{
resolve({
enabled: result.block_in_mode
enabled: result.block_in_mode,
list: result.block_in_list
});
}).catch((err)=>{
reject(err);
});
});
}
export function addNumberToIncomingList(id, number) {
return new Promise((resolve, reject)=>{
if(_.isEmpty(number)) {
reject(new Error('Number may not be empty'));
} else {
addToBlockInList(id, number).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
});
}
});
}

@ -1,4 +1,5 @@
import _ from 'lodash';
import Vue from 'vue';
export function getPreferences(id) {
@ -13,9 +14,14 @@ export function getPreferences(id) {
export function setPreference(id, field, value) {
return new Promise((resolve, reject)=>{
var pref = {};
pref[field] = value;
Vue.http.put('/api/subscriberpreferences/' + id, pref).then((result)=>{
Promise.resolve().then(()=>{
return getPreferences(id);
}).then((result)=>{
var prefs = _.cloneDeep(result);
delete prefs._links;
prefs[field] = value;
return Vue.http.put('/api/subscriberpreferences/' + id, prefs);
}).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
@ -23,6 +29,42 @@ export function setPreference(id, field, value) {
});
}
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 setBlockInMode(id, value) {
return setPreference(id, 'block_in_mode', value);
}
@ -34,3 +76,7 @@ export function enableBlockIn(id) {
export function disableBlockIn(id) {
return setBlockInMode(id, false);
}
export function addToBlockInList(id, number) {
return prependItemToArrayPreference(id, 'block_in_list', number);
}

@ -231,15 +231,13 @@
}
.q-card {
margin: 0;
margin:15px;
margin-left: 0px;
}
.q-card.page {
padding: 15px;
}
.q-card.pbx-group {
margin-bottom: 15px;
margin: 0;
}
.page-action-button {

@ -1,18 +1,43 @@
<template>
<page title="Incoming Calls">
<q-toggle :label="((!callBlockingEnabled)?'Enable':'Disable') + ' Call Blocking'"
@input="toggleIncoming()" v-model="callBlockingEnabled"/>
<q-field id="toggle-incoming">
<q-toggle :label="((!callBlockingEnabled)?'Enable':'Disable') + ' Call Blocking'"
@input="toggleIncoming()" v-model="callBlockingEnabled"/>
</q-field>
<div id="add-number-form">
<q-field v-if="!addFormEnabled">
<q-btn color="primary" icon="fa-plus" @click="enableAddForm()">Add number</q-btn>
</q-field>
<div v-if="addFormEnabled">
<q-field :error="addFormError" error-label="Input a valid number or subscriber name">
<q-input type="text" float-label="Number" v-model="newNumber"
clearable @keyup.enter="saveNewNumber()" />
</q-field>
<q-btn @click="disableAddForm()">Cancel</q-btn>
<q-btn color="primary" icon-right="fa-save" @click="saveNewNumber()">Save</q-btn>
</div>
</div>
<q-card v-for="number in numbers">
<q-card-main>
{{ number }}
</q-card-main>
</q-card>
</page>
</template>
<script>
import { startLoading, stopLoading, showGlobalError } from '../../../helpers/ui'
import Page from '../../Page'
import { QField, QToggle, Toast } from 'quasar-framework'
import { QInput, QCard, QBtn, QField,
QToggle, Toast, QList, QItem, QItemMain, QCardMain } from 'quasar-framework'
export default {
data () {
return {
callBlockingEnabled: false
callBlockingEnabled: false,
addFormEnabled: false,
addFormError: false,
newNumber: '',
listLoading: false,
}
},
mounted() {
@ -26,9 +51,47 @@
Page,
QToggle,
Toast,
QField
QField,
QBtn,
QCard,
QInput,
QList,
QItem,
QItemMain,
QCardMain
},
computed: {
numbers: {
get(){
return this.$store.state.callBlocking.incomingList;
}
}
},
methods: {
enableAddForm() {
this.addFormEnabled = true;
this.newNumber = '';
this.addFormError = false;
},
disableAddForm() {
this.addFormEnabled = false;
},
saveNewNumber() {
this.listLoading = true;
this.$store.dispatch('callBlocking/addNumber', this.newNumber).then(()=>{
this.disableAddForm();
Toast.create({
html: 'Added new number to list',
color: 'white',
bgColor: '#68A44E'
});
this.listLoading = false;
}).catch((err)=>{
this.listLoading = false;
this.addFormError = true;
});
},
toggleIncoming () {
this.$store.dispatch('callBlocking/toggleIncoming', this.callBlockingEnabled).then(()=>{
Toast.create({
@ -45,4 +108,10 @@
</script>
<style>
#toggle-incoming {
margin-bottom:60px;
}
#add-number-form {
margin-bottom:15px;
}
</style>

@ -3,7 +3,8 @@
import _ from 'lodash';
import { enableIncomingCallBlocking,
disableIncomingCallBlocking,
getIncomingCallBlocking
getIncomingCallBlocking,
addNumberToIncomingList
} from '../api/call-blocking';
@ -23,6 +24,7 @@ export default {
},
loadIncoming(state, options) {
state.incomingEnabled = options.enabled;
state.incomingList = options.list;
}
},
actions: {
@ -54,6 +56,17 @@ export default {
reject(err);
});
});
},
addNumber(context, number) {
return new Promise((resolve, reject)=>{
addNumberToIncomingList(localStorage.getItem('subscriberId'), number).then(()=>{
return context.dispatch('loadIncoming');
}).then(()=>{
resolve();
}).catch((err)=>{
reject(err);
});
});
}
}
};

@ -0,0 +1,32 @@
'use strict';
import CallBlockingModule from '../../src/store/call-blocking';
import { assert } from 'chai';
describe('CallBlockingModule', ()=>{
it('should enable/disable incoming call blocking', ()=>{
var state = {};
CallBlockingModule.mutations.enableIncoming(state);
assert.equal(state.incomingEnabled, true);
CallBlockingModule.mutations.disableIncoming(state);
assert.equal(state.incomingEnabled, false);
});
it('should load incoming call blocking data', ()=>{
var state = {};
var list = [
'+4312345678',
'+4387654321'
];
CallBlockingModule.mutations.loadIncoming(state, {
enabled: true,
list: [
'+4312345678',
'+4387654321'
]
});
assert.equal(state.incomingEnabled, true);
assert.deepEqual(state.incomingList, list);
});
});
Loading…
Cancel
Save