Browse Source

UI-2329: updated call logs with new interaction api details

4.3
Jean-Roch Maitre 10 years ago
parent
commit
1b65116ced
6 changed files with 128 additions and 46 deletions
  1. +9
    -4
      i18n/en-US.json
  2. +27
    -16
      submodules/callLogs/callLogs.css
  3. +40
    -7
      submodules/callLogs/callLogs.js
  4. +7
    -9
      views/callLogs-cdrsList.html
  5. +42
    -0
      views/callLogs-interactionLegs.html
  6. +3
    -10
      views/callLogs-layout.html

+ 9
- 4
i18n/en-US.json View File

@ -918,9 +918,7 @@
"hangup1": "Hangup", "hangup1": "Hangup",
"hangup2": "Cause", "hangup2": "Cause",
"details1": "Call", "details1": "Call",
"details2": "Details",
"report1": "Submit",
"report2": "Report"
"actions": "Actions"
}, },
"reportCall": "Report Call", "reportCall": "Report Call",
"loaderMessage": "Scroll down or click here to load additional Call Logs.", "loaderMessage": "Scroll down or click here to load additional Call Logs.",
@ -937,7 +935,14 @@
"thisDay": "Today", "thisDay": "Today",
"custom": "Custom", "custom": "Custom",
"callsFrom": "Showing calls from", "callsFrom": "Showing calls from",
"callsTo": "to"
"callsTo": "to",
"__comment": "UI-",
"__version": "v4.0",
"loading": "Loading additional information...",
"actions": {
"report": "Report Call",
"details": "Technical Details"
}
}, },
"myOffice": { "myOffice": {


+ 27
- 16
submodules/callLogs/callLogs.css View File

@ -82,11 +82,11 @@
#call_logs_container .grid-row-group .grid-row:not(:first-of-type) { #call_logs_container .grid-row-group .grid-row:not(:first-of-type) {
border-top: solid 1px #e3e3e3; border-top: solid 1px #e3e3e3;
} }
#call_logs_container .grid-row-group:last-of-type:not(.open) .a-leg {
#call_logs_container .grid-row-group:last-of-type:not(.open) .main-leg {
border-bottom-left-radius: 4px; border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px; border-bottom-right-radius: 4px;
} }
#call_logs_container .grid-row-group.open:last-of-type .b-leg:last-of-type {
#call_logs_container .grid-row-group.open:last-of-type .extra-leg:last-of-type {
border-bottom-left-radius: 4px; border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px; border-bottom-right-radius: 4px;
} }
@ -110,21 +110,37 @@
#call_logs_container .grid-row.no-match { #call_logs_container .grid-row.no-match {
display: none; display: none;
} }
#call_logs_container .grid-row-group:not(.open) .grid-row.a-leg.has-b-legs > .grid-cell:first-child {
#call_logs_container .grid-row-group:not(.open) .grid-row.main-leg > .grid-cell:first-child {
border-left: solid 2px #22a5ff; border-left: solid 2px #22a5ff;
} }
#call_logs_container .grid-row-group.open .grid-row > .grid-cell:first-child { #call_logs_container .grid-row-group.open .grid-row > .grid-cell:first-child {
border-left: solid 2px #44cc44; border-left: solid 2px #44cc44;
} }
#call_logs_container .grid-row.a-leg.has-b-legs:hover {
#call_logs_container .grid-row.main-leg:hover {
background-color: #eee; background-color: #eee;
cursor: pointer; cursor: pointer;
} }
#call_logs_container .grid-row.b-leg {
background-color: #fcfcfc;
#call_logs_container .grid-row-group .extra-legs {
display: none; display: none;
} }
#call_logs_container .grid-row-group .extra-legs .loading-container {
background: #fff;
border-left: 1px solid #ddd;
border-top: 1px solid #ddd;
padding: 15px;
text-align: center;
}
#call_logs_container .grid-row-group .extra-legs .loading-container i {
margin-left: 10px;
}
#call_logs_container .grid-row.extra-leg {
background-color: #fcfcfc;
border-top: solid 1px #e3e3e3;
}
#call_logs_container .grid-cell { #call_logs_container .grid-cell {
display: inline-block; display: inline-block;
padding: 10px 5px; padding: 10px 5px;
@ -144,10 +160,10 @@
width: 12%; width: 12%;
} }
#call_logs_container .grid-cell.from { #call_logs_container .grid-cell.from {
width: 20%;
width: 25%;
} }
#call_logs_container .grid-cell.to { #call_logs_container .grid-cell.to {
width: 20%;
width: 25%;
} }
#call_logs_container .grid-cell.duration { #call_logs_container .grid-cell.duration {
width: 9%; width: 9%;
@ -155,9 +171,6 @@
#call_logs_container .grid-cell.hangup { #call_logs_container .grid-cell.hangup {
width: 15%; width: 15%;
} }
#call_logs_container .call-logs-grid.no-report-link .grid-cell.hangup {
width: 25%;
}
#call_logs_container .grid-cell.full-width { #call_logs_container .grid-cell.full-width {
width: 100%; width: 100%;
} }
@ -166,16 +179,14 @@
font-size: 12px; font-size: 12px;
font-style: italic; font-style: italic;
} }
#call_logs_container .grid-cell.details {
#call_logs_container .grid-cell.actions {
width: 10%; width: 10%;
} }
#call_logs_container .grid-cell.details i:hover {
#call_logs_container .grid-cell.actions i:hover {
color: #22a5ff; color: #22a5ff;
cursor: pointer; cursor: pointer;
} }
#call_logs_container .grid-cell.report {
width: 10%;
}
#call_logs_container .sub-cell { #call_logs_container .sub-cell {
height: 20px; height: 20px;
overflow: hidden; overflow: hidden;


+ 40
- 7
submodules/callLogs/callLogs.js View File

@ -146,7 +146,7 @@ define(function(require){
+ cdr.fromNumber + "|" + cdr.toName + "|" + cdr.fromNumber + "|" + cdr.toName + "|"
+ cdr.toNumber + "|" + cdr.hangupCause + "|" + cdr.toNumber + "|" + cdr.hangupCause + "|"
+ callIds).toLowerCase(), + callIds).toLowerCase(),
rowGroup = template.find('.grid-row.a-leg[data-id="'+cdr.id+'"]').parents('.grid-row-group');
rowGroup = template.find('.grid-row.main-leg[data-id="'+cdr.id+'"]').parents('.grid-row-group');
if(searchString.indexOf(searchValue) >= 0) { if(searchString.indexOf(searchValue) >= 0) {
matchedResults = true; matchedResults = true;
rowGroup.show(); rowGroup.show();
@ -175,20 +175,38 @@ define(function(require){
} }
}); });
template.on('click', '.a-leg.has-b-legs', function(e) {
var rowGroup = $(this).parents('.grid-row-group');
template.on('click', '.grid-row.main-leg', function(e) {
var $this = $(this),
rowGroup = $this.parents('.grid-row-group'),
callId = $this.data('id'),
extraLegs = rowGroup.find('.extra-legs');
if(rowGroup.hasClass('open')) { if(rowGroup.hasClass('open')) {
rowGroup.removeClass('open'); rowGroup.removeClass('open');
rowGroup.find('.b-leg').slideUp();
extraLegs.slideUp();
} else { } else {
// Reset all slidedDown legs
template.find('.grid-row-group').removeClass('open'); template.find('.grid-row-group').removeClass('open');
template.find('.b-leg').slideUp();
template.find('.extra-legs').slideUp();
// Slide down current leg
rowGroup.addClass('open'); rowGroup.addClass('open');
rowGroup.find('.b-leg').slideDown();
extraLegs.slideDown();
if(!extraLegs.hasClass('data-loaded')) {
self.callLogsGetLegs(callId, function(cdrs) {
var formattedCdrs = self.callLogsFormatCdrs(cdrs);
rowGroup.find('.extra-legs')
.empty()
.addClass('data-loaded')
.append(monster.template(self, 'callLogs-interactionLegs', { cdrs: formattedCdrs }));
});
}
} }
}); });
template.on('click', '.grid-cell.details i', function(e) {
template.on('click', '.grid-cell.actions .details-cdr', function(e) {
e.stopPropagation(); e.stopPropagation();
var cdrId = $(this).parents('.grid-row').data('id'); var cdrId = $(this).parents('.grid-row').data('id');
self.callLogsShowDetailsPopup(cdrId); self.callLogsShowDetailsPopup(cdrId);
@ -297,6 +315,21 @@ define(function(require){
}); });
}, },
callLogsGetLegs: function(callId, callback) {
var self = this;
self.callApi({
resource: 'cdrs.listLegs',
data: {
accountId: self.accountId,
callId: callId
},
success: function(data) {
callback && callback(data.data);
}
});
},
callLogsFormatCdrs: function(cdrs) { callLogsFormatCdrs: function(cdrs) {
var self = this, var self = this,
result = [], result = [],


+ 7
- 9
views/callLogs-cdrsList.html View File

@ -1,6 +1,6 @@
{{#each cdrs}} {{#each cdrs}}
<div class="grid-row-group"> <div class="grid-row-group">
<div class="grid-row" data-id="{{this.id}}">
<div class="grid-row main-leg" data-id="{{this.id}}">
<div class="grid-cell direction"> <div class="grid-cell direction">
<div class="sub-cell single-cell"> <div class="sub-cell single-cell">
{{#if this.isOutboundCall}} {{#if this.isOutboundCall}}
@ -40,18 +40,16 @@
<span class="cause-title">{{this.hangupCause}}</span> <span class="cause-title">{{this.hangupCause}}</span>
</div> </div>
</div> </div>
<div class="grid-cell details">
<div class="grid-cell actions">
<div class="sub-cell single-cell"> <div class="sub-cell single-cell">
<i class="fa fa-cog fa-lg"></i>
{{#if ../showReport}}<a class="monster-link" href="{{this.mailtoLink}}"><i data-placement="top" data-toggle="tooltip" data-placement="top" data-original-title="{{ @root.i18n.callLogs.actions.report }}" class="fa fa-lg fa-fire-extinguisher"></i></a>{{/if}}
</div> </div>
</div> </div>
{{#if ../showReport}}
<div class="grid-cell report">
<div class="sub-cell single-cell">
<a class="monster-link" href="{{this.mailtoLink}}">{{@root.i18n.callLogs.reportCall}}</a>
</div>
</div>
<div class="extra-legs">
<div class="loading-container">
{{@root.i18n.callLogs.loading}} <i class="fa fa-spinner fa-spin monster-blue fa-lg"></i>
</div> </div>
{{/if}}
</div> </div>
</div> </div>
{{/each}} {{/each}}

+ 42
- 0
views/callLogs-interactionLegs.html View File

@ -0,0 +1,42 @@
{{#each cdrs}}
<div class="grid-row extra-leg" data-id={{this.id}}>
<div class="grid-cell direction">
<div class="sub-cell single-cell"></div>
</div>
<div class="grid-cell datetime">
<div class="sub-cell cell-top">{{this.date}}</div>
<div class="sub-cell cell-bottom">{{this.time}}</div>
</div>
<div class="grid-cell from">
{{#if this.fromName}}
<div class="sub-cell cell-top">{{formatPhoneNumber this.fromNumber}}</div>
<div class="sub-cell cell-bottom">{{this.fromName}}</div>
{{else}}
<div class="sub-cell single-cell">{{formatPhoneNumber this.fromNumber}}</div>
{{/if}}
</div>
<div class="grid-cell to">
{{#if this.toName}}
<div class="sub-cell cell-top">{{formatPhoneNumber this.toNumber}}</div>
<div class="sub-cell cell-bottom">{{this.toName}}</div>
{{else}}
<div class="sub-cell single-cell">{{formatPhoneNumber this.toNumber}}</div>
{{/if}}
</div>
<div class="grid-cell duration">
<div class="sub-cell single-cell">
{{this.duration}}
</div>
</div>
<div class="grid-cell hangup">
<div class="sub-cell single-cell cause-title" title="{{this.hangupCause}}">
{{this.hangupCause}}
</div>
</div>
<div class="grid-cell actions">
<div class="sub-cell single-cell">
<i class="fa fa-cog fa-lg details-cdr" data-toggle="tooltip" data-placement="top" data-original-title="{{ @root.i18n.callLogs.actions.details }}"></i>
</div>
</div>
</div>
{{/each}}

+ 3
- 10
views/callLogs-layout.html View File

@ -42,7 +42,7 @@
</div> </div>
<div class="call-logs-content"> <div class="call-logs-content">
<div class="call-logs-grid{{#unless showReport}} no-report-link{{/unless}}">
<div class="call-logs-grid">
<div class="grid-row-group"> <div class="grid-row-group">
<div class="grid-row header-row"> <div class="grid-row header-row">
<div class="grid-cell direction"> <div class="grid-cell direction">
@ -71,16 +71,9 @@
<div class="sub-cell cell-top">{{i18n.callLogs.gridHeaders.hangup1}}</div> <div class="sub-cell cell-top">{{i18n.callLogs.gridHeaders.hangup1}}</div>
<div class="sub-cell cell-bottom">{{i18n.callLogs.gridHeaders.hangup2}}</div> <div class="sub-cell cell-bottom">{{i18n.callLogs.gridHeaders.hangup2}}</div>
</div> </div>
<div class="grid-cell details">
<div class="sub-cell cell-top">{{i18n.callLogs.gridHeaders.details1}}</div>
<div class="sub-cell cell-bottom">{{i18n.callLogs.gridHeaders.details2}}</div>
<div class="grid-cell actions">
<div class="sub-cell single-cell">{{i18n.callLogs.gridHeaders.actions}}</div>
</div> </div>
{{#if showReport}}
<div class="grid-cell report">
<div class="sub-cell cell-top">{{i18n.callLogs.gridHeaders.report1}}</div>
<div class="sub-cell cell-bottom">{{i18n.callLogs.gridHeaders.report2}}</div>
</div>
{{/if}}
</div> </div>
</div> </div>
<div class="grid-row no-match"> <div class="grid-row no-match">


Loading…
Cancel
Save