diff --git a/src/api/call-blocking.js b/src/api/call-blocking.js index 7c5a292a..72972d75 100644 --- a/src/api/call-blocking.js +++ b/src/api/call-blocking.js @@ -30,7 +30,8 @@ export function getIncomingCallBlocking(id) { getPreferences(id).then((result)=>{ resolve({ enabled: result.block_in_mode, - list: result.block_in_list + list: result.block_in_list, + blockAnonymous: result.block_in_clir }); }).catch((err)=>{ reject(err); diff --git a/src/api/subscriber.js b/src/api/subscriber.js index 99a1f19a..71ae1888 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -291,3 +291,15 @@ export function getSubscriber(id) { }); }); } + +export function setBlockAnonymous(id, value) { + return setPreference(id, 'block_in_clir', value); +} + +export function blockAnonymous(id) { + return setBlockAnonymous(id, true); +} + +export function allowAnonymous(id) { + return setBlockAnonymous(id, false); +} diff --git a/src/components/Login.vue b/src/components/Login.vue index 17960f98..f4055199 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -178,4 +178,7 @@ padding-right $flex-gutter-md .q-card-actions padding $flex-gutter-xs + #csc-login.mobile + .q-card + background-color transparent diff --git a/src/components/pages/CallBlocking/CscCallBlocking.vue b/src/components/pages/CallBlocking/CscCallBlocking.vue index b8ac6276..faef9c70 100644 --- a/src/components/pages/CallBlocking/CscCallBlocking.vue +++ b/src/components/pages/CallBlocking/CscCallBlocking.vue @@ -2,6 +2,21 @@ + + + +
@@ -199,7 +214,9 @@ 'isNumberListLoading', 'numbers', 'currentNumberIndex', - 'listMode' + 'listMode', + 'isAnonymousBlocked', + 'isAnonymousBlockRequesting' ]), toggleButtonLabel() { if(!this.enabled) { @@ -226,6 +243,13 @@ number: this.numbers[this.currentRemovingIndex] }); } + }, + blockAnonymousClasses() { + let classes = ['csc-block-anonymous']; + if(!this.isAnonymousBlocked) { + classes.push('csc-toggle-disabled'); + } + return classes; } }, watch: { @@ -258,6 +282,9 @@ }, updateListMode(listMode) { this.$store.dispatch('callBlocking/toggle' + this.suffix, listMode === 'whitelist'); + }, + toggleBlockAnonymous() { + this.$store.dispatch('callBlocking/toggleBlockAnonymous', !this.isAnonymousBlocked); } } } @@ -283,4 +310,7 @@ .csc-list-item.q-item.csc-blocked-number padding-top $flex-gutter-xs padding-bottom $flex-gutter-xs + .csc-block-anonymous + margin-bottom $flex-gutter-md + diff --git a/src/locales/en.json b/src/locales/en.json index d7d5ef89..13093b33 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -393,7 +393,8 @@ "privacyDisabledToast": "Your number is visible to the callee", "privacyDisabledLabel": "Your number is visible to the callee", "number": "Number", - "listEmptyMessage": "No numbers found" + "listEmptyMessage": "No numbers found", + "anonymousBlocked": "All anonymous incoming calls are blocked" }, "communication": { "sendFax": "Send Fax", diff --git a/src/store/call-blocking.js b/src/store/call-blocking.js index 8c0f3569..287ab29d 100644 --- a/src/store/call-blocking.js +++ b/src/store/call-blocking.js @@ -17,12 +17,15 @@ import { getPrivacyCallBlocking } from '../api/call-blocking'; import { - setPrivacy + setPrivacy, + blockAnonymous, + allowAnonymous } from '../api/subscriber'; export default { namespaced: true, state: { + blockAnonymous: null, enabled: false, list: [], privacy: false, @@ -30,6 +33,7 @@ export default { privacyUpdated: false, privacyError: null, toggleState: RequestState.initiated, + toggleBlockAnonymousState: RequestState.initiated, addNumberState: RequestState.initiated, editNumberState: RequestState.initiated, removeNumberState: RequestState.initiated, @@ -95,6 +99,12 @@ export default { else { return 'blacklist'; } + }, + isAnonymousBlocked(state) { + return state.blockAnonymous === true; + }, + isAnonymousBlockRequesting(state) { + return state.toggleBlockAnonymousState === RequestState.requesting; } }, mutations: { @@ -170,9 +180,20 @@ export default { state.numberListState = RequestState.succeeded; state.enabled = options.enabled; state.list = options.list; + state.blockAnonymous = options.blockAnonymous; }, numberListFailed(state) { state.numberListState = RequestState.failed; + }, + toggleBlockAnonymousRequesting(state) { + state.toggleBlockAnonymousState = RequestState.requesting; + }, + toggleBlockAnonymousSucceeded(state, blockAnonymous) { + state.blockAnonymous = blockAnonymous; + state.toggleBlockAnonymousState = RequestState.succeeded; + }, + toggleBlockAnonymousFailed(state) { + state.toggleBlockAnonymousState = RequestState.failed; } }, actions: { @@ -321,6 +342,21 @@ export default { }).catch((err)=>{ context.commit('privacyLoadingFailed', err.message); }); + }, + toggleBlockAnonymous(context, blocked) { + let action = null; + if(blocked) { + action = blockAnonymous(localStorage.getItem('subscriberId')); + } + else { + action = allowAnonymous(localStorage.getItem('subscriberId')); + } + context.commit('toggleBlockAnonymousRequesting'); + action.then(()=>{ + context.commit('toggleBlockAnonymousSucceeded', blocked); + }).catch((err)=>{ + context.commit('toggleBlockAnonymousFailed', err.message); + }); } } };