import * as chrono from 'chrono-node' import { TapiContact } from './tapi-contact' import { axios, extractNumber } from './utils' export class CallHistory { private callerIds: { [number: string]: TapiContact } = {} private updateCallHistoryEntry (call: HTMLElement, callerId: TapiContact) { if (callerId.tD_NAME !== '') { var span = call.querySelector('span') this.showTimeManager(call, span.nextSibling.textContent, callerId) var text = span.textContent span.textContent = callerId.tD_NAME var br = document.createElement('br') var span2 = document.createElement('span') span2.style.fontSize = 'small' span2.textContent = text span.parentNode.insertBefore(br, span.nextSibling) span.parentNode.insertBefore(span2, span.nextSibling) } } private showTimeManager (call: HTMLElement, time: string, callerId: TapiContact) { if (!callerId.tD_ID) { return } var timeParts = time.split(/, /) var duration = '00:00:00' if (timeParts.length >= 1) { time = timeParts[0] } if (timeParts.length >= 2) { duration = timeParts[1] } var parsedDate = chrono.de.parseDate(time) if (!parsedDate) { parsedDate = chrono.parseDate(time) } if (!parsedDate) { return } var parsedDuration = chrono.parseDate(duration) console.log('TAPI call history time:', time, 'parsedDate:', parsedDate, 'duration:', duration, 'parsedDuration:', parsedDuration) var connect = parsedDate.getFullYear().toString() + (parsedDate.getMonth() + 1).toString().padStart(2, '0') + // (January gives 0) parsedDate.getDate().toString().padStart(2, '0') + parsedDate.getHours().toString().padStart(2, '0') + parsedDate.getMinutes().toString().padStart(2, '0') var length = (parsedDuration.getHours() * 60 + parsedDuration.getMinutes()).toString() var toolbar = call.querySelector('.wcToolbarTiles') var a = document.createElement('a') var href = 'domizil://PM/Zeitbuchung?KontaktId=' + callerId.tD_ID + '&connect=' + connect + '&length=' + length a.dataset.domizilLink = href a.onclick = () => { window.open(href) } a.innerHTML = '' + '' + ' ' + ' ' + ' ' + ' ' + '' + '' toolbar.insertBefore(a, toolbar.firstChild) } public async showCallHistory (element: HTMLElement) { var span = element.querySelector('span') var number = extractNumber(span.textContent) if (!number) { return } if (this.callerIds[number] !== undefined) { this.updateCallHistoryEntry(element, this.callerIds[number]) } else { var response = await axios.get('http://cpatapi.cpsrvweb2016.cp-austria.at/callerid/' + encodeURIComponent(number)) var callerId: TapiContact = { tD_NAME: '' } if (response.status === 200) { callerId = response.data } console.log('TAPI call histroy callerid response', number, response, callerId) this.callerIds[number] = callerId this.updateCallHistoryEntry(element, callerId) } } }