mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-19 22:18:19 +00:00
Merge pull request #466 in FS/freeswitch from ~JONATASOLIVEIRA/freeswitch:bugfix/FS-7994-de-duplicate-call-history to master
* commit 'faed47bb49a8945fa4760281238a42bffdcc0b4e': FS-7994 - Verto Communicator - Using factory for group calls in history
This commit is contained in:
commit
5f1bc8be2b
@ -8,6 +8,22 @@ body {
|
|||||||
padding-top: 60px;
|
padding-top: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.inline-block {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-tiny {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-icon {
|
||||||
|
cursor: pointer;
|
||||||
|
margin-top: -2px;
|
||||||
|
float: left;
|
||||||
|
margin-left: -2px;
|
||||||
|
margin-right: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
.container-fluid {
|
.container-fluid {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
@ -237,6 +253,12 @@ body .modal-body .btn-group .btn.active {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#dialpad .list-icon {
|
||||||
|
margin-top: 8px;
|
||||||
|
float: right;
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
#dialpad .dialpad-display .btn-fab {
|
#dialpad .dialpad-display .btn-fab {
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -319,6 +341,11 @@ body .modal-body .btn-group .btn.active {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.call_direction {
|
||||||
|
position: absolute;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#dialpad #call_history.active {
|
#dialpad #call_history.active {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
@ -363,6 +390,8 @@ body .modal-body .btn-group .btn.active {
|
|||||||
text-overflow: clip;
|
text-overflow: clip;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
|
margin-left: 26px !important;
|
||||||
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
#dialpad .dialpad-number {
|
#dialpad .dialpad-number {
|
||||||
@ -370,6 +399,13 @@ body .modal-body .btn-group .btn.active {
|
|||||||
color: rgb(38, 204, 218);
|
color: rgb(38, 204, 218);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#dialpad .date {
|
||||||
|
margin-top: 15px;
|
||||||
|
display: block;
|
||||||
|
font-size: 11px;
|
||||||
|
color: #CCC;
|
||||||
|
}
|
||||||
|
|
||||||
#dialpad .dialpad-alpha {
|
#dialpad .dialpad-alpha {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #CCC;
|
color: #CCC;
|
||||||
|
@ -120,6 +120,7 @@
|
|||||||
|
|
||||||
<script type="text/javascript" src="src/storageService/storageService.module.js"></script>
|
<script type="text/javascript" src="src/storageService/storageService.module.js"></script>
|
||||||
<script type="text/javascript" src="src/storageService/services/storage.js"></script>
|
<script type="text/javascript" src="src/storageService/services/storage.js"></script>
|
||||||
|
<script type="text/javascript" src="src/storageService/services/call_history.js"></script>
|
||||||
|
|
||||||
<!-- endbuild -->
|
<!-- endbuild -->
|
||||||
|
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
<div id="call_history" class="shadow-z-2 panel">
|
<div id="call_history" class="shadow-z-2 panel">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<div class="panel-title">
|
<div class="panel-title">
|
||||||
Call History
|
<i class="mdi-navigation-arrow-back back-icon" ng-click="viewCallsList()" ng-if="call_list"></i>
|
||||||
|
<span ng-if="!call_list">Call History</span>
|
||||||
|
<span ng-if="call_list">{{ call_list[0].number }}</span>
|
||||||
|
|
||||||
<span class="pull-right pull-right-margin dropdown">
|
<span class="pull-right pull-right-margin dropdown">
|
||||||
<a href="" class="dropdown-toggle" data-target="#" data-toggle="dropdown" aria-expanded="true">
|
<a href="" class="dropdown-toggle" data-target="#" data-toggle="dropdown" aria-expanded="true">
|
||||||
@ -16,18 +18,32 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="call-history">
|
<ul class="call-history">
|
||||||
<div ng-show="!storage.data.call_history.length">
|
<div ng-if="!has_history">
|
||||||
<p class="text-center text-muted">No history calls.</p>
|
<p class="text-center text-muted">No history calls.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<li ng-repeat="call in storage.data.call_history">
|
<li ng-repeat="number in history_control track by number" ng-if="!call_list">
|
||||||
<a ng-show="call.number" href="" ng-dblclick="$parent.call(call.number)" ng-click="$parent.fillDialpadNumber(call.number)">
|
<a ng-init="call = call_history[number][0]" class="inline-block" ng-show="call.number" href="" ng-dblclick="$parent.call(call.number)" ng-click="$parent.fillDialpadNumber(call.number)">
|
||||||
<i ng-show="call.direction == 'inbound'" ng-class="{'mdi-communication-call-missed': !call.status,'mdi-communication-call-received': call.status}"></i>
|
<div class="call-history-info">
|
||||||
<i ng-show="call.direction == 'outbound'" class="mdi-communication-call-made"></i>
|
<i ng-if="call.direction == 'inbound'" ng-class="{'mdi-communication-call-missed': !call.status,'mdi-communication-call-received': call.status}"></i>
|
||||||
<h2 class="dialpad-number dialpad-number-limited">{{ call.number }}</h2>
|
<i ng-if="call.direction == 'outbound'" class="mdi-communication-call-made call_direction"></i>
|
||||||
|
<h2 class="dialpad-number dialpad-number-limited">{{ call.number }} ({{ call_history[number].length }})</h2>
|
||||||
<br/>
|
<br/>
|
||||||
|
<span class="date">{{ call.call_start }}</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<a href="" ng-click="$parent.viewCallsList(call_history[number])" class="list-icon">
|
||||||
|
<i class="mdi-action-view-list"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li ng-repeat="call in call_list">
|
||||||
|
<a ng-show="call.number" href="" ng-dblclick="$parent.call(call.number)" ng-click="$parent.fillDialpadNumber(call.number)">
|
||||||
|
<i ng-if="call.direction == 'inbound'" class="icon-tiny" ng-class="{'mdi-communication-call-missed': !call.status,'mdi-communication-call-received': call.status}"></i>
|
||||||
|
<i ng-if="call.direction == 'outbound'" class="icon-tiny mdi-communication-call-made"></i>
|
||||||
<span class="dialpad-alpha">{{ call.call_start }}</span>
|
<span class="dialpad-alpha">{{ call.call_start }}</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular
|
||||||
|
.module('storageService')
|
||||||
|
.factory('CallHistory', function(storage) {
|
||||||
|
|
||||||
|
var history = storage.data.call_history;
|
||||||
|
var history_control = storage.data.history_control;
|
||||||
|
|
||||||
|
var addCallToHistory = function(number, direction, status) {
|
||||||
|
if(history[number] == undefined) {
|
||||||
|
history[number] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
history[number].unshift({
|
||||||
|
'number': number,
|
||||||
|
'direction': direction,
|
||||||
|
'status': status,
|
||||||
|
'call_start': Date()
|
||||||
|
});
|
||||||
|
|
||||||
|
var index = history_control.indexOf(number);
|
||||||
|
console.log(index);
|
||||||
|
if(index > -1) {
|
||||||
|
history_control.splice(index, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
history_control.unshift(number);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
var getCallsFromHistory = function(number) {
|
||||||
|
return history[number];
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
all: function() {
|
||||||
|
return history;
|
||||||
|
},
|
||||||
|
all_control: function() {
|
||||||
|
return history_control;
|
||||||
|
},
|
||||||
|
get: function(number) {
|
||||||
|
return getCallsFromHistory(number);
|
||||||
|
},
|
||||||
|
add: function(number, direction, status) {
|
||||||
|
return addCallToHistory(number, direction, status);
|
||||||
|
},
|
||||||
|
clear: function() {
|
||||||
|
storage.data.call_history = {};
|
||||||
|
storage.data.history_control = [];
|
||||||
|
history = storage.data.call_history;
|
||||||
|
history_control = storage.data.history_control;
|
||||||
|
return history_control;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
@ -12,7 +12,8 @@
|
|||||||
cur_call: 0,
|
cur_call: 0,
|
||||||
called_number: '',
|
called_number: '',
|
||||||
useVideo: true,
|
useVideo: true,
|
||||||
call_history: [],
|
call_history: {},
|
||||||
|
history_control: [],
|
||||||
call_start: false,
|
call_start: false,
|
||||||
name: '',
|
name: '',
|
||||||
email: '',
|
email: '',
|
||||||
|
@ -4,15 +4,29 @@
|
|||||||
angular
|
angular
|
||||||
.module('vertoControllers')
|
.module('vertoControllers')
|
||||||
.controller('DialPadController', ['$rootScope', '$scope',
|
.controller('DialPadController', ['$rootScope', '$scope',
|
||||||
'$http', '$location', 'toastr', 'verto', 'storage',
|
'$http', '$location', 'toastr', 'verto', 'storage', 'CallHistory',
|
||||||
function($rootScope, $scope, $http, $location, toastr, verto, storage) {
|
function($rootScope, $scope, $http, $location, toastr, verto, storage, CallHistory) {
|
||||||
console.debug('Executing DialPadController.');
|
console.debug('Executing DialPadController.');
|
||||||
|
|
||||||
$scope.checkBrowser();
|
$scope.checkBrowser();
|
||||||
|
$scope.call_history = CallHistory.all();
|
||||||
|
$scope.history_control = CallHistory.all_control();
|
||||||
|
$scope.has_history = Object.keys($scope.call_history).length;
|
||||||
storage.data.videoCall = false;
|
storage.data.videoCall = false;
|
||||||
storage.data.userStatus = 'connecting';
|
storage.data.userStatus = 'connecting';
|
||||||
storage.data.calling = false;
|
storage.data.calling = false;
|
||||||
|
|
||||||
|
$scope.clearCallHistory = function() {
|
||||||
|
CallHistory.clear();
|
||||||
|
$scope.call_history = CallHistory.all();
|
||||||
|
$scope.history_control = CallHistory.all_control();
|
||||||
|
$scope.has_history = Object.keys($scope.call_history).length;
|
||||||
|
return $scope.history_control;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.viewCallsList = function(calls) {
|
||||||
|
return $scope.call_list = calls;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fill dialpad via querystring [?autocall=\d+]
|
* fill dialpad via querystring [?autocall=\d+]
|
||||||
*/
|
*/
|
||||||
@ -62,11 +76,7 @@
|
|||||||
verto.call($rootScope.dialpadNumber);
|
verto.call($rootScope.dialpadNumber);
|
||||||
|
|
||||||
storage.data.called_number = $rootScope.dialpadNumber;
|
storage.data.called_number = $rootScope.dialpadNumber;
|
||||||
storage.data.call_history.unshift({
|
CallHistory.add($rootScope.dialpadNumber, 'outbound');
|
||||||
'number': $rootScope.dialpadNumber,
|
|
||||||
'direction': 'outbound',
|
|
||||||
'call_start': Date()
|
|
||||||
});
|
|
||||||
$location.path('/incall');
|
$location.path('/incall');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
angular
|
angular
|
||||||
.module('vertoControllers')
|
.module('vertoControllers')
|
||||||
.controller('MainController',
|
.controller('MainController',
|
||||||
function($scope, $rootScope, $location, $modal, $timeout, verto, storage, toastr, Fullscreen, prompt) {
|
function($scope, $rootScope, $location, $modal, $timeout, verto, storage, CallHistory, toastr, Fullscreen, prompt) {
|
||||||
|
|
||||||
console.debug('Executing MainController.');
|
console.debug('Executing MainController.');
|
||||||
|
|
||||||
@ -140,7 +140,7 @@
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.openModal = function(templateUrl, controller) {
|
$rootScope.openModal = function(templateUrl, controller) {
|
||||||
var modalInstance = $modal.open({
|
var modalInstance = $modal.open({
|
||||||
animation: $scope.animationsEnabled,
|
animation: $scope.animationsEnabled,
|
||||||
templateUrl: templateUrl,
|
templateUrl: templateUrl,
|
||||||
@ -201,10 +201,6 @@
|
|||||||
$scope.call_history = angular.element("#call_history").hasClass('active');
|
$scope.call_history = angular.element("#call_history").hasClass('active');
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.clearCallHistory = function() {
|
|
||||||
storage.data.call_history = [];
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.toggleChat = function() {
|
$scope.toggleChat = function() {
|
||||||
if ($scope.chatStatus && $rootScope.activePane === 'chat') {
|
if ($scope.chatStatus && $rootScope.activePane === 'chat') {
|
||||||
$rootScope.chat_counter = 0;
|
$rootScope.chat_counter = 0;
|
||||||
@ -328,22 +324,11 @@
|
|||||||
|
|
||||||
$scope.answerCall();
|
$scope.answerCall();
|
||||||
storage.data.called_number = data;
|
storage.data.called_number = data;
|
||||||
|
CallHistory.add(number, 'inbound', true);
|
||||||
storage.data.call_history.unshift({
|
|
||||||
'number': data,
|
|
||||||
'direction': 'inbound',
|
|
||||||
'status': true,
|
|
||||||
'call_start': Date()
|
|
||||||
});
|
|
||||||
$location.path('/incall');
|
$location.path('/incall');
|
||||||
}, function() {
|
}, function() {
|
||||||
$scope.declineCall();
|
$scope.declineCall();
|
||||||
storage.data.call_history.unshift({
|
CallHistory.add(number, 'inbound', false);
|
||||||
'number': data,
|
|
||||||
'direction': 'inbound',
|
|
||||||
'status': false,
|
|
||||||
'call_start': Date()
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user