From 83c95213a7ba267eb19bc6cd692d4bc915c7ff6e Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Tue, 18 Nov 2025 10:53:26 +0300 Subject: [PATCH 01/23] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D1=8D=D1=88=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D1=83=D1=81=D0=B0=20=D1=81=D0=BE=D1=82=D1=80=D1=83=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/WorkerActiveCalls.php | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 9852486..7f3e547 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -313,6 +313,7 @@ private function printActiveCalls():void if($newPrintHash <> $this->lastPrintHash){ $this->lastPrintHash = $newPrintHash; CacheManager::setCacheData('getActiveChannelsV2Action', ['queues' => $queuesData, 'calls' => $calls], 80000); + CacheManager::setCacheData('getUsersStates', ['states' => $this->states], 80000); } } From 8f33433c174c85bf10f2504dccb065729a810d0a Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Mon, 1 Dec 2025 13:19:31 +0300 Subject: [PATCH 02/23] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2=20=D1=81=20=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B4=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=D1=8E=20=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleMonitorActiveCallsController.php | 39 ++++++++++++++++--- App/Views/index.volt | 20 +++++++++- Lib/AsteriskManager.php | 5 ++- Messages/ru.php | 1 + bin/WorkerActiveCalls.php | 26 +++++++------ .../js/module-monitor-active-calls-index.js | 12 +++++- .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 10 +++++ 8 files changed, 92 insertions(+), 23 deletions(-) diff --git a/App/Controllers/ModuleMonitorActiveCallsController.php b/App/Controllers/ModuleMonitorActiveCallsController.php index c39d7a4..ad8eb13 100644 --- a/App/Controllers/ModuleMonitorActiveCallsController.php +++ b/App/Controllers/ModuleMonitorActiveCallsController.php @@ -76,6 +76,7 @@ public function indexAction(): void $user['username'] = "$user[callerid] <$user[number]>"; } $this->view->usersArray = $users; + $this->view->userRestrictions = implode(',', $userRestrictions); $this->view->userId = $userId; @@ -83,17 +84,26 @@ public function indexAction(): void $this->view->cid = $cid; $this->view->queueId = ''; - $settings = UsersSettings::findFirst([ - 'userId=:userId: AND key=:key:', + $settings = UsersSettings::find([ + 'userId=:userId:', 'bind' => [ 'userId' => $userId, - 'key' => 'queueId' ] ]); - if($settings){ - $this->view->queueId = $settings->value; + $minWaitVisible = 0; + foreach ($settings as $setting){ + if('queueId' === $setting->key ){ + $this->view->queueId = $setting->value; + }elseif ('minWaitVisible' === $setting->key ){ + $minWaitVisible = intval($setting->value); + } } - + $minWaitVisibleVariants = []; + foreach ([0,10,20,30,40,50,60] as $value){ + $minWaitVisibleVariants[] = ['id' => $value, 'active' => $minWaitVisible === $value, 'name' => $value]; + } + $this->view->minWaitVisible = $minWaitVisibleVariants; + $this->view->minWaitVisibleValue = $minWaitVisible; } /** @@ -147,6 +157,23 @@ public function saveUserAction():void } $settings->adminUserId = $data['adminUserId']??''; $this->view->success = $settings->save(); + }elseif (isset($data['minWaitVisible']) ){ + [,,$userId,] = $this->getUserData(); + $key = 'minWaitVisible'; + $settings = UsersSettings::findFirst([ + 'userId=:userId: AND key=:key:', + 'bind' => [ + 'userId' => $userId, + 'key' => $key + ] + ]); + if(!$settings){ + $settings = new UsersSettings(); + $settings->userId = $userId; + $settings->key = $key; + } + $settings->value = $data['minWaitVisible']??''; + $this->view->success = $settings->save(); }elseif (isset($data['queueId']) ){ [,,$userId,] = $this->getUserData(); $key = 'queueId'; diff --git a/App/Views/index.volt b/App/Views/index.volt index 5033eaa..dc27cf3 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -7,6 +7,7 @@ + {% if cid !== "" %}
@@ -47,6 +48,20 @@
+ +
+ {{ t._('module_monitorCalls_minWaitVisible') }}: + +
+

@@ -71,7 +86,7 @@

{{ t._('module_monitorCalls_waitingClients') }}

-
+
<% call.src_num %>
@@ -152,7 +167,8 @@ - $peer['Auths'], + $peers[$peer['ObjectName']] = [ + 'id' => $peer['ObjectName'], 'state' => $state_array[$peer['DeviceState']] ?? $peer['DeviceState'] ]; + unset($endpoints[$index]); } foreach ($endpoints as $peer) { - if($peer['ObjectName'] !== "{$peer['Auths']}-WS"){ - continue; - } - $wsState = $state_array[$peer['DeviceState']]; - if($wsState === self::STATE_IDLE){ - $peers[$peer['Auths']]['state'] = $state_array[$peer['DeviceState']]; + $dataObjectName = explode('-',$peer['ObjectName']); + $id = $dataObjectName[0]??''; + $prefix = $dataObjectName[1]??''; + if( is_numeric($id) && $prefix === 'WS' ){ + $wsState = $state_array[$peer['DeviceState']]; + if($wsState === self::STATE_IDLE){ + $peers[$id]['state'] = $state_array[$peer['DeviceState']]; + } } } return array_values($peers); diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index 979d9e9..9bcd899 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -10,7 +10,7 @@ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Sym function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } /* * Copyright (C) MIKO LLC - All Rights Reserved * Unauthorized copying of this file, via any medium is strictly prohibited @@ -49,6 +49,12 @@ var ModuleMonitorActiveCalls = { window[className].onChangeSetting('adminUserId', value); } }); + $("#minWaitVisible.dropdown.enable").dropdown({ + onChange: function onChange(value, text, $choice) { + $('#minWaitVisibleValue').val(value); + window[className].onChangeSetting('minWaitVisible', value); + } + }); var userNumber = $('#userNumber').val(); window[className].$widgetQueues = new Vue({ el: '#app-queue', @@ -56,6 +62,7 @@ var ModuleMonitorActiveCalls = { methods: { updatedCallsFromResponse: function updatedCallsFromResponse(data) { var queueNameEl = $(window[className].queueNameSelector); + this.minWaitVisible = 1 * $('#minWaitVisibleValue').val(); this.queues = data.queues; var queueId = $('#queueId').val(); if (queueId in data.queues) { @@ -169,6 +176,7 @@ var ModuleMonitorActiveCalls = { } }, data: { + "minWaitVisible": 30, "name": "", "number": "", "queues": [], @@ -180,6 +188,7 @@ var ModuleMonitorActiveCalls = { el: '#calls', delimiters: ["<%", "%>"], data: { + "minWaitVisible": 30, userNumber: userNumber, fullAccess: $('#fullAccess').val() === "1" || userNumber === '', calls: [] @@ -211,6 +220,7 @@ var ModuleMonitorActiveCalls = { return window[className].formatElapsedTime(call.answer); }, updatedCallsFromResponse: function updatedCallsFromResponse(data) { + this.minWaitVisible = 1 * $('#minWaitVisibleValue').val(); // Проходим по всем очередям for (var queueId in data.queues) { var queue = data.queues[queueId]; diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index 70e5767..d081174 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","userNumber","val","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","queueNameEl","queues","queueId","id","name","number","agents","calls","Array","isArray","allCalls","formatElapsedTime","enterTime","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","find","ch","bridgeChannels","err","e","f","i","length","tmpCall","spyer","spy_num","exten","$callsWidget","fullAccess","formatTimestampToTime","timestamp","ts","parseFloat","ms","date","Date","hours","String","getHours","padStart","minutes","getMinutes","seconds","getSeconds","concat","getWaitTime","answer","Math","floor","now","secondToTime","start","getCallTime","queue","_data$calls","push","apply","_toConsumableArray","$nextTick","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","remove","updateLines","setInterval","diffSeconds","round","toString","settingName","_defineProperty","api","url","on","method","successTest","response","Object","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","document","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,KAAK,GAAO,6BAA6B;AAC/C,IAAMC,MAAM,GAAM,kCAAkC;AACpD,IAAMC,SAAS,GAAG,0BAA0B;AAC5C,IAAMC,cAAc,GAAG,sBAAsB;;AAE7C;AACA,IAAMC,wBAAwB,GAAG;EAChCC,MAAM,EAAE,IAAI;EACZC,iBAAiB,EAAE,mCAAmC;EACtDC,QAAQ,EAAEC,CAAC,CAAC,GAAG,GAACP,MAAM,CAAC;EACvBQ,WAAW,EAAED,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EAC1CS,UAAU,EAAEF,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EACzCU,iBAAiB,EAAEC,aAAa,GAAGZ,KAAK,GAAG,oBAAoB;EAC/Da,mBAAmB,EAAED,aAAa,GAAGZ,KAAK,GAAG,sBAAsB;EACnEc,cAAc,EAAEF,aAAa,GAAGZ,KAAK,GAAG,cAAc;EACtDe,iBAAiB,EAAEH,aAAa,GAAGZ,KAAK,GAAG,WAAW;EACtDgB,OAAO,EAAEC,SAAS;EAElB;AACD;AACA;AACA;EACCC,aAAa,EAAE,CAAC,CAAC;EACjB;AACD;AACA;EACCC,UAAU,WAAAA,WAAA,EAAG;IACZX,CAAC,CAAC,0BAA0B,CAAC,CAACY,QAAQ,CAAC;MACtCC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,aAAa,EAAEJ,KAAK,CAAC;MACxD;IACD,CAAC,CAAC;IACF,IAAIK,UAAU,GAAGnB,CAAC,CAAC,aAAa,CAAC,CAACoB,GAAG,CAAC,CAAC;IAEvCH,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,GAAG,IAAIC,GAAG,CAAC;MACzCC,EAAE,EAAE,YAAY;MAChBC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBC,OAAO,EAAE;QACRC,wBAAwB,WAAAA,yBAACC,IAAI,EAAE;UAC9B,IAAIC,WAAW,GAAG5B,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC;UAExD,IAAI,CAAC+B,MAAM,GAAGF,IAAI,CAACE,MAAM;UACzB,IAAIC,OAAO,GAAG9B,CAAC,CAAC,UAAU,CAAC,CAACoB,GAAG,CAAC,CAAC;UACjC,IAAIU,OAAO,IAAIH,IAAI,CAACE,MAAM,EAAE;YAC3B,IAAI,CAACE,EAAE,GAAOJ,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC,CAACC,EAAE;YACrC,IAAI,CAACC,IAAI,GAAKL,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC,CAACE,IAAI;YACvC,IAAI,CAACC,MAAM,GAAGN,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC,CAACG,MAAM;YACzC,IAAI,CAACC,MAAM,GAAGP,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC,CAACI,MAAM;YACzC,IAAI,CAACC,KAAK,GAAIC,KAAK,CAACC,OAAO,CAACV,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,CAAC,GAAGR,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,GAAG,EAAE;YACzF,IAAI,CAACG,QAAQ,GAAGX,IAAI,CAACQ,KAAK;UAC3B,CAAC,MAAI;YACJ,IAAI,CAACA,KAAK,GAAI,EAAE;UACjB;UACA,IAAGP,WAAW,CAAChB,QAAQ,CAAC,WAAW,CAAC,EAAC;YACpCgB,WAAW,CAAChB,QAAQ,CAAC;cACpBC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;gBACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,SAAS,EAAEJ,KAAK,CAAC;cACpD;YACD,CAAC,CAAC;YACF,IAAGc,WAAW,CAAChB,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAC;cAC3CK,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,IAAI;cAC/B+B,WAAW,CAAChB,QAAQ,CAAC,WAAW,EAAEZ,CAAC,CAAC,UAAU,CAAC,CAACoB,GAAG,CAAC,CAAC,CAAC;cACtDH,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,KAAK;YACjC;UACD;QACD,CAAC;QACD0C,iBAAiB,WAAAA,kBAACC,SAAS,EAAE;UAC5B,OAAOvB,MAAM,CAACvB,SAAS,CAAC,CAAC6C,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACDC,iBAAiB,WAAAA,kBAACC,WAAW,EAAE;UAC9B,IAAIC,MAAM,GAAG,GAAG;UAChB,IAAIC,aAAa,GAAI,KAAK;UAAC,IAAAC,SAAA,GAAAC,0BAAA,CACR,IAAI,CAACX,KAAK;YAAAY,KAAA;UAAA;YAA7B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA+B;cAAA,IAApBC,IAAI,GAAAJ,KAAA,CAAAjC,KAAA;cACd,IAAGqC,IAAI,CAACC,OAAO,KAAKV,WAAW,EAAC;gBAC/BE,aAAa,GAAG,IAAI;gBACpBD,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACrB;cACD;cACA,IAAIF,IAAI,CAACG,cAAc,IAAIlB,KAAK,CAACC,OAAO,CAACc,IAAI,CAACG,cAAc,CAAC,EAAE;gBAC9D,IAAMC,OAAK,GAAGJ,IAAI,CAACG,cAAc,CAACE,IAAI,CAAC,UAAAC,EAAE;kBAAA,OAAIA,EAAE,CAACxB,MAAM,KAAKS,WAAW;gBAAA,EAAC;gBACvE,IAAIa,OAAK,EAAE;kBACVZ,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACtB;cACD;cACA,IAAIF,IAAI,CAACO,cAAc,IAAItB,KAAK,CAACC,OAAO,CAACc,IAAI,CAACO,cAAc,CAAC,EAAE;gBAC9D,IAAMH,OAAK,GAAGJ,IAAI,CAACO,cAAc,CAACF,IAAI,CAAC,UAAAC,EAAE;kBAAA,OAAKA,EAAE,CAACJ,OAAO,KAAKX,WAAW,IAAIe,EAAE,CAACL,OAAO,KAAKV,WAAW;gBAAA,CAAC,CAAC;gBACxG,IAAIa,OAAK,EAAE;kBACV,IAAGA,OAAK,CAACF,OAAO,KAAKX,WAAW,EAAC;oBAChCC,MAAM,GAAGY,OAAK,CAACH,OAAO;kBACvB,CAAC,MAAI;oBACJT,MAAM,GAAGY,OAAK,CAACF,OAAO;kBACvB;kBACAT,aAAa,GAAG,IAAI;gBACrB;cACD;YACD;UAAC,SAAAe,GAAA;YAAAd,SAAA,CAAAe,CAAA,CAAAD,GAAA;UAAA;YAAAd,SAAA,CAAAgB,CAAA;UAAA;UACD,IAAGjB,aAAa,KAAK,KAAK,EAAC;YAC1B,KAAK,IAAIkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACxB,QAAQ,CAACyB,MAAM,EAAED,CAAC,EAAE,EAAE;cAC9C,IAAME,OAAO,GAAG,IAAI,CAAC1B,QAAQ,CAACwB,CAAC,CAAC;cAChC,IAAGE,OAAO,CAACX,OAAO,KAAKX,WAAW,EAAC;gBAClC;gBACA,IAAGsB,OAAO,CAACZ,OAAO,KAAK,EAAE,EAAC;kBACzB;kBACA,IAAIY,OAAO,CAACV,cAAc,IAAIlB,KAAK,CAACC,OAAO,CAAC2B,OAAO,CAACV,cAAc,CAAC,IAAKU,OAAO,CAACV,cAAc,CAACS,MAAM,EAAE;oBACtG,IAAMR,KAAK,GAAGS,OAAO,CAACV,cAAc,CAACE,IAAI,CAAC,UAAAC,EAAE;sBAAA,OAAIA,EAAE,CAACxB,MAAM,KAAKS,WAAW;oBAAA,EAAC;oBAC1E,IAAIa,KAAK,EAAE;sBACVZ,MAAM,GAAGY,KAAK,CAACtB,MAAM;oBACtB;kBACD,CAAC,MAAK,IAAG+B,OAAO,CAACC,KAAK,EAAC;oBACtB;oBACAtB,MAAM,GAAGqB,OAAO,CAACE,OAAO;kBACzB,CAAC,MAAI;oBACJ;oBACAvB,MAAM,GAAGqB,OAAO,CAACG,KAAK;kBACvB;gBACD,CAAC,MAAI;kBACJxB,MAAM,GAAGqB,OAAO,CAACZ,OAAO;gBACzB;gBACA;cACD,CAAC,MAAK,IAAGY,OAAO,CAACZ,OAAO,KAAKV,WAAW,EAAC;gBACxC;gBACAC,MAAM,GAAGqB,OAAO,CAACX,OAAO;gBACxB;cACD,CAAC,MAAI;gBACJ,IAAIW,OAAO,CAACV,cAAc,IAAIlB,KAAK,CAACC,OAAO,CAAC2B,OAAO,CAACV,cAAc,CAAC,EAAE;kBACpE,IAAMC,MAAK,GAAGS,OAAO,CAACV,cAAc,CAACE,IAAI,CAAC,UAAAC,EAAE;oBAAA,OAAIA,EAAE,CAACxB,MAAM,KAAKS,WAAW;kBAAA,EAAC;kBAC1E,IAAIa,MAAK,EAAE;oBACVZ,MAAM,GAAGqB,OAAO,CAACX,OAAO;kBACzB;gBACD;cACD;YACD;UACD;UACA,OAAOV,MAAM;QACd;MACD,CAAC;MACDhB,IAAI,EAAE;QACL,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CACV,CAAC;QACD,OAAO,EAAE;MAEV;IACD,CAAC,CAAC;IAEFV,MAAM,CAACvB,SAAS,CAAC,CAAC0E,YAAY,GAAG,IAAI9C,GAAG,CAAC;MACxCC,EAAE,EAAE,QAAQ;MACZC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACLR,UAAU,EAAEA,UAAU;QACtBkD,UAAU,EAAGrE,CAAC,CAAC,aAAa,CAAC,CAACoB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAID,UAAU,KAAK,EAAG;QACjEgB,KAAK,EAAE;MAER,CAAC;MACDV,OAAO,EAAE;QACR6C,qBAAqB,WAAAA,sBAACC,SAAS,EAAE;UAChC;UACA,IAAMC,EAAE,GAAG,OAAOD,SAAS,KAAK,QAAQ,GAAGE,UAAU,CAACF,SAAS,CAAC,GAAGA,SAAS;;UAE5E;UACA,IAAMG,EAAE,GAAGF,EAAE,GAAG,IAAI,GAAGA,EAAE,GAAG,IAAI,GAAGA,EAAE;UAErC,IAAMG,IAAI,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;UAEzB,IAAMG,KAAK,GAAGC,MAAM,CAACH,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UACtD,IAAMC,OAAO,GAAGH,MAAM,CAACH,IAAI,CAACO,UAAU,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAC1D,IAAMG,OAAO,GAAGL,MAAM,CAACH,IAAI,CAACS,UAAU,CAAC,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAE1D,UAAAK,MAAA,CAAUR,KAAK,OAAAQ,MAAA,CAAIJ,OAAO,OAAAI,MAAA,CAAIF,OAAO;QACtC,CAAC;QACDG,WAAW,WAAAA,YAACnC,IAAI,EAAC;UAChB,IAAIoC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACb,IAAI,CAACc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;UAC1C,IAAGvC,IAAI,CAACoC,MAAM,KAAK,EAAE,EAAC;YACrBA,MAAM,GAAGpC,IAAI,CAACoC,MAAM;UACrB;UACA,OAAOtE,MAAM,CAACvB,SAAS,CAAC,CAACiG,YAAY,CAACJ,MAAM,GAAGpC,IAAI,CAACyC,KAAK,CAAC;QAC3D,CAAC;QACDC,WAAW,WAAAA,YAAC1C,IAAI,EAAC;UAChB,IAAGA,IAAI,CAACoC,MAAM,KAAK,EAAE,EAAC;YACrB,OAAO,GAAG;UACX;UACA,OAAOtE,MAAM,CAACvB,SAAS,CAAC,CAAC6C,iBAAiB,CAACY,IAAI,CAACoC,MAAM,CAAC;QACxD,CAAC;QACD7D,wBAAwB,WAAAA,yBAACC,IAAI,EAAE;UAC9B;UACA,KAAK,IAAMG,OAAO,IAAIH,IAAI,CAACE,MAAM,EAAE;YAClC,IAAMiE,KAAK,GAAGnE,IAAI,CAACE,MAAM,CAACC,OAAO,CAAC;YAClC;YACA,IAAIM,KAAK,CAACC,OAAO,CAACyD,KAAK,CAAC3D,KAAK,CAAC,EAAE;cAAA,IAAA4D,WAAA;cAC/B;cACA,CAAAA,WAAA,GAAApE,IAAI,CAACQ,KAAK,EAAC6D,IAAI,CAAAC,KAAA,CAAAF,WAAA,EAAAG,kBAAA,CAAIJ,KAAK,CAAC3D,KAAK,EAAC;YAChC;UACD;UACA,IAAI,CAACA,KAAK,GAAGR,IAAI,CAACQ,KAAK;UACvB,IAAI,CAACgE,SAAS,CAAC,YAAM;YACpBC,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACD9D,iBAAiB,WAAAA,kBAACC,SAAS,EAAE;UAC5B,OAAOvB,MAAM,CAACvB,SAAS,CAAC,CAAC6C,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACD8D,YAAY,WAAAA,aAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACAzF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAAA,WAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD6F,aAAa,WAAAA,cAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI8F,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAxF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAE7E,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD+F,YAAY,WAAAA,aAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IAEFF,MAAM,CAACvB,SAAS,CAAC,CAACc,OAAO,GAAG,IAAIc,GAAG,CAAC;MACnCC,EAAE,EAAE,MAAM;MACVC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACLR,UAAU,EAAEA,UAAU;QACtBkD,UAAU,EAAGrE,CAAC,CAAC,aAAa,CAAC,CAACoB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAID,UAAU,KAAK,EAAG;QACjEgB,KAAK,EAAE;MAER,CAAC;MACDV,OAAO,EAAE;QACRC,wBAAwB,WAAAA,yBAACyF,KAAK,EAAE;UAC/B,IAAI,CAAChF,KAAK,GAAGgF,KAAK;UAClB,IAAI,CAAChB,SAAS,CAAC,YAAM;YACpBC,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACDC,YAAY,WAAAA,aAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACAzF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAAA,WAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD6F,aAAa,WAAAA,cAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI8F,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAxF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAE7E,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD+F,YAAY,WAAAA,aAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKhG,SAAS,EAAC;YACxC+F,MAAM,GAAGxG,CAAC,CAACuG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAF,MAAM,CAACvB,SAAS,CAAC,CAACiH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IACFF,MAAM,CAACvB,SAAS,CAAC,CAACO,WAAW,CAACmH,QAAQ,CAAC,CAAC;IACxCnG,MAAM,CAACvB,SAAS,CAAC,CAACQ,UAAU,CAACU,QAAQ,CAAC,CAAC;IACvCK,MAAM,CAACvB,SAAS,CAAC,CAAC2H,cAAc,CAAC,CAAC;IAClCrH,CAAC,CAAC,aAAa,CAAC,CAACsH,GAAG,CAAC,CAAC;IACtB;IACA;IACAtH,CAAC,CAAC,yBAAyB,CAAC,CAACuH,WAAW,CAAC,WAAW,CAAC;IACrDvH,CAAC,CAAC,+BAA+B,CAAC,CAACwH,IAAI,CAAC,CAAC;IACzCxH,CAAC,CAAC,6BAA6B,CAAC,CAACyH,MAAM,CAAC,CAAC;IACzC;IACA;IACAxG,MAAM,CAACvB,SAAS,CAAC,CAACgI,WAAW,CAAC,CAAC;IAC/BC,WAAW,CAAC1G,MAAM,CAACvB,SAAS,CAAC,CAACgI,WAAW,EAAE,IAAI,CAAC;EACjD,CAAC;EACDnF,iBAAiB,WAAAA,kBAACC,SAAS,EAAE;IAC5B,IAAI,CAACA,SAAS,EAAE,OAAO,GAAG;IAE1B,IAAMkD,GAAG,GAAGF,IAAI,CAACC,KAAK,CAACb,IAAI,CAACc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,IAAMkC,WAAW,GAAGlC,GAAG,GAAGlD,SAAS;IAEnC,OAAOvB,MAAM,CAACvB,SAAS,CAAC,CAACiG,YAAY,CAACiC,WAAW,CAAC;EACnD,CAAC;EACDjC,YAAY,WAAAA,aAACiC,WAAW,EAAC;IACxB,IAAIA,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG;IAC/B;IACA,IAAM/C,KAAK,GAAKW,IAAI,CAACC,KAAK,CAACmC,WAAW,GAAG,IAAI,CAAC;IAC9C,IAAM3C,OAAO,GAAGO,IAAI,CAACC,KAAK,CAAEmC,WAAW,GAAG,IAAI,GAAI,EAAE,CAAC;IACrD,IAAMzC,OAAO,GAAGK,IAAI,CAACqC,KAAK,CAACD,WAAW,GAAG,EAAE,CAAC;IAC5C,IAAI/C,KAAK,GAAG,CAAC,EAAE;MACd,UAAAQ,MAAA,CAAUR,KAAK,OAAAQ,MAAA,CAAIJ,OAAO,CAAC6C,QAAQ,CAAC,CAAC,CAAC9C,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAAK,MAAA,CAAIF,OAAO,CAAC2C,QAAQ,CAAC,CAAC,CAAC9C,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC9F,CAAC,MAAM,IAAIC,OAAO,GAAG,CAAC,EAAE;MACvB,UAAAI,MAAA,CAAUJ,OAAO,OAAAI,MAAA,CAAIF,OAAO,CAAC2C,QAAQ,CAAC,CAAC,CAAC9C,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACzD,CAAC,MAAM;MACN,UAAAK,MAAA,CAAUF,OAAO;IAClB;EACD,CAAC;EACDjE,eAAe,WAAAA,gBAAC6G,WAAW,EAAEjH,KAAK,EAAE;IACnC,IAAGG,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,EAAC;MAC3B;IACD;IACA,IAAI8B,IAAI,GAAAqG,eAAA,KACND,WAAW,EAAGjH,KAAK,CACpB;IACDd,CAAC,CAACiI,GAAG,CAAC;MACLC,GAAG,EAAEjH,MAAM,CAACvB,SAAS,CAAC,CAACa,iBAAiB;MACxC4H,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdzG,IAAI,EAAEA,IAAI;MACV0G,WAAW,WAAAA,YAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAK7H,SAAS,IAAI8H,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACvE,MAAM,GAAG,CAAC,IAAIuE,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAAAA,UAACJ,QAAQ,EAAE;QACnB,IAAGP,WAAW,KAAK,SAAS,EAAC;UAC5B/H,CAAC,CAAC,UAAU,CAAC,CAACoB,GAAG,CAACpB,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC,CAACc,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChF,CAAC,MAAK,IAAImH,WAAW,KAAK,aAAa,EAAC;UACvC9G,MAAM,CAAC0H,QAAQ,CAACC,IAAI,GAAG3H,MAAM,CAAC0H,QAAQ,CAACC,IAAI;QAC5C;MACD,CAAC;MACDC,SAAS,WAAAA,UAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAAA,QAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDxC,iBAAiB,WAAAA,kBAAChF,IAAI,EAAE;IACvB3B,CAAC,CAACiI,GAAG,CAAC;MACLC,GAAG,EAAEjH,MAAM,CAACvB,SAAS,CAAC,CAACY,cAAc;MACrC6H,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdzG,IAAI,EAAEA,IAAI;MACV0G,WAAW,WAAAA,YAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAK7H,SAAS,IAAI8H,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACvE,MAAM,GAAG,CAAC,IAAIuE,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAAAA,UAACJ,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDO,SAAS,WAAAA,UAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAAA,QAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDzB,WAAW,WAAAA,YAAA,EAAG;IACb1H,CAAC,CAACiI,GAAG,CAAC;MACLC,GAAG,EAAEjH,MAAM,CAACvB,SAAS,CAAC,CAACW,mBAAmB;MAC1C8H,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdC,WAAW,WAAAA,YAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAK7H,SAAS,IAAI8H,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACvE,MAAM,GAAG,CAAC,IAAIuE,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAAAA,UAACJ,QAAQ,EAAE;QACnBrH,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,CAACK,wBAAwB,CAAC4G,QAAQ,CAAC;QAClErH,MAAM,CAACvB,SAAS,CAAC,CAAC0E,YAAY,CAAC1C,wBAAwB,CAAC4G,QAAQ,CAAC;MAClE,CAAC;MACDO,SAAS,WAAAA,UAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAAA,QAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EAED;AACD;AACA;AACA;AACA;EACCC,gBAAgB,WAAAA,iBAACC,QAAQ,EAAE;IAC1B,IAAM1G,MAAM,GAAG0G,QAAQ;IACvB1G,MAAM,CAAChB,IAAI,GAAGV,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ,CAACuJ,IAAI,CAAC,YAAY,CAAC;IAC3D,OAAO3G,MAAM;EACd,CAAC;EACD;AACD;AACA;EACC4G,eAAe,WAAAA,gBAAA,EAAG,CAElB,CAAC;EACD;AACD;AACA;EACClC,cAAc,WAAAA,eAAA,EAAG;IAChBmC,IAAI,CAACzJ,QAAQ,GAAGkB,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ;IAC1CyJ,IAAI,CAACtB,GAAG,MAAA7C,MAAA,CAAMjF,aAAa,EAAAiF,MAAA,CAAG7F,KAAK,UAAO;IAC1CgK,IAAI,CAAC9I,aAAa,GAAGO,MAAM,CAACvB,SAAS,CAAC,CAACgB,aAAa;IACpD8I,IAAI,CAACJ,gBAAgB,GAAGnI,MAAM,CAACvB,SAAS,CAAC,CAAC0J,gBAAgB;IAC1DI,IAAI,CAACD,eAAe,GAAGtI,MAAM,CAACvB,SAAS,CAAC,CAAC6J,eAAe;IACxDC,IAAI,CAAC7I,UAAU,CAAC,CAAC;EAClB;AACD,CAAC;AAEDX,CAAC,CAACyJ,QAAQ,CAAC,CAACC,KAAK,CAAC,YAAM;EACvBzI,MAAM,CAACvB,SAAS,CAAC,CAACiB,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","calls","Array","isArray","allCalls","formatElapsedTime","enterTime","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","find","ch","bridgeChannels","err","e","f","i","length","tmpCall","spyer","spy_num","exten","$callsWidget","fullAccess","formatTimestampToTime","timestamp","ts","parseFloat","ms","date","Date","hours","String","getHours","padStart","minutes","getMinutes","seconds","getSeconds","concat","getWaitTime","answer","Math","floor","now","secondToTime","start","getCallTime","queue","_data$calls","push","apply","_toConsumableArray","$nextTick","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","remove","updateLines","setInterval","diffSeconds","round","toString","settingName","_defineProperty","api","url","on","method","successTest","response","Object","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","document","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,KAAK,GAAO,6BAA6B;AAC/C,IAAMC,MAAM,GAAM,kCAAkC;AACpD,IAAMC,SAAS,GAAG,0BAA0B;AAC5C,IAAMC,cAAc,GAAG,sBAAsB;;AAE7C;AACA,IAAMC,wBAAwB,GAAG;EAChCC,MAAM,EAAE,IAAI;EACZC,iBAAiB,EAAE,mCAAmC;EACtDC,QAAQ,EAAEC,CAAC,CAAC,GAAG,GAACP,MAAM,CAAC;EACvBQ,WAAW,EAAED,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EAC1CS,UAAU,EAAEF,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EACzCU,iBAAiB,EAAEC,aAAa,GAAGZ,KAAK,GAAG,oBAAoB;EAC/Da,mBAAmB,EAAED,aAAa,GAAGZ,KAAK,GAAG,sBAAsB;EACnEc,cAAc,EAAEF,aAAa,GAAGZ,KAAK,GAAG,cAAc;EACtDe,iBAAiB,EAAEH,aAAa,GAAGZ,KAAK,GAAG,WAAW;EACtDgB,OAAO,EAAEC,SAAS;EAElB;AACD;AACA;AACA;EACCC,aAAa,EAAE,CAAC,CAAC;EACjB;AACD;AACA;EACCC,UAAU,WAAVA,UAAUA,CAAA,EAAG;IACZX,CAAC,CAAC,0BAA0B,CAAC,CAACY,QAAQ,CAAC;MACtCC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,aAAa,EAAEJ,KAAK,CAAC;MACxD;IACD,CAAC,CAAC;IACFd,CAAC,CAAC,iCAAiC,CAAC,CAACY,QAAQ,CAAC;MAC7CC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDhB,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAACL,KAAK,CAAC;QACpCG,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,gBAAgB,EAAEJ,KAAK,CAAC;MAC3D;IACD,CAAC,CAAC;IACF,IAAIM,UAAU,GAAGpB,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC;IAEvCF,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,GAAG,IAAIC,GAAG,CAAC;MACzCC,EAAE,EAAE,YAAY;MAChBC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBC,OAAO,EAAE;QACRC,wBAAwB,WAAxBA,wBAAwBA,CAACC,IAAI,EAAE;UAC9B,IAAIC,WAAW,GAAG5B,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC;UACxD,IAAI,CAAC+B,cAAc,GAAG,CAAC,GAAC7B,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAAC,CAAC;UAEvD,IAAI,CAACW,MAAM,GAAGH,IAAI,CAACG,MAAM;UACzB,IAAIC,OAAO,GAAG/B,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAAC,CAAC;UACjC,IAAIY,OAAO,IAAIJ,IAAI,CAACG,MAAM,EAAE;YAC3B,IAAI,CAACE,EAAE,GAAOL,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC,CAACC,EAAE;YACrC,IAAI,CAACC,IAAI,GAAKN,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC,CAACE,IAAI;YACvC,IAAI,CAACC,MAAM,GAAGP,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC,CAACG,MAAM;YACzC,IAAI,CAACC,MAAM,GAAGR,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC,CAACI,MAAM;YACzC,IAAI,CAACC,KAAK,GAAIC,KAAK,CAACC,OAAO,CAACX,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,CAAC,GAAGT,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,GAAG,EAAE;YACzF,IAAI,CAACG,QAAQ,GAAGZ,IAAI,CAACS,KAAK;UAC3B,CAAC,MAAI;YACJ,IAAI,CAACA,KAAK,GAAI,EAAE;UACjB;UACA,IAAGR,WAAW,CAAChB,QAAQ,CAAC,WAAW,CAAC,EAAC;YACpCgB,WAAW,CAAChB,QAAQ,CAAC;cACpBC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;gBACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,SAAS,EAAEJ,KAAK,CAAC;cACpD;YACD,CAAC,CAAC;YACF,IAAGc,WAAW,CAAChB,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAC;cAC3CK,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,IAAI;cAC/B+B,WAAW,CAAChB,QAAQ,CAAC,WAAW,EAAEZ,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAAC,CAAC,CAAC;cACtDF,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,KAAK;YACjC;UACD;QACD,CAAC;QACD2C,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;UAC5B,OAAOxB,MAAM,CAACvB,SAAS,CAAC,CAAC8C,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAACC,WAAW,EAAE;UAC9B,IAAIC,MAAM,GAAG,GAAG;UAChB,IAAIC,aAAa,GAAI,KAAK;UAAC,IAAAC,SAAA,GAAAC,0BAAA,CACR,IAAI,CAACX,KAAK;YAAAY,KAAA;UAAA;YAA7B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA+B;cAAA,IAApBC,IAAI,GAAAJ,KAAA,CAAAlC,KAAA;cACd,IAAGsC,IAAI,CAACC,OAAO,KAAKV,WAAW,EAAC;gBAC/BE,aAAa,GAAG,IAAI;gBACpBD,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACrB;cACD;cACA,IAAIF,IAAI,CAACG,cAAc,IAAIlB,KAAK,CAACC,OAAO,CAACc,IAAI,CAACG,cAAc,CAAC,EAAE;gBAC9D,IAAMC,OAAK,GAAGJ,IAAI,CAACG,cAAc,CAACE,IAAI,CAAC,UAAAC,EAAE;kBAAA,OAAIA,EAAE,CAACxB,MAAM,KAAKS,WAAW;gBAAA,EAAC;gBACvE,IAAIa,OAAK,EAAE;kBACVZ,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACtB;cACD;cACA,IAAIF,IAAI,CAACO,cAAc,IAAItB,KAAK,CAACC,OAAO,CAACc,IAAI,CAACO,cAAc,CAAC,EAAE;gBAC9D,IAAMH,OAAK,GAAGJ,IAAI,CAACO,cAAc,CAACF,IAAI,CAAC,UAAAC,EAAE;kBAAA,OAAKA,EAAE,CAACJ,OAAO,KAAKX,WAAW,IAAIe,EAAE,CAACL,OAAO,KAAKV,WAAW;gBAAA,CAAC,CAAC;gBACxG,IAAIa,OAAK,EAAE;kBACV,IAAGA,OAAK,CAACF,OAAO,KAAKX,WAAW,EAAC;oBAChCC,MAAM,GAAGY,OAAK,CAACH,OAAO;kBACvB,CAAC,MAAI;oBACJT,MAAM,GAAGY,OAAK,CAACF,OAAO;kBACvB;kBACAT,aAAa,GAAG,IAAI;gBACrB;cACD;YACD;UAAC,SAAAe,GAAA;YAAAd,SAAA,CAAAe,CAAA,CAAAD,GAAA;UAAA;YAAAd,SAAA,CAAAgB,CAAA;UAAA;UACD,IAAGjB,aAAa,KAAK,KAAK,EAAC;YAC1B,KAAK,IAAIkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACxB,QAAQ,CAACyB,MAAM,EAAED,CAAC,EAAE,EAAE;cAC9C,IAAME,OAAO,GAAG,IAAI,CAAC1B,QAAQ,CAACwB,CAAC,CAAC;cAChC,IAAGE,OAAO,CAACX,OAAO,KAAKX,WAAW,EAAC;gBAClC;gBACA,IAAGsB,OAAO,CAACZ,OAAO,KAAK,EAAE,EAAC;kBACzB;kBACA,IAAIY,OAAO,CAACV,cAAc,IAAIlB,KAAK,CAACC,OAAO,CAAC2B,OAAO,CAACV,cAAc,CAAC,IAAKU,OAAO,CAACV,cAAc,CAACS,MAAM,EAAE;oBACtG,IAAMR,KAAK,GAAGS,OAAO,CAACV,cAAc,CAACE,IAAI,CAAC,UAAAC,EAAE;sBAAA,OAAIA,EAAE,CAACxB,MAAM,KAAKS,WAAW;oBAAA,EAAC;oBAC1E,IAAIa,KAAK,EAAE;sBACVZ,MAAM,GAAGY,KAAK,CAACtB,MAAM;oBACtB;kBACD,CAAC,MAAK,IAAG+B,OAAO,CAACC,KAAK,EAAC;oBACtB;oBACAtB,MAAM,GAAGqB,OAAO,CAACE,OAAO;kBACzB,CAAC,MAAI;oBACJ;oBACAvB,MAAM,GAAGqB,OAAO,CAACG,KAAK;kBACvB;gBACD,CAAC,MAAI;kBACJxB,MAAM,GAAGqB,OAAO,CAACZ,OAAO;gBACzB;gBACA;cACD,CAAC,MAAK,IAAGY,OAAO,CAACZ,OAAO,KAAKV,WAAW,EAAC;gBACxC;gBACAC,MAAM,GAAGqB,OAAO,CAACX,OAAO;gBACxB;cACD,CAAC,MAAI;gBACJ,IAAIW,OAAO,CAACV,cAAc,IAAIlB,KAAK,CAACC,OAAO,CAAC2B,OAAO,CAACV,cAAc,CAAC,EAAE;kBACpE,IAAMC,MAAK,GAAGS,OAAO,CAACV,cAAc,CAACE,IAAI,CAAC,UAAAC,EAAE;oBAAA,OAAIA,EAAE,CAACxB,MAAM,KAAKS,WAAW;kBAAA,EAAC;kBAC1E,IAAIa,MAAK,EAAE;oBACVZ,MAAM,GAAGqB,OAAO,CAACX,OAAO;kBACzB;gBACD;cACD;YACD;UACD;UACA,OAAOV,MAAM;QACd;MACD,CAAC;MACDjB,IAAI,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CACV,CAAC;QACD,OAAO,EAAE;MAEV;IACD,CAAC,CAAC;IAEFV,MAAM,CAACvB,SAAS,CAAC,CAAC2E,YAAY,GAAG,IAAI/C,GAAG,CAAC;MACxCC,EAAE,EAAE,QAAQ;MACZC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpBP,UAAU,EAAEA,UAAU;QACtBkD,UAAU,EAAGtE,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAIC,UAAU,KAAK,EAAG;QACjEgB,KAAK,EAAE;MAER,CAAC;MACDX,OAAO,EAAE;QACR8C,qBAAqB,WAArBA,qBAAqBA,CAACC,SAAS,EAAE;UAChC;UACA,IAAMC,EAAE,GAAG,OAAOD,SAAS,KAAK,QAAQ,GAAGE,UAAU,CAACF,SAAS,CAAC,GAAGA,SAAS;;UAE5E;UACA,IAAMG,EAAE,GAAGF,EAAE,GAAG,IAAI,GAAGA,EAAE,GAAG,IAAI,GAAGA,EAAE;UAErC,IAAMG,IAAI,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;UAEzB,IAAMG,KAAK,GAAGC,MAAM,CAACH,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UACtD,IAAMC,OAAO,GAAGH,MAAM,CAACH,IAAI,CAACO,UAAU,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAC1D,IAAMG,OAAO,GAAGL,MAAM,CAACH,IAAI,CAACS,UAAU,CAAC,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAE1D,UAAAK,MAAA,CAAUR,KAAK,OAAAQ,MAAA,CAAIJ,OAAO,OAAAI,MAAA,CAAIF,OAAO;QACtC,CAAC;QACDG,WAAW,WAAXA,WAAWA,CAACnC,IAAI,EAAC;UAChB,IAAIoC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACb,IAAI,CAACc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;UAC1C,IAAGvC,IAAI,CAACoC,MAAM,KAAK,EAAE,EAAC;YACrBA,MAAM,GAAGpC,IAAI,CAACoC,MAAM;UACrB;UACA,OAAOvE,MAAM,CAACvB,SAAS,CAAC,CAACkG,YAAY,CAACJ,MAAM,GAAGpC,IAAI,CAACyC,KAAK,CAAC;QAC3D,CAAC;QACDC,WAAW,WAAXA,WAAWA,CAAC1C,IAAI,EAAC;UAChB,IAAGA,IAAI,CAACoC,MAAM,KAAK,EAAE,EAAC;YACrB,OAAO,GAAG;UACX;UACA,OAAOvE,MAAM,CAACvB,SAAS,CAAC,CAAC8C,iBAAiB,CAACY,IAAI,CAACoC,MAAM,CAAC;QACxD,CAAC;QACD9D,wBAAwB,WAAxBA,wBAAwBA,CAACC,IAAI,EAAE;UAC9B,IAAI,CAACE,cAAc,GAAG,CAAC,GAAC7B,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAAC,CAAC;UACvD;UACA,KAAK,IAAMY,OAAO,IAAIJ,IAAI,CAACG,MAAM,EAAE;YAClC,IAAMiE,KAAK,GAAGpE,IAAI,CAACG,MAAM,CAACC,OAAO,CAAC;YAClC;YACA,IAAIM,KAAK,CAACC,OAAO,CAACyD,KAAK,CAAC3D,KAAK,CAAC,EAAE;cAAA,IAAA4D,WAAA;cAC/B;cACA,CAAAA,WAAA,GAAArE,IAAI,CAACS,KAAK,EAAC6D,IAAI,CAAAC,KAAA,CAAAF,WAAA,EAAAG,kBAAA,CAAIJ,KAAK,CAAC3D,KAAK,EAAC;YAChC;UACD;UACA,IAAI,CAACA,KAAK,GAAGT,IAAI,CAACS,KAAK;UACvB,IAAI,CAACgE,SAAS,CAAC,YAAM;YACpBC,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACD9D,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;UAC5B,OAAOxB,MAAM,CAACvB,SAAS,CAAC,CAAC8C,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACD8D,YAAY,WAAZA,YAAYA,CAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA1F,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAVA,UAAUA,CAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD6F,aAAa,WAAbA,aAAaA,CAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI8F,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAzF,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAE7E,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD+F,YAAY,WAAZA,YAAYA,CAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IAEFH,MAAM,CAACvB,SAAS,CAAC,CAACc,OAAO,GAAG,IAAIc,GAAG,CAAC;MACnCC,EAAE,EAAE,MAAM;MACVC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACLP,UAAU,EAAEA,UAAU;QACtBkD,UAAU,EAAGtE,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAIC,UAAU,KAAK,EAAG;QACjEgB,KAAK,EAAE;MAER,CAAC;MACDX,OAAO,EAAE;QACRC,wBAAwB,WAAxBA,wBAAwBA,CAAC0F,KAAK,EAAE;UAC/B,IAAI,CAAChF,KAAK,GAAGgF,KAAK;UAClB,IAAI,CAAChB,SAAS,CAAC,YAAM;YACpBC,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACDC,YAAY,WAAZA,YAAYA,CAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA1F,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAVA,UAAUA,CAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD6F,aAAa,WAAbA,aAAaA,CAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI8F,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAzF,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAE7E,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD+F,YAAY,WAAZA,YAAYA,CAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAKjG,SAAS,EAAC;YACxCgG,MAAM,GAAGzG,CAAC,CAACwG,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACvF,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAACkH,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAExE,MAAM,EAAE,IAAI,CAACd;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IACFH,MAAM,CAACvB,SAAS,CAAC,CAACO,WAAW,CAACoH,QAAQ,CAAC,CAAC;IACxCpG,MAAM,CAACvB,SAAS,CAAC,CAACQ,UAAU,CAACU,QAAQ,CAAC,CAAC;IACvCK,MAAM,CAACvB,SAAS,CAAC,CAAC4H,cAAc,CAAC,CAAC;IAClCtH,CAAC,CAAC,aAAa,CAAC,CAACuH,GAAG,CAAC,CAAC;IACtB;IACA;IACAvH,CAAC,CAAC,yBAAyB,CAAC,CAACwH,WAAW,CAAC,WAAW,CAAC;IACrDxH,CAAC,CAAC,+BAA+B,CAAC,CAACyH,IAAI,CAAC,CAAC;IACzCzH,CAAC,CAAC,6BAA6B,CAAC,CAAC0H,MAAM,CAAC,CAAC;IACzC;IACA;IACAzG,MAAM,CAACvB,SAAS,CAAC,CAACiI,WAAW,CAAC,CAAC;IAC/BC,WAAW,CAAC3G,MAAM,CAACvB,SAAS,CAAC,CAACiI,WAAW,EAAE,IAAI,CAAC;EACjD,CAAC;EACDnF,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;IAC5B,IAAI,CAACA,SAAS,EAAE,OAAO,GAAG;IAE1B,IAAMkD,GAAG,GAAGF,IAAI,CAACC,KAAK,CAACb,IAAI,CAACc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,IAAMkC,WAAW,GAAGlC,GAAG,GAAGlD,SAAS;IAEnC,OAAOxB,MAAM,CAACvB,SAAS,CAAC,CAACkG,YAAY,CAACiC,WAAW,CAAC;EACnD,CAAC;EACDjC,YAAY,WAAZA,YAAYA,CAACiC,WAAW,EAAC;IACxB,IAAIA,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG;IAC/B;IACA,IAAM/C,KAAK,GAAKW,IAAI,CAACC,KAAK,CAACmC,WAAW,GAAG,IAAI,CAAC;IAC9C,IAAM3C,OAAO,GAAGO,IAAI,CAACC,KAAK,CAAEmC,WAAW,GAAG,IAAI,GAAI,EAAE,CAAC;IACrD,IAAMzC,OAAO,GAAGK,IAAI,CAACqC,KAAK,CAACD,WAAW,GAAG,EAAE,CAAC;IAC5C,IAAI/C,KAAK,GAAG,CAAC,EAAE;MACd,UAAAQ,MAAA,CAAUR,KAAK,OAAAQ,MAAA,CAAIJ,OAAO,CAAC6C,QAAQ,CAAC,CAAC,CAAC9C,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAAK,MAAA,CAAIF,OAAO,CAAC2C,QAAQ,CAAC,CAAC,CAAC9C,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC9F,CAAC,MAAM,IAAIC,OAAO,GAAG,CAAC,EAAE;MACvB,UAAAI,MAAA,CAAUJ,OAAO,OAAAI,MAAA,CAAIF,OAAO,CAAC2C,QAAQ,CAAC,CAAC,CAAC9C,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACzD,CAAC,MAAM;MACN,UAAAK,MAAA,CAAUF,OAAO;IAClB;EACD,CAAC;EACDlE,eAAe,WAAfA,eAAeA,CAAC8G,WAAW,EAAElH,KAAK,EAAE;IACnC,IAAGG,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,EAAC;MAC3B;IACD;IACA,IAAI8B,IAAI,GAAAsG,eAAA,KACND,WAAW,EAAGlH,KAAK,CACpB;IACDd,CAAC,CAACkI,GAAG,CAAC;MACLC,GAAG,EAAElH,MAAM,CAACvB,SAAS,CAAC,CAACa,iBAAiB;MACxC6H,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACd1G,IAAI,EAAEA,IAAI;MACV2G,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAK9H,SAAS,IAAI+H,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACvE,MAAM,GAAG,CAAC,IAAIuE,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnB,IAAGP,WAAW,KAAK,SAAS,EAAC;UAC5BhI,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAACnB,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC,CAACc,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChF,CAAC,MAAK,IAAIoH,WAAW,KAAK,aAAa,EAAC;UACvC/G,MAAM,CAAC2H,QAAQ,CAACC,IAAI,GAAG5H,MAAM,CAAC2H,QAAQ,CAACC,IAAI;QAC5C;MACD,CAAC;MACDC,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDxC,iBAAiB,WAAjBA,iBAAiBA,CAACjF,IAAI,EAAE;IACvB3B,CAAC,CAACkI,GAAG,CAAC;MACLC,GAAG,EAAElH,MAAM,CAACvB,SAAS,CAAC,CAACY,cAAc;MACrC8H,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACd1G,IAAI,EAAEA,IAAI;MACV2G,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAK9H,SAAS,IAAI+H,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACvE,MAAM,GAAG,CAAC,IAAIuE,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDO,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDzB,WAAW,WAAXA,WAAWA,CAAA,EAAG;IACb3H,CAAC,CAACkI,GAAG,CAAC;MACLC,GAAG,EAAElH,MAAM,CAACvB,SAAS,CAAC,CAACW,mBAAmB;MAC1C+H,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdC,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAK9H,SAAS,IAAI+H,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACvE,MAAM,GAAG,CAAC,IAAIuE,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnBtH,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,CAACK,wBAAwB,CAAC6G,QAAQ,CAAC;QAClEtH,MAAM,CAACvB,SAAS,CAAC,CAAC2E,YAAY,CAAC3C,wBAAwB,CAAC6G,QAAQ,CAAC;MAClE,CAAC;MACDO,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EAED;AACD;AACA;AACA;AACA;EACCC,gBAAgB,WAAhBA,gBAAgBA,CAACC,QAAQ,EAAE;IAC1B,IAAM1G,MAAM,GAAG0G,QAAQ;IACvB1G,MAAM,CAACjB,IAAI,GAAGV,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ,CAACwJ,IAAI,CAAC,YAAY,CAAC;IAC3D,OAAO3G,MAAM;EACd,CAAC;EACD;AACD;AACA;EACC4G,eAAe,WAAfA,eAAeA,CAAA,EAAG,CAElB,CAAC;EACD;AACD;AACA;EACClC,cAAc,WAAdA,cAAcA,CAAA,EAAG;IAChBmC,IAAI,CAAC1J,QAAQ,GAAGkB,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ;IAC1C0J,IAAI,CAACtB,GAAG,MAAA7C,MAAA,CAAMlF,aAAa,EAAAkF,MAAA,CAAG9F,KAAK,UAAO;IAC1CiK,IAAI,CAAC/I,aAAa,GAAGO,MAAM,CAACvB,SAAS,CAAC,CAACgB,aAAa;IACpD+I,IAAI,CAACJ,gBAAgB,GAAGpI,MAAM,CAACvB,SAAS,CAAC,CAAC2J,gBAAgB;IAC1DI,IAAI,CAACD,eAAe,GAAGvI,MAAM,CAACvB,SAAS,CAAC,CAAC8J,eAAe;IACxDC,IAAI,CAAC9I,UAAU,CAAC,CAAC;EAClB;AACD,CAAC;AAEDX,CAAC,CAAC0J,QAAQ,CAAC,CAACC,KAAK,CAAC,YAAM;EACvB1I,MAAM,CAACvB,SAAS,CAAC,CAACiB,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 0bc479e..de58c23 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -37,6 +37,12 @@ const ModuleMonitorActiveCalls = { window[className].onChangeSetting('adminUserId', value); } }); + $("#minWaitVisible.dropdown.enable").dropdown({ + onChange: function onChange(value, text, $choice) { + $('#minWaitVisibleValue').val(value); + window[className].onChangeSetting('minWaitVisible', value); + } + }); let userNumber = $('#userNumber').val(); window[className].$widgetQueues = new Vue({ @@ -45,6 +51,7 @@ const ModuleMonitorActiveCalls = { methods: { updatedCallsFromResponse(data) { let queueNameEl = $(window[className].queueNameSelector); + this.minWaitVisible = 1*$('#minWaitVisibleValue').val(); this.queues = data.queues; let queueId = $('#queueId').val(); @@ -142,6 +149,7 @@ const ModuleMonitorActiveCalls = { } }, data: { + "minWaitVisible": 30, "name": "", "number": "", "queues": [], @@ -156,6 +164,7 @@ const ModuleMonitorActiveCalls = { el: '#calls', delimiters: ["<%","%>"], data: { + "minWaitVisible": 30, userNumber: userNumber, fullAccess: ($('#fullAccess').val() === "1" || userNumber === ''), calls: [ @@ -191,6 +200,7 @@ const ModuleMonitorActiveCalls = { return window[className].formatElapsedTime(call.answer); }, updatedCallsFromResponse(data) { + this.minWaitVisible = 1*$('#minWaitVisibleValue').val(); // Проходим по всем очередям for (const queueId in data.queues) { const queue = data.queues[queueId]; From 9517cec661292cf5d821733733aee617283deccf Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Wed, 3 Dec 2025 13:31:20 +0300 Subject: [PATCH 03/23] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2=20=D1=81=20=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=B4?= =?UTF-8?q?=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=D1=8E=20=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Views/index.volt | 2 +- Messages/ru.php | 2 +- public/assets/js/module-monitor-active-calls-index.js | 6 ++++++ public/assets/js/module-monitor-active-calls-index.js.map | 2 +- public/assets/js/src/module-monitor-active-calls-index.js | 6 ++++++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/App/Views/index.volt b/App/Views/index.volt index dc27cf3..6ecf63f 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -167,7 +167,7 @@ - \"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","calls","Array","isArray","allCalls","formatElapsedTime","enterTime","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","find","ch","bridgeChannels","err","e","f","i","length","tmpCall","spyer","spy_num","exten","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","parseFloat","ms","date","Date","hours","String","getHours","padStart","minutes","getMinutes","seconds","getSeconds","concat","answer","Math","floor","now","secondToTime","start","getCallTime","queue","_data$calls","push","apply","_toConsumableArray","$nextTick","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","remove","updateLines","setInterval","diffSeconds","round","toString","settingName","_defineProperty","api","url","on","method","successTest","response","Object","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","document","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index de58c23..286c58b 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -171,6 +171,12 @@ const ModuleMonitorActiveCalls = { ] }, methods: { + callIsVisible(call){ + if(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){ + return this.minWaitVisible <= this.getWaitTime(call); + } + return true; + }, formatTimestampToTime(timestamp) { // Если timestamp строка — приводим к числу const ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp; From 16192f92616b6c65145070e0e47dc4275575fb8d Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Fri, 5 Dec 2025 13:35:27 +0300 Subject: [PATCH 04/23] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D1=83=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D0=BE=D0=B9=20=D0=BB=D0=B8=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/WorkerActiveCalls.php | 35 ++++++++++++++++++++++++++++++++++- bin/WorkerAmiActions.php | 6 ++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index faa0ee2..ade89af 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -36,7 +36,9 @@ class WorkerActiveCalls extends WorkerBase { public Logger $logger; private bool $init = true; - private string $lastPrintHash= ''; + private string $lastPrintHash = ''; + private int $lastPrintCalls = 0; + private int $lastControlActiveCalls = 0; /** @var AsteriskManager $am */ protected AsteriskManager $am; protected CustomAsteriskManager $amCustom; @@ -114,9 +116,36 @@ public function replyOnPingRequest(array $parameters): bool LOG_WARNING ); } + + return false; } + private function channelAdditionalControle() + { + if(empty($this->activeChannels)){ + return; + } + try{ + $channelsData = WorkerAmiActions::invokeApi('getChannels', []); + if(!empty($channelsData)){ + $ids = array_keys($channelsData); + $chanIds = array_keys($this->activeChannels); + foreach ($chanIds as $id){ + if(!in_array($id, $ids)){ + unset($this->activeChannels[$id]); + } + } + } + }catch (Throwable $e){ + SystemMessages::sysLogMsg( + static::class, + "Channel contole: " . $e->getMessage(), + LOG_WARNING + ); + } + } + /** * Старт работы листнера. * @@ -175,6 +204,10 @@ private function printActiveCalls():void if($this->init){ return; } + if(time() - $this->lastControlActiveCalls > 60 && !empty($this->activeChannels)){ + $this->lastControlActiveCalls = time(); + $this->channelAdditionalControle(); + } $queuesData = $this->queuesData; foreach ($queuesData as $qId => $queueTmpData){ diff --git a/bin/WorkerAmiActions.php b/bin/WorkerAmiActions.php index ec49d49..1f66552 100644 --- a/bin/WorkerAmiActions.php +++ b/bin/WorkerAmiActions.php @@ -147,6 +147,12 @@ public function restAPICallback(array $request): PBXApiResult return $res; } + public function getChannels() + { + $am = Util::getAstManager('off'); + return $am->GetChannels(); + } + /** * Сериализует данные и сохраняет их во временный файл. * @param $data From a01830039be5e06558f8115f185a10f598e7c204 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Fri, 26 Dec 2025 22:46:44 +0300 Subject: [PATCH 05/23] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D1=81=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5=D0=BC=20ModuleSoftphoneBac?= =?UTF-8?q?kend.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/WorkerActiveCalls.php | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index ade89af..9fcc3b5 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -18,6 +18,8 @@ */ namespace Modules\ModuleMonitorActiveCalls\bin; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\GuzzleException; use MikoPBX\Common\Models\CallQueueMembers; use MikoPBX\Common\Models\CallQueues; use MikoPBX\Common\Models\Extensions; @@ -37,6 +39,7 @@ class WorkerActiveCalls extends WorkerBase public Logger $logger; private bool $init = true; private string $lastPrintHash = ''; + private string $lastPrintUserHash = ''; private int $lastPrintCalls = 0; private int $lastControlActiveCalls = 0; /** @var AsteriskManager $am */ @@ -346,8 +349,31 @@ private function printActiveCalls():void if($newPrintHash <> $this->lastPrintHash){ $this->lastPrintHash = $newPrintHash; CacheManager::setCacheData('getActiveChannelsV2Action', ['queues' => $queuesData, 'calls' => $calls], 80000); - CacheManager::setCacheData('getUsersStates', ['states' => $this->states], 80000); } + $data = ['states' => $this->states]; + $dataPrint = json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); + $newPrintHash = md5($dataPrint); + if($newPrintHash <> $this->lastPrintUserHash){ + $this->lastPrintUserHash = $newPrintHash; + CacheManager::setCacheData('getUsersStates', $data, 80000); + if(file_exists('/etc/nginx/mikopbx/modules_locations/ModuleSoftphoneBackend.conf')){ + try { + $client = new Client([ + 'base_uri' => 'http://127.0.0.1/pbxcore/api/module-softphone-backend/v1/', + 'connect_timeout' => 1.0, + 'timeout' => 1.0, + ]); + $client->post('pub/users-state', [ + 'connect_timeout' => 1.0, + 'timeout' => 1.0, + 'json' => $data, + ]); + } catch (GuzzleException $e) { + unset($e); + } + } + } + } /** From 337fce792565443ca2b3734f24b9028d5e77e965 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Mon, 29 Dec 2025 16:51:57 +0300 Subject: [PATCH 06/23] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B2=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?ModuleSoftphoneBackend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/WorkerActiveCalls.php | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 9fcc3b5..0c33c6f 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -18,8 +18,6 @@ */ namespace Modules\ModuleMonitorActiveCalls\bin; -use GuzzleHttp\Client; -use GuzzleHttp\Exception\GuzzleException; use MikoPBX\Common\Models\CallQueueMembers; use MikoPBX\Common\Models\CallQueues; use MikoPBX\Common\Models\Extensions; @@ -31,6 +29,7 @@ use MikoPBX\Core\System\Util; use Modules\ModuleMonitorActiveCalls\Lib\CacheManager; use Modules\ModuleMonitorActiveCalls\Lib\Logger; +use Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController; require_once 'Globals.php'; @@ -356,19 +355,10 @@ private function printActiveCalls():void if($newPrintHash <> $this->lastPrintUserHash){ $this->lastPrintUserHash = $newPrintHash; CacheManager::setCacheData('getUsersStates', $data, 80000); - if(file_exists('/etc/nginx/mikopbx/modules_locations/ModuleSoftphoneBackend.conf')){ + if(class_exists('\Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController')){ try { - $client = new Client([ - 'base_uri' => 'http://127.0.0.1/pbxcore/api/module-softphone-backend/v1/', - 'connect_timeout' => 1.0, - 'timeout' => 1.0, - ]); - $client->post('pub/users-state', [ - 'connect_timeout' => 1.0, - 'timeout' => 1.0, - 'json' => $data, - ]); - } catch (GuzzleException $e) { + ApiController::publishUserStates($data); + }catch (\Exception $e){ unset($e); } } From 738dd997ab8cbf6cf7238cc9d6e23819cf892948 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:58:33 +0300 Subject: [PATCH 07/23] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D0=B1=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=20AMI,=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20manager.conf=20?= =?UTF-8?q?=D1=81=20=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/MonitorActiveCallsConf.php | 32 ++++++++++++++++++++-------- bin/WorkerActiveCalls.php | 10 +++++---- bin/WorkerAmiActions.php | 38 +++++++++++++++++++++------------- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/Lib/MonitorActiveCallsConf.php b/Lib/MonitorActiveCallsConf.php index d573236..9bcb841 100644 --- a/Lib/MonitorActiveCallsConf.php +++ b/Lib/MonitorActiveCallsConf.php @@ -9,17 +9,15 @@ namespace Modules\ModuleMonitorActiveCalls\Lib; -use MikoPBX\Core\System\SystemMessages; use MikoPBX\Core\System\Util; use MikoPBX\Core\Workers\Cron\WorkerSafeScriptsCore; use MikoPBX\Modules\Config\ConfigClass; -use MikoPBX\PBXCoreREST\Lib\PBXApiResult; -use Modules\ModuleMonitorActiveCalls\bin\ActiveCallsFromCdr; use Modules\ModuleMonitorActiveCalls\bin\WorkerActiveCalls; use Modules\ModuleMonitorActiveCalls\bin\WorkerAmiActions; class MonitorActiveCallsConf extends ConfigClass { + public const AMI_USER = 'monitor-active-calls'; /** * Receive information about mikopbx main database changes @@ -38,12 +36,6 @@ public function modelsEventChangeData($data): void public function getModuleWorkers(): array { return [ - /* - [ - 'type' => WorkerSafeScriptsCore::CHECK_BY_PID_NOT_ALERT, - 'worker' => ActiveCallsFromCdr::class, - ], - //*/ [ 'type' => WorkerSafeScriptsCore::CHECK_BY_BEANSTALK, 'worker' => WorkerAmiActions::class, @@ -55,6 +47,28 @@ public function getModuleWorkers(): array ]; } + /** + * Генератор секции пиров для manager.conf + * + * + * @return string + */ + public function generateManagerConf(): string + { + $arr_params = array_merge(WorkerActiveCalls::CALL_EVENTS, WorkerActiveCalls::QUEUE_EVENTS); + $conf = "[".self::AMI_USER."]" . PHP_EOL; + $conf .= "secret=".self::AMI_USER . PHP_EOL; + $conf .= 'deny=0.0.0.0/0.0.0.0' . PHP_EOL; + $conf .= 'permit=127.0.0.1/255.255.255.255' . PHP_EOL; + $conf .= 'read=system,agent,call,cdr,user' . PHP_EOL; + $conf .= 'write=system,agent,call,originate' . PHP_EOL; + $conf .= 'eventfilter=!UserEvent: CdrConnector' . PHP_EOL; + $conf .= 'eventfilter=Event: (' . implode('|', $arr_params) . ')' . PHP_EOL; + $conf .= PHP_EOL; + + return $conf; + } + /** * @param array $tasks */ diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 0c33c6f..7d94b07 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -29,6 +29,7 @@ use MikoPBX\Core\System\Util; use Modules\ModuleMonitorActiveCalls\Lib\CacheManager; use Modules\ModuleMonitorActiveCalls\Lib\Logger; +use Modules\ModuleMonitorActiveCalls\Lib\MonitorActiveCallsConf; use Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController; require_once 'Globals.php'; @@ -59,7 +60,9 @@ class WorkerActiveCalls extends WorkerBase public const STATE_ONHOLD = 'OnHold'; public const STATE_RING = 'Ring'; public const STATE_UNAVAILIBLE = 'Unavailable'; - private const CALL_EVENTS = [ + public const CALL_EVENTS = [ + 'UserEvent', + 'ExtensionStatus', 'NewCallerid', 'BridgeEnter', 'BridgeLeave', @@ -89,7 +92,7 @@ class WorkerActiveCalls extends WorkerBase public const CALL_TYPE_IN = 'incoming'; - private const QUEUE_EVENTS = [ + public const QUEUE_EVENTS = [ 'QueueCallerJoin', 'QueueMemberStatus', 'QueueCallerLeave' @@ -648,9 +651,8 @@ public function getExtensions() private function initManagerAsterisk():void { $amiPort = PbxSettings::getValueByKey('AMIPort'); - $this->amCustom = new CustomAsteriskManager(); // Оригинальный AsteriskManager работает плохо с BridgeList и BridgeInfo - $this->amCustom->connect("127.0.0.1:$amiPort"); + $this->amCustom->connect("127.0.0.1:$amiPort", MonitorActiveCallsConf::AMI_USER, MonitorActiveCallsConf::AMI_USER); $pingTube = $this->makePingTubeName(self::class); $params = ['Operation' => 'Add', 'Filter' => 'UserEvent: '.$pingTube]; diff --git a/bin/WorkerAmiActions.php b/bin/WorkerAmiActions.php index 1f66552..4f78492 100644 --- a/bin/WorkerAmiActions.php +++ b/bin/WorkerAmiActions.php @@ -20,6 +20,7 @@ namespace Modules\ModuleMonitorActiveCalls\bin; require_once 'Globals.php'; +use MikoPBX\Common\Models\PbxSettings; use MikoPBX\Core\Asterisk\AsteriskManager; use MikoPBX\Core\System\BeanstalkClient; use MikoPBX\Core\System\SystemMessages; @@ -27,6 +28,7 @@ use MikoPBX\Core\Workers\WorkerBase; use MikoPBX\PBXCoreREST\Lib\PBXApiResult; use Modules\ModuleMonitorActiveCalls\Lib\MikoPBXVersion; +use Modules\ModuleMonitorActiveCalls\Lib\MonitorActiveCallsConf; class WorkerAmiActions extends WorkerBase { @@ -45,6 +47,21 @@ public function signalHandler(int $signal): void { parent::signalHandler($signal); cli_set_process_title('SHUTDOWN_'.cli_get_process_title()); + $this->needRestart = true; + } + + + /** + * Подключение к AMI. + * @param string $events + * @return AsteriskManager + */ + public static function getAstManager(string $events = 'on'):AsteriskManager + { + $am = new AsteriskManager(); + $port = PbxSettings::getValueByKey('AMIPort'); + $am->connect("127.0.0.1:$port", MonitorActiveCallsConf::AMI_USER, MonitorActiveCallsConf::AMI_USER, $events); + return $am; } /** @@ -54,13 +71,14 @@ public function signalHandler(int $signal): void */ public function start($argv):void { - $this->am = Util::getAstManager(); + $this->am = self::getAstManager(); $beanstalk = new BeanstalkClient(self::class); $beanstalk->subscribe(self::class, [$this, 'onEvents']); $beanstalk->subscribe($this->makePingTubeName(self::class), [$this, 'pingCallBack']); while ($this->needRestart === false) { $beanstalk->wait(); } + $this->am->disconnect(); } /** @@ -115,31 +133,24 @@ public function restAPICallback(array $request): PBXApiResult if('join' === $action) { $res->success = true; - $am = Util::getAstManager('off'); $variable = "pt1c_cid=SPY-{$request['data']['number']},ALLOW_MULTY_ANSWER=1"; $channel = "Local/{$request['data']['number']}@internal-originate"; - $am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qBS', null, $request['data']['number'], $variable); - + $this->am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qBS', null, $request['data']['number'], $variable); SystemMessages::sysLogMsg('SPY-ACTIVE-CHAN', "$action: {$request['data']['number']} to $actionChannel. mode 'qBS'"); }elseif ('whisper' === $action){ $res->success = true; - $am = Util::getAstManager('off'); $variable = "pt1c_cid=SPY-{$request['data']['number']},ALLOW_MULTY_ANSWER=1"; $channel = "Local/{$request['data']['number']}@internal-originate"; - $am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qwS', null, $request['data']['number'], $variable); - + $this->am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qwS', null, $request['data']['number'], $variable); SystemMessages::sysLogMsg('SPY-ACTIVE-CHAN', "$action: {$request['data']['number']} to $actionChannel. mode 'qw'"); }elseif ('listen' === $action){ $res->success = true; - $am = Util::getAstManager('off'); $variable = "pt1c_cid=SPY-{$request['data']['number']},ALLOW_MULTY_ANSWER=1"; $channel = "Local/{$request['data']['number']}@internal-originate"; - $am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qS', null, $request['data']['number'], $variable); - + $this->am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qS', null, $request['data']['number'], $variable); SystemMessages::sysLogMsg('SPY-ACTIVE-CHAN', "$action: {$request['data']['number']} to $actionChannel. mode 'qoS'"); }elseif ('hangup' === $action){ - $am = Util::getAstManager('off'); - $am->Hangup($request['data']['ch1']??''); + $this->am->Hangup($request['data']['ch1']??''); }else{ $res->success = false; $res->messages[] = 'API action not found in moduleRestAPICallback ModuleMonitorActiveCalls '.$action; @@ -149,8 +160,7 @@ public function restAPICallback(array $request): PBXApiResult public function getChannels() { - $am = Util::getAstManager('off'); - return $am->GetChannels(); + return $this->am->getChannels(); } /** From e924cd1fc5eb5a7b5a8064fd913ae8cc0c17790b Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Thu, 15 Jan 2026 10:53:54 +0300 Subject: [PATCH 08/23] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B5=D1=80=D0=BE=D0=B2.=20=D0=94=D0=BE=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B8=D0=BB=20=D0=BB=D0=BE=D0=B3=D0=B87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleMonitorActiveCallsController.php | 1 + App/Views/index.volt | 77 +++++----- Lib/AsteriskManager.php | 11 +- bin/WorkerActiveCalls.php | 13 +- bin/WorkerAmiActions.php | 47 +++--- .../css/module-monitor-active-calls.css | 65 ++++++++- .../js/module-monitor-active-calls-index.js | 115 +++++++++++++++ .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 135 ++++++++++++++++++ 9 files changed, 396 insertions(+), 70 deletions(-) diff --git a/App/Controllers/ModuleMonitorActiveCallsController.php b/App/Controllers/ModuleMonitorActiveCallsController.php index ad8eb13..b67ef59 100644 --- a/App/Controllers/ModuleMonitorActiveCallsController.php +++ b/App/Controllers/ModuleMonitorActiveCallsController.php @@ -56,6 +56,7 @@ public function indexAction(): void $headerCollectionCSS->addCss("css/cache/$this->moduleUniqueID/module-monitor-active-calls.css", true); $headerCollectionCSS->addCss('css/vendor/datatable/dataTables.semanticui.min.css', true); $headerCollectionCSS->addCss('css/vendor/semantic/comment.css', true); + $headerCollectionCSS->addCss('css/vendor/semantic/card.css', true); $headerCollectionCSS->addCss('css/vendor/semantic/list.css', true); $this->view->form = new ModuleMonitorActiveCallsForm(); diff --git a/App/Views/index.volt b/App/Views/index.volt index 6ecf63f..d5cf8f8 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -99,48 +99,47 @@
- - - - - - - - - - - - - - - - - - -
{{ t._('module_monitorCalls_columnTitleAgent') }}{{ t._('module_monitorCalls_columnTitleSob') }}
-
-
- - <% number %> - +
+
+
+
+ + <% number %> + + <% agent.name %> +
+ +
+
+ + <% getPeerPhoneLabel(number) %>
-
- <% agent.name %> +
+ + <% getPeerNameLabel(number) %>
-
<% getSrcNumForAgent(number) || '—' %> - -
+
+
+
{{ t._('module_monitorCalls_legendTitleIdle') }}
diff --git a/Lib/AsteriskManager.php b/Lib/AsteriskManager.php index 2ecb7f9..917eb95 100644 --- a/Lib/AsteriskManager.php +++ b/Lib/AsteriskManager.php @@ -602,7 +602,7 @@ public function waitUserEvent(bool $allow_timeout = false): array * @example examples/sip_show_peer.php Get information about a sip peer * */ - public function connect(string $server = null, string $username = null, string $secret = null, string $events = 'on'): bool + public function connect(?string $server = null, ?string $username = null, ?string $secret = null, string $events = 'on'): bool { $this->listenEvents = $events; // use config if not specified @@ -758,20 +758,19 @@ public function ChangeMonitor(string $channel, string $file): array * Execute Command * * @param string $command - * @param ?string $actionid message matching variable + * @param ?string $actionId message matching variable * * @return array * @example examples/sip_show_peer.php Get information about a sip peer * @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Command * @link http://www.voip-info.org/wiki-Asterisk+CLI */ - public function Command(string $command, string $actionid = null): array + public function Command(string $command, ?string $actionId = null): array { $parameters = ['Command' => $command]; - if ($actionid) { - $parameters['ActionID'] = $actionid; + if ($actionId) { + $parameters['ActionID'] = $actionId; } - return $this->sendRequest('Command', $parameters); } diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 7d94b07..3882570 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -40,10 +40,7 @@ class WorkerActiveCalls extends WorkerBase private bool $init = true; private string $lastPrintHash = ''; private string $lastPrintUserHash = ''; - private int $lastPrintCalls = 0; private int $lastControlActiveCalls = 0; - /** @var AsteriskManager $am */ - protected AsteriskManager $am; protected CustomAsteriskManager $amCustom; private array $activeChannels = []; private array $states = []; @@ -158,13 +155,11 @@ private function channelAdditionalControle() */ public function start($argv):void { - $this->logger = new Logger('ActiveCalls', 'WorkerActiveCalls'); + $this->logger = new Logger('ActiveCalls', 'ModuleMonitorActiveCalls'); $this->logger->writeInfo('Starting...'); $this->initManagerAsterisk(); - $this->getExtensionsInfo(); $this->updateStates(); - $this->logger->writeInfo('Collect active lines...'); $this->collectActiveChannels(); $this->collectActiveBridges(); @@ -177,6 +172,7 @@ public function start($argv):void $this->amCustom->waitUserEvent(true); if (!$this->amCustom->loggedIn()) { sleep(1); + $this->logger->writeInfo('initManagerAsterisk...'); $this->initManagerAsterisk(); } } @@ -360,7 +356,9 @@ private function printActiveCalls():void CacheManager::setCacheData('getUsersStates', $data, 80000); if(class_exists('\Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController')){ try { + $this->logger->writeInfo('publishUserStates...'); ApiController::publishUserStates($data); + $this->logger->writeInfo('end publishUserStates...'); }catch (\Exception $e){ unset($e); } @@ -651,7 +649,8 @@ public function getExtensions() private function initManagerAsterisk():void { $amiPort = PbxSettings::getValueByKey('AMIPort'); - $this->amCustom = new CustomAsteriskManager(); // Оригинальный AsteriskManager работает плохо с BridgeList и BridgeInfo + $this->amCustom = new CustomAsteriskManager(); + // Оригинальный AsteriskManager работает плохо с BridgeList и BridgeInfo $this->amCustom->connect("127.0.0.1:$amiPort", MonitorActiveCallsConf::AMI_USER, MonitorActiveCallsConf::AMI_USER); $pingTube = $this->makePingTubeName(self::class); diff --git a/bin/WorkerAmiActions.php b/bin/WorkerAmiActions.php index 4f78492..d887b3b 100644 --- a/bin/WorkerAmiActions.php +++ b/bin/WorkerAmiActions.php @@ -27,14 +27,19 @@ use MikoPBX\Core\System\Util; use MikoPBX\Core\Workers\WorkerBase; use MikoPBX\PBXCoreREST\Lib\PBXApiResult; +use Modules\ModuleMonitorActiveCalls\Lib\AsteriskManager as CustomAsteriskManager; +use Modules\ModuleMonitorActiveCalls\Lib\Logger; use Modules\ModuleMonitorActiveCalls\Lib\MikoPBXVersion; use Modules\ModuleMonitorActiveCalls\Lib\MonitorActiveCallsConf; class WorkerAmiActions extends WorkerBase { + public Logger $logger; + public int $countReq = 0; public float $counterStartTime = 0; - protected AsteriskManager $am; + protected CustomAsteriskManager $amCustom; + /** * Handles the received signal. @@ -48,19 +53,23 @@ public function signalHandler(int $signal): void parent::signalHandler($signal); cli_set_process_title('SHUTDOWN_'.cli_get_process_title()); $this->needRestart = true; + $this->logger->writeInfo('signalHandler...'.$signal); } /** * Подключение к AMI. * @param string $events - * @return AsteriskManager + * @return CustomAsteriskManager */ - public static function getAstManager(string $events = 'on'):AsteriskManager + public function getAstManager(string $events = 'on'):CustomAsteriskManager { - $am = new AsteriskManager(); + $am = new CustomAsteriskManager(); $port = PbxSettings::getValueByKey('AMIPort'); - $am->connect("127.0.0.1:$port", MonitorActiveCallsConf::AMI_USER, MonitorActiveCallsConf::AMI_USER, $events); + $result = $am->connect("127.0.0.1:$port", MonitorActiveCallsConf::AMI_USER, MonitorActiveCallsConf::AMI_USER, $events); + if(!$result){ + $this->logger->writeError('Fail connect AMI...'); + } return $am; } @@ -71,14 +80,16 @@ public static function getAstManager(string $events = 'on'):AsteriskManager */ public function start($argv):void { - $this->am = self::getAstManager(); + $this->logger = new Logger('AmiActions', 'ModuleMonitorActiveCalls'); + $this->logger->writeInfo('Starting...'); + $this->amCustom = $this->getAstManager(); $beanstalk = new BeanstalkClient(self::class); $beanstalk->subscribe(self::class, [$this, 'onEvents']); $beanstalk->subscribe($this->makePingTubeName(self::class), [$this, 'pingCallBack']); while ($this->needRestart === false) { $beanstalk->wait(); } - $this->am->disconnect(); + $this->amCustom->disconnect(); } /** @@ -93,6 +104,7 @@ public function onEvents($tube): void }catch (\Throwable $e){ return; } + $this->logger->writeInfo($data, 'Events...'); $res_data = ''; $funcName = $data['function']??''; if(method_exists($this, $funcName)){ @@ -101,8 +113,10 @@ public function onEvents($tube): void }else{ $res_data = $this->$funcName(...$data['args']??[]); } - $res_data = serialize($res_data); - $res_data = $this->saveResultInTmpFile($res_data); + $this->logger->writeInfo($res_data, 'Result...'); + $res_data = $this->saveResultInTmpFile(serialize($res_data)); + }else{ + $this->logger->writeError('method not exists...'); } $tube->reply($res_data); } @@ -135,22 +149,22 @@ public function restAPICallback(array $request): PBXApiResult $res->success = true; $variable = "pt1c_cid=SPY-{$request['data']['number']},ALLOW_MULTY_ANSWER=1"; $channel = "Local/{$request['data']['number']}@internal-originate"; - $this->am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qBS', null, $request['data']['number'], $variable); + $this->amCustom->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qBS', null, $request['data']['number'], $variable); SystemMessages::sysLogMsg('SPY-ACTIVE-CHAN', "$action: {$request['data']['number']} to $actionChannel. mode 'qBS'"); }elseif ('whisper' === $action){ $res->success = true; $variable = "pt1c_cid=SPY-{$request['data']['number']},ALLOW_MULTY_ANSWER=1"; $channel = "Local/{$request['data']['number']}@internal-originate"; - $this->am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qwS', null, $request['data']['number'], $variable); + $this->amCustom->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qwS', null, $request['data']['number'], $variable); SystemMessages::sysLogMsg('SPY-ACTIVE-CHAN', "$action: {$request['data']['number']} to $actionChannel. mode 'qw'"); }elseif ('listen' === $action){ $res->success = true; $variable = "pt1c_cid=SPY-{$request['data']['number']},ALLOW_MULTY_ANSWER=1"; $channel = "Local/{$request['data']['number']}@internal-originate"; - $this->am->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qS', null, $request['data']['number'], $variable); + $this->amCustom->Originate($channel, null, null, null, 'ChanSpy', $actionChannel.',qS', null, $request['data']['number'], $variable); SystemMessages::sysLogMsg('SPY-ACTIVE-CHAN', "$action: {$request['data']['number']} to $actionChannel. mode 'qoS'"); }elseif ('hangup' === $action){ - $this->am->Hangup($request['data']['ch1']??''); + $this->amCustom->Hangup($request['data']['ch1']??''); }else{ $res->success = false; $res->messages[] = 'API action not found in moduleRestAPICallback ModuleMonitorActiveCalls '.$action; @@ -160,7 +174,7 @@ public function restAPICallback(array $request): PBXApiResult public function getChannels() { - return $this->am->getChannels(); + return $this->amCustom->getChannels(); } /** @@ -211,9 +225,10 @@ private function saveResultInTmpFile($data):string * Метод следует вызывать при работе с API из прочих процессов. * @param $function * @param $args + * @param int $timeout * @return mixed|PBXApiResult */ - public static function invokeApi($function, $args) + public static function invokeApi($function, $args, int $timeout = 20) { $req = [ 'function' => $function, @@ -221,7 +236,7 @@ public static function invokeApi($function, $args) ]; $client = new BeanstalkClient(self::class); try { - $result = $client->request(json_encode($req, JSON_THROW_ON_ERROR), 20); + $result = $client->request(json_encode($req, JSON_THROW_ON_ERROR), $timeout); if(file_exists($result)){ $filename = $result; $result = json_decode(file_get_contents($result), true, 512, JSON_THROW_ON_ERROR); diff --git a/public/assets/css/module-monitor-active-calls.css b/public/assets/css/module-monitor-active-calls.css index 2c068e5..768601f 100644 --- a/public/assets/css/module-monitor-active-calls.css +++ b/public/assets/css/module-monitor-active-calls.css @@ -12,4 +12,67 @@ .ui.table tbody tr.row-dialing > td { background-color: rgba(246, 229, 251, 0.65) !important; } .ui.table tbody tr.row-offline > td { background-color:#f5f5f5 !important; color:rgba(0,0,0,.45); } .ui.table tbody tr.row-pause > td { background-color: #fff3e0 !important; color: rgba(0, 0, 0, 0.6) !important; -} \ No newline at end of file +} + +/* Agents tiles (cards) */ +.ui.cards.agent-cards { + margin-top: 0 !important; +} +.ui.cards.agent-cards > .ui.card.agent-card { + width: 240px; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: none; + margin: 0.5em !important; +} +.ui.cards.agent-cards > .ui.card.agent-card > .content { + padding: 0.6em 0.7em; +} +.ui.card.agent-card .agent-card-header { + display: flex; + align-items: center; + gap: 0.5em; + white-space: nowrap; +} +.ui.card.agent-card .content > .header.agent-card-header { + font-size: inherit !important; + font-weight: 600; + line-height: 1.2; +} +.ui.card.agent-card .content > .meta.agent-peer { + font-size: inherit !important; +} +.ui.card.agent-card .agent-name { + overflow: hidden; + text-overflow: ellipsis; +} +.ui.basic.label.agent-num-label { + border: none !important; + box-shadow: none !important; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-variant-numeric: tabular-nums; + padding: 0.15em 0.45em !important; +} +.ui.card.agent-card .agent-peer { + margin-top: 0.35em; + line-height: 1.2; +} +.ui.card.agent-card .peer-line { + display: flex; + align-items: center; + gap: 0.45em; + white-space: nowrap; +} +.ui.card.agent-card .agent-phone { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-variant-numeric: tabular-nums; +} +.ui.card.agent-card .peer-name { + overflow: hidden; + text-overflow: ellipsis; +} + +/* Status highlight for cards (same palette as table rows) */ +.ui.card.agent-card.row-available { background-color:#e8f5e9 !important; border-color: rgba(33, 186, 69, 0.35) !important; } +.ui.card.agent-card.row-in-call { background-color:#e8f0fe !important; border-color: rgba(33, 133, 208, 0.35) !important; } +.ui.card.agent-card.row-dialing { background-color: rgba(246, 229, 251, 0.65) !important; border-color: rgba(224, 57, 151, 0.25) !important; } +.ui.card.agent-card.row-offline { background-color:#f5f5f5 !important; border-color: rgba(0,0,0,0.12) !important; color:rgba(0,0,0,.55); } \ No newline at end of file diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index 6b300a4..620553f 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -61,6 +61,7 @@ var ModuleMonitorActiveCalls = { delimiters: ["<%", "%>"], methods: { updatedCallsFromResponse: function updatedCallsFromResponse(data) { + var _this = this; var queueNameEl = $(window[className].queueNameSelector); this.minWaitVisible = 1 * $('#minWaitVisibleValue').val(); this.queues = data.queues; @@ -87,10 +88,111 @@ var ModuleMonitorActiveCalls = { window[className].isInit = false; } } + + // Normalize Semantic UI Card typography after render + this.$nextTick(function () { + _this.normalizeAgentCards(); + }); }, formatElapsedTime: function formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, + normalizeAgentCards: function normalizeAgentCards() { + if (!this.$el) return; + + // Cleanup artifacts from previous experiments (placeholders/spacers). + var artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer'); + artifacts.forEach(function (el) { + return el.remove(); + }); + + // Masonry-like layout via CSS columns to avoid empty gaps with different card heights. + // We inject styles here because this project restricts edits to /public/assets/js/src/. + this.ensureAgentCardsMasonry(); + + // Prevent "equal height" cards in one row (Semantic UI cards are flex). + var cardsContainer = this.$el.querySelector('.ui.cards.agent-cards'); + if (cardsContainer) { + cardsContainer.style.alignItems = 'flex-start'; + cardsContainer.style.alignContent = 'flex-start'; + } + var cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card'); + cards.forEach(function (card) { + card.style.alignSelf = 'flex-start'; + }); + + // Semantic UI makes .header bigger than normal text; we need same font size. + var headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header'); + headers.forEach(function (el) { + el.style.fontSize = '1em'; + el.style.lineHeight = '1.2'; + }); + var metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer'); + metas.forEach(function (el) { + el.style.fontSize = '1em'; + el.style.lineHeight = '1.2'; + }); + + // Normalize label/name typography so they have same text height. + var numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label'); + numLabels.forEach(function (el) { + el.style.fontSize = '1em'; + el.style.lineHeight = '1.2'; + el.style.display = 'inline-flex'; + el.style.alignItems = 'center'; + el.style.paddingTop = '0'; + el.style.paddingBottom = '0'; + }); + var names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name'); + names.forEach(function (el) { + el.style.lineHeight = '1.2'; + el.style.display = 'inline-flex'; + el.style.alignItems = 'center'; + }); + + // Tune vertical gap between cards so that: + // 2 * (shortCardHeight + gap) ~= (tallCardHeight + gap) + // This makes the masonry columns visually "grid-like". + this.adjustAgentCardsGap(); + }, + adjustAgentCardsGap: function adjustAgentCardsGap() { + if (!this.$el) return; + var container = this.$el.querySelector('.ui.cards.agent-cards'); + if (!container) return; + var cards = Array.from(container.querySelectorAll('.ui.card.agent-card')); + if (!cards.length) return; + var tallCard = cards.find(function (c) { + return c.querySelector('.meta.agent-peer'); + }); + var shortCard = cards.find(function (c) { + return !c.querySelector('.meta.agent-peer'); + }); + if (!tallCard || !shortCard) return; + var ht = tallCard.getBoundingClientRect().height; + var hs = shortCard.getBoundingClientRect().height; + if (!ht || !hs) return; + + // From 2*(hs+g) = ht+g => g = ht - 2*hs + var gap = ht - 2 * hs; + if (!Number.isFinite(gap)) return; + + // Clamp to sane range; negative means "no extra gap needed". + gap = Math.max(0, Math.min(20, Math.round(gap))); + container.style.setProperty('--agent-card-gap', "".concat(gap, "px")); + }, + ensureAgentCardsMasonry: function ensureAgentCardsMasonry() { + var styleId = 'agent-cards-masonry-style'; + if (!document.getElementById(styleId)) { + var styleEl = document.createElement('style'); + styleEl.id = styleId; + styleEl.textContent = "\n/* Masonry layout for agents cards (scoped) */\n.ui.cards.agent-cards.agent-cards-masonry {\n display: block !important;\n column-width: 240px;\n column-gap: 1em;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n padding-bottom: 0.5em !important;\n}\n.ui.cards.agent-cards.agent-cards-masonry > .ui.card.agent-card {\n display: inline-block !important;\n width: 100% !important;\n margin: 0 0 var(--agent-card-gap, 12px) 0 !important;\n break-inside: avoid;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n}\n\t\t\t\t\t\t".trim(); + document.head.appendChild(styleEl); + } + var cardsContainer = this.$el && this.$el.querySelector ? this.$el.querySelector('.ui.cards.agent-cards') : null; + if (cardsContainer) { + cardsContainer.classList.add('agent-cards-masonry'); + } + }, getSrcNumForAgent: function getSrcNumForAgent(agentNumber) { var result = '-'; var answeredFound = false; @@ -173,6 +275,19 @@ var ModuleMonitorActiveCalls = { } } return result; + }, + hasPeerPhone: function hasPeerPhone(agentNumber) { + var phone = String(this.getSrcNumForAgent(agentNumber) || '').trim(); + return phone !== '' && phone !== '-' && phone !== '—'; + }, + getPeerPhoneLabel: function getPeerPhoneLabel(agentNumber) { + var phone = String(this.getSrcNumForAgent(agentNumber) || '').trim(); + return this.hasPeerPhone(agentNumber) ? phone : '—'; + }, + getPeerNameLabel: function getPeerNameLabel(agentNumber) { + // Placeholder for future "peer name" feature + void agentNumber; + return '—'; } }, data: { diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index 796a933..b660693 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","calls","Array","isArray","allCalls","formatElapsedTime","enterTime","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","find","ch","bridgeChannels","err","e","f","i","length","tmpCall","spyer","spy_num","exten","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","parseFloat","ms","date","Date","hours","String","getHours","padStart","minutes","getMinutes","seconds","getSeconds","concat","answer","Math","floor","now","secondToTime","start","getCallTime","queue","_data$calls","push","apply","_toConsumableArray","$nextTick","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","remove","updateLines","setInterval","diffSeconds","round","toString","settingName","_defineProperty","api","url","on","method","successTest","response","Object","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","document","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","calls","Array","isArray","allCalls","$nextTick","normalizeAgentCards","formatElapsedTime","enterTime","$el","artifacts","querySelectorAll","forEach","remove","ensureAgentCardsMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","metas","numLabels","display","paddingTop","paddingBottom","names","adjustAgentCardsGap","container","from","length","tallCard","find","c","shortCard","ht","getBoundingClientRect","height","hs","gap","Number","isFinite","Math","max","min","round","setProperty","concat","styleId","document","getElementById","styleEl","createElement","textContent","trim","head","appendChild","classList","add","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","e","f","i","tmpCall","spyer","spy_num","exten","hasPeerPhone","phone","String","getPeerPhoneLabel","getPeerNameLabel","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","parseFloat","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","floor","now","secondToTime","start","getCallTime","queue","_data$calls","push","apply","_toConsumableArray","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","updateLines","setInterval","diffSeconds","toString","settingName","_defineProperty","api","url","on","method","successTest","response","Object","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Masonry-like layout via CSS columns to avoid empty gaps with different card heights.\n\t\t\t\t\t// We inject styles here because this project restricts edits to /public/assets/js/src/.\n\t\t\t\t\tthis.ensureAgentCardsMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Tune vertical gap between cards so that:\n\t\t\t\t\t// 2 * (shortCardHeight + gap) ~= (tallCardHeight + gap)\n\t\t\t\t\t// This makes the masonry columns visually \"grid-like\".\n\t\t\t\t\tthis.adjustAgentCardsGap();\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tensureAgentCardsMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-masonry-style';\n\t\t\t\t\tif (!document.getElementById(styleId)) {\n\t\t\t\t\t\tconst styleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tstyleEl.textContent = `\n/* Masonry layout for agents cards (scoped) */\n.ui.cards.agent-cards.agent-cards-masonry {\n display: block !important;\n column-width: 240px;\n column-gap: 1em;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n padding-bottom: 0.5em !important;\n}\n.ui.cards.agent-cards.agent-cards-masonry > .ui.card.agent-card {\n display: inline-block !important;\n width: 100% !important;\n margin: 0 0 var(--agent-card-gap, 12px) 0 !important;\n break-inside: avoid;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n}\n\t\t\t\t\t\t`.trim();\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-masonry');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Placeholder for future \"peer name\" feature\n\t\t\t\t\tvoid agentNumber;\n\t\t\t\t\treturn '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,KAAK,GAAO,6BAA6B;AAC/C,IAAMC,MAAM,GAAM,kCAAkC;AACpD,IAAMC,SAAS,GAAG,0BAA0B;AAC5C,IAAMC,cAAc,GAAG,sBAAsB;;AAE7C;AACA,IAAMC,wBAAwB,GAAG;EAChCC,MAAM,EAAE,IAAI;EACZC,iBAAiB,EAAE,mCAAmC;EACtDC,QAAQ,EAAEC,CAAC,CAAC,GAAG,GAACP,MAAM,CAAC;EACvBQ,WAAW,EAAED,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EAC1CS,UAAU,EAAEF,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EACzCU,iBAAiB,EAAEC,aAAa,GAAGZ,KAAK,GAAG,oBAAoB;EAC/Da,mBAAmB,EAAED,aAAa,GAAGZ,KAAK,GAAG,sBAAsB;EACnEc,cAAc,EAAEF,aAAa,GAAGZ,KAAK,GAAG,cAAc;EACtDe,iBAAiB,EAAEH,aAAa,GAAGZ,KAAK,GAAG,WAAW;EACtDgB,OAAO,EAAEC,SAAS;EAElB;AACD;AACA;AACA;EACCC,aAAa,EAAE,CAAC,CAAC;EACjB;AACD;AACA;EACCC,UAAU,WAAVA,UAAUA,CAAA,EAAG;IACZX,CAAC,CAAC,0BAA0B,CAAC,CAACY,QAAQ,CAAC;MACtCC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,aAAa,EAAEJ,KAAK,CAAC;MACxD;IACD,CAAC,CAAC;IACFd,CAAC,CAAC,iCAAiC,CAAC,CAACY,QAAQ,CAAC;MAC7CC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDhB,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAACL,KAAK,CAAC;QACpCG,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,gBAAgB,EAAEJ,KAAK,CAAC;MAC3D;IACD,CAAC,CAAC;IACF,IAAIM,UAAU,GAAGpB,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC;IAEvCF,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,GAAG,IAAIC,GAAG,CAAC;MACzCC,EAAE,EAAE,YAAY;MAChBC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBC,OAAO,EAAE;QACRC,wBAAwB,WAAxBA,wBAAwBA,CAACC,IAAI,EAAE;UAAA,IAAAC,KAAA;UAC9B,IAAIC,WAAW,GAAG7B,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC;UACxD,IAAI,CAACgC,cAAc,GAAG,CAAC,GAAC9B,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAAC,CAAC;UAEvD,IAAI,CAACY,MAAM,GAAGJ,IAAI,CAACI,MAAM;UACzB,IAAIC,OAAO,GAAGhC,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAAC,CAAC;UACjC,IAAIa,OAAO,IAAIL,IAAI,CAACI,MAAM,EAAE;YAC3B,IAAI,CAACE,EAAE,GAAON,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACC,EAAE;YACrC,IAAI,CAACC,IAAI,GAAKP,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACE,IAAI;YACvC,IAAI,CAACC,MAAM,GAAGR,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACG,MAAM;YACzC,IAAI,CAACC,MAAM,GAAGT,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACI,MAAM;YACzC,IAAI,CAACC,KAAK,GAAIC,KAAK,CAACC,OAAO,CAACZ,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,CAAC,GAAGV,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,GAAG,EAAE;YACzF,IAAI,CAACG,QAAQ,GAAGb,IAAI,CAACU,KAAK;UAC3B,CAAC,MAAI;YACJ,IAAI,CAACA,KAAK,GAAI,EAAE;UACjB;UACA,IAAGR,WAAW,CAACjB,QAAQ,CAAC,WAAW,CAAC,EAAC;YACpCiB,WAAW,CAACjB,QAAQ,CAAC;cACpBC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;gBACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,SAAS,EAAEJ,KAAK,CAAC;cACpD;YACD,CAAC,CAAC;YACF,IAAGe,WAAW,CAACjB,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAC;cAC3CK,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,IAAI;cAC/BgC,WAAW,CAACjB,QAAQ,CAAC,WAAW,EAAEZ,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAAC,CAAC,CAAC;cACtDF,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,KAAK;YACjC;UACD;;UAEA;UACA,IAAI,CAAC4C,SAAS,CAAC,YAAM;YACpBb,KAAI,CAACc,mBAAmB,CAAC,CAAC;UAC3B,CAAC,CAAC;QACH,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;UAC5B,OAAO3B,MAAM,CAACvB,SAAS,CAAC,CAACiD,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACDF,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UACrB,IAAI,CAAC,IAAI,CAACG,GAAG,EAAE;;UAEf;UACA,IAAMC,SAAS,GAAG,IAAI,CAACD,GAAG,CAACE,gBAAgB,CAAC,6CAA6C,CAAC;UAC1FD,SAAS,CAACE,OAAO,CAAC,UAACzB,EAAE;YAAA,OAAKA,EAAE,CAAC0B,MAAM,CAAC,CAAC;UAAA,EAAC;;UAEtC;UACA;UACA,IAAI,CAACC,uBAAuB,CAAC,CAAC;;UAE9B;UACA,IAAMC,cAAc,GAAG,IAAI,CAACN,GAAG,CAACO,aAAa,CAAC,uBAAuB,CAAC;UACtE,IAAID,cAAc,EAAE;YACnBA,cAAc,CAACE,KAAK,CAACC,UAAU,GAAG,YAAY;YAC9CH,cAAc,CAACE,KAAK,CAACE,YAAY,GAAG,YAAY;UACjD;UAEA,IAAMC,KAAK,GAAG,IAAI,CAACX,GAAG,CAACE,gBAAgB,CAAC,6CAA6C,CAAC;UACtFS,KAAK,CAACR,OAAO,CAAC,UAACS,IAAI,EAAK;YACvBA,IAAI,CAACJ,KAAK,CAACK,SAAS,GAAG,YAAY;UACpC,CAAC,CAAC;;UAEF;UACA,IAAMC,OAAO,GAAG,IAAI,CAACd,GAAG,CAACE,gBAAgB,CAAC,+CAA+C,CAAC;UAC1FY,OAAO,CAACX,OAAO,CAAC,UAACzB,EAAE,EAAK;YACvBA,EAAE,CAAC8B,KAAK,CAACO,QAAQ,GAAG,KAAK;YACzBrC,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;UAC5B,CAAC,CAAC;UAEF,IAAMC,KAAK,GAAG,IAAI,CAACjB,GAAG,CAACE,gBAAgB,CAAC,sCAAsC,CAAC;UAC/Ee,KAAK,CAACd,OAAO,CAAC,UAACzB,EAAE,EAAK;YACrBA,EAAE,CAAC8B,KAAK,CAACO,QAAQ,GAAG,KAAK;YACzBrC,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;UAC5B,CAAC,CAAC;;UAEF;UACA,IAAME,SAAS,GAAG,IAAI,CAAClB,GAAG,CAACE,gBAAgB,CAAC,sCAAsC,CAAC;UACnFgB,SAAS,CAACf,OAAO,CAAC,UAACzB,EAAE,EAAK;YACzBA,EAAE,CAAC8B,KAAK,CAACO,QAAQ,GAAG,KAAK;YACzBrC,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;YAC3BtC,EAAE,CAAC8B,KAAK,CAACW,OAAO,GAAG,aAAa;YAChCzC,EAAE,CAAC8B,KAAK,CAACC,UAAU,GAAG,QAAQ;YAC9B/B,EAAE,CAAC8B,KAAK,CAACY,UAAU,GAAG,GAAG;YACzB1C,EAAE,CAAC8B,KAAK,CAACa,aAAa,GAAG,GAAG;UAC7B,CAAC,CAAC;UACF,IAAMC,KAAK,GAAG,IAAI,CAACtB,GAAG,CAACE,gBAAgB,CAAC,iCAAiC,CAAC;UAC1EoB,KAAK,CAACnB,OAAO,CAAC,UAACzB,EAAE,EAAK;YACrBA,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;YAC3BtC,EAAE,CAAC8B,KAAK,CAACW,OAAO,GAAG,aAAa;YAChCzC,EAAE,CAAC8B,KAAK,CAACC,UAAU,GAAG,QAAQ;UAC/B,CAAC,CAAC;;UAEF;UACA;UACA;UACA,IAAI,CAACc,mBAAmB,CAAC,CAAC;QAC3B,CAAC;QACDA,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UACrB,IAAI,CAAC,IAAI,CAACvB,GAAG,EAAE;UACf,IAAMwB,SAAS,GAAG,IAAI,CAACxB,GAAG,CAACO,aAAa,CAAC,uBAAuB,CAAC;UACjE,IAAI,CAACiB,SAAS,EAAE;UAEhB,IAAMb,KAAK,GAAGlB,KAAK,CAACgC,IAAI,CAACD,SAAS,CAACtB,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;UAC3E,IAAI,CAACS,KAAK,CAACe,MAAM,EAAE;UAEnB,IAAMC,QAAQ,GAAGhB,KAAK,CAACiB,IAAI,CAAC,UAACC,CAAC;YAAA,OAAKA,CAAC,CAACtB,aAAa,CAAC,kBAAkB,CAAC;UAAA,EAAC;UACvE,IAAMuB,SAAS,GAAGnB,KAAK,CAACiB,IAAI,CAAC,UAACC,CAAC;YAAA,OAAK,CAACA,CAAC,CAACtB,aAAa,CAAC,kBAAkB,CAAC;UAAA,EAAC;UACzE,IAAI,CAACoB,QAAQ,IAAI,CAACG,SAAS,EAAE;UAE7B,IAAMC,EAAE,GAAGJ,QAAQ,CAACK,qBAAqB,CAAC,CAAC,CAACC,MAAM;UAClD,IAAMC,EAAE,GAAGJ,SAAS,CAACE,qBAAqB,CAAC,CAAC,CAACC,MAAM;UACnD,IAAI,CAACF,EAAE,IAAI,CAACG,EAAE,EAAE;;UAEhB;UACA,IAAIC,GAAG,GAAGJ,EAAE,GAAG,CAAC,GAAGG,EAAE;UACrB,IAAI,CAACE,MAAM,CAACC,QAAQ,CAACF,GAAG,CAAC,EAAE;;UAE3B;UACAA,GAAG,GAAGG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,EAAE,EAAEF,IAAI,CAACG,KAAK,CAACN,GAAG,CAAC,CAAC,CAAC;UAEhDX,SAAS,CAAChB,KAAK,CAACkC,WAAW,CAAC,kBAAkB,KAAAC,MAAA,CAAKR,GAAG,OAAI,CAAC;QAC5D,CAAC;QACD9B,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;UACzB,IAAMuC,OAAO,GAAG,2BAA2B;UAC3C,IAAI,CAACC,QAAQ,CAACC,cAAc,CAACF,OAAO,CAAC,EAAE;YACtC,IAAMG,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAC,OAAO,CAAC;YAC/CD,OAAO,CAAC3D,EAAE,GAAGwD,OAAO;YACpBG,OAAO,CAACE,WAAW,GAAG,klBAkBpBC,IAAI,CAAC,CAAC;YACRL,QAAQ,CAACM,IAAI,CAACC,WAAW,CAACL,OAAO,CAAC;UACnC;UAEA,IAAMzC,cAAc,GAAG,IAAI,CAACN,GAAG,IAAI,IAAI,CAACA,GAAG,CAACO,aAAa,GACtD,IAAI,CAACP,GAAG,CAACO,aAAa,CAAC,uBAAuB,CAAC,GAC/C,IAAI;UACP,IAAID,cAAc,EAAE;YACnBA,cAAc,CAAC+C,SAAS,CAACC,GAAG,CAAC,qBAAqB,CAAC;UACpD;QACD,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAACC,WAAW,EAAE;UAC9B,IAAIC,MAAM,GAAG,GAAG;UAChB,IAAIC,aAAa,GAAI,KAAK;UAAC,IAAAC,SAAA,GAAAC,0BAAA,CACR,IAAI,CAACpE,KAAK;YAAAqE,KAAA;UAAA;YAA7B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA+B;cAAA,IAApBC,IAAI,GAAAJ,KAAA,CAAA5F,KAAA;cACd,IAAGgG,IAAI,CAACC,OAAO,KAAKV,WAAW,EAAC;gBAC/BE,aAAa,GAAG,IAAI;gBACpBD,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACrB;cACD;cACA,IAAIF,IAAI,CAACG,cAAc,IAAI3E,KAAK,CAACC,OAAO,CAACuE,IAAI,CAACG,cAAc,CAAC,EAAE;gBAC9D,IAAMC,OAAK,GAAGJ,IAAI,CAACG,cAAc,CAACxC,IAAI,CAAC,UAAA0C,EAAE;kBAAA,OAAIA,EAAE,CAAChF,MAAM,KAAKkE,WAAW;gBAAA,EAAC;gBACvE,IAAIa,OAAK,EAAE;kBACVZ,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACtB;cACD;cACA,IAAIF,IAAI,CAACM,cAAc,IAAI9E,KAAK,CAACC,OAAO,CAACuE,IAAI,CAACM,cAAc,CAAC,EAAE;gBAC9D,IAAMF,OAAK,GAAGJ,IAAI,CAACM,cAAc,CAAC3C,IAAI,CAAC,UAAA0C,EAAE;kBAAA,OAAKA,EAAE,CAACH,OAAO,KAAKX,WAAW,IAAIc,EAAE,CAACJ,OAAO,KAAKV,WAAW;gBAAA,CAAC,CAAC;gBACxG,IAAIa,OAAK,EAAE;kBACV,IAAGA,OAAK,CAACF,OAAO,KAAKX,WAAW,EAAC;oBAChCC,MAAM,GAAGY,OAAK,CAACH,OAAO;kBACvB,CAAC,MAAI;oBACJT,MAAM,GAAGY,OAAK,CAACF,OAAO;kBACvB;kBACAT,aAAa,GAAG,IAAI;gBACrB;cACD;YACD;UAAC,SAAAc,GAAA;YAAAb,SAAA,CAAAc,CAAA,CAAAD,GAAA;UAAA;YAAAb,SAAA,CAAAe,CAAA;UAAA;UACD,IAAGhB,aAAa,KAAK,KAAK,EAAC;YAC1B,KAAK,IAAIiB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAChF,QAAQ,CAAC+B,MAAM,EAAEiD,CAAC,EAAE,EAAE;cAC9C,IAAMC,OAAO,GAAG,IAAI,CAACjF,QAAQ,CAACgF,CAAC,CAAC;cAChC,IAAGC,OAAO,CAACT,OAAO,KAAKX,WAAW,EAAC;gBAClC;gBACA,IAAGoB,OAAO,CAACV,OAAO,KAAK,EAAE,EAAC;kBACzB;kBACA,IAAIU,OAAO,CAACR,cAAc,IAAI3E,KAAK,CAACC,OAAO,CAACkF,OAAO,CAACR,cAAc,CAAC,IAAKQ,OAAO,CAACR,cAAc,CAAC1C,MAAM,EAAE;oBACtG,IAAM2C,KAAK,GAAGO,OAAO,CAACR,cAAc,CAACxC,IAAI,CAAC,UAAA0C,EAAE;sBAAA,OAAIA,EAAE,CAAChF,MAAM,KAAKkE,WAAW;oBAAA,EAAC;oBAC1E,IAAIa,KAAK,EAAE;sBACVZ,MAAM,GAAGY,KAAK,CAAC/E,MAAM;oBACtB;kBACD,CAAC,MAAK,IAAGsF,OAAO,CAACC,KAAK,EAAC;oBACtB;oBACApB,MAAM,GAAGmB,OAAO,CAACE,OAAO;kBACzB,CAAC,MAAI;oBACJ;oBACArB,MAAM,GAAGmB,OAAO,CAACG,KAAK;kBACvB;gBACD,CAAC,MAAI;kBACJtB,MAAM,GAAGmB,OAAO,CAACV,OAAO;gBACzB;gBACA;cACD,CAAC,MAAK,IAAGU,OAAO,CAACV,OAAO,KAAKV,WAAW,EAAC;gBACxC;gBACAC,MAAM,GAAGmB,OAAO,CAACT,OAAO;gBACxB;cACD,CAAC,MAAI;gBACJ,IAAIS,OAAO,CAACR,cAAc,IAAI3E,KAAK,CAACC,OAAO,CAACkF,OAAO,CAACR,cAAc,CAAC,EAAE;kBACpE,IAAMC,MAAK,GAAGO,OAAO,CAACR,cAAc,CAACxC,IAAI,CAAC,UAAA0C,EAAE;oBAAA,OAAIA,EAAE,CAAChF,MAAM,KAAKkE,WAAW;kBAAA,EAAC;kBAC1E,IAAIa,MAAK,EAAE;oBACVZ,MAAM,GAAGmB,OAAO,CAACT,OAAO;kBACzB;gBACD;cACD;YACD;UACD;UACA,OAAOV,MAAM;QACd,CAAC;QACDuB,YAAY,WAAZA,YAAYA,CAACxB,WAAW,EAAE;UACzB,IAAMyB,KAAK,GAAGC,MAAM,CAAC,IAAI,CAAC3B,iBAAiB,CAACC,WAAW,CAAC,IAAI,EAAE,CAAC,CAACN,IAAI,CAAC,CAAC;UACtE,OAAO+B,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,GAAG,IAAIA,KAAK,KAAK,GAAG;QACtD,CAAC;QACDE,iBAAiB,WAAjBA,iBAAiBA,CAAC3B,WAAW,EAAE;UAC9B,IAAMyB,KAAK,GAAGC,MAAM,CAAC,IAAI,CAAC3B,iBAAiB,CAACC,WAAW,CAAC,IAAI,EAAE,CAAC,CAACN,IAAI,CAAC,CAAC;UACtE,OAAO,IAAI,CAAC8B,YAAY,CAACxB,WAAW,CAAC,GAAGyB,KAAK,GAAG,GAAG;QACpD,CAAC;QACDG,gBAAgB,WAAhBA,gBAAgBA,CAAC5B,WAAW,EAAE;UAC7B;UACA,KAAKA,WAAW;UAChB,OAAO,GAAG;QACX;MACD,CAAC;MACD1E,IAAI,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CACV,CAAC;QACD,OAAO,EAAE;MAEV;IACD,CAAC,CAAC;IAEFV,MAAM,CAACvB,SAAS,CAAC,CAACwI,YAAY,GAAG,IAAI5G,GAAG,CAAC;MACxCC,EAAE,EAAE,QAAQ;MACZC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpBP,UAAU,EAAEA,UAAU;QACtB+G,UAAU,EAAGnI,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAIC,UAAU,KAAK,EAAG;QACjEiB,KAAK,EAAE;MAER,CAAC;MACDZ,OAAO,EAAE;QACR2G,aAAa,WAAbA,aAAaA,CAACtB,IAAI,EAAC;UAClB,IAAGA,IAAI,CAACuB,QAAQ,KAAG,EAAE,IAAIvB,IAAI,CAACwB,SAAS,CAACC,SAAS,KAAK9H,SAAS,EAAE;YAChE,OAAO,IAAI,CAACqB,cAAc,IAAI,IAAI,CAAC0G,WAAW,CAAC1B,IAAI,CAAC;UACrD;UACA,OAAO,IAAI;QACZ,CAAC;QACD2B,qBAAqB,WAArBA,qBAAqBA,CAACC,SAAS,EAAE;UAChC;UACA,IAAMC,EAAE,GAAG,OAAOD,SAAS,KAAK,QAAQ,GAAGE,UAAU,CAACF,SAAS,CAAC,GAAGA,SAAS;;UAE5E;UACA,IAAMG,EAAE,GAAGF,EAAE,GAAG,IAAI,GAAGA,EAAE,GAAG,IAAI,GAAGA,EAAE;UAErC,IAAMG,IAAI,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;UAEzB,IAAMG,KAAK,GAAGjB,MAAM,CAACe,IAAI,CAACG,QAAQ,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UACtD,IAAMC,OAAO,GAAGpB,MAAM,CAACe,IAAI,CAACM,UAAU,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAC1D,IAAMG,OAAO,GAAGtB,MAAM,CAACe,IAAI,CAACQ,UAAU,CAAC,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAE1D,UAAA1D,MAAA,CAAUwD,KAAK,OAAAxD,MAAA,CAAI2D,OAAO,OAAA3D,MAAA,CAAI6D,OAAO;QACtC,CAAC;QACDb,WAAW,WAAXA,WAAWA,CAAC1B,IAAI,EAAC;UAChB,IAAIyC,MAAM,GAAGpE,IAAI,CAACqE,KAAK,CAACT,IAAI,CAACU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;UAC1C,IAAG3C,IAAI,CAACyC,MAAM,KAAK,EAAE,EAAC;YACrBA,MAAM,GAAGzC,IAAI,CAACyC,MAAM;UACrB;UACA,OAAOtI,MAAM,CAACvB,SAAS,CAAC,CAACgK,YAAY,CAACH,MAAM,GAAGzC,IAAI,CAAC6C,KAAK,CAAC;QAC3D,CAAC;QACDC,WAAW,WAAXA,WAAWA,CAAC9C,IAAI,EAAC;UAChB,IAAGA,IAAI,CAACyC,MAAM,KAAK,EAAE,EAAC;YACrB,OAAO,GAAG;UACX;UACA,OAAOtI,MAAM,CAACvB,SAAS,CAAC,CAACiD,iBAAiB,CAACmE,IAAI,CAACyC,MAAM,CAAC;QACxD,CAAC;QACD7H,wBAAwB,WAAxBA,wBAAwBA,CAACC,IAAI,EAAE;UAC9B,IAAI,CAACG,cAAc,GAAG,CAAC,GAAC9B,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAAC,CAAC;UACvD;UACA,KAAK,IAAMa,OAAO,IAAIL,IAAI,CAACI,MAAM,EAAE;YAClC,IAAM8H,KAAK,GAAGlI,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC;YAClC;YACA,IAAIM,KAAK,CAACC,OAAO,CAACsH,KAAK,CAACxH,KAAK,CAAC,EAAE;cAAA,IAAAyH,WAAA;cAC/B;cACA,CAAAA,WAAA,GAAAnI,IAAI,CAACU,KAAK,EAAC0H,IAAI,CAAAC,KAAA,CAAAF,WAAA,EAAAG,kBAAA,CAAIJ,KAAK,CAACxH,KAAK,EAAC;YAChC;UACD;UACA,IAAI,CAACA,KAAK,GAAGV,IAAI,CAACU,KAAK;UACvB,IAAI,CAACI,SAAS,CAAC,YAAM;YACpByH,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACDxH,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;UAC5B,OAAO3B,MAAM,CAACvB,SAAS,CAAC,CAACiD,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACDwH,YAAY,WAAZA,YAAYA,CAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACAvJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAVA,UAAUA,CAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD0J,aAAa,WAAbA,aAAaA,CAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI2J,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAtJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAEzI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD4J,YAAY,WAAZA,YAAYA,CAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IAEFH,MAAM,CAACvB,SAAS,CAAC,CAACc,OAAO,GAAG,IAAIc,GAAG,CAAC;MACnCC,EAAE,EAAE,MAAM;MACVC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACLP,UAAU,EAAEA,UAAU;QACtB+G,UAAU,EAAGnI,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAIC,UAAU,KAAK,EAAG;QACjEiB,KAAK,EAAE;MAER,CAAC;MACDZ,OAAO,EAAE;QACRC,wBAAwB,WAAxBA,wBAAwBA,CAACuJ,KAAK,EAAE;UAC/B,IAAI,CAAC5I,KAAK,GAAG4I,KAAK;UAClB,IAAI,CAACxI,SAAS,CAAC,YAAM;YACpByH,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACDC,YAAY,WAAZA,YAAYA,CAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACAvJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAVA,UAAUA,CAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD0J,aAAa,WAAbA,aAAaA,CAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI2J,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAtJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAEzI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD4J,YAAY,WAAZA,YAAYA,CAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IACFH,MAAM,CAACvB,SAAS,CAAC,CAACO,WAAW,CAACiL,QAAQ,CAAC,CAAC;IACxCjK,MAAM,CAACvB,SAAS,CAAC,CAACQ,UAAU,CAACU,QAAQ,CAAC,CAAC;IACvCK,MAAM,CAACvB,SAAS,CAAC,CAACyL,cAAc,CAAC,CAAC;IAClCnL,CAAC,CAAC,aAAa,CAAC,CAACoL,GAAG,CAAC,CAAC;IACtB;IACA;IACApL,CAAC,CAAC,yBAAyB,CAAC,CAACqL,WAAW,CAAC,WAAW,CAAC;IACrDrL,CAAC,CAAC,+BAA+B,CAAC,CAACsL,IAAI,CAAC,CAAC;IACzCtL,CAAC,CAAC,6BAA6B,CAAC,CAACiD,MAAM,CAAC,CAAC;IACzC;IACA;IACAhC,MAAM,CAACvB,SAAS,CAAC,CAAC6L,WAAW,CAAC,CAAC;IAC/BC,WAAW,CAACvK,MAAM,CAACvB,SAAS,CAAC,CAAC6L,WAAW,EAAE,IAAI,CAAC;EACjD,CAAC;EACD5I,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;IAC5B,IAAI,CAACA,SAAS,EAAE,OAAO,GAAG;IAE1B,IAAM6G,GAAG,GAAGtE,IAAI,CAACqE,KAAK,CAACT,IAAI,CAACU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,IAAMgC,WAAW,GAAGhC,GAAG,GAAG7G,SAAS;IAEnC,OAAO3B,MAAM,CAACvB,SAAS,CAAC,CAACgK,YAAY,CAAC+B,WAAW,CAAC;EACnD,CAAC;EACD/B,YAAY,WAAZA,YAAYA,CAAC+B,WAAW,EAAC;IACxB,IAAIA,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG;IAC/B;IACA,IAAMzC,KAAK,GAAK7D,IAAI,CAACqE,KAAK,CAACiC,WAAW,GAAG,IAAI,CAAC;IAC9C,IAAMtC,OAAO,GAAGhE,IAAI,CAACqE,KAAK,CAAEiC,WAAW,GAAG,IAAI,GAAI,EAAE,CAAC;IACrD,IAAMpC,OAAO,GAAGlE,IAAI,CAACG,KAAK,CAACmG,WAAW,GAAG,EAAE,CAAC;IAC5C,IAAIzC,KAAK,GAAG,CAAC,EAAE;MACd,UAAAxD,MAAA,CAAUwD,KAAK,OAAAxD,MAAA,CAAI2D,OAAO,CAACuC,QAAQ,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAA1D,MAAA,CAAI6D,OAAO,CAACqC,QAAQ,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC9F,CAAC,MAAM,IAAIC,OAAO,GAAG,CAAC,EAAE;MACvB,UAAA3D,MAAA,CAAU2D,OAAO,OAAA3D,MAAA,CAAI6D,OAAO,CAACqC,QAAQ,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACzD,CAAC,MAAM;MACN,UAAA1D,MAAA,CAAU6D,OAAO;IAClB;EACD,CAAC;EACDnI,eAAe,WAAfA,eAAeA,CAACyK,WAAW,EAAE7K,KAAK,EAAE;IACnC,IAAGG,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,EAAC;MAC3B;IACD;IACA,IAAI8B,IAAI,GAAAiK,eAAA,KACND,WAAW,EAAG7K,KAAK,CACpB;IACDd,CAAC,CAAC6L,GAAG,CAAC;MACLC,GAAG,EAAE7K,MAAM,CAACvB,SAAS,CAAC,CAACa,iBAAiB;MACxCwL,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdrK,IAAI,EAAEA,IAAI;MACVsK,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAKzL,SAAS,IAAI0L,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAAC3H,MAAM,GAAG,CAAC,IAAI2H,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnB,IAAGP,WAAW,KAAK,SAAS,EAAC;UAC5B3L,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAACnB,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC,CAACc,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChF,CAAC,MAAK,IAAI+K,WAAW,KAAK,aAAa,EAAC;UACvC1K,MAAM,CAACsL,QAAQ,CAACC,IAAI,GAAGvL,MAAM,CAACsL,QAAQ,CAACC,IAAI;QAC5C;MACD,CAAC;MACDC,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDtC,iBAAiB,WAAjBA,iBAAiBA,CAAC9I,IAAI,EAAE;IACvB3B,CAAC,CAAC6L,GAAG,CAAC;MACLC,GAAG,EAAE7K,MAAM,CAACvB,SAAS,CAAC,CAACY,cAAc;MACrCyL,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdrK,IAAI,EAAEA,IAAI;MACVsK,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAKzL,SAAS,IAAI0L,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAAC3H,MAAM,GAAG,CAAC,IAAI2H,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDO,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDxB,WAAW,WAAXA,WAAWA,CAAA,EAAG;IACbvL,CAAC,CAAC6L,GAAG,CAAC;MACLC,GAAG,EAAE7K,MAAM,CAACvB,SAAS,CAAC,CAACW,mBAAmB;MAC1C0L,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdC,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAKzL,SAAS,IAAI0L,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAAC3H,MAAM,GAAG,CAAC,IAAI2H,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnBjL,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,CAACK,wBAAwB,CAACwK,QAAQ,CAAC;QAClEjL,MAAM,CAACvB,SAAS,CAAC,CAACwI,YAAY,CAACxG,wBAAwB,CAACwK,QAAQ,CAAC;MAClE,CAAC;MACDO,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EAED;AACD;AACA;AACA;AACA;EACCC,gBAAgB,WAAhBA,gBAAgBA,CAACC,QAAQ,EAAE;IAC1B,IAAM3G,MAAM,GAAG2G,QAAQ;IACvB3G,MAAM,CAAC3E,IAAI,GAAGV,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ,CAACmN,IAAI,CAAC,YAAY,CAAC;IAC3D,OAAO5G,MAAM;EACd,CAAC;EACD;AACD;AACA;EACC6G,eAAe,WAAfA,eAAeA,CAAA,EAAG,CAElB,CAAC;EACD;AACD;AACA;EACChC,cAAc,WAAdA,cAAcA,CAAA,EAAG;IAChBiC,IAAI,CAACrN,QAAQ,GAAGkB,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ;IAC1CqN,IAAI,CAACtB,GAAG,MAAAtG,MAAA,CAAMpF,aAAa,EAAAoF,MAAA,CAAGhG,KAAK,UAAO;IAC1C4N,IAAI,CAAC1M,aAAa,GAAGO,MAAM,CAACvB,SAAS,CAAC,CAACgB,aAAa;IACpD0M,IAAI,CAACJ,gBAAgB,GAAG/L,MAAM,CAACvB,SAAS,CAAC,CAACsN,gBAAgB;IAC1DI,IAAI,CAACD,eAAe,GAAGlM,MAAM,CAACvB,SAAS,CAAC,CAACyN,eAAe;IACxDC,IAAI,CAACzM,UAAU,CAAC,CAAC;EAClB;AACD,CAAC;AAEDX,CAAC,CAAC0F,QAAQ,CAAC,CAAC2H,KAAK,CAAC,YAAM;EACvBpM,MAAM,CAACvB,SAAS,CAAC,CAACiB,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 286c58b..f294c52 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -77,10 +77,132 @@ const ModuleMonitorActiveCalls = { window[className].isInit = false; } } + + // Normalize Semantic UI Card typography after render + this.$nextTick(() => { + this.normalizeAgentCards(); + }); }, formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, + normalizeAgentCards() { + if (!this.$el) return; + + // Cleanup artifacts from previous experiments (placeholders/spacers). + const artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer'); + artifacts.forEach((el) => el.remove()); + + // Masonry-like layout via CSS columns to avoid empty gaps with different card heights. + // We inject styles here because this project restricts edits to /public/assets/js/src/. + this.ensureAgentCardsMasonry(); + + // Prevent "equal height" cards in one row (Semantic UI cards are flex). + const cardsContainer = this.$el.querySelector('.ui.cards.agent-cards'); + if (cardsContainer) { + cardsContainer.style.alignItems = 'flex-start'; + cardsContainer.style.alignContent = 'flex-start'; + } + + const cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card'); + cards.forEach((card) => { + card.style.alignSelf = 'flex-start'; + }); + + // Semantic UI makes .header bigger than normal text; we need same font size. + const headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header'); + headers.forEach((el) => { + el.style.fontSize = '1em'; + el.style.lineHeight = '1.2'; + }); + + const metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer'); + metas.forEach((el) => { + el.style.fontSize = '1em'; + el.style.lineHeight = '1.2'; + }); + + // Normalize label/name typography so they have same text height. + const numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label'); + numLabels.forEach((el) => { + el.style.fontSize = '1em'; + el.style.lineHeight = '1.2'; + el.style.display = 'inline-flex'; + el.style.alignItems = 'center'; + el.style.paddingTop = '0'; + el.style.paddingBottom = '0'; + }); + const names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name'); + names.forEach((el) => { + el.style.lineHeight = '1.2'; + el.style.display = 'inline-flex'; + el.style.alignItems = 'center'; + }); + + // Tune vertical gap between cards so that: + // 2 * (shortCardHeight + gap) ~= (tallCardHeight + gap) + // This makes the masonry columns visually "grid-like". + this.adjustAgentCardsGap(); + }, + adjustAgentCardsGap() { + if (!this.$el) return; + const container = this.$el.querySelector('.ui.cards.agent-cards'); + if (!container) return; + + const cards = Array.from(container.querySelectorAll('.ui.card.agent-card')); + if (!cards.length) return; + + const tallCard = cards.find((c) => c.querySelector('.meta.agent-peer')); + const shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer')); + if (!tallCard || !shortCard) return; + + const ht = tallCard.getBoundingClientRect().height; + const hs = shortCard.getBoundingClientRect().height; + if (!ht || !hs) return; + + // From 2*(hs+g) = ht+g => g = ht - 2*hs + let gap = ht - 2 * hs; + if (!Number.isFinite(gap)) return; + + // Clamp to sane range; negative means "no extra gap needed". + gap = Math.max(0, Math.min(20, Math.round(gap))); + + container.style.setProperty('--agent-card-gap', `${gap}px`); + }, + ensureAgentCardsMasonry() { + const styleId = 'agent-cards-masonry-style'; + if (!document.getElementById(styleId)) { + const styleEl = document.createElement('style'); + styleEl.id = styleId; + styleEl.textContent = ` +/* Masonry layout for agents cards (scoped) */ +.ui.cards.agent-cards.agent-cards-masonry { + display: block !important; + column-width: 240px; + column-gap: 1em; + /* Prevent overlap with the legend block below */ + margin-bottom: 1em !important; + padding-bottom: 0.5em !important; +} +.ui.cards.agent-cards.agent-cards-masonry > .ui.card.agent-card { + display: inline-block !important; + width: 100% !important; + margin: 0 0 var(--agent-card-gap, 12px) 0 !important; + break-inside: avoid; + -webkit-column-break-inside: avoid; + page-break-inside: avoid; +} + `.trim(); + document.head.appendChild(styleEl); + } + + const cardsContainer = this.$el && this.$el.querySelector + ? this.$el.querySelector('.ui.cards.agent-cards') + : null; + if (cardsContainer) { + cardsContainer.classList.add('agent-cards-masonry'); + } + }, getSrcNumForAgent(agentNumber) { let result = '-'; let answeredFound = false; @@ -146,6 +268,19 @@ const ModuleMonitorActiveCalls = { } } return result; + }, + hasPeerPhone(agentNumber) { + const phone = String(this.getSrcNumForAgent(agentNumber) || '').trim(); + return phone !== '' && phone !== '-' && phone !== '—'; + }, + getPeerPhoneLabel(agentNumber) { + const phone = String(this.getSrcNumForAgent(agentNumber) || '').trim(); + return this.hasPeerPhone(agentNumber) ? phone : '—'; + }, + getPeerNameLabel(agentNumber) { + // Placeholder for future "peer name" feature + void agentNumber; + return '—'; } }, data: { From 9a768ab524972b81376fc1d63265029f30fffa8a Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Thu, 15 Jan 2026 13:56:10 +0300 Subject: [PATCH 09/23] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D0=B2=D0=B8=D0=B4=D0=B5=20"=D0=BF=D0=BB=D0=B8=D1=82=D0=BA?= =?UTF-8?q?=D0=B8".=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=83?= =?UTF-8?q?=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D1=87=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=BE=D1=84=D0=BB=D0=B0=D0=B9=D0=BD=20=D0=B0=D0=B3=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=86?= =?UTF-8?q?=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Views/index.volt | 16 +- bin/WorkerActiveCalls.php | 27 ++- .../js/module-monitor-active-calls-index.js | 176 +++++++++++++++-- .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 182 +++++++++++++++--- 5 files changed, 339 insertions(+), 64 deletions(-) diff --git a/App/Views/index.volt b/App/Views/index.volt index d5cf8f8..8ccdd6a 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -66,7 +66,7 @@
-
+

@@ -97,12 +97,12 @@

-
+
- <% number %> + <% agent.number %> <% agent.name %>
-
+
- <% getPeerPhoneLabel(number) %> + <% getPeerPhoneLabel(agent.number) %>
- <% getPeerNameLabel(number) %> + <% getPeerNameLabel(agent.number) %>
diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 3882570..b2896bf 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -342,6 +342,25 @@ private function printActiveCalls():void $queuesData[$call['lastQueue']]['calls'][] = $call; } } + + // Move Unavailable agents to the end of the list (keep original order for the rest). + foreach ($queuesData as $qId => $queueTmpData) { + if (empty($queuesData[$qId]['agents']) || !is_array($queuesData[$qId]['agents'])) { + continue; + } + $availableAgents = []; + $unavailableAgents = []; + foreach ($queuesData[$qId]['agents'] as $agentNumber => $agentData) { + $state = $agentData['state'] ?? ''; + if ($state === self::STATE_UNAVAILIBLE || $state === self::STATE_UNAVAILABLE) { + $unavailableAgents[$agentNumber] = $agentData; + } else { + $availableAgents[$agentNumber] = $agentData; + } + } + $queuesData[$qId]['agents'] = $availableAgents + $unavailableAgents; + } + $dataPrint = json_encode(['queues' => $queuesData, 'calls' => $calls], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); $newPrintHash = md5($dataPrint); if($newPrintHash <> $this->lastPrintHash){ @@ -370,7 +389,8 @@ private function printActiveCalls():void /** * Поиск связанного канала. * @param $linkedId - * @param $srcChan + * @param $dstChannel + * @param $tmpBridgeStart * @return bool */ private function findBridgeChannel($linkedId, &$dstChannel, &$tmpBridgeStart):bool @@ -383,7 +403,6 @@ private function findBridgeChannel($linkedId, &$dstChannel, &$tmpBridgeStart):bo while ( ($dstChannel === $srcChan || stripos($dstChannel, 'Local/') !== false) && $chFound ) { $ch--; if($ch < 0){ - print_r('ERROR, while'); break; } $chFound = false; @@ -423,6 +442,7 @@ function ($matches) { private function collectQueuesInfo():void { + $this->logger->writeInfo('Update queues data...'); $this->queuesData = []; $queues = CallQueues::find(['columns' => 'name,extension as number,uniqid as id']); foreach ($queues as $queue){ @@ -433,7 +453,6 @@ private function collectQueuesInfo():void foreach ($queuesAgents as $queuesAgent) { $this->queuesData[$queuesAgent->queue]['agents'][] = $queuesAgent->extension; } - if(!$this->init){ return; } @@ -454,10 +473,8 @@ private function collectQueuesInfo():void 'Uniqueid' => $queueCall['Uniqueid'], 'Linkedid' => $linkedId ]; - $this->callType[$linkedId]['queue'] = $queueCall['Queue']; } - } /** diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index 620553f..423314a 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -1,16 +1,22 @@ "use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } /* * Copyright (C) MIKO LLC - All Rights Reserved * Unauthorized copying of this file, via any medium is strictly prohibited @@ -71,10 +77,12 @@ var ModuleMonitorActiveCalls = { this.name = data.queues[queueId].name; this.number = data.queues[queueId].number; this.agents = data.queues[queueId].agents; + this.agentsList = this.buildAgentsList(this.agents); this.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : []; this.allCalls = data.calls; } else { this.calls = []; + this.agentsList = []; } if (queueNameEl.dropdown('is hidden')) { queueNameEl.dropdown({ @@ -94,10 +102,31 @@ var ModuleMonitorActiveCalls = { _this.normalizeAgentCards(); }); }, + buildAgentsList: function buildAgentsList(agentsObj) { + var entries = Object.entries(agentsObj || {}); + var available = []; + var unavailable = []; + for (var _i = 0, _entries = entries; _i < _entries.length; _i++) { + var _entries$_i = _slicedToArray(_entries[_i], 2), + number = _entries$_i[0], + agent = _entries$_i[1]; + var state = (agent === null || agent === void 0 ? void 0 : agent.state) || ''; + var item = _objectSpread({ + number: number + }, agent); + if (state === 'Unavailable') { + unavailable.push(item); + } else { + available.push(item); + } + } + return available.concat(unavailable); + }, formatElapsedTime: function formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, normalizeAgentCards: function normalizeAgentCards() { + var _this2 = this; if (!this.$el) return; // Cleanup artifacts from previous experiments (placeholders/spacers). @@ -106,9 +135,9 @@ var ModuleMonitorActiveCalls = { return el.remove(); }); - // Masonry-like layout via CSS columns to avoid empty gaps with different card heights. - // We inject styles here because this project restricts edits to /public/assets/js/src/. - this.ensureAgentCardsMasonry(); + // Dense layout (masonry) that still fills left-to-right: + // flex-wrap can't place items into vertical gaps under tall cards. + this.ensureAgentCardsGridMasonry(); // Prevent "equal height" cards in one row (Semantic UI cards are flex). var cardsContainer = this.$el.querySelector('.ui.cards.agent-cards'); @@ -126,6 +155,10 @@ var ModuleMonitorActiveCalls = { headers.forEach(function (el) { el.style.fontSize = '1em'; el.style.lineHeight = '1.2'; + el.style.display = 'flex'; + el.style.alignItems = 'center'; + el.style.gap = '0.5em'; + el.style.whiteSpace = 'nowrap'; }); var metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer'); metas.forEach(function (el) { @@ -142,18 +175,31 @@ var ModuleMonitorActiveCalls = { el.style.alignItems = 'center'; el.style.paddingTop = '0'; el.style.paddingBottom = '0'; + // Allow label to shrink (otherwise long numbers force card wider than 180px) + el.style.flex = '0 1 auto'; + el.style.minWidth = '0'; + el.style.maxWidth = '14ch'; + el.style.overflow = 'hidden'; + el.style.textOverflow = 'ellipsis'; + el.style.whiteSpace = 'nowrap'; }); var names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name'); names.forEach(function (el) { el.style.lineHeight = '1.2'; - el.style.display = 'inline-flex'; - el.style.alignItems = 'center'; + // Ellipsis for long names (e.g. "Салтыков-Щедрин") + el.style.minWidth = '0'; + el.style.flex = '1 1 auto'; + el.style.overflow = 'hidden'; + el.style.textOverflow = 'ellipsis'; + el.style.whiteSpace = 'nowrap'; }); - // Tune vertical gap between cards so that: - // 2 * (shortCardHeight + gap) ~= (tallCardHeight + gap) - // This makes the masonry columns visually "grid-like". - this.adjustAgentCardsGap(); + // Grid masonry needs row-span calculation after layout. + requestAnimationFrame(function () { + requestAnimationFrame(function () { + _this2.layoutAgentCardsGridMasonry(); + }); + }); }, adjustAgentCardsGap: function adjustAgentCardsGap() { if (!this.$el) return; @@ -180,18 +226,109 @@ var ModuleMonitorActiveCalls = { gap = Math.max(0, Math.min(20, Math.round(gap))); container.style.setProperty('--agent-card-gap', "".concat(gap, "px")); }, - ensureAgentCardsMasonry: function ensureAgentCardsMasonry() { - var styleId = 'agent-cards-masonry-style'; - if (!document.getElementById(styleId)) { - var styleEl = document.createElement('style'); + adjustAgentCardsColumnCount: function adjustAgentCardsColumnCount() { + if (!this.$el) return; + var container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry'); + if (!container) return; + var w = container.clientWidth; + if (!w) return; + + // Minimum acceptable card width in px (tune if needed) + var minCardWidth = 150; + var cs = window.getComputedStyle(container); + var gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px'; + var gapPx = parseFloat(gapRaw) || 16; + var count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx)))); + container.style.setProperty('--agent-card-col-count', String(count)); + }, + ensureAgentCardsGridMasonry: function ensureAgentCardsGridMasonry() { + var _this3 = this; + var styleId = 'agent-cards-layout-style'; + var styleEl = document.getElementById(styleId); + if (!styleEl) { + styleEl = document.createElement('style'); styleEl.id = styleId; - styleEl.textContent = "\n/* Masonry layout for agents cards (scoped) */\n.ui.cards.agent-cards.agent-cards-masonry {\n display: block !important;\n column-width: 240px;\n column-gap: 1em;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n padding-bottom: 0.5em !important;\n}\n.ui.cards.agent-cards.agent-cards-masonry > .ui.card.agent-card {\n display: inline-block !important;\n width: 100% !important;\n margin: 0 0 var(--agent-card-gap, 12px) 0 !important;\n break-inside: avoid;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n}\n\t\t\t\t\t\t".trim(); document.head.appendChild(styleEl); } + + // Grid masonry: fills left-to-right and can pack items into gaps. + styleEl.textContent = "\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t".trim(); var cardsContainer = this.$el && this.$el.querySelector ? this.$el.querySelector('.ui.cards.agent-cards') : null; if (cardsContainer) { - cardsContainer.classList.add('agent-cards-masonry'); + cardsContainer.classList.remove('agent-cards-masonry'); + cardsContainer.classList.remove('agent-cards-flex'); + cardsContainer.classList.add('agent-cards-grid'); + + // Bind once: relayout on resize. + if (!this._agentCardsResizeBound) { + this._agentCardsResizeBound = true; + window.addEventListener('resize', function () { + _this3.layoutAgentCardsGridMasonry(); + }); + } + } + }, + layoutAgentCardsGridMasonry: function layoutAgentCardsGridMasonry() { + if (!this.$el) return; + var grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid'); + if (!grid) return; + var cs = window.getComputedStyle(grid); + var rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1; + var rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8; + var items = Array.from(grid.querySelectorAll('.ui.card.agent-card')); + if (!items.length) return; + + // Reset row spans and min-heights to measure natural heights. + items.forEach(function (item) { + item.style.gridRowEnd = ''; + item.style.minHeight = ''; + }); + var tall = items.filter(function (c) { + return c.querySelector('.meta.agent-peer'); + }); + var _short = items.filter(function (c) { + return !c.querySelector('.meta.agent-peer'); + }); + + // If we don't have both types, just do normal masonry spans. + if (!tall.length || !_short.length) { + items.forEach(function (item) { + var h = item.getBoundingClientRect().height; + var span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap))); + item.style.gridRowEnd = "span ".concat(span); + }); + return; } + var hs = Math.max.apply(Math, _toConsumableArray(_short.map(function (c) { + return c.getBoundingClientRect().height; + }))); + var ht = Math.max.apply(Math, _toConsumableArray(tall.map(function (c) { + return c.getBoundingClientRect().height; + }))); + + // Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs + var g = ht - 2 * hs; + if (!Number.isFinite(g)) g = rowGap; + g = Math.max(0, Math.min(24, Math.round(g))); + + // Apply gap and enforce min-heights so the relation holds visually. + grid.style.setProperty('--agent-card-gap', "".concat(g, "px")); + var shortH = Math.round(hs); + var tallH = Math.round(Math.max(ht, 2 * hs + g)); + _short.forEach(function (c) { + c.style.minHeight = "".concat(shortH, "px"); + }); + tall.forEach(function (c) { + c.style.minHeight = "".concat(tallH, "px"); + }); + + // Now compute row spans from final rendered heights. + var effectiveGap = g; + items.forEach(function (item) { + var h = item.getBoundingClientRect().height; + var span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap))); + item.style.gridRowEnd = "span ".concat(span); + }); }, getSrcNumForAgent: function getSrcNumForAgent(agentNumber) { var result = '-'; @@ -296,6 +433,7 @@ var ModuleMonitorActiveCalls = { "number": "", "queues": [], "agents": {}, + "agentsList": [], "calls": [] } }); diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index b660693..c6839fe 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","calls","Array","isArray","allCalls","$nextTick","normalizeAgentCards","formatElapsedTime","enterTime","$el","artifacts","querySelectorAll","forEach","remove","ensureAgentCardsMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","metas","numLabels","display","paddingTop","paddingBottom","names","adjustAgentCardsGap","container","from","length","tallCard","find","c","shortCard","ht","getBoundingClientRect","height","hs","gap","Number","isFinite","Math","max","min","round","setProperty","concat","styleId","document","getElementById","styleEl","createElement","textContent","trim","head","appendChild","classList","add","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","e","f","i","tmpCall","spyer","spy_num","exten","hasPeerPhone","phone","String","getPeerPhoneLabel","getPeerNameLabel","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","parseFloat","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","floor","now","secondToTime","start","getCallTime","queue","_data$calls","push","apply","_toConsumableArray","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","updateLines","setInterval","diffSeconds","toString","settingName","_defineProperty","api","url","on","method","successTest","response","Object","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Masonry-like layout via CSS columns to avoid empty gaps with different card heights.\n\t\t\t\t\t// We inject styles here because this project restricts edits to /public/assets/js/src/.\n\t\t\t\t\tthis.ensureAgentCardsMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Tune vertical gap between cards so that:\n\t\t\t\t\t// 2 * (shortCardHeight + gap) ~= (tallCardHeight + gap)\n\t\t\t\t\t// This makes the masonry columns visually \"grid-like\".\n\t\t\t\t\tthis.adjustAgentCardsGap();\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tensureAgentCardsMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-masonry-style';\n\t\t\t\t\tif (!document.getElementById(styleId)) {\n\t\t\t\t\t\tconst styleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tstyleEl.textContent = `\n/* Masonry layout for agents cards (scoped) */\n.ui.cards.agent-cards.agent-cards-masonry {\n display: block !important;\n column-width: 240px;\n column-gap: 1em;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n padding-bottom: 0.5em !important;\n}\n.ui.cards.agent-cards.agent-cards-masonry > .ui.card.agent-card {\n display: inline-block !important;\n width: 100% !important;\n margin: 0 0 var(--agent-card-gap, 12px) 0 !important;\n break-inside: avoid;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n}\n\t\t\t\t\t\t`.trim();\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-masonry');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Placeholder for future \"peer name\" feature\n\t\t\t\t\tvoid agentNumber;\n\t\t\t\t\treturn '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,KAAK,GAAO,6BAA6B;AAC/C,IAAMC,MAAM,GAAM,kCAAkC;AACpD,IAAMC,SAAS,GAAG,0BAA0B;AAC5C,IAAMC,cAAc,GAAG,sBAAsB;;AAE7C;AACA,IAAMC,wBAAwB,GAAG;EAChCC,MAAM,EAAE,IAAI;EACZC,iBAAiB,EAAE,mCAAmC;EACtDC,QAAQ,EAAEC,CAAC,CAAC,GAAG,GAACP,MAAM,CAAC;EACvBQ,WAAW,EAAED,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EAC1CS,UAAU,EAAEF,CAAC,CAAC,GAAG,GAACP,MAAM,GAAC,eAAe,CAAC;EACzCU,iBAAiB,EAAEC,aAAa,GAAGZ,KAAK,GAAG,oBAAoB;EAC/Da,mBAAmB,EAAED,aAAa,GAAGZ,KAAK,GAAG,sBAAsB;EACnEc,cAAc,EAAEF,aAAa,GAAGZ,KAAK,GAAG,cAAc;EACtDe,iBAAiB,EAAEH,aAAa,GAAGZ,KAAK,GAAG,WAAW;EACtDgB,OAAO,EAAEC,SAAS;EAElB;AACD;AACA;AACA;EACCC,aAAa,EAAE,CAAC,CAAC;EACjB;AACD;AACA;EACCC,UAAU,WAAVA,UAAUA,CAAA,EAAG;IACZX,CAAC,CAAC,0BAA0B,CAAC,CAACY,QAAQ,CAAC;MACtCC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,aAAa,EAAEJ,KAAK,CAAC;MACxD;IACD,CAAC,CAAC;IACFd,CAAC,CAAC,iCAAiC,CAAC,CAACY,QAAQ,CAAC;MAC7CC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACjDhB,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAACL,KAAK,CAAC;QACpCG,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,gBAAgB,EAAEJ,KAAK,CAAC;MAC3D;IACD,CAAC,CAAC;IACF,IAAIM,UAAU,GAAGpB,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC;IAEvCF,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,GAAG,IAAIC,GAAG,CAAC;MACzCC,EAAE,EAAE,YAAY;MAChBC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBC,OAAO,EAAE;QACRC,wBAAwB,WAAxBA,wBAAwBA,CAACC,IAAI,EAAE;UAAA,IAAAC,KAAA;UAC9B,IAAIC,WAAW,GAAG7B,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC;UACxD,IAAI,CAACgC,cAAc,GAAG,CAAC,GAAC9B,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAAC,CAAC;UAEvD,IAAI,CAACY,MAAM,GAAGJ,IAAI,CAACI,MAAM;UACzB,IAAIC,OAAO,GAAGhC,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAAC,CAAC;UACjC,IAAIa,OAAO,IAAIL,IAAI,CAACI,MAAM,EAAE;YAC3B,IAAI,CAACE,EAAE,GAAON,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACC,EAAE;YACrC,IAAI,CAACC,IAAI,GAAKP,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACE,IAAI;YACvC,IAAI,CAACC,MAAM,GAAGR,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACG,MAAM;YACzC,IAAI,CAACC,MAAM,GAAGT,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACI,MAAM;YACzC,IAAI,CAACC,KAAK,GAAIC,KAAK,CAACC,OAAO,CAACZ,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,CAAC,GAAGV,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,CAACK,KAAK,GAAG,EAAE;YACzF,IAAI,CAACG,QAAQ,GAAGb,IAAI,CAACU,KAAK;UAC3B,CAAC,MAAI;YACJ,IAAI,CAACA,KAAK,GAAI,EAAE;UACjB;UACA,IAAGR,WAAW,CAACjB,QAAQ,CAAC,WAAW,CAAC,EAAC;YACpCiB,WAAW,CAACjB,QAAQ,CAAC;cACpBC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAE;gBACjDC,MAAM,CAACvB,SAAS,CAAC,CAACwB,eAAe,CAAC,SAAS,EAAEJ,KAAK,CAAC;cACpD;YACD,CAAC,CAAC;YACF,IAAGe,WAAW,CAACjB,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAC;cAC3CK,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,IAAI;cAC/BgC,WAAW,CAACjB,QAAQ,CAAC,WAAW,EAAEZ,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAAC,CAAC,CAAC;cACtDF,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,GAAG,KAAK;YACjC;UACD;;UAEA;UACA,IAAI,CAAC4C,SAAS,CAAC,YAAM;YACpBb,KAAI,CAACc,mBAAmB,CAAC,CAAC;UAC3B,CAAC,CAAC;QACH,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;UAC5B,OAAO3B,MAAM,CAACvB,SAAS,CAAC,CAACiD,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACDF,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UACrB,IAAI,CAAC,IAAI,CAACG,GAAG,EAAE;;UAEf;UACA,IAAMC,SAAS,GAAG,IAAI,CAACD,GAAG,CAACE,gBAAgB,CAAC,6CAA6C,CAAC;UAC1FD,SAAS,CAACE,OAAO,CAAC,UAACzB,EAAE;YAAA,OAAKA,EAAE,CAAC0B,MAAM,CAAC,CAAC;UAAA,EAAC;;UAEtC;UACA;UACA,IAAI,CAACC,uBAAuB,CAAC,CAAC;;UAE9B;UACA,IAAMC,cAAc,GAAG,IAAI,CAACN,GAAG,CAACO,aAAa,CAAC,uBAAuB,CAAC;UACtE,IAAID,cAAc,EAAE;YACnBA,cAAc,CAACE,KAAK,CAACC,UAAU,GAAG,YAAY;YAC9CH,cAAc,CAACE,KAAK,CAACE,YAAY,GAAG,YAAY;UACjD;UAEA,IAAMC,KAAK,GAAG,IAAI,CAACX,GAAG,CAACE,gBAAgB,CAAC,6CAA6C,CAAC;UACtFS,KAAK,CAACR,OAAO,CAAC,UAACS,IAAI,EAAK;YACvBA,IAAI,CAACJ,KAAK,CAACK,SAAS,GAAG,YAAY;UACpC,CAAC,CAAC;;UAEF;UACA,IAAMC,OAAO,GAAG,IAAI,CAACd,GAAG,CAACE,gBAAgB,CAAC,+CAA+C,CAAC;UAC1FY,OAAO,CAACX,OAAO,CAAC,UAACzB,EAAE,EAAK;YACvBA,EAAE,CAAC8B,KAAK,CAACO,QAAQ,GAAG,KAAK;YACzBrC,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;UAC5B,CAAC,CAAC;UAEF,IAAMC,KAAK,GAAG,IAAI,CAACjB,GAAG,CAACE,gBAAgB,CAAC,sCAAsC,CAAC;UAC/Ee,KAAK,CAACd,OAAO,CAAC,UAACzB,EAAE,EAAK;YACrBA,EAAE,CAAC8B,KAAK,CAACO,QAAQ,GAAG,KAAK;YACzBrC,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;UAC5B,CAAC,CAAC;;UAEF;UACA,IAAME,SAAS,GAAG,IAAI,CAAClB,GAAG,CAACE,gBAAgB,CAAC,sCAAsC,CAAC;UACnFgB,SAAS,CAACf,OAAO,CAAC,UAACzB,EAAE,EAAK;YACzBA,EAAE,CAAC8B,KAAK,CAACO,QAAQ,GAAG,KAAK;YACzBrC,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;YAC3BtC,EAAE,CAAC8B,KAAK,CAACW,OAAO,GAAG,aAAa;YAChCzC,EAAE,CAAC8B,KAAK,CAACC,UAAU,GAAG,QAAQ;YAC9B/B,EAAE,CAAC8B,KAAK,CAACY,UAAU,GAAG,GAAG;YACzB1C,EAAE,CAAC8B,KAAK,CAACa,aAAa,GAAG,GAAG;UAC7B,CAAC,CAAC;UACF,IAAMC,KAAK,GAAG,IAAI,CAACtB,GAAG,CAACE,gBAAgB,CAAC,iCAAiC,CAAC;UAC1EoB,KAAK,CAACnB,OAAO,CAAC,UAACzB,EAAE,EAAK;YACrBA,EAAE,CAAC8B,KAAK,CAACQ,UAAU,GAAG,KAAK;YAC3BtC,EAAE,CAAC8B,KAAK,CAACW,OAAO,GAAG,aAAa;YAChCzC,EAAE,CAAC8B,KAAK,CAACC,UAAU,GAAG,QAAQ;UAC/B,CAAC,CAAC;;UAEF;UACA;UACA;UACA,IAAI,CAACc,mBAAmB,CAAC,CAAC;QAC3B,CAAC;QACDA,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UACrB,IAAI,CAAC,IAAI,CAACvB,GAAG,EAAE;UACf,IAAMwB,SAAS,GAAG,IAAI,CAACxB,GAAG,CAACO,aAAa,CAAC,uBAAuB,CAAC;UACjE,IAAI,CAACiB,SAAS,EAAE;UAEhB,IAAMb,KAAK,GAAGlB,KAAK,CAACgC,IAAI,CAACD,SAAS,CAACtB,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;UAC3E,IAAI,CAACS,KAAK,CAACe,MAAM,EAAE;UAEnB,IAAMC,QAAQ,GAAGhB,KAAK,CAACiB,IAAI,CAAC,UAACC,CAAC;YAAA,OAAKA,CAAC,CAACtB,aAAa,CAAC,kBAAkB,CAAC;UAAA,EAAC;UACvE,IAAMuB,SAAS,GAAGnB,KAAK,CAACiB,IAAI,CAAC,UAACC,CAAC;YAAA,OAAK,CAACA,CAAC,CAACtB,aAAa,CAAC,kBAAkB,CAAC;UAAA,EAAC;UACzE,IAAI,CAACoB,QAAQ,IAAI,CAACG,SAAS,EAAE;UAE7B,IAAMC,EAAE,GAAGJ,QAAQ,CAACK,qBAAqB,CAAC,CAAC,CAACC,MAAM;UAClD,IAAMC,EAAE,GAAGJ,SAAS,CAACE,qBAAqB,CAAC,CAAC,CAACC,MAAM;UACnD,IAAI,CAACF,EAAE,IAAI,CAACG,EAAE,EAAE;;UAEhB;UACA,IAAIC,GAAG,GAAGJ,EAAE,GAAG,CAAC,GAAGG,EAAE;UACrB,IAAI,CAACE,MAAM,CAACC,QAAQ,CAACF,GAAG,CAAC,EAAE;;UAE3B;UACAA,GAAG,GAAGG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,EAAE,EAAEF,IAAI,CAACG,KAAK,CAACN,GAAG,CAAC,CAAC,CAAC;UAEhDX,SAAS,CAAChB,KAAK,CAACkC,WAAW,CAAC,kBAAkB,KAAAC,MAAA,CAAKR,GAAG,OAAI,CAAC;QAC5D,CAAC;QACD9B,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;UACzB,IAAMuC,OAAO,GAAG,2BAA2B;UAC3C,IAAI,CAACC,QAAQ,CAACC,cAAc,CAACF,OAAO,CAAC,EAAE;YACtC,IAAMG,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAC,OAAO,CAAC;YAC/CD,OAAO,CAAC3D,EAAE,GAAGwD,OAAO;YACpBG,OAAO,CAACE,WAAW,GAAG,klBAkBpBC,IAAI,CAAC,CAAC;YACRL,QAAQ,CAACM,IAAI,CAACC,WAAW,CAACL,OAAO,CAAC;UACnC;UAEA,IAAMzC,cAAc,GAAG,IAAI,CAACN,GAAG,IAAI,IAAI,CAACA,GAAG,CAACO,aAAa,GACtD,IAAI,CAACP,GAAG,CAACO,aAAa,CAAC,uBAAuB,CAAC,GAC/C,IAAI;UACP,IAAID,cAAc,EAAE;YACnBA,cAAc,CAAC+C,SAAS,CAACC,GAAG,CAAC,qBAAqB,CAAC;UACpD;QACD,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAACC,WAAW,EAAE;UAC9B,IAAIC,MAAM,GAAG,GAAG;UAChB,IAAIC,aAAa,GAAI,KAAK;UAAC,IAAAC,SAAA,GAAAC,0BAAA,CACR,IAAI,CAACpE,KAAK;YAAAqE,KAAA;UAAA;YAA7B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA+B;cAAA,IAApBC,IAAI,GAAAJ,KAAA,CAAA5F,KAAA;cACd,IAAGgG,IAAI,CAACC,OAAO,KAAKV,WAAW,EAAC;gBAC/BE,aAAa,GAAG,IAAI;gBACpBD,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACrB;cACD;cACA,IAAIF,IAAI,CAACG,cAAc,IAAI3E,KAAK,CAACC,OAAO,CAACuE,IAAI,CAACG,cAAc,CAAC,EAAE;gBAC9D,IAAMC,OAAK,GAAGJ,IAAI,CAACG,cAAc,CAACxC,IAAI,CAAC,UAAA0C,EAAE;kBAAA,OAAIA,EAAE,CAAChF,MAAM,KAAKkE,WAAW;gBAAA,EAAC;gBACvE,IAAIa,OAAK,EAAE;kBACVZ,MAAM,GAAGQ,IAAI,CAACE,OAAO;gBACtB;cACD;cACA,IAAIF,IAAI,CAACM,cAAc,IAAI9E,KAAK,CAACC,OAAO,CAACuE,IAAI,CAACM,cAAc,CAAC,EAAE;gBAC9D,IAAMF,OAAK,GAAGJ,IAAI,CAACM,cAAc,CAAC3C,IAAI,CAAC,UAAA0C,EAAE;kBAAA,OAAKA,EAAE,CAACH,OAAO,KAAKX,WAAW,IAAIc,EAAE,CAACJ,OAAO,KAAKV,WAAW;gBAAA,CAAC,CAAC;gBACxG,IAAIa,OAAK,EAAE;kBACV,IAAGA,OAAK,CAACF,OAAO,KAAKX,WAAW,EAAC;oBAChCC,MAAM,GAAGY,OAAK,CAACH,OAAO;kBACvB,CAAC,MAAI;oBACJT,MAAM,GAAGY,OAAK,CAACF,OAAO;kBACvB;kBACAT,aAAa,GAAG,IAAI;gBACrB;cACD;YACD;UAAC,SAAAc,GAAA;YAAAb,SAAA,CAAAc,CAAA,CAAAD,GAAA;UAAA;YAAAb,SAAA,CAAAe,CAAA;UAAA;UACD,IAAGhB,aAAa,KAAK,KAAK,EAAC;YAC1B,KAAK,IAAIiB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAChF,QAAQ,CAAC+B,MAAM,EAAEiD,CAAC,EAAE,EAAE;cAC9C,IAAMC,OAAO,GAAG,IAAI,CAACjF,QAAQ,CAACgF,CAAC,CAAC;cAChC,IAAGC,OAAO,CAACT,OAAO,KAAKX,WAAW,EAAC;gBAClC;gBACA,IAAGoB,OAAO,CAACV,OAAO,KAAK,EAAE,EAAC;kBACzB;kBACA,IAAIU,OAAO,CAACR,cAAc,IAAI3E,KAAK,CAACC,OAAO,CAACkF,OAAO,CAACR,cAAc,CAAC,IAAKQ,OAAO,CAACR,cAAc,CAAC1C,MAAM,EAAE;oBACtG,IAAM2C,KAAK,GAAGO,OAAO,CAACR,cAAc,CAACxC,IAAI,CAAC,UAAA0C,EAAE;sBAAA,OAAIA,EAAE,CAAChF,MAAM,KAAKkE,WAAW;oBAAA,EAAC;oBAC1E,IAAIa,KAAK,EAAE;sBACVZ,MAAM,GAAGY,KAAK,CAAC/E,MAAM;oBACtB;kBACD,CAAC,MAAK,IAAGsF,OAAO,CAACC,KAAK,EAAC;oBACtB;oBACApB,MAAM,GAAGmB,OAAO,CAACE,OAAO;kBACzB,CAAC,MAAI;oBACJ;oBACArB,MAAM,GAAGmB,OAAO,CAACG,KAAK;kBACvB;gBACD,CAAC,MAAI;kBACJtB,MAAM,GAAGmB,OAAO,CAACV,OAAO;gBACzB;gBACA;cACD,CAAC,MAAK,IAAGU,OAAO,CAACV,OAAO,KAAKV,WAAW,EAAC;gBACxC;gBACAC,MAAM,GAAGmB,OAAO,CAACT,OAAO;gBACxB;cACD,CAAC,MAAI;gBACJ,IAAIS,OAAO,CAACR,cAAc,IAAI3E,KAAK,CAACC,OAAO,CAACkF,OAAO,CAACR,cAAc,CAAC,EAAE;kBACpE,IAAMC,MAAK,GAAGO,OAAO,CAACR,cAAc,CAACxC,IAAI,CAAC,UAAA0C,EAAE;oBAAA,OAAIA,EAAE,CAAChF,MAAM,KAAKkE,WAAW;kBAAA,EAAC;kBAC1E,IAAIa,MAAK,EAAE;oBACVZ,MAAM,GAAGmB,OAAO,CAACT,OAAO;kBACzB;gBACD;cACD;YACD;UACD;UACA,OAAOV,MAAM;QACd,CAAC;QACDuB,YAAY,WAAZA,YAAYA,CAACxB,WAAW,EAAE;UACzB,IAAMyB,KAAK,GAAGC,MAAM,CAAC,IAAI,CAAC3B,iBAAiB,CAACC,WAAW,CAAC,IAAI,EAAE,CAAC,CAACN,IAAI,CAAC,CAAC;UACtE,OAAO+B,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,GAAG,IAAIA,KAAK,KAAK,GAAG;QACtD,CAAC;QACDE,iBAAiB,WAAjBA,iBAAiBA,CAAC3B,WAAW,EAAE;UAC9B,IAAMyB,KAAK,GAAGC,MAAM,CAAC,IAAI,CAAC3B,iBAAiB,CAACC,WAAW,CAAC,IAAI,EAAE,CAAC,CAACN,IAAI,CAAC,CAAC;UACtE,OAAO,IAAI,CAAC8B,YAAY,CAACxB,WAAW,CAAC,GAAGyB,KAAK,GAAG,GAAG;QACpD,CAAC;QACDG,gBAAgB,WAAhBA,gBAAgBA,CAAC5B,WAAW,EAAE;UAC7B;UACA,KAAKA,WAAW;UAChB,OAAO,GAAG;QACX;MACD,CAAC;MACD1E,IAAI,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CACV,CAAC;QACD,OAAO,EAAE;MAEV;IACD,CAAC,CAAC;IAEFV,MAAM,CAACvB,SAAS,CAAC,CAACwI,YAAY,GAAG,IAAI5G,GAAG,CAAC;MACxCC,EAAE,EAAE,QAAQ;MACZC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACL,gBAAgB,EAAE,EAAE;QACpBP,UAAU,EAAEA,UAAU;QACtB+G,UAAU,EAAGnI,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAIC,UAAU,KAAK,EAAG;QACjEiB,KAAK,EAAE;MAER,CAAC;MACDZ,OAAO,EAAE;QACR2G,aAAa,WAAbA,aAAaA,CAACtB,IAAI,EAAC;UAClB,IAAGA,IAAI,CAACuB,QAAQ,KAAG,EAAE,IAAIvB,IAAI,CAACwB,SAAS,CAACC,SAAS,KAAK9H,SAAS,EAAE;YAChE,OAAO,IAAI,CAACqB,cAAc,IAAI,IAAI,CAAC0G,WAAW,CAAC1B,IAAI,CAAC;UACrD;UACA,OAAO,IAAI;QACZ,CAAC;QACD2B,qBAAqB,WAArBA,qBAAqBA,CAACC,SAAS,EAAE;UAChC;UACA,IAAMC,EAAE,GAAG,OAAOD,SAAS,KAAK,QAAQ,GAAGE,UAAU,CAACF,SAAS,CAAC,GAAGA,SAAS;;UAE5E;UACA,IAAMG,EAAE,GAAGF,EAAE,GAAG,IAAI,GAAGA,EAAE,GAAG,IAAI,GAAGA,EAAE;UAErC,IAAMG,IAAI,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;UAEzB,IAAMG,KAAK,GAAGjB,MAAM,CAACe,IAAI,CAACG,QAAQ,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UACtD,IAAMC,OAAO,GAAGpB,MAAM,CAACe,IAAI,CAACM,UAAU,CAAC,CAAC,CAAC,CAACF,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAC1D,IAAMG,OAAO,GAAGtB,MAAM,CAACe,IAAI,CAACQ,UAAU,CAAC,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;UAE1D,UAAA1D,MAAA,CAAUwD,KAAK,OAAAxD,MAAA,CAAI2D,OAAO,OAAA3D,MAAA,CAAI6D,OAAO;QACtC,CAAC;QACDb,WAAW,WAAXA,WAAWA,CAAC1B,IAAI,EAAC;UAChB,IAAIyC,MAAM,GAAGpE,IAAI,CAACqE,KAAK,CAACT,IAAI,CAACU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;UAC1C,IAAG3C,IAAI,CAACyC,MAAM,KAAK,EAAE,EAAC;YACrBA,MAAM,GAAGzC,IAAI,CAACyC,MAAM;UACrB;UACA,OAAOtI,MAAM,CAACvB,SAAS,CAAC,CAACgK,YAAY,CAACH,MAAM,GAAGzC,IAAI,CAAC6C,KAAK,CAAC;QAC3D,CAAC;QACDC,WAAW,WAAXA,WAAWA,CAAC9C,IAAI,EAAC;UAChB,IAAGA,IAAI,CAACyC,MAAM,KAAK,EAAE,EAAC;YACrB,OAAO,GAAG;UACX;UACA,OAAOtI,MAAM,CAACvB,SAAS,CAAC,CAACiD,iBAAiB,CAACmE,IAAI,CAACyC,MAAM,CAAC;QACxD,CAAC;QACD7H,wBAAwB,WAAxBA,wBAAwBA,CAACC,IAAI,EAAE;UAC9B,IAAI,CAACG,cAAc,GAAG,CAAC,GAAC9B,CAAC,CAAC,sBAAsB,CAAC,CAACmB,GAAG,CAAC,CAAC;UACvD;UACA,KAAK,IAAMa,OAAO,IAAIL,IAAI,CAACI,MAAM,EAAE;YAClC,IAAM8H,KAAK,GAAGlI,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC;YAClC;YACA,IAAIM,KAAK,CAACC,OAAO,CAACsH,KAAK,CAACxH,KAAK,CAAC,EAAE;cAAA,IAAAyH,WAAA;cAC/B;cACA,CAAAA,WAAA,GAAAnI,IAAI,CAACU,KAAK,EAAC0H,IAAI,CAAAC,KAAA,CAAAF,WAAA,EAAAG,kBAAA,CAAIJ,KAAK,CAACxH,KAAK,EAAC;YAChC;UACD;UACA,IAAI,CAACA,KAAK,GAAGV,IAAI,CAACU,KAAK;UACvB,IAAI,CAACI,SAAS,CAAC,YAAM;YACpByH,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACDxH,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;UAC5B,OAAO3B,MAAM,CAACvB,SAAS,CAAC,CAACiD,iBAAiB,CAACC,SAAS,CAAC;QACtD,CAAC;QACDwH,YAAY,WAAZA,YAAYA,CAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACAvJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAVA,UAAUA,CAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD0J,aAAa,WAAbA,aAAaA,CAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI2J,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAtJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAEzI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD4J,YAAY,WAAZA,YAAYA,CAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IAEFH,MAAM,CAACvB,SAAS,CAAC,CAACc,OAAO,GAAG,IAAIc,GAAG,CAAC;MACnCC,EAAE,EAAE,MAAM;MACVC,UAAU,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC;MACvBG,IAAI,EAAE;QACLP,UAAU,EAAEA,UAAU;QACtB+G,UAAU,EAAGnI,CAAC,CAAC,aAAa,CAAC,CAACmB,GAAG,CAAC,CAAC,KAAK,GAAG,IAAIC,UAAU,KAAK,EAAG;QACjEiB,KAAK,EAAE;MAER,CAAC;MACDZ,OAAO,EAAE;QACRC,wBAAwB,WAAxBA,wBAAwBA,CAACuJ,KAAK,EAAE;UAC/B,IAAI,CAAC5I,KAAK,GAAG4I,KAAK;UAClB,IAAI,CAACxI,SAAS,CAAC,YAAM;YACpByH,UAAU,CAACC,qBAAqB,CAAC,aAAa,CAAC;UAChD,CAAC,CAAC;QACH,CAAC;QACDC,YAAY,WAAZA,YAAYA,CAACC,KAAK,EAAE;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACAvJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU;UAAC,CAAC,CAAC;QACpH,CAAC;QACDM,UAAU,WAAVA,UAAUA,CAACR,KAAK,EAAE;UACjB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,MAAM;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3I,CAAC;QACD0J,aAAa,WAAbA,aAAaA,CAACT,KAAK,EAAC;UACnB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACA,IAAI2J,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACvC,IAAG,UAAU,KAAKD,MAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC,EAAC;YAC/CQ,SAAS,GAAGT,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;UACpC;UACAtJ,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,SAAS;YAAEC,GAAG,EAAEI,SAAS;YAAEH,GAAG,EAAE,EAAE;YAAEzI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC3G,CAAC;QACD4J,YAAY,WAAZA,YAAYA,CAACX,KAAK,EAAC;UAClB,IAAIC,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC;UAC5B,IAAGA,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC,KAAK9J,SAAS,EAAC;YACxC6J,MAAM,GAAGtK,CAAC,CAACqK,KAAK,CAACC,MAAM,CAAC,CAACE,MAAM,CAAC,CAAC;UAClC;UACA,IAAG,IAAI,CAACpJ,UAAU,KAAK,EAAE,EAAC;YACzB;UACD;UACAH,MAAM,CAACvB,SAAS,CAAC,CAAC+K,iBAAiB,CAAC;YAACC,MAAM,EAAE,QAAQ;YAAEC,GAAG,EAAEL,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEK,GAAG,EAAEN,MAAM,CAACC,IAAI,CAAC,UAAU,CAAC;YAAEpI,MAAM,EAAE,IAAI,CAACf;UAAU,CAAC,CAAC;QAC7I;MACD;IACD,CAAC,CAAC;IACFH,MAAM,CAACvB,SAAS,CAAC,CAACO,WAAW,CAACiL,QAAQ,CAAC,CAAC;IACxCjK,MAAM,CAACvB,SAAS,CAAC,CAACQ,UAAU,CAACU,QAAQ,CAAC,CAAC;IACvCK,MAAM,CAACvB,SAAS,CAAC,CAACyL,cAAc,CAAC,CAAC;IAClCnL,CAAC,CAAC,aAAa,CAAC,CAACoL,GAAG,CAAC,CAAC;IACtB;IACA;IACApL,CAAC,CAAC,yBAAyB,CAAC,CAACqL,WAAW,CAAC,WAAW,CAAC;IACrDrL,CAAC,CAAC,+BAA+B,CAAC,CAACsL,IAAI,CAAC,CAAC;IACzCtL,CAAC,CAAC,6BAA6B,CAAC,CAACiD,MAAM,CAAC,CAAC;IACzC;IACA;IACAhC,MAAM,CAACvB,SAAS,CAAC,CAAC6L,WAAW,CAAC,CAAC;IAC/BC,WAAW,CAACvK,MAAM,CAACvB,SAAS,CAAC,CAAC6L,WAAW,EAAE,IAAI,CAAC;EACjD,CAAC;EACD5I,iBAAiB,WAAjBA,iBAAiBA,CAACC,SAAS,EAAE;IAC5B,IAAI,CAACA,SAAS,EAAE,OAAO,GAAG;IAE1B,IAAM6G,GAAG,GAAGtE,IAAI,CAACqE,KAAK,CAACT,IAAI,CAACU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,IAAMgC,WAAW,GAAGhC,GAAG,GAAG7G,SAAS;IAEnC,OAAO3B,MAAM,CAACvB,SAAS,CAAC,CAACgK,YAAY,CAAC+B,WAAW,CAAC;EACnD,CAAC;EACD/B,YAAY,WAAZA,YAAYA,CAAC+B,WAAW,EAAC;IACxB,IAAIA,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG;IAC/B;IACA,IAAMzC,KAAK,GAAK7D,IAAI,CAACqE,KAAK,CAACiC,WAAW,GAAG,IAAI,CAAC;IAC9C,IAAMtC,OAAO,GAAGhE,IAAI,CAACqE,KAAK,CAAEiC,WAAW,GAAG,IAAI,GAAI,EAAE,CAAC;IACrD,IAAMpC,OAAO,GAAGlE,IAAI,CAACG,KAAK,CAACmG,WAAW,GAAG,EAAE,CAAC;IAC5C,IAAIzC,KAAK,GAAG,CAAC,EAAE;MACd,UAAAxD,MAAA,CAAUwD,KAAK,OAAAxD,MAAA,CAAI2D,OAAO,CAACuC,QAAQ,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAA1D,MAAA,CAAI6D,OAAO,CAACqC,QAAQ,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC9F,CAAC,MAAM,IAAIC,OAAO,GAAG,CAAC,EAAE;MACvB,UAAA3D,MAAA,CAAU2D,OAAO,OAAA3D,MAAA,CAAI6D,OAAO,CAACqC,QAAQ,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACzD,CAAC,MAAM;MACN,UAAA1D,MAAA,CAAU6D,OAAO;IAClB;EACD,CAAC;EACDnI,eAAe,WAAfA,eAAeA,CAACyK,WAAW,EAAE7K,KAAK,EAAE;IACnC,IAAGG,MAAM,CAACvB,SAAS,CAAC,CAACG,MAAM,EAAC;MAC3B;IACD;IACA,IAAI8B,IAAI,GAAAiK,eAAA,KACND,WAAW,EAAG7K,KAAK,CACpB;IACDd,CAAC,CAAC6L,GAAG,CAAC;MACLC,GAAG,EAAE7K,MAAM,CAACvB,SAAS,CAAC,CAACa,iBAAiB;MACxCwL,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdrK,IAAI,EAAEA,IAAI;MACVsK,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAKzL,SAAS,IAAI0L,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAAC3H,MAAM,GAAG,CAAC,IAAI2H,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnB,IAAGP,WAAW,KAAK,SAAS,EAAC;UAC5B3L,CAAC,CAAC,UAAU,CAAC,CAACmB,GAAG,CAACnB,CAAC,CAACiB,MAAM,CAACvB,SAAS,CAAC,CAACI,iBAAiB,CAAC,CAACc,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChF,CAAC,MAAK,IAAI+K,WAAW,KAAK,aAAa,EAAC;UACvC1K,MAAM,CAACsL,QAAQ,CAACC,IAAI,GAAGvL,MAAM,CAACsL,QAAQ,CAACC,IAAI;QAC5C;MACD,CAAC;MACDC,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDtC,iBAAiB,WAAjBA,iBAAiBA,CAAC9I,IAAI,EAAE;IACvB3B,CAAC,CAAC6L,GAAG,CAAC;MACLC,GAAG,EAAE7K,MAAM,CAACvB,SAAS,CAAC,CAACY,cAAc;MACrCyL,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdrK,IAAI,EAAEA,IAAI;MACVsK,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAKzL,SAAS,IAAI0L,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAAC3H,MAAM,GAAG,CAAC,IAAI2H,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDO,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EACDxB,WAAW,WAAXA,WAAWA,CAAA,EAAG;IACbvL,CAAC,CAAC6L,GAAG,CAAC;MACLC,GAAG,EAAE7K,MAAM,CAACvB,SAAS,CAAC,CAACW,mBAAmB;MAC1C0L,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE,MAAM;MACdC,WAAW,WAAXA,WAAWA,CAACC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,KAAKzL,SAAS,IAAI0L,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAAC3H,MAAM,GAAG,CAAC,IAAI2H,QAAQ,CAACG,OAAO,KAAK,IAAI;MAC/F,CAAC;MACDC,SAAS,WAATA,SAASA,CAACJ,QAAQ,EAAE;QACnBjL,MAAM,CAACvB,SAAS,CAAC,CAAC2B,aAAa,CAACK,wBAAwB,CAACwK,QAAQ,CAAC;QAClEjL,MAAM,CAACvB,SAAS,CAAC,CAACwI,YAAY,CAACxG,wBAAwB,CAACwK,QAAQ,CAAC;MAClE,CAAC;MACDO,SAAS,WAATA,SAASA,CAACP,QAAQ,EAAE;QACnBQ,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MACtB,CAAC;MACDU,OAAO,WAAPA,OAAOA,CAACC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACE,YAAY,EAACE,GAAG,CAAC;MAC9B;IACD,CAAC,CAAC;EACH,CAAC;EAED;AACD;AACA;AACA;AACA;EACCC,gBAAgB,WAAhBA,gBAAgBA,CAACC,QAAQ,EAAE;IAC1B,IAAM3G,MAAM,GAAG2G,QAAQ;IACvB3G,MAAM,CAAC3E,IAAI,GAAGV,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ,CAACmN,IAAI,CAAC,YAAY,CAAC;IAC3D,OAAO5G,MAAM;EACd,CAAC;EACD;AACD;AACA;EACC6G,eAAe,WAAfA,eAAeA,CAAA,EAAG,CAElB,CAAC;EACD;AACD;AACA;EACChC,cAAc,WAAdA,cAAcA,CAAA,EAAG;IAChBiC,IAAI,CAACrN,QAAQ,GAAGkB,MAAM,CAACvB,SAAS,CAAC,CAACK,QAAQ;IAC1CqN,IAAI,CAACtB,GAAG,MAAAtG,MAAA,CAAMpF,aAAa,EAAAoF,MAAA,CAAGhG,KAAK,UAAO;IAC1C4N,IAAI,CAAC1M,aAAa,GAAGO,MAAM,CAACvB,SAAS,CAAC,CAACgB,aAAa;IACpD0M,IAAI,CAACJ,gBAAgB,GAAG/L,MAAM,CAACvB,SAAS,CAAC,CAACsN,gBAAgB;IAC1DI,IAAI,CAACD,eAAe,GAAGlM,MAAM,CAACvB,SAAS,CAAC,CAACyN,eAAe;IACxDC,IAAI,CAACzM,UAAU,CAAC,CAAC;EAClB;AACD,CAAC;AAEDX,CAAC,CAAC0F,QAAQ,CAAC,CAAC2H,KAAK,CAAC,YAAM;EACvBpM,MAAM,CAACvB,SAAS,CAAC,CAACiB,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","agentsList","buildAgentsList","calls","Array","isArray","allCalls","$nextTick","normalizeAgentCards","agentsObj","entries","Object","available","unavailable","_i","_entries","length","_entries$_i","_slicedToArray","agent","state","item","_objectSpread","push","concat","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","forEach","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","from","tallCard","find","c","shortCard","ht","getBoundingClientRect","height","hs","Number","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","w","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","String","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","trim","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","filter","short","h","span","ceil","apply","_toConsumableArray","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","e","f","i","tmpCall","spyer","spy_num","exten","hasPeerPhone","phone","getPeerPhoneLabel","getPeerNameLabel","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","updateLines","setInterval","diffSeconds","toString","settingName","_defineProperty","api","url","on","method","successTest","response","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Placeholder for future \"peer name\" feature\n\t\t\t\t\tvoid agentNumber;\n\t\t\t\t\treturn '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index f294c52..47d2e97 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -60,10 +60,12 @@ const ModuleMonitorActiveCalls = { this.name = data.queues[queueId].name; this.number = data.queues[queueId].number; this.agents = data.queues[queueId].agents; + this.agentsList = this.buildAgentsList(this.agents); this.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : []; this.allCalls = data.calls; }else{ this.calls = []; + this.agentsList = []; } if(queueNameEl.dropdown('is hidden')){ queueNameEl.dropdown({ @@ -83,6 +85,21 @@ const ModuleMonitorActiveCalls = { this.normalizeAgentCards(); }); }, + buildAgentsList(agentsObj) { + const entries = Object.entries(agentsObj || {}); + const available = []; + const unavailable = []; + for (const [number, agent] of entries) { + const state = agent?.state || ''; + const item = { number, ...agent }; + if (state === 'Unavailable') { + unavailable.push(item); + } else { + available.push(item); + } + } + return available.concat(unavailable); + }, formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, @@ -93,9 +110,9 @@ const ModuleMonitorActiveCalls = { const artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer'); artifacts.forEach((el) => el.remove()); - // Masonry-like layout via CSS columns to avoid empty gaps with different card heights. - // We inject styles here because this project restricts edits to /public/assets/js/src/. - this.ensureAgentCardsMasonry(); + // Dense layout (masonry) that still fills left-to-right: + // flex-wrap can't place items into vertical gaps under tall cards. + this.ensureAgentCardsGridMasonry(); // Prevent "equal height" cards in one row (Semantic UI cards are flex). const cardsContainer = this.$el.querySelector('.ui.cards.agent-cards'); @@ -114,6 +131,10 @@ const ModuleMonitorActiveCalls = { headers.forEach((el) => { el.style.fontSize = '1em'; el.style.lineHeight = '1.2'; + el.style.display = 'flex'; + el.style.alignItems = 'center'; + el.style.gap = '0.5em'; + el.style.whiteSpace = 'nowrap'; }); const metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer'); @@ -131,18 +152,31 @@ const ModuleMonitorActiveCalls = { el.style.alignItems = 'center'; el.style.paddingTop = '0'; el.style.paddingBottom = '0'; + // Allow label to shrink (otherwise long numbers force card wider than 180px) + el.style.flex = '0 1 auto'; + el.style.minWidth = '0'; + el.style.maxWidth = '14ch'; + el.style.overflow = 'hidden'; + el.style.textOverflow = 'ellipsis'; + el.style.whiteSpace = 'nowrap'; }); const names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name'); names.forEach((el) => { el.style.lineHeight = '1.2'; - el.style.display = 'inline-flex'; - el.style.alignItems = 'center'; + // Ellipsis for long names (e.g. "Салтыков-Щедрин") + el.style.minWidth = '0'; + el.style.flex = '1 1 auto'; + el.style.overflow = 'hidden'; + el.style.textOverflow = 'ellipsis'; + el.style.whiteSpace = 'nowrap'; }); - // Tune vertical gap between cards so that: - // 2 * (shortCardHeight + gap) ~= (tallCardHeight + gap) - // This makes the masonry columns visually "grid-like". - this.adjustAgentCardsGap(); + // Grid masonry needs row-span calculation after layout. + requestAnimationFrame(() => { + requestAnimationFrame(() => { + this.layoutAgentCardsGridMasonry(); + }); + }); }, adjustAgentCardsGap() { if (!this.$el) return; @@ -169,40 +203,125 @@ const ModuleMonitorActiveCalls = { container.style.setProperty('--agent-card-gap', `${gap}px`); }, - ensureAgentCardsMasonry() { - const styleId = 'agent-cards-masonry-style'; - if (!document.getElementById(styleId)) { - const styleEl = document.createElement('style'); + adjustAgentCardsColumnCount() { + if (!this.$el) return; + const container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry'); + if (!container) return; + + const w = container.clientWidth; + if (!w) return; + + // Minimum acceptable card width in px (tune if needed) + const minCardWidth = 150; + + const cs = window.getComputedStyle(container); + const gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px'; + const gapPx = parseFloat(gapRaw) || 16; + + const count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx)))); + container.style.setProperty('--agent-card-col-count', String(count)); + }, + ensureAgentCardsGridMasonry() { + const styleId = 'agent-cards-layout-style'; + let styleEl = document.getElementById(styleId); + if (!styleEl) { + styleEl = document.createElement('style'); styleEl.id = styleId; - styleEl.textContent = ` -/* Masonry layout for agents cards (scoped) */ -.ui.cards.agent-cards.agent-cards-masonry { - display: block !important; - column-width: 240px; - column-gap: 1em; + document.head.appendChild(styleEl); + } + + // Grid masonry: fills left-to-right and can pack items into gaps. + styleEl.textContent = ` +.ui.cards.agent-cards.agent-cards-grid { + display: grid !important; + grid-template-columns: repeat(auto-fill, 240px); + justify-content: start; + gap: var(--agent-card-gap, 8px); + grid-auto-rows: 1px; /* Prevent overlap with the legend block below */ margin-bottom: 1em !important; - padding-bottom: 0.5em !important; } -.ui.cards.agent-cards.agent-cards-masonry > .ui.card.agent-card { - display: inline-block !important; - width: 100% !important; - margin: 0 0 var(--agent-card-gap, 12px) 0 !important; - break-inside: avoid; - -webkit-column-break-inside: avoid; - page-break-inside: avoid; +.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card { + width: 240px !important; + margin: 0 !important; + overflow: hidden; + /* reset from previous layouts */ + align-self: start; } - `.trim(); - document.head.appendChild(styleEl); - } + `.trim(); const cardsContainer = this.$el && this.$el.querySelector ? this.$el.querySelector('.ui.cards.agent-cards') : null; if (cardsContainer) { - cardsContainer.classList.add('agent-cards-masonry'); + cardsContainer.classList.remove('agent-cards-masonry'); + cardsContainer.classList.remove('agent-cards-flex'); + cardsContainer.classList.add('agent-cards-grid'); + + // Bind once: relayout on resize. + if (!this._agentCardsResizeBound) { + this._agentCardsResizeBound = true; + window.addEventListener('resize', () => { + this.layoutAgentCardsGridMasonry(); + }); + } } }, + layoutAgentCardsGridMasonry() { + if (!this.$el) return; + const grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid'); + if (!grid) return; + + const cs = window.getComputedStyle(grid); + const rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1; + const rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8; + + const items = Array.from(grid.querySelectorAll('.ui.card.agent-card')); + if (!items.length) return; + + // Reset row spans and min-heights to measure natural heights. + items.forEach((item) => { + item.style.gridRowEnd = ''; + item.style.minHeight = ''; + }); + + const tall = items.filter((c) => c.querySelector('.meta.agent-peer')); + const short = items.filter((c) => !c.querySelector('.meta.agent-peer')); + + // If we don't have both types, just do normal masonry spans. + if (!tall.length || !short.length) { + items.forEach((item) => { + const h = item.getBoundingClientRect().height; + const span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap))); + item.style.gridRowEnd = `span ${span}`; + }); + return; + } + + const hs = Math.max(...short.map((c) => c.getBoundingClientRect().height)); + const ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height)); + + // Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs + let g = ht - 2 * hs; + if (!Number.isFinite(g)) g = rowGap; + g = Math.max(0, Math.min(24, Math.round(g))); + + // Apply gap and enforce min-heights so the relation holds visually. + grid.style.setProperty('--agent-card-gap', `${g}px`); + + const shortH = Math.round(hs); + const tallH = Math.round(Math.max(ht, 2 * hs + g)); + short.forEach((c) => { c.style.minHeight = `${shortH}px`; }); + tall.forEach((c) => { c.style.minHeight = `${tallH}px`; }); + + // Now compute row spans from final rendered heights. + const effectiveGap = g; + items.forEach((item) => { + const h = item.getBoundingClientRect().height; + const span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap))); + item.style.gridRowEnd = `span ${span}`; + }); + }, getSrcNumForAgent(agentNumber) { let result = '-'; let answeredFound = false; @@ -290,6 +409,7 @@ const ModuleMonitorActiveCalls = { "queues": [], "agents": { }, + "agentsList": [], "calls": [ ] }, From 7d34af70d2b5d9d2756b72e68e48cc142bcbc3d9 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:05:50 +0300 Subject: [PATCH 10/23] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B5=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/WorkerActiveCalls.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index b2896bf..3911b28 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -293,13 +293,13 @@ private function printActiveCalls():void $tmpBridgeStart = time(); $tmpChFound = $this->findBridgeChannel($linkedid,$tmpDstChannel, $tmpBridgeStart); if(!$tmpChFound){ - // Идет дозвони. + // Идет дозвон. $call['calledChannels'][] = [ 'channel' => $channel, 'number' => $channelData['CallerIDNum'], ]; }elseif(!isset($bridgeChannels[$channel])){ - // Вероятная переадресация с кнсультацией. Начальный канал в ожидании. + // Вероятная переадресация с консультацией. Начальный канал в ожидании. $bridgeChannels[$channel] = true; $bridgeChannels[$tmpDstChannel] = true; From f4a903aa74f058e45f4f4e1cd940c1ebd8b690a8 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Thu, 15 Jan 2026 16:35:48 +0300 Subject: [PATCH 11/23] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D1=81=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5=D0=BC=20ModuleSoftphoneBac?= =?UTF-8?q?kend,=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BF=D0=BE=20=D0=BD=D0=B0=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8E=20=D0=BA=D0=BB=D0=B8?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0.=20=D0=9C=D0=BE=D0=B4=D1=83=D0=BB?= =?UTF-8?q?=D1=8C=20ModuleSoftphoneBackend=20=D0=BD=D0=B0=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D1=8F=D0=B5=D1=82=20=D0=B1=D0=B0=D0=B7=D1=83=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BA=D0=BB=D0=B8=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=BE=D1=81=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=20"=D0=9F=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=B8=D0=B8=204.0".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleMonitorActiveCallsController.php | 19 +- App/Views/index.volt | 19 +- .../js/module-monitor-active-calls-index.js | 383 +++++++++++++++++- .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 274 ++++++++++++- 5 files changed, 680 insertions(+), 17 deletions(-) diff --git a/App/Controllers/ModuleMonitorActiveCallsController.php b/App/Controllers/ModuleMonitorActiveCallsController.php index b67ef59..1980a29 100644 --- a/App/Controllers/ModuleMonitorActiveCallsController.php +++ b/App/Controllers/ModuleMonitorActiveCallsController.php @@ -9,7 +9,7 @@ use MikoPBX\AdminCabinet\Controllers\BaseController; use MikoPBX\AdminCabinet\Controllers\SessionController; use MikoPBX\Common\Models\Extensions; -use MikoPBX\Common\Models\Users; +use MikoPBX\Common\Models\PbxExtensionModules; use MikoPBX\Common\Providers\PBXConfModulesProvider; use MikoPBX\Common\Providers\SessionProvider; use MikoPBX\Modules\Config\CDRConfigInterface; @@ -22,7 +22,7 @@ use Modules\ModuleUsersUI\Lib\Constants; use Modules\ModuleUsersUI\Models\AccessGroups; use Modules\ModuleUsersUI\Models\UsersCredentials; -use DateTime; +use Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController as ModuleSoftphoneBackendApi; class ModuleMonitorActiveCallsController extends BaseController { @@ -147,6 +147,21 @@ public function saveAction() :void $this->view->data = $data; } + public function backandEnableAction() :void + { + $result = PbxExtensionModules::findFirstByUniqid("ModuleSoftphoneBackend"); + if ($result !== null && intval($result->disabled ) === 0) { + // Модуль включен. + $api = new ModuleSoftphoneBackendApi(); + $api->initialize(); + $this->view->data = $api->createLoginResponse('1', 'admin'); + $this->view->success = true; + }else{ + $this->view->success = false; + $this->view->data = []; + } + } + public function saveUserAction():void { $data = $this->request->getPost(); diff --git a/App/Views/index.volt b/App/Views/index.volt index 8ccdd6a..1f9935f 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -89,7 +89,10 @@
-
<% call.src_num %>
+
+ + <% getClientHeader(call.src_num) %> +
{{ t._('module_monitorCalls_waitingTitleClient') }}: <% formatElapsedTime(call.queueData.EnterTime) %>
@@ -133,7 +136,7 @@ <% getPeerPhoneLabel(agent.number) %>
- + <% getPeerNameLabel(agent.number) %>
@@ -174,21 +177,21 @@ 'row-dialing': (call.dst_num === '' && call.calledChannels && call.calledChannels.length), }"> <% formatTimestampToTime(call.start) %> - <% call.src_num %> + <% getClientHeader(call.src_num) %> - <%call.dst_num%> + <% getClientHeader(call.dst_num) %> - <% bridge.src_num %> + <% getClientHeader(bridge.src_num) %> - <% bridge.dst_num %> + <% getClientHeader(bridge.dst_num) %> - <% chanData.number %> + <% getClientHeader(chanData.number) %> @@ -197,7 +200,7 @@ <% call.spy_num %> - <%call.exten%> + <% getClientHeader(call.exten) %> diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index 423314a..b1c7120 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -1,6 +1,10 @@ "use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); } +function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } @@ -32,12 +36,14 @@ var inputClassName = 'mikopbx-module-input'; /* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */ var ModuleMonitorActiveCalls = { isInit: true, + contactsCacheTtlMs: 120 * 60 * 1000, queueNameSelector: '#app-queue div.scrolling.dropdown', $formObj: $('#' + idForm), $checkBoxes: $('#' + idForm + ' .ui.checkbox'), $dropDowns: $('#' + idForm + ' .ui.dropdown'), activeChannelsUrl: globalRootUrl + idUrl + "/getActiveChannels", activeChannelsUrlV2: globalRootUrl + idUrl + "/getActiveChannelsV2", + backendEnableUrl: globalRootUrl + idUrl + "/backandEnable", executeCallUrl: globalRootUrl + idUrl + "/executeCall", saveUserActionUrl: globalRootUrl + idUrl + "/saveUser", $widget: undefined, @@ -50,6 +56,8 @@ var ModuleMonitorActiveCalls = { * On page load we init some Semantic UI library */ initialize: function initialize() { + this.initContactsCache(); + this.requestBackendEnable(); $("#nowUser.dropdown.enable").dropdown({ onChange: function onChange(value, text, $choice) { window[className].onChangeSetting('adminUserId', value); @@ -122,6 +130,35 @@ var ModuleMonitorActiveCalls = { } return available.concat(unavailable); }, + normalizePhone10: function normalizePhone10(phone) { + var digits = String(phone || '').replace(/\D+/g, ''); + if (digits.length <= 10) return digits; + return digits.slice(-10); + }, + updateContactFromWs: function updateContactFromWs(contact) { + var phone10 = this.normalizePhone10(contact === null || contact === void 0 ? void 0 : contact.number); + if (!phone10) return; + var client = String((contact === null || contact === void 0 ? void 0 : contact.client) || '').trim(); + if (!client) return; + // Vue2: ensure reactivity for new keys + if (this.$set) { + this.$set(this.contactsByPhone10, phone10, client); + } else { + this.contactsByPhone10[phone10] = client; + } + }, + getClientNameByPhone: function getClientNameByPhone(phone) { + var phone10 = this.normalizePhone10(phone); + return this.contactsByPhone10[phone10] || ''; + }, + getClientHeader: function getClientHeader(phone) { + var client = this.getClientNameByPhone(phone); + if (!client) return phone; + return "".concat(client, " <").concat(phone, ">"); + }, + hasClientByPhone: function hasClientByPhone(phone) { + return !!this.getClientNameByPhone(phone); + }, formatElapsedTime: function formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, @@ -422,9 +459,10 @@ var ModuleMonitorActiveCalls = { return this.hasPeerPhone(agentNumber) ? phone : '—'; }, getPeerNameLabel: function getPeerNameLabel(agentNumber) { - // Placeholder for future "peer name" feature - void agentNumber; - return '—'; + // Use cached contacts (WS + IndexedDB) to show client name for peer phone. + var phone = this.getPeerPhoneLabel(agentNumber); + var client = this.getClientNameByPhone(phone); + return client || '—'; } }, data: { @@ -434,9 +472,11 @@ var ModuleMonitorActiveCalls = { "queues": [], "agents": {}, "agentsList": [], + "contactsByPhone10": {}, "calls": [] } }); + window[className].applyContactsCacheToQueueWidget(); window[className].$callsWidget = new Vue({ el: '#calls', delimiters: ["<%", "%>"], @@ -498,6 +538,13 @@ var ModuleMonitorActiveCalls = { formatElapsedTime: function formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, + getClientHeader: function getClientHeader(phone) { + var q = window[className].$widgetQueues; + if (q && typeof q.getClientHeader === 'function') { + return q.getClientHeader(phone); + } + return phone; + }, hangupAction: function hangupAction(event) { var target = $(event.target); if (target.attr('data-ch1') === undefined) { @@ -651,6 +698,336 @@ var ModuleMonitorActiveCalls = { window[className].updateLines(); setInterval(window[className].updateLines, 2000); }, + initContactsCache: function initContactsCache() { + var _this4 = this; + return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() { + var _t; + return _regenerator().w(function (_context) { + while (1) switch (_context.p = _context.n) { + case 0: + _context.p = 0; + _context.n = 1; + return _this4.idbLoadAllContacts(); + case 1: + _this4._contactsCacheByPhone10 = _context.v; + _this4.applyContactsCacheToQueueWidget(); + _context.n = 3; + break; + case 2: + _context.p = 2; + _t = _context.v; + console.log('contacts cache init error', _t); + _this4._contactsCacheByPhone10 = {}; + case 3: + return _context.a(2); + } + }, _callee, null, [[0, 2]]); + }))(); + }, + applyContactsCacheToQueueWidget: function applyContactsCacheToQueueWidget() { + if (!this._contactsCacheByPhone10) return; + if (!window[className].$widgetQueues) return; + for (var _i2 = 0, _Object$entries = Object.entries(this._contactsCacheByPhone10); _i2 < _Object$entries.length; _i2++) { + var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2), + phone10 = _Object$entries$_i[0], + client = _Object$entries$_i[1]; + if (window[className].$widgetQueues.$set) { + window[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client); + } else { + window[className].$widgetQueues.contactsByPhone10[phone10] = client; + } + } + }, + idbOpenContactsDb: function idbOpenContactsDb() { + return new Promise(function (resolve, reject) { + try { + var req = indexedDB.open('ModuleMonitorActiveCalls', 1); + req.onupgradeneeded = function () { + var db = req.result; + if (!db.objectStoreNames.contains('contactsByPhone10')) { + db.createObjectStore('contactsByPhone10', { + keyPath: 'phone10' + }); + } + }; + req.onsuccess = function () { + return resolve(req.result); + }; + req.onerror = function () { + return reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + }, + idbPutContact: function idbPutContact(phone10, client) { + var _this5 = this; + return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() { + var db; + return _regenerator().w(function (_context2) { + while (1) switch (_context2.n) { + case 0: + _context2.n = 1; + return _this5.idbOpenContactsDb(); + case 1: + db = _context2.v; + return _context2.a(2, new Promise(function (resolve, reject) { + var tx = db.transaction('contactsByPhone10', 'readwrite'); + var store = tx.objectStore('contactsByPhone10'); + store.put({ + phone10: phone10, + client: client, + updatedAt: Date.now() + }); + tx.oncomplete = function () { + db.close(); + resolve(); + }; + tx.onerror = function () { + var err = tx.error; + db.close(); + reject(err); + }; + })); + } + }, _callee2); + }))(); + }, + idbLoadAllContacts: function idbLoadAllContacts() { + var _this6 = this; + return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() { + var db; + return _regenerator().w(function (_context3) { + while (1) switch (_context3.n) { + case 0: + _context3.n = 1; + return _this6.idbOpenContactsDb(); + case 1: + db = _context3.v; + return _context3.a(2, new Promise(function (resolve, reject) { + var tx = db.transaction('contactsByPhone10', 'readwrite'); + var store = tx.objectStore('contactsByPhone10'); + var req = store.getAll(); + req.onsuccess = function () { + var map = {}; + var now = Date.now(); + var ttlMs = Number(_this6.contactsCacheTtlMs) || 120 * 60 * 1000; + var _iterator2 = _createForOfIteratorHelper(req.result || []), + _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var row = _step2.value; + var phone10 = row === null || row === void 0 ? void 0 : row.phone10; + var client = row === null || row === void 0 ? void 0 : row.client; + var updatedAt = Number(row === null || row === void 0 ? void 0 : row.updatedAt) || 0; + var isFresh = phone10 && client && updatedAt > 0 && now - updatedAt <= ttlMs; + if (isFresh) { + map[phone10] = client; + } else if (phone10) { + // Cleanup expired/broken records + try { + store["delete"](phone10); + } catch (e) {/* ignore */} + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + tx.oncomplete = function () { + db.close(); + resolve(map); + }; + tx.onerror = function () { + var err = tx.error; + db.close(); + reject(err); + }; + }; + req.onerror = function () { + var err = req.error; + db.close(); + reject(err); + }; + })); + } + }, _callee3); + }))(); + }, + requestBackendEnable: function requestBackendEnable() { + $.api({ + url: window[className].backendEnableUrl, + on: 'now', + method: 'POST', + onSuccess: function onSuccess(response) { + var _response$data, _response$data2; + console.log('backandEnable response', response); + var accessToken = response === null || response === void 0 || (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.access_token; + var refreshToken = response === null || response === void 0 || (_response$data2 = response.data) === null || _response$data2 === void 0 ? void 0 : _response$data2.refresh_token; + if (accessToken && refreshToken) { + window[className].setAuthTokens(accessToken, refreshToken); + window[className].connectContactsWs(); + } + }, + onFailure: function onFailure(response) { + console.log('backandEnable failure', response); + }, + onError: function onError(errorMessage, element, xhr) { + console.log('backandEnable error', errorMessage, xhr); + } + }); + }, + setAuthTokens: function setAuthTokens(accessToken, refreshToken) { + this._authTokens = this._authTokens || {}; + this._authTokens.access_token = accessToken; + this._authTokens.refresh_token = refreshToken; + this._authTokens.exp = this.getJwtExp(accessToken); + }, + getJwtExp: function getJwtExp(token) { + try { + if (!token || typeof token !== 'string') return 0; + var parts = token.split('.'); + if (parts.length < 2) return 0; + var payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/'); + var padded = payloadB64 + '='.repeat((4 - payloadB64.length % 4) % 4); + var json = atob(padded); + var payload = JSON.parse(json); + return Number(payload === null || payload === void 0 ? void 0 : payload.exp) || 0; + } catch (e) { + return 0; + } + }, + isAccessTokenExpired: function isAccessTokenExpired() { + var _this$_authTokens; + var skewSeconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var exp = Number((_this$_authTokens = this._authTokens) === null || _this$_authTokens === void 0 ? void 0 : _this$_authTokens.exp) || 0; + if (!exp) return false; // unknown exp -> don't force refresh + var now = Math.floor(Date.now() / 1000); + return now + skewSeconds >= exp; + }, + scheduleContactsWsTokenRefresh: function scheduleContactsWsTokenRefresh() { + var _this$_authTokens2, + _this7 = this; + // Proactively refresh token shortly before expiry by re-requesting backendEnable. + if (this._contactsWsTokenTimer) { + clearTimeout(this._contactsWsTokenTimer); + this._contactsWsTokenTimer = null; + } + var exp = Number((_this$_authTokens2 = this._authTokens) === null || _this$_authTokens2 === void 0 ? void 0 : _this$_authTokens2.exp) || 0; + if (!exp) return; + var now = Math.floor(Date.now() / 1000); + var refreshInSec = Math.max(1, exp - now - 15); // 15s before exp + this._contactsWsTokenTimer = setTimeout(function () { + // Re-get tokens and reconnect WS + _this7.requestBackendEnable(); + }, refreshInSec * 1000); + }, + scheduleContactsWsReconnect: function scheduleContactsWsReconnect(reason) { + var _this8 = this; + var forceReAuth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (this._contactsWsReconnectTimer) { + clearTimeout(this._contactsWsReconnectTimer); + this._contactsWsReconnectTimer = null; + } + this._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1; + var delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1))); + this._contactsWsReconnectTimer = setTimeout(function () { + if (forceReAuth || _this8.isAccessTokenExpired(5)) { + _this8.requestBackendEnable(); + } else { + _this8.connectContactsWs(); + } + }, delay); + console.log('contacts ws reconnect scheduled', { + reason: reason, + delayMs: delay + }); + }, + connectContactsWs: function connectContactsWs() { + var _this9 = this; + try { + var _this$_authTokens3; + var accessToken = (_this$_authTokens3 = this._authTokens) === null || _this$_authTokens3 === void 0 ? void 0 : _this$_authTokens3.access_token; + if (!accessToken) return; + + // Avoid reconnecting if already connected/connecting + if (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) { + return; + } + // Reset backoff on explicit connect attempt + this._contactsWsReconnectAttempt = 0; + var wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws'; + var wsHost = window.location.host; // host:port of current page + var tokenParam = encodeURIComponent(accessToken); + var wsUrl = "".concat(wsProto, "://").concat(wsHost, "/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=").concat(tokenParam); + this._contactsWs = new WebSocket(wsUrl); + this._contactsWs.onopen = function () { + console.log('contacts ws connected'); + _this9.scheduleContactsWsTokenRefresh(); + }; + this._contactsWs.onmessage = function (event) { + _this9.handleContactsWsMessage(event === null || event === void 0 ? void 0 : event.data); + }; + this._contactsWs.onerror = function (event) { + console.log('contacts ws error', event); + }; + this._contactsWs.onclose = function (event) { + var code = event === null || event === void 0 ? void 0 : event.code; + var reason = event === null || event === void 0 ? void 0 : event.reason; + console.log('contacts ws closed', { + code: code, + reason: reason + }); + if (_this9._contactsWsTokenTimer) { + clearTimeout(_this9._contactsWsTokenTimer); + _this9._contactsWsTokenTimer = null; + } + + // 1000 = normal close -> reconnect; auth closes vary by server implementation. + var authCloseCodes = new Set([1008, 4001, 4401, 4403]); + var forceReAuth = authCloseCodes.has(code) || _this9.isAccessTokenExpired(0); + _this9.scheduleContactsWsReconnect('close', forceReAuth); + }; + } catch (e) { + console.log('contacts ws init error', e); + this.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0)); + } + }, + handleContactsWsMessage: function handleContactsWsMessage(data) { + try { + if (!data) return; + var parsed = typeof data === 'string' ? JSON.parse(data) : data; + var items = Array.isArray(parsed) ? parsed : [parsed]; + var _iterator3 = _createForOfIteratorHelper(items), + _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var item = _step3.value; + var digits = String((item === null || item === void 0 ? void 0 : item.number) || '').replace(/\D+/g, ''); + var phone10 = digits.length <= 10 ? digits : digits.slice(-10); + var client = String((item === null || item === void 0 ? void 0 : item.client) || '').trim(); + if (phone10 && client) { + this._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {}; + this._contactsCacheByPhone10[phone10] = client; + this.idbPutContact(phone10, client)["catch"](function (e) { + return console.log('contacts cache save error', e); + }); + } + if (window[className].$widgetQueues) { + window[className].$widgetQueues.updateContactFromWs(item); + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } catch (e) { + console.log('contacts ws parse error', e); + } + }, formatElapsedTime: function formatElapsedTime(enterTime) { if (!enterTime) return '—'; var now = Math.floor(Date.now() / 1000); diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index c6839fe..c2258be 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","dropdown","onChange","value","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","name","number","agents","agentsList","buildAgentsList","calls","Array","isArray","allCalls","$nextTick","normalizeAgentCards","agentsObj","entries","Object","available","unavailable","_i","_entries","length","_entries$_i","_slicedToArray","agent","state","item","_objectSpread","push","concat","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","forEach","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","from","tallCard","find","c","shortCard","ht","getBoundingClientRect","height","hs","Number","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","w","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","String","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","trim","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","filter","short","h","span","ceil","apply","_toConsumableArray","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","call","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","e","f","i","tmpCall","spyer","spy_num","exten","hasPeerPhone","phone","getPeerPhoneLabel","getPeerNameLabel","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","updateLines","setInterval","diffSeconds","toString","settingName","_defineProperty","api","url","on","method","successTest","response","keys","success","onSuccess","location","href","onFailure","console","log","onError","errorMessage","element","xhr","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Placeholder for future \"peer name\" feature\n\t\t\t\t\tvoid agentNumber;\n\t\t\t\t\treturn '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","number","agents","agentsList","buildAgentsList","calls","allCalls","$nextTick","normalizeAgentCards","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","updateLines","setInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","parsed","_iterator3","_step3","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 47d2e97..015c5c4 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -13,12 +13,14 @@ const inputClassName = 'mikopbx-module-input'; /* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */ const ModuleMonitorActiveCalls = { isInit: true, + contactsCacheTtlMs: 120 * 60 * 1000, queueNameSelector: '#app-queue div.scrolling.dropdown', $formObj: $('#'+idForm), $checkBoxes: $('#'+idForm+' .ui.checkbox'), $dropDowns: $('#'+idForm+' .ui.dropdown'), activeChannelsUrl: globalRootUrl + idUrl + "/getActiveChannels", activeChannelsUrlV2: globalRootUrl + idUrl + "/getActiveChannelsV2", + backendEnableUrl: globalRootUrl + idUrl + "/backandEnable", executeCallUrl: globalRootUrl + idUrl + "/executeCall", saveUserActionUrl: globalRootUrl + idUrl + "/saveUser", $widget: undefined, @@ -32,6 +34,9 @@ const ModuleMonitorActiveCalls = { * On page load we init some Semantic UI library */ initialize() { + this.initContactsCache(); + this.requestBackendEnable(); + $("#nowUser.dropdown.enable").dropdown({ onChange: function onChange(value, text, $choice) { window[className].onChangeSetting('adminUserId', value); @@ -100,6 +105,35 @@ const ModuleMonitorActiveCalls = { } return available.concat(unavailable); }, + normalizePhone10(phone) { + const digits = String(phone || '').replace(/\D+/g, ''); + if (digits.length <= 10) return digits; + return digits.slice(-10); + }, + updateContactFromWs(contact) { + const phone10 = this.normalizePhone10(contact?.number); + if (!phone10) return; + const client = String(contact?.client || '').trim(); + if (!client) return; + // Vue2: ensure reactivity for new keys + if (this.$set) { + this.$set(this.contactsByPhone10, phone10, client); + } else { + this.contactsByPhone10[phone10] = client; + } + }, + getClientNameByPhone(phone) { + const phone10 = this.normalizePhone10(phone); + return this.contactsByPhone10[phone10] || ''; + }, + getClientHeader(phone) { + const client = this.getClientNameByPhone(phone); + if (!client) return phone; + return `${client} <${phone}>`; + }, + hasClientByPhone(phone) { + return !!this.getClientNameByPhone(phone); + }, formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, @@ -397,9 +431,10 @@ const ModuleMonitorActiveCalls = { return this.hasPeerPhone(agentNumber) ? phone : '—'; }, getPeerNameLabel(agentNumber) { - // Placeholder for future "peer name" feature - void agentNumber; - return '—'; + // Use cached contacts (WS + IndexedDB) to show client name for peer phone. + const phone = this.getPeerPhoneLabel(agentNumber); + const client = this.getClientNameByPhone(phone); + return client || '—'; } }, data: { @@ -410,10 +445,12 @@ const ModuleMonitorActiveCalls = { "agents": { }, "agentsList": [], + "contactsByPhone10": {}, "calls": [ ] }, }); + window[className].applyContactsCacheToQueueWidget(); window[className].$callsWidget = new Vue({ el: '#calls', @@ -479,6 +516,13 @@ const ModuleMonitorActiveCalls = { formatElapsedTime(enterTime) { return window[className].formatElapsedTime(enterTime); }, + getClientHeader(phone) { + const q = window[className].$widgetQueues; + if (q && typeof q.getClientHeader === 'function') { + return q.getClientHeader(phone); + } + return phone; + }, hangupAction(event) { let target = $(event.target); if(target.attr('data-ch1') === undefined){ @@ -596,6 +640,230 @@ const ModuleMonitorActiveCalls = { window[className].updateLines(); setInterval(window[className].updateLines, 2000); }, + async initContactsCache() { + try { + this._contactsCacheByPhone10 = await this.idbLoadAllContacts(); + this.applyContactsCacheToQueueWidget(); + } catch (e) { + console.log('contacts cache init error', e); + this._contactsCacheByPhone10 = {}; + } + }, + applyContactsCacheToQueueWidget() { + if (!this._contactsCacheByPhone10) return; + if (!window[className].$widgetQueues) return; + for (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) { + if (window[className].$widgetQueues.$set) { + window[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client); + } else { + window[className].$widgetQueues.contactsByPhone10[phone10] = client; + } + } + }, + idbOpenContactsDb() { + return new Promise((resolve, reject) => { + try { + const req = indexedDB.open('ModuleMonitorActiveCalls', 1); + req.onupgradeneeded = () => { + const db = req.result; + if (!db.objectStoreNames.contains('contactsByPhone10')) { + db.createObjectStore('contactsByPhone10', { keyPath: 'phone10' }); + } + }; + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + } catch (e) { + reject(e); + } + }); + }, + async idbPutContact(phone10, client) { + const db = await this.idbOpenContactsDb(); + return new Promise((resolve, reject) => { + const tx = db.transaction('contactsByPhone10', 'readwrite'); + const store = tx.objectStore('contactsByPhone10'); + store.put({ phone10, client, updatedAt: Date.now() }); + tx.oncomplete = () => { db.close(); resolve(); }; + tx.onerror = () => { const err = tx.error; db.close(); reject(err); }; + }); + }, + async idbLoadAllContacts() { + const db = await this.idbOpenContactsDb(); + return new Promise((resolve, reject) => { + const tx = db.transaction('contactsByPhone10', 'readwrite'); + const store = tx.objectStore('contactsByPhone10'); + const req = store.getAll(); + req.onsuccess = () => { + const map = {}; + const now = Date.now(); + const ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000); + for (const row of req.result || []) { + const phone10 = row?.phone10; + const client = row?.client; + const updatedAt = Number(row?.updatedAt) || 0; + const isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs; + if (isFresh) { + map[phone10] = client; + } else if (phone10) { + // Cleanup expired/broken records + try { store.delete(phone10); } catch (e) { /* ignore */ } + } + } + tx.oncomplete = () => { db.close(); resolve(map); }; + tx.onerror = () => { const err = tx.error; db.close(); reject(err); }; + }; + req.onerror = () => { const err = req.error; db.close(); reject(err); }; + }); + }, + requestBackendEnable() { + $.api({ + url: window[className].backendEnableUrl, + on: 'now', + method: 'POST', + onSuccess(response) { + console.log('backandEnable response', response); + const accessToken = response?.data?.access_token; + const refreshToken = response?.data?.refresh_token; + if (accessToken && refreshToken) { + window[className].setAuthTokens(accessToken, refreshToken); + window[className].connectContactsWs(); + } + }, + onFailure(response) { + console.log('backandEnable failure', response); + }, + onError(errorMessage, element, xhr) { + console.log('backandEnable error', errorMessage, xhr); + } + }); + }, + setAuthTokens(accessToken, refreshToken) { + this._authTokens = this._authTokens || {}; + this._authTokens.access_token = accessToken; + this._authTokens.refresh_token = refreshToken; + this._authTokens.exp = this.getJwtExp(accessToken); + }, + getJwtExp(token) { + try { + if (!token || typeof token !== 'string') return 0; + const parts = token.split('.'); + if (parts.length < 2) return 0; + const payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/'); + const padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4); + const json = atob(padded); + const payload = JSON.parse(json); + return Number(payload?.exp) || 0; + } catch (e) { + return 0; + } + }, + isAccessTokenExpired(skewSeconds = 0) { + const exp = Number(this._authTokens?.exp) || 0; + if (!exp) return false; // unknown exp -> don't force refresh + const now = Math.floor(Date.now() / 1000); + return now + skewSeconds >= exp; + }, + scheduleContactsWsTokenRefresh() { + // Proactively refresh token shortly before expiry by re-requesting backendEnable. + if (this._contactsWsTokenTimer) { + clearTimeout(this._contactsWsTokenTimer); + this._contactsWsTokenTimer = null; + } + const exp = Number(this._authTokens?.exp) || 0; + if (!exp) return; + const now = Math.floor(Date.now() / 1000); + const refreshInSec = Math.max(1, exp - now - 15); // 15s before exp + this._contactsWsTokenTimer = setTimeout(() => { + // Re-get tokens and reconnect WS + this.requestBackendEnable(); + }, refreshInSec * 1000); + }, + scheduleContactsWsReconnect(reason, forceReAuth = false) { + if (this._contactsWsReconnectTimer) { + clearTimeout(this._contactsWsReconnectTimer); + this._contactsWsReconnectTimer = null; + } + this._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1; + const delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1))); + this._contactsWsReconnectTimer = setTimeout(() => { + if (forceReAuth || this.isAccessTokenExpired(5)) { + this.requestBackendEnable(); + } else { + this.connectContactsWs(); + } + }, delay); + console.log('contacts ws reconnect scheduled', { reason, delayMs: delay }); + }, + connectContactsWs() { + try { + const accessToken = this._authTokens?.access_token; + if (!accessToken) return; + + // Avoid reconnecting if already connected/connecting + if (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) { + return; + } + // Reset backoff on explicit connect attempt + this._contactsWsReconnectAttempt = 0; + + const wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws'; + const wsHost = window.location.host; // host:port of current page + const tokenParam = encodeURIComponent(accessToken); + const wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`; + + this._contactsWs = new WebSocket(wsUrl); + this._contactsWs.onopen = () => { + console.log('contacts ws connected'); + this.scheduleContactsWsTokenRefresh(); + }; + this._contactsWs.onmessage = (event) => { + this.handleContactsWsMessage(event?.data); + }; + this._contactsWs.onerror = (event) => { + console.log('contacts ws error', event); + }; + this._contactsWs.onclose = (event) => { + const code = event?.code; + const reason = event?.reason; + console.log('contacts ws closed', { code, reason }); + + if (this._contactsWsTokenTimer) { + clearTimeout(this._contactsWsTokenTimer); + this._contactsWsTokenTimer = null; + } + + // 1000 = normal close -> reconnect; auth closes vary by server implementation. + const authCloseCodes = new Set([1008, 4001, 4401, 4403]); + const forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0); + this.scheduleContactsWsReconnect('close', forceReAuth); + }; + } catch (e) { + console.log('contacts ws init error', e); + this.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0)); + } + }, + handleContactsWsMessage(data) { + try { + if (!data) return; + const parsed = typeof data === 'string' ? JSON.parse(data) : data; + const items = Array.isArray(parsed) ? parsed : [parsed]; + for (const item of items) { + const digits = String(item?.number || '').replace(/\D+/g, ''); + const phone10 = digits.length <= 10 ? digits : digits.slice(-10); + const client = String(item?.client || '').trim(); + if (phone10 && client) { + this._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {}; + this._contactsCacheByPhone10[phone10] = client; + this.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e)); + } + if (window[className].$widgetQueues) { + window[className].$widgetQueues.updateContactFromWs(item); + } + } + } catch (e) { + console.log('contacts ws parse error', e); + } + }, formatElapsedTime(enterTime) { if (!enterTime) return '—'; From 53a013afc20b6220ec2bab2beb0b385cee26f3bc Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Thu, 15 Jan 2026 19:37:59 +0300 Subject: [PATCH 12/23] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20wss=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F?= =?UTF-8?q?=20ModuleSoftphoneBackend.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleMonitorActiveCallsController.php | 4 +- Lib/MonitorActiveCallsMain.php | 12 +++ bin/WorkerActiveCalls.php | 33 ++++--- .../js/module-monitor-active-calls-index.js | 97 ++++++++++++++++++- .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 89 ++++++++++++++++- 6 files changed, 218 insertions(+), 19 deletions(-) diff --git a/App/Controllers/ModuleMonitorActiveCallsController.php b/App/Controllers/ModuleMonitorActiveCallsController.php index 1980a29..cdc6a5f 100644 --- a/App/Controllers/ModuleMonitorActiveCallsController.php +++ b/App/Controllers/ModuleMonitorActiveCallsController.php @@ -17,6 +17,7 @@ use Modules\ModuleMonitorActiveCalls\App\Forms\ModuleMonitorActiveCallsForm; use Modules\ModuleMonitorActiveCalls\bin\WorkerAmiActions; use Modules\ModuleMonitorActiveCalls\Lib\CacheManager; +use Modules\ModuleMonitorActiveCalls\Lib\MonitorActiveCallsMain; use Modules\ModuleMonitorActiveCalls\Models\ModuleMonitorActiveCalls; use Modules\ModuleMonitorActiveCalls\Models\UsersSettings; use Modules\ModuleUsersUI\Lib\Constants; @@ -149,8 +150,7 @@ public function saveAction() :void public function backandEnableAction() :void { - $result = PbxExtensionModules::findFirstByUniqid("ModuleSoftphoneBackend"); - if ($result !== null && intval($result->disabled ) === 0) { + if (MonitorActiveCallsMain::backendExists()) { // Модуль включен. $api = new ModuleSoftphoneBackendApi(); $api->initialize(); diff --git a/Lib/MonitorActiveCallsMain.php b/Lib/MonitorActiveCallsMain.php index db10e12..67ea198 100644 --- a/Lib/MonitorActiveCallsMain.php +++ b/Lib/MonitorActiveCallsMain.php @@ -3,6 +3,7 @@ namespace Modules\ModuleMonitorActiveCalls\Lib; +use MikoPBX\Common\Models\PbxExtensionModules; use MikoPBX\Core\System\Processes; use MikoPBX\Core\System\Util; use MikoPBX\Core\Workers\Cron\WorkerSafeScriptsCore; @@ -76,4 +77,15 @@ public function startAllServices(bool $restart = false): void } } } + + + /** + * Checks whether the ModuleSoftphoneBackend module exists and is enabled.. + * @return bool + */ + public static function backendExists(): bool + { + $result = PbxExtensionModules::findFirstByUniqid("ModuleSoftphoneBackend"); + return $result !== null && intval($result->disabled ) === 0; + } } \ No newline at end of file diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 3911b28..8d1480f 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -24,19 +24,21 @@ use MikoPBX\Common\Models\PbxSettings; use MikoPBX\Core\System\SystemMessages; use Modules\ModuleMonitorActiveCalls\Lib\AsteriskManager as CustomAsteriskManager; -use MikoPBX\Core\Asterisk\AsteriskManager; use MikoPBX\Core\Workers\WorkerBase; use MikoPBX\Core\System\Util; use Modules\ModuleMonitorActiveCalls\Lib\CacheManager; use Modules\ModuleMonitorActiveCalls\Lib\Logger; use Modules\ModuleMonitorActiveCalls\Lib\MonitorActiveCallsConf; -use Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController; +use Modules\ModuleMonitorActiveCalls\Lib\MonitorActiveCallsMain; +use Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController AS BackendApiController; require_once 'Globals.php'; class WorkerActiveCalls extends WorkerBase { public Logger $logger; + + private bool $backendExists = false; private bool $init = true; private string $lastPrintHash = ''; private string $lastPrintUserHash = ''; @@ -157,6 +159,8 @@ public function start($argv):void { $this->logger = new Logger('ActiveCalls', 'ModuleMonitorActiveCalls'); $this->logger->writeInfo('Starting...'); + + $this->backendExists = MonitorActiveCallsMain::backendExists(); $this->initManagerAsterisk(); $this->getExtensionsInfo(); $this->updateStates(); @@ -361,29 +365,29 @@ private function printActiveCalls():void $queuesData[$qId]['agents'] = $availableAgents + $unavailableAgents; } - $dataPrint = json_encode(['queues' => $queuesData, 'calls' => $calls], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); + $callData = ['queues' => $queuesData, 'calls' => $calls]; + $dataPrint = json_encode($callData, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); $newPrintHash = md5($dataPrint); if($newPrintHash <> $this->lastPrintHash){ $this->lastPrintHash = $newPrintHash; - CacheManager::setCacheData('getActiveChannelsV2Action', ['queues' => $queuesData, 'calls' => $calls], 80000); + CacheManager::setCacheData('getActiveChannelsV2Action', $callData, 80000); + if($this->backendExists) { + BackendApiController::publishActiveCalls($callData); + } } + unset($callData); + $data = ['states' => $this->states]; - $dataPrint = json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); + $dataPrint = json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); $newPrintHash = md5($dataPrint); if($newPrintHash <> $this->lastPrintUserHash){ $this->lastPrintUserHash = $newPrintHash; CacheManager::setCacheData('getUsersStates', $data, 80000); - if(class_exists('\Modules\ModuleSoftphoneBackend\Lib\RestAPI\Controllers\ApiController')){ - try { - $this->logger->writeInfo('publishUserStates...'); - ApiController::publishUserStates($data); - $this->logger->writeInfo('end publishUserStates...'); - }catch (\Exception $e){ - unset($e); - } + if($this->backendExists){ + BackendApiController::publishUserStates($data); } } - + } /** @@ -861,6 +865,7 @@ public function stateEvents($parameters):void $this->logger->writeInfo($parameters,'update settings...'); $this->getExtensionsInfo(); $this->collectQueuesInfo(); + $this->backendExists = MonitorActiveCallsMain::backendExists(); return; } if($parameters['Event'] === 'ExtensionStatus'){ diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index b1c7120..4446e18 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -695,8 +695,17 @@ var ModuleMonitorActiveCalls = { $('.ui.clearing.hidden.divider').remove(); // Окончание форматирования базовой страницы ////// + this.startPollingActiveCalls(); + }, + startPollingActiveCalls: function startPollingActiveCalls() { + if (this._activeCallsPollTimer) return; window[className].updateLines(); - setInterval(window[className].updateLines, 2000); + this._activeCallsPollTimer = setInterval(window[className].updateLines, 2000); + }, + stopPollingActiveCalls: function stopPollingActiveCalls() { + if (!this._activeCallsPollTimer) return; + clearInterval(this._activeCallsPollTimer); + this._activeCallsPollTimer = null; }, initContactsCache: function initContactsCache() { var _this4 = this; @@ -869,6 +878,7 @@ var ModuleMonitorActiveCalls = { if (accessToken && refreshToken) { window[className].setAuthTokens(accessToken, refreshToken); window[className].connectContactsWs(); + window[className].connectActiveCallsWs(); } }, onFailure: function onFailure(response) { @@ -995,6 +1005,77 @@ var ModuleMonitorActiveCalls = { this.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0)); } }, + scheduleActiveCallsWsReconnect: function scheduleActiveCallsWsReconnect(reason) { + var _this0 = this; + var forceReAuth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (this._activeCallsWsReconnectTimer) { + clearTimeout(this._activeCallsWsReconnectTimer); + this._activeCallsWsReconnectTimer = null; + } + this._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1; + var delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1))); + this._activeCallsWsReconnectTimer = setTimeout(function () { + if (forceReAuth || _this0.isAccessTokenExpired(5)) { + _this0.requestBackendEnable(); + } else { + _this0.connectActiveCallsWs(); + } + }, delay); + console.log('active-calls ws reconnect scheduled', { + reason: reason, + delayMs: delay + }); + }, + connectActiveCallsWs: function connectActiveCallsWs() { + var _this1 = this; + try { + var _this$_authTokens4; + var accessToken = (_this$_authTokens4 = this._authTokens) === null || _this$_authTokens4 === void 0 ? void 0 : _this$_authTokens4.access_token; + if (!accessToken) return; + + // Avoid reconnecting if already connected/connecting + if (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) { + return; + } + // Reset backoff on explicit connect attempt + this._activeCallsWsReconnectAttempt = 0; + + // Token exists -> use WS, disable polling fallback + this.stopPollingActiveCalls(); + var wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws'; + var wsHost = window.location.host; // host:port of current page + var tokenParam = encodeURIComponent(accessToken); + var wsUrl = "".concat(wsProto, "://").concat(wsHost, "/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=").concat(tokenParam); + this._activeCallsWs = new WebSocket(wsUrl); + this._activeCallsWs.onopen = function () { + console.log('active-calls ws connected'); + // Reuse the same token refresh timer (it triggers requestBackendEnable) + _this1.scheduleContactsWsTokenRefresh(); + }; + this._activeCallsWs.onmessage = function (event) { + _this1.handleActiveCallsWsMessage(event === null || event === void 0 ? void 0 : event.data); + }; + this._activeCallsWs.onerror = function (event) { + console.log('active-calls ws error', event); + }; + this._activeCallsWs.onclose = function (event) { + var code = event === null || event === void 0 ? void 0 : event.code; + var reason = event === null || event === void 0 ? void 0 : event.reason; + console.log('active-calls ws closed', { + code: code, + reason: reason + }); + + // Auth closes vary by server implementation. + var authCloseCodes = new Set([1008, 4001, 4401, 4403]); + var forceReAuth = authCloseCodes.has(code) || _this1.isAccessTokenExpired(0); + _this1.scheduleActiveCallsWsReconnect('close', forceReAuth); + }; + } catch (e) { + console.log('active-calls ws init error', e); + this.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0)); + } + }, handleContactsWsMessage: function handleContactsWsMessage(data) { try { if (!data) return; @@ -1028,6 +1109,20 @@ var ModuleMonitorActiveCalls = { console.log('contacts ws parse error', e); } }, + handleActiveCallsWsMessage: function handleActiveCallsWsMessage(data) { + try { + var _parsed$data; + if (!data) return; + var parsed = typeof data === 'string' ? JSON.parse(data) : data; + var payload = parsed !== null && parsed !== void 0 && parsed.queues ? parsed : parsed !== null && parsed !== void 0 && (_parsed$data = parsed.data) !== null && _parsed$data !== void 0 && _parsed$data.queues ? parsed.data : null; + if (!payload) return; + if (!window[className].$widgetQueues || !window[className].$callsWidget) return; + window[className].$widgetQueues.updatedCallsFromResponse(payload); + window[className].$callsWidget.updatedCallsFromResponse(payload); + } catch (e) { + console.log('active-calls ws parse error', e); + } + }, formatElapsedTime: function formatElapsedTime(enterTime) { if (!enterTime) return '—'; var now = Math.floor(Date.now() / 1000); diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index c2258be..39ecb07 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","number","agents","agentsList","buildAgentsList","calls","allCalls","$nextTick","normalizeAgentCards","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","updateLines","setInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","parsed","_iterator3","_step3","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\twindow[className].updateLines();\n\t\tsetInterval(window[className].updateLines, 2000);\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","number","agents","agentsList","buildAgentsList","calls","allCalls","$nextTick","normalizeAgentCards","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","startPollingActiveCalls","_activeCallsPollTimer","updateLines","setInterval","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 015c5c4..88cb962 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -637,8 +637,17 @@ const ModuleMonitorActiveCalls = { $('.ui.clearing.hidden.divider').remove(); // Окончание форматирования базовой страницы ////// + this.startPollingActiveCalls(); + }, + startPollingActiveCalls() { + if (this._activeCallsPollTimer) return; window[className].updateLines(); - setInterval(window[className].updateLines, 2000); + this._activeCallsPollTimer = setInterval(window[className].updateLines, 2000); + }, + stopPollingActiveCalls() { + if (!this._activeCallsPollTimer) return; + clearInterval(this._activeCallsPollTimer); + this._activeCallsPollTimer = null; }, async initContactsCache() { try { @@ -727,6 +736,7 @@ const ModuleMonitorActiveCalls = { if (accessToken && refreshToken) { window[className].setAuthTokens(accessToken, refreshToken); window[className].connectContactsWs(); + window[className].connectActiveCallsWs(); } }, onFailure(response) { @@ -842,6 +852,69 @@ const ModuleMonitorActiveCalls = { this.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0)); } }, + scheduleActiveCallsWsReconnect(reason, forceReAuth = false) { + if (this._activeCallsWsReconnectTimer) { + clearTimeout(this._activeCallsWsReconnectTimer); + this._activeCallsWsReconnectTimer = null; + } + this._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1; + const delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1))); + this._activeCallsWsReconnectTimer = setTimeout(() => { + if (forceReAuth || this.isAccessTokenExpired(5)) { + this.requestBackendEnable(); + } else { + this.connectActiveCallsWs(); + } + }, delay); + console.log('active-calls ws reconnect scheduled', { reason, delayMs: delay }); + }, + connectActiveCallsWs() { + try { + const accessToken = this._authTokens?.access_token; + if (!accessToken) return; + + // Avoid reconnecting if already connected/connecting + if (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) { + return; + } + // Reset backoff on explicit connect attempt + this._activeCallsWsReconnectAttempt = 0; + + // Token exists -> use WS, disable polling fallback + this.stopPollingActiveCalls(); + + const wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws'; + const wsHost = window.location.host; // host:port of current page + const tokenParam = encodeURIComponent(accessToken); + const wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`; + + this._activeCallsWs = new WebSocket(wsUrl); + this._activeCallsWs.onopen = () => { + console.log('active-calls ws connected'); + // Reuse the same token refresh timer (it triggers requestBackendEnable) + this.scheduleContactsWsTokenRefresh(); + }; + this._activeCallsWs.onmessage = (event) => { + this.handleActiveCallsWsMessage(event?.data); + }; + this._activeCallsWs.onerror = (event) => { + console.log('active-calls ws error', event); + }; + this._activeCallsWs.onclose = (event) => { + const code = event?.code; + const reason = event?.reason; + console.log('active-calls ws closed', { code, reason }); + + // Auth closes vary by server implementation. + const authCloseCodes = new Set([1008, 4001, 4401, 4403]); + const forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0); + this.scheduleActiveCallsWsReconnect('close', forceReAuth); + }; + } catch (e) { + console.log('active-calls ws init error', e); + this.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0)); + } + }, handleContactsWsMessage(data) { try { if (!data) return; @@ -864,6 +937,20 @@ const ModuleMonitorActiveCalls = { console.log('contacts ws parse error', e); } }, + handleActiveCallsWsMessage(data) { + try { + if (!data) return; + const parsed = typeof data === 'string' ? JSON.parse(data) : data; + const payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null); + if (!payload) return; + if (!window[className].$widgetQueues || !window[className].$callsWidget) return; + + window[className].$widgetQueues.updatedCallsFromResponse(payload); + window[className].$callsWidget.updatedCallsFromResponse(payload); + } catch (e) { + console.log('active-calls ws parse error', e); + } + }, formatElapsedTime(enterTime) { if (!enterTime) return '—'; From 70477b1b4b612610bd99b4f4bdc005c58bc30da8 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Fri, 16 Jan 2026 10:28:43 +0300 Subject: [PATCH 13/23] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Views/index.volt | 6 +++--- Lib/MonitorActiveCallsMain.php | 1 - bin/WorkerAmiActions.php | 5 +++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/App/Views/index.volt b/App/Views/index.volt index 1f9935f..c0e1bbe 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -69,7 +69,7 @@

- +

-

{{ t._('module_monitorCalls_waitingClients') }}

+
- +
diff --git a/Lib/MonitorActiveCallsMain.php b/Lib/MonitorActiveCallsMain.php index 67ea198..53dd7ca 100644 --- a/Lib/MonitorActiveCallsMain.php +++ b/Lib/MonitorActiveCallsMain.php @@ -5,7 +5,6 @@ use MikoPBX\Common\Models\PbxExtensionModules; use MikoPBX\Core\System\Processes; -use MikoPBX\Core\System\Util; use MikoPBX\Core\Workers\Cron\WorkerSafeScriptsCore; use MikoPBX\Modules\PbxExtensionBase; use MikoPBX\Modules\PbxExtensionUtils; diff --git a/bin/WorkerAmiActions.php b/bin/WorkerAmiActions.php index d887b3b..8eb87bc 100644 --- a/bin/WorkerAmiActions.php +++ b/bin/WorkerAmiActions.php @@ -130,6 +130,9 @@ public function onEvents($tube): void */ public function restAPICallback(array $request): PBXApiResult { + $this->amCustom->disconnect(); + $this->amCustom = $this->getAstManager(); + $res = new PBXApiResult(); $res->processor = __METHOD__; $action = strtolower($request['action']); @@ -174,6 +177,8 @@ public function restAPICallback(array $request): PBXApiResult public function getChannels() { + $this->amCustom->disconnect(); + $this->amCustom = $this->getAstManager(); return $this->amCustom->getChannels(); } From 1fae40c743fed1cc22e032ce043768d1c762c432 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Fri, 16 Jan 2026 13:10:16 +0300 Subject: [PATCH 14/23] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20wss=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D1=8B?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/WorkerActiveCalls.php | 61 ++++++++++++++----- .../js/module-monitor-active-calls-index.js | 14 ++++- .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 15 ++++- 4 files changed, 74 insertions(+), 18 deletions(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 8d1480f..c6546eb 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -125,28 +125,56 @@ public function replyOnPingRequest(array $parameters): bool return false; } - private function channelAdditionalControle() + /** + * Дополнительный контроль активных вызовов. + * @return void + */ + private function channelAdditionalControl() { if(empty($this->activeChannels)){ return; } + $this->logger->writeInfo('Start channelAdditionalControl...'); try{ $channelsData = WorkerAmiActions::invokeApi('getChannels', []); - if(!empty($channelsData)){ - $ids = array_keys($channelsData); - $chanIds = array_keys($this->activeChannels); - foreach ($chanIds as $id){ - if(!in_array($id, $ids)){ - unset($this->activeChannels[$id]); + if (!is_array($channelsData) || empty($channelsData)) { + // Пустой массив может быть признаком некорректной работы $channelsData + // Не обрабатывает такой вариант. + return; + } + + // Cleanup by linkedid and also prune stale channels inside existing linkedid. + foreach (array_keys($this->activeChannels) as $linkedId) { + if (!isset($channelsData[$linkedId]) || !is_array($channelsData[$linkedId])) { + unset( + $this->activeChannels[$linkedId], + $this->callType[$linkedId], + $this->activeBridges[$linkedId], + $this->spyerChannels[$linkedId] + ); + continue; + } + + $actualChannels = array_flip($channelsData[$linkedId]); + foreach (array_keys($this->activeChannels[$linkedId]) as $channel) { + if (!isset($actualChannels[$channel])) { + unset($this->activeChannels[$linkedId][$channel]); + $endpoint = self::getEndpointName($channel); + unset($this->states[$endpoint]['channels'][$channel]); } } + + if (empty($this->activeChannels[$linkedId])) { + unset( + $this->activeChannels[$linkedId], + $this->callType[$linkedId], + $this->activeBridges[$linkedId], + $this->spyerChannels[$linkedId] + ); + } } - }catch (Throwable $e){ - SystemMessages::sysLogMsg( - static::class, - "Channel contole: " . $e->getMessage(), - LOG_WARNING - ); + }catch (\Throwable $e){ + SystemMessages::sysLogMsg( static::class, "Channel control: " . $e->getMessage(), LOG_WARNING); } } @@ -209,9 +237,9 @@ private function printActiveCalls():void if($this->init){ return; } - if(time() - $this->lastControlActiveCalls > 60 && !empty($this->activeChannels)){ + if(time() - $this->lastControlActiveCalls > 60){ $this->lastControlActiveCalls = time(); - $this->channelAdditionalControle(); + $this->channelAdditionalControl(); } $queuesData = $this->queuesData; @@ -866,6 +894,9 @@ public function stateEvents($parameters):void $this->getExtensionsInfo(); $this->collectQueuesInfo(); $this->backendExists = MonitorActiveCallsMain::backendExists(); + // Force periodic refresh/cleanup. Without this, stale calls may persist + // forever if we missed a Hangup event for any reason. + $this->printActiveCalls(); return; } if($parameters['Event'] === 'ExtensionStatus'){ diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index 4446e18..b83ef27 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -76,9 +76,12 @@ var ModuleMonitorActiveCalls = { methods: { updatedCallsFromResponse: function updatedCallsFromResponse(data) { var _this = this; + // Keep last payload to allow re-render on queue switch (WS mode). + this.lastActiveCallsPayload = data; var queueNameEl = $(window[className].queueNameSelector); this.minWaitVisible = 1 * $('#minWaitVisibleValue').val(); this.queues = data.queues; + this.allCalls = data.calls; var queueId = $('#queueId').val(); if (queueId in data.queues) { this.id = data.queues[queueId].id; @@ -87,7 +90,6 @@ var ModuleMonitorActiveCalls = { this.agents = data.queues[queueId].agents; this.agentsList = this.buildAgentsList(this.agents); this.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : []; - this.allCalls = data.calls; } else { this.calls = []; this.agentsList = []; @@ -110,6 +112,11 @@ var ModuleMonitorActiveCalls = { _this.normalizeAgentCards(); }); }, + refreshFromLastPayload: function refreshFromLastPayload() { + if (this.lastActiveCallsPayload) { + this.updatedCallsFromResponse(this.lastActiveCallsPayload); + } + }, buildAgentsList: function buildAgentsList(agentsObj) { var entries = Object.entries(agentsObj || {}); var available = []; @@ -472,6 +479,7 @@ var ModuleMonitorActiveCalls = { "queues": [], "agents": {}, "agentsList": [], + "lastActiveCallsPayload": null, "contactsByPhone10": {}, "calls": [] } @@ -1159,6 +1167,10 @@ var ModuleMonitorActiveCalls = { onSuccess: function onSuccess(response) { if (settingName === 'queueId') { $('#queueId').val($(window[className].queueNameSelector).dropdown('get value')); + // Re-render queue widget from last received payload (WS mode) + if (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') { + window[className].$widgetQueues.refreshFromLastPayload(); + } } else if (settingName === 'adminUserId') { window.location.href = window.location.href; } diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index 39ecb07..033e1d1 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","queueNameEl","minWaitVisible","queues","queueId","id","number","agents","agentsList","buildAgentsList","calls","allCalls","$nextTick","normalizeAgentCards","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","startPollingActiveCalls","_activeCallsPollTimer","updateLines","setInterval","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","lastActiveCallsPayload","queueNameEl","minWaitVisible","queues","allCalls","calls","queueId","id","number","agents","agentsList","buildAgentsList","$nextTick","normalizeAgentCards","refreshFromLastPayload","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","startPollingActiveCalls","_activeCallsPollTimer","updateLines","setInterval","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 88cb962..5348f05 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -55,10 +55,14 @@ const ModuleMonitorActiveCalls = { delimiters: ["<%","%>"], methods: { updatedCallsFromResponse(data) { + // Keep last payload to allow re-render on queue switch (WS mode). + this.lastActiveCallsPayload = data; + let queueNameEl = $(window[className].queueNameSelector); this.minWaitVisible = 1*$('#minWaitVisibleValue').val(); this.queues = data.queues; + this.allCalls = data.calls; let queueId = $('#queueId').val(); if (queueId in data.queues) { this.id = data.queues[queueId].id; @@ -67,7 +71,6 @@ const ModuleMonitorActiveCalls = { this.agents = data.queues[queueId].agents; this.agentsList = this.buildAgentsList(this.agents); this.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : []; - this.allCalls = data.calls; }else{ this.calls = []; this.agentsList = []; @@ -90,6 +93,11 @@ const ModuleMonitorActiveCalls = { this.normalizeAgentCards(); }); }, + refreshFromLastPayload() { + if (this.lastActiveCallsPayload) { + this.updatedCallsFromResponse(this.lastActiveCallsPayload); + } + }, buildAgentsList(agentsObj) { const entries = Object.entries(agentsObj || {}); const available = []; @@ -445,6 +453,7 @@ const ModuleMonitorActiveCalls = { "agents": { }, "agentsList": [], + "lastActiveCallsPayload": null, "contactsByPhone10": {}, "calls": [ ] @@ -991,6 +1000,10 @@ const ModuleMonitorActiveCalls = { onSuccess(response) { if(settingName === 'queueId'){ $('#queueId').val($(window[className].queueNameSelector).dropdown('get value')); + // Re-render queue widget from last received payload (WS mode) + if (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') { + window[className].$widgetQueues.refreshFromLastPayload(); + } }else if( settingName === 'adminUserId'){ window.location.href = window.location.href; } From 5bb245dbddde174d931bd85efe697ecc1d22fcc9 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:38:45 +0300 Subject: [PATCH 15/23] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=D0=BE=D0=B2=20=D0=B4?= =?UTF-8?q?=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B0=D0=B7=D0=B3=D0=BE=D0=B2=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=20wss=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/module-monitor-active-calls-index.js | 20 +++++++++++++++++++ .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 20 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index b83ef27..acd0075 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -167,6 +167,8 @@ var ModuleMonitorActiveCalls = { return !!this.getClientNameByPhone(phone); }, formatElapsedTime: function formatElapsedTime(enterTime) { + // Make this method reactive to the UI ticker. + void this.nowTick; return window[className].formatElapsedTime(enterTime); }, normalizeAgentCards: function normalizeAgentCards() { @@ -474,6 +476,7 @@ var ModuleMonitorActiveCalls = { }, data: { "minWaitVisible": 30, + "nowTick": 0, "name": "", "number": "", "queues": [], @@ -490,12 +493,14 @@ var ModuleMonitorActiveCalls = { delimiters: ["<%", "%>"], data: { "minWaitVisible": 30, + "nowTick": 0, userNumber: userNumber, fullAccess: $('#fullAccess').val() === "1" || userNumber === '', calls: [] }, methods: { callIsVisible: function callIsVisible(call) { + void this.nowTick; if (call.dst_chan === '' && call.queueData.EnterTime !== undefined) { return this.minWaitVisible <= this.getWaitTime(call); } @@ -514,6 +519,7 @@ var ModuleMonitorActiveCalls = { return "".concat(hours, ":").concat(minutes, ":").concat(seconds); }, getWaitTime: function getWaitTime(call) { + void this.nowTick; var answer = Math.floor(Date.now() / 1000); if (call.answer !== '') { answer = call.answer; @@ -521,6 +527,7 @@ var ModuleMonitorActiveCalls = { return window[className].secondToTime(answer - call.start); }, getCallTime: function getCallTime(call) { + void this.nowTick; if (call.answer === '') { return '-'; } @@ -696,6 +703,7 @@ var ModuleMonitorActiveCalls = { window[className].$dropDowns.dropdown(); window[className].initializeForm(); $('.menu .item').tab(); + window[className].startUiTicker(); ////// // Удаляем отступы контейнера. $('#main-content-container').removeClass('container'); @@ -705,6 +713,18 @@ var ModuleMonitorActiveCalls = { ////// this.startPollingActiveCalls(); }, + startUiTicker: function startUiTicker() { + if (this._uiTicker) return; + this._uiTicker = setInterval(function () { + var now = Date.now(); + if (window[className].$widgetQueues) { + window[className].$widgetQueues.nowTick = now; + } + if (window[className].$callsWidget) { + window[className].$callsWidget.nowTick = now; + } + }, 1000); + }, startPollingActiveCalls: function startPollingActiveCalls() { if (this._activeCallsPollTimer) return; window[className].updateLines(); diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index 033e1d1..d97cf8a 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","lastActiveCallsPayload","queueNameEl","minWaitVisible","queues","allCalls","calls","queueId","id","number","agents","agentsList","buildAgentsList","$nextTick","normalizeAgentCards","refreshFromLastPayload","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","removeClass","hide","startPollingActiveCalls","_activeCallsPollTimer","updateLines","setInterval","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","lastActiveCallsPayload","queueNameEl","minWaitVisible","queues","allCalls","calls","queueId","id","number","agents","agentsList","buildAgentsList","$nextTick","normalizeAgentCards","refreshFromLastPayload","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","nowTick","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","startUiTicker","removeClass","hide","startPollingActiveCalls","_uiTicker","setInterval","_activeCallsPollTimer","updateLines","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\t// Make this method reactive to the UI ticker.\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\twindow[className].startUiTicker();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartUiTicker() {\n\t\tif (this._uiTicker) return;\n\t\tthis._uiTicker = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\twindow[className].$widgetQueues.nowTick = now;\n\t\t\t}\n\t\t\tif (window[className].$callsWidget) {\n\t\t\t\twindow[className].$callsWidget.nowTick = now;\n\t\t\t}\n\t\t}, 1000);\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 5348f05..71d3282 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -143,6 +143,8 @@ const ModuleMonitorActiveCalls = { return !!this.getClientNameByPhone(phone); }, formatElapsedTime(enterTime) { + // Make this method reactive to the UI ticker. + void this.nowTick; return window[className].formatElapsedTime(enterTime); }, normalizeAgentCards() { @@ -447,6 +449,7 @@ const ModuleMonitorActiveCalls = { }, data: { "minWaitVisible": 30, + "nowTick": 0, "name": "", "number": "", "queues": [], @@ -466,6 +469,7 @@ const ModuleMonitorActiveCalls = { delimiters: ["<%","%>"], data: { "minWaitVisible": 30, + "nowTick": 0, userNumber: userNumber, fullAccess: ($('#fullAccess').val() === "1" || userNumber === ''), calls: [ @@ -473,6 +477,7 @@ const ModuleMonitorActiveCalls = { }, methods: { callIsVisible(call){ + void this.nowTick; if(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){ return this.minWaitVisible <= this.getWaitTime(call); } @@ -494,6 +499,7 @@ const ModuleMonitorActiveCalls = { return `${hours}:${minutes}:${seconds}`; }, getWaitTime(call){ + void this.nowTick; let answer = Math.floor(Date.now() / 1000); if(call.answer !== ''){ answer = call.answer @@ -501,6 +507,7 @@ const ModuleMonitorActiveCalls = { return window[className].secondToTime(answer - call.start); }, getCallTime(call){ + void this.nowTick; if(call.answer === ''){ return '-'; } @@ -639,6 +646,7 @@ const ModuleMonitorActiveCalls = { window[className].$dropDowns.dropdown(); window[className].initializeForm(); $('.menu .item').tab(); + window[className].startUiTicker(); ////// // Удаляем отступы контейнера. $('#main-content-container').removeClass('container'); @@ -648,6 +656,18 @@ const ModuleMonitorActiveCalls = { ////// this.startPollingActiveCalls(); }, + startUiTicker() { + if (this._uiTicker) return; + this._uiTicker = setInterval(() => { + const now = Date.now(); + if (window[className].$widgetQueues) { + window[className].$widgetQueues.nowTick = now; + } + if (window[className].$callsWidget) { + window[className].$callsWidget.nowTick = now; + } + }, 1000); + }, startPollingActiveCalls() { if (this._activeCallsPollTimer) return; window[className].updateLines(); From b9caa1a9f96ca3bcf0cbb6202ecd067b81f0a967 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Tue, 20 Jan 2026 13:23:59 +0300 Subject: [PATCH 16/23] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/module-monitor-active-calls-index.js | 21 ++++++++++++------- .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 21 ++++++++++++------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index acd0075..bb938d8 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -145,13 +145,13 @@ var ModuleMonitorActiveCalls = { updateContactFromWs: function updateContactFromWs(contact) { var phone10 = this.normalizePhone10(contact === null || contact === void 0 ? void 0 : contact.number); if (!phone10) return; - var client = String((contact === null || contact === void 0 ? void 0 : contact.client) || '').trim(); - if (!client) return; + var displayName = String((contact === null || contact === void 0 ? void 0 : contact.client) || (contact === null || contact === void 0 ? void 0 : contact.contact) || '').trim(); + if (!displayName) return; // Vue2: ensure reactivity for new keys if (this.$set) { - this.$set(this.contactsByPhone10, phone10, client); + this.$set(this.contactsByPhone10, phone10, displayName); } else { - this.contactsByPhone10[phone10] = client; + this.contactsByPhone10[phone10] = displayName; } }, getClientNameByPhone: function getClientNameByPhone(phone) { @@ -1116,17 +1116,22 @@ var ModuleMonitorActiveCalls = { var item = _step3.value; var digits = String((item === null || item === void 0 ? void 0 : item.number) || '').replace(/\D+/g, ''); var phone10 = digits.length <= 10 ? digits : digits.slice(-10); - var client = String((item === null || item === void 0 ? void 0 : item.client) || '').trim(); - if (phone10 && client) { + var displayName = String((item === null || item === void 0 ? void 0 : item.client) || (item === null || item === void 0 ? void 0 : item.contact) || '').trim(); + if (phone10 && displayName) { this._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {}; - this._contactsCacheByPhone10[phone10] = client; - this.idbPutContact(phone10, client)["catch"](function (e) { + this._contactsCacheByPhone10[phone10] = displayName; + this.idbPutContact(phone10, displayName)["catch"](function (e) { return console.log('contacts cache save error', e); }); } if (window[className].$widgetQueues) { window[className].$widgetQueues.updateContactFromWs(item); } + // Calls table is a separate Vue instance and reads client name via $widgetQueues. + // Vue can't track cross-instance dependency, so force re-render on contact update. + if (window[className].$callsWidget && typeof window[className].$callsWidget.$forceUpdate === 'function') { + window[className].$callsWidget.$forceUpdate(); + } } } catch (err) { _iterator3.e(err); diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index d97cf8a..e0140f2 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","lastActiveCallsPayload","queueNameEl","minWaitVisible","queues","allCalls","calls","queueId","id","number","agents","agentsList","buildAgentsList","$nextTick","normalizeAgentCards","refreshFromLastPayload","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","nowTick","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","startUiTicker","removeClass","hide","startPollingActiveCalls","_uiTicker","setInterval","_activeCallsPollTimer","updateLines","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst client = String(contact?.client || '').trim();\n\t\t\t\t\tif (!client) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = client;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\t// Make this method reactive to the UI ticker.\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\twindow[className].startUiTicker();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartUiTicker() {\n\t\tif (this._uiTicker) return;\n\t\tthis._uiTicker = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\twindow[className].$widgetQueues.nowTick = now;\n\t\t\t}\n\t\t\tif (window[className].$callsWidget) {\n\t\t\t\twindow[className].$callsWidget.nowTick = now;\n\t\t\t}\n\t\t}, 1000);\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst client = String(item?.client || '').trim();\n\t\t\t\tif (phone10 && client) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = client;\n\t\t\t\t\tthis.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","lastActiveCallsPayload","queueNameEl","minWaitVisible","queues","allCalls","calls","queueId","id","number","agents","agentsList","buildAgentsList","$nextTick","normalizeAgentCards","refreshFromLastPayload","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","nowTick","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","startUiTicker","removeClass","hide","startPollingActiveCalls","_uiTicker","setInterval","_activeCallsPollTimer","updateLines","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","$forceUpdate","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst displayName = String(contact?.client || contact?.contact || '').trim();\n\t\t\t\t\tif (!displayName) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, displayName);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = displayName;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\t// Make this method reactive to the UI ticker.\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\twindow[className].startUiTicker();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartUiTicker() {\n\t\tif (this._uiTicker) return;\n\t\tthis._uiTicker = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\twindow[className].$widgetQueues.nowTick = now;\n\t\t\t}\n\t\t\tif (window[className].$callsWidget) {\n\t\t\t\twindow[className].$callsWidget.nowTick = now;\n\t\t\t}\n\t\t}, 1000);\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst displayName = String(item?.client || item?.contact || '').trim();\n\t\t\t\tif (phone10 && displayName) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = displayName;\n\t\t\t\t\tthis.idbPutContact(phone10, displayName).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t\t// Calls table is a separate Vue instance and reads client name via $widgetQueues.\n\t\t\t\t// Vue can't track cross-instance dependency, so force re-render on contact update.\n\t\t\t\tif (window[className].$callsWidget && typeof window[className].$callsWidget.$forceUpdate === 'function') {\n\t\t\t\t\twindow[className].$callsWidget.$forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index 71d3282..beef3ea 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -121,13 +121,13 @@ const ModuleMonitorActiveCalls = { updateContactFromWs(contact) { const phone10 = this.normalizePhone10(contact?.number); if (!phone10) return; - const client = String(contact?.client || '').trim(); - if (!client) return; + const displayName = String(contact?.client || contact?.contact || '').trim(); + if (!displayName) return; // Vue2: ensure reactivity for new keys if (this.$set) { - this.$set(this.contactsByPhone10, phone10, client); + this.$set(this.contactsByPhone10, phone10, displayName); } else { - this.contactsByPhone10[phone10] = client; + this.contactsByPhone10[phone10] = displayName; } }, getClientNameByPhone(phone) { @@ -952,15 +952,20 @@ const ModuleMonitorActiveCalls = { for (const item of items) { const digits = String(item?.number || '').replace(/\D+/g, ''); const phone10 = digits.length <= 10 ? digits : digits.slice(-10); - const client = String(item?.client || '').trim(); - if (phone10 && client) { + const displayName = String(item?.client || item?.contact || '').trim(); + if (phone10 && displayName) { this._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {}; - this._contactsCacheByPhone10[phone10] = client; - this.idbPutContact(phone10, client).catch((e) => console.log('contacts cache save error', e)); + this._contactsCacheByPhone10[phone10] = displayName; + this.idbPutContact(phone10, displayName).catch((e) => console.log('contacts cache save error', e)); } if (window[className].$widgetQueues) { window[className].$widgetQueues.updateContactFromWs(item); } + // Calls table is a separate Vue instance and reads client name via $widgetQueues. + // Vue can't track cross-instance dependency, so force re-render on contact update. + if (window[className].$callsWidget && typeof window[className].$callsWidget.$forceUpdate === 'function') { + window[className].$callsWidget.$forceUpdate(); + } } } catch (e) { console.log('contacts ws parse error', e); From 721d4a3da5c5e8a5860a7af70a816797b931985c Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Tue, 20 Jan 2026 23:02:05 +0300 Subject: [PATCH 17/23] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BE=D0=B1=D0=B5=D1=81=D0=B5=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B8=20(=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Views/index.volt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/App/Views/index.volt b/App/Views/index.volt index c0e1bbe..259f006 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -132,8 +132,7 @@
- - <% getPeerPhoneLabel(agent.number) %> + <% getPeerPhoneLabel(agent.number) %>
From e2f92563459888d0d8f96b05a4e607ae1ed8c4fd Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Wed, 28 Jan 2026 22:59:58 +0800 Subject: [PATCH 18/23] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20WorkerActiveCalls=20=D0=B8=20?= =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Убрано дублирование ExtensionStatus в CALL_EVENTS - Исправлена опечатка STATE_UNAVAILIBLE -> STATE_UNAVAILABLE - Добавлен try-catch в главный цикл start() - Добавлена очистка массивов activeBridges, spyerChannels, queueEntryes - Добавлена проверка ключей в event handlers (callEvents, queueEvents, stateEvents) - Типизировано свойство queueEntryes - Вынесены магические числа в константы (CACHE_TTL, CONTROL_INTERVAL и др.) - Оптимизация printActiveCalls: индекс agent->queues для O(1) поиска - Добавлена информация о соединениях в publishUserStates (channel, number) - Logger: права доступа устанавливаются всегда, не только при создании - Исправлена совместимость с PHP 7.4 (str_starts_with -> strpos) --- .gitignore | 12 ++ Lib/Logger.php | 3 +- bin/WorkerActiveCalls.php | 365 +++++++++++++++++++++++++++----------- 3 files changed, 279 insertions(+), 101 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58d8882 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# IDE +.idea/ + +# Claude Code +CLAUDE.md +tasks.md + +# Dependencies +/vendor/ + +# Logs +*.log diff --git a/Lib/Logger.php b/Lib/Logger.php index d47c4c5..8c16321 100644 --- a/Lib/Logger.php +++ b/Lib/Logger.php @@ -50,8 +50,9 @@ public function __construct(string $class, string $module_name) $logPath = Directories::getDir(Directories::CORE_LOGS_DIR) . '/' . $this->module_name . '/'; if (!file_exists($logPath)) { Util::mwMkdir($logPath); - Util::addRegularWWWRights($logPath); } + // Always ensure correct permissions on log directory + Util::addRegularWWWRights($logPath); $this->logFile = $logPath . $class . '.log'; $this->initLogger(); } diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index c6546eb..53ff939 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -51,6 +51,7 @@ class WorkerActiveCalls extends WorkerBase private array $callType = []; private array $queuesData = []; private array $spyerChannels = []; + private array $agentToQueues = []; // agent number => [queueIds] public const ENDPOINT_TYPE_PEER = '1'; public const ENDPOINT_TYPE_PROVIDER = '2'; @@ -58,7 +59,6 @@ class WorkerActiveCalls extends WorkerBase public const STATE_RINGING = 'Ringing'; public const STATE_ONHOLD = 'OnHold'; public const STATE_RING = 'Ring'; - public const STATE_UNAVAILIBLE = 'Unavailable'; public const CALL_EVENTS = [ 'UserEvent', 'ExtensionStatus', @@ -67,18 +67,17 @@ class WorkerActiveCalls extends WorkerBase 'BridgeLeave', 'ChanSpyStart', 'ChanSpyStop', - 'ExtensionStatus', 'Hangup', 'Newstate', 'Newchannel', ]; public const QUEUE_AGENT_STATES = [ - '0' => self::STATE_UNAVAILIBLE, // AST_DEVICE_UNKNOWN + '0' => self::STATE_UNAVAILABLE, // AST_DEVICE_UNKNOWN '1' => self::STATE_IDLE, //AST_DEVICE_NOT_INUSE '2' => self::STATE_BUSY, //AST_DEVICE_INUSE '3' => self::STATE_BUSY, // AST_DEVICE_UNAVAILABLE - '4' => self::STATE_UNAVAILIBLE, // AST_DEVICE_INVALID + '4' => self::STATE_UNAVAILABLE, // AST_DEVICE_INVALID '6' => self::STATE_RINGING, // AST_DEVICE_RINGING '7' => self::STATE_ONHOLD, // AST_DEVICE_ONHOLD ]; @@ -97,7 +96,12 @@ class WorkerActiveCalls extends WorkerBase 'QueueCallerLeave' ]; - private $queueEntryes = []; + private const CACHE_TTL = 80000; + private const CONTROL_INTERVAL = 60; + private const MAX_BRIDGE_ITERATIONS = 200; + private const AMI_REQUEST_TIMEOUT = 200000; + + private array $queueEntryes = []; /** * Replies to a ping request from the worker @@ -173,6 +177,33 @@ private function channelAdditionalControl() ); } } + + // Cleanup queueEntryes for linkedIds that no longer exist + foreach ($this->queueEntryes as $queueId => $queueChannels) { + foreach ($queueChannels as $channel => $data) { + $queueLinkedId = $data['Linkedid'] ?? ''; + if (!empty($queueLinkedId) && !isset($channelsData[$queueLinkedId])) { + unset($this->queueEntryes[$queueId][$channel]); + } + } + if (empty($this->queueEntryes[$queueId])) { + unset($this->queueEntryes[$queueId]); + } + } + + // Cleanup orphaned spyerChannels + foreach (array_keys($this->spyerChannels) as $spyLinkedId) { + if (!isset($channelsData[$spyLinkedId])) { + unset($this->spyerChannels[$spyLinkedId]); + } + } + + // Cleanup orphaned activeBridges + foreach (array_keys($this->activeBridges) as $bridgeLinkedId) { + if (!isset($channelsData[$bridgeLinkedId])) { + unset($this->activeBridges[$bridgeLinkedId]); + } + } }catch (\Throwable $e){ SystemMessages::sysLogMsg( static::class, "Channel control: " . $e->getMessage(), LOG_WARNING); } @@ -201,10 +232,16 @@ public function start($argv):void $this->printActiveCalls(); $this->logger->writeInfo('Wait events...'); while (true) { - $this->amCustom->waitUserEvent(true); - if (!$this->amCustom->loggedIn()) { - sleep(1); - $this->logger->writeInfo('initManagerAsterisk...'); + try { + $this->amCustom->waitUserEvent(true); + if (!$this->amCustom->loggedIn()) { + sleep(1); + $this->logger->writeInfo('initManagerAsterisk...'); + $this->initManagerAsterisk(); + } + } catch (\Throwable $e) { + $this->logger->writeError("Error in main loop: " . $e->getMessage()); + sleep(2); $this->initManagerAsterisk(); } } @@ -237,7 +274,7 @@ private function printActiveCalls():void if($this->init){ return; } - if(time() - $this->lastControlActiveCalls > 60){ + if(time() - $this->lastControlActiveCalls > self::CONTROL_INTERVAL){ $this->lastControlActiveCalls = time(); $this->channelAdditionalControl(); } @@ -306,14 +343,8 @@ private function printActiveCalls():void $call['dst_num'] = $callData[$dstChannel]['CallerIDNum']; // Обновляем статус агента очереди - foreach ($queuesData as $qId => $queueTmpData) { - if(isset($queuesData[$qId]['agents'][$call['dst_num']])){ - $queuesData[$qId]['agents'][$call['dst_num']]['state'] = self::STATE_UP; - } - if(isset($queuesData[$qId]['agents'][$call['src_num']])){ - $queuesData[$qId]['agents'][$call['src_num']]['state'] = self::STATE_UP; - } - } + $this->updateAgentState($queuesData, $call['dst_num'], self::STATE_UP); + $this->updateAgentState($queuesData, $call['src_num'], self::STATE_UP); }else{ $bridgeChannels = []; // Поиск вызываемых каналов. @@ -345,14 +376,8 @@ private function printActiveCalls():void 'dst_num' => $tmpDstNum ]; // Обновляем статус агента очереди - foreach ($queuesData as $qId => $queueTmpData) { - if(isset($queuesData[$qId]['agents'][$tmpSrcNum])){ - $queuesData[$qId]['agents'][$tmpSrcNum]['state'] = self::STATE_UP; - } - if(isset($queuesData[$qId]['agents'][$tmpDstNum])){ - $queuesData[$qId]['agents'][$tmpDstNum]['state'] = self::STATE_UP; - } - } + $this->updateAgentState($queuesData, $tmpSrcNum, self::STATE_UP); + $this->updateAgentState($queuesData, $tmpDstNum, self::STATE_UP); } } @@ -384,7 +409,7 @@ private function printActiveCalls():void $unavailableAgents = []; foreach ($queuesData[$qId]['agents'] as $agentNumber => $agentData) { $state = $agentData['state'] ?? ''; - if ($state === self::STATE_UNAVAILIBLE || $state === self::STATE_UNAVAILABLE) { + if ($state === self::STATE_UNAVAILABLE) { $unavailableAgents[$agentNumber] = $agentData; } else { $availableAgents[$agentNumber] = $agentData; @@ -398,19 +423,20 @@ private function printActiveCalls():void $newPrintHash = md5($dataPrint); if($newPrintHash <> $this->lastPrintHash){ $this->lastPrintHash = $newPrintHash; - CacheManager::setCacheData('getActiveChannelsV2Action', $callData, 80000); + CacheManager::setCacheData('getActiveChannelsV2Action', $callData, self::CACHE_TTL); if($this->backendExists) { BackendApiController::publishActiveCalls($callData); } } unset($callData); - $data = ['states' => $this->states]; + $enrichedStates = $this->enrichStatesWithConnections(); + $data = ['states' => $enrichedStates]; $dataPrint = json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); $newPrintHash = md5($dataPrint); if($newPrintHash <> $this->lastPrintUserHash){ $this->lastPrintUserHash = $newPrintHash; - CacheManager::setCacheData('getUsersStates', $data, 80000); + CacheManager::setCacheData('getUsersStates', $data, self::CACHE_TTL); if($this->backendExists){ BackendApiController::publishUserStates($data); } @@ -418,6 +444,55 @@ private function printActiveCalls():void } + /** + * Обогащает states информацией о соединённых каналах. + * Создаёт копию $this->states, не модифицируя оригинал. + * + * @return array Enriched states with connection info + */ + private function enrichStatesWithConnections(): array + { + $states = $this->states; + + // Строим карту channel -> [linkedId, connectedChannel, connectedNumber] + $channelConnections = []; + foreach ($this->activeBridges as $linkedId => $bridges) { + foreach ($bridges as $bridgeChannels) { + $channelList = array_keys($bridgeChannels); + if (count($channelList) !== 2) { + continue; + } + $ch1 = $channelList[0]; + $ch2 = $channelList[1]; + $num1 = $this->activeChannels[$linkedId][$ch1]['CallerIDNum'] ?? ''; + $num2 = $this->activeChannels[$linkedId][$ch2]['CallerIDNum'] ?? ''; + + $channelConnections[$ch1] = ['channel' => $ch2, 'number' => $num2]; + $channelConnections[$ch2] = ['channel' => $ch1, 'number' => $num1]; + } + } + + // Обновляем channels в копии states + foreach ($states as $endpoint => &$stateData) { + if (empty($stateData['channels'])) { + continue; + } + $enrichedChannels = []; + foreach (array_keys($stateData['channels']) as $channel) { + if (isset($channelConnections[$channel])) { + $enrichedChannels[$channel] = $channelConnections[$channel]; + } else { + // Канал не в бридже (звонит/ожидает) + $enrichedChannels[$channel] = ['channel' => '', 'number' => '']; + } + } + $stateData['channels'] = $enrichedChannels; + } + unset($stateData); + + return $states; + } + /** * Поиск связанного канала. * @param $linkedId @@ -430,7 +505,7 @@ private function findBridgeChannel($linkedId, &$dstChannel, &$tmpBridgeStart):bo $srcChan = $dstChannel; $chFound = true; - $ch = 200; + $ch = self::MAX_BRIDGE_ITERATIONS; // Поиск связанного канала. while ( ($dstChannel === $srcChan || stripos($dstChannel, 'Local/') !== false) && $chFound ) { $ch--; @@ -472,6 +547,35 @@ function ($matches) { ); } + /** + * Builds agent to queues index for O(1) lookup. + */ + private function buildAgentIndex(): void + { + $this->agentToQueues = []; + foreach ($this->queuesData as $qId => $data) { + foreach ($data['agents'] as $agent) { + $this->agentToQueues[$agent][] = $qId; + } + } + } + + /** + * Updates agent state in all queues where agent is a member. + * + * @param array $queuesData Reference to queues data array + * @param string $number Agent number + * @param string $state New state value + */ + private function updateAgentState(array &$queuesData, string $number, string $state): void + { + foreach ($this->agentToQueues[$number] ?? [] as $qId) { + if (isset($queuesData[$qId]['agents'][$number])) { + $queuesData[$qId]['agents'][$number]['state'] = $state; + } + } + } + private function collectQueuesInfo():void { $this->logger->writeInfo('Update queues data...'); @@ -485,6 +589,7 @@ private function collectQueuesInfo():void foreach ($queuesAgents as $queuesAgent) { $this->queuesData[$queuesAgent->queue]['agents'][] = $queuesAgent->extension; } + $this->buildAgentIndex(); if(!$this->init){ return; } @@ -493,7 +598,7 @@ private function collectQueuesInfo():void $queueMember = $queueInfo['data']['QueueMember']??[]; foreach ($queueMember as $member){ if(isset($this->mobileStates[$member['Name']])){ - $this->mobileStates[$member['Name']]['state'] = self::QUEUE_AGENT_STATES[$member['Status']]??self::STATE_UNAVAILIBLE; + $this->mobileStates[$member['Name']]['state'] = self::QUEUE_AGENT_STATES[$member['Status']]??self::STATE_UNAVAILABLE; } } @@ -523,7 +628,7 @@ private function collectActiveChannels():void } $endpoint = self::getEndpointName($channel); $context = $this->amCustom->GetVar($channel, 'CONTEXT', '', false); - if(str_starts_with($context, 'ivr-')){ + if(strpos($context, 'ivr-') === 0){ $extension = str_replace('ivr-', '', $context); $inApp = true; }else{ @@ -606,7 +711,7 @@ private function updateCacheState():void public function getPjSipPeers(): array { $peers = []; - $result = $this->amCustom->sendRequestTimeout('PJSIPShowEndpoints', [], 200000); + $result = $this->amCustom->sendRequestTimeout('PJSIPShowEndpoints', [], self::AMI_REQUEST_TIMEOUT); $state_array = [ 'Not in use' => self::STATE_IDLE, 'Busy' => self::STATE_UP, @@ -731,9 +836,17 @@ private function initManagerAsterisk():void */ public function callEvents($parameters):void { - if('Hangup' === $parameters['Event']){ - $linkedId = $parameters['Linkedid']; - $channel = $parameters['Channel']; + $event = $parameters['Event'] ?? ''; + if (empty($event)) { + return; + } + + if('Hangup' === $event){ + $linkedId = $parameters['Linkedid'] ?? ''; + $channel = $parameters['Channel'] ?? ''; + if (empty($linkedId) || empty($channel)) { + return; + } $endpoint = self::getEndpointName($channel); unset($this->activeChannels[$linkedId][$channel]); unset($this->states[$endpoint]['channels'][$channel]); @@ -741,22 +854,27 @@ public function callEvents($parameters):void unset($this->activeChannels[$linkedId]); unset($this->callType[$linkedId]); } - }elseif(in_array($parameters['Event'],['Newchannel','Newstate']) && stripos($parameters['Channel'], 'local') === false){ - $linkedId = $parameters['Linkedid']; - $endpoint = self::getEndpointName($parameters['Channel']); + }elseif(in_array($event, ['Newchannel','Newstate']) && stripos($parameters['Channel'] ?? '', 'local') === false){ + $linkedId = $parameters['Linkedid'] ?? ''; + $channel = $parameters['Channel'] ?? ''; + if (empty($linkedId) || empty($channel)) { + return; + } + $endpoint = self::getEndpointName($channel); - if(str_starts_with($parameters['Context'], 'ivr-')){ - $extension = str_replace('ivr-', '', $parameters['Context']); + $context = $parameters['Context'] ?? ''; + if(strpos($context, 'ivr-') === 0){ + $extension = str_replace('ivr-', '', $context); $inApp = true; }else{ - $extension = $parameters['Exten']; - $inApp = $parameters['Context'] === 'applications'; + $extension = $parameters['Exten'] ?? ''; + $inApp = $context === 'applications'; } $chanData = [ - 'ChannelStateDesc' => $parameters['ChannelStateDesc'], - 'CallerIDNum' => $parameters['CallerIDNum'], - 'Uniqueid' => $parameters['Uniqueid'], + 'ChannelStateDesc' => $parameters['ChannelStateDesc'] ?? '', + 'CallerIDNum' => $parameters['CallerIDNum'] ?? '', + 'Uniqueid' => $parameters['Uniqueid'] ?? '', 'Endpoint' => $endpoint, 'Type' => (stripos($endpoint, 'SIP-') !== false)?self::ENDPOINT_TYPE_PROVIDER:self::ENDPOINT_TYPE_PEER, 'Exten' => $extension, @@ -764,7 +882,7 @@ public function callEvents($parameters):void ]; if($chanData['Type'] === self::ENDPOINT_TYPE_PEER){ - $this->states[$endpoint]['channels'][$parameters['Channel']] = true; + $this->states[$endpoint]['channels'][$channel] = true; if($this->states[$endpoint]['state'] <> self::STATE_UP){ $this->states[$endpoint]['state'] = $chanData['ChannelStateDesc']; } @@ -773,66 +891,87 @@ public function callEvents($parameters):void $did = ''; if($chanData['Type'] === self::ENDPOINT_TYPE_PROVIDER){ $callType = self::CALL_TYPE_IN; - $did = $parameters['Exten']; - }elseif ($chanData['Type'] === self::ENDPOINT_TYPE_PEER && strlen($parameters['Exten']) < 5){ + $did = $extension; + }elseif ($chanData['Type'] === self::ENDPOINT_TYPE_PEER && strlen($extension) < 5){ $callType = self::CALL_TYPE_INNER; }else{ $callType = self::CALL_TYPE_OUT; } $this->callType[$linkedId] = [ 'type' => $callType, - 'src_chan' => $parameters['Channel'], + 'src_chan' => $channel, 'did' => $did, 'time' => str_replace('mikopbx-','',$chanData['Uniqueid']) ]; } - if($this->callType[$linkedId]['src_chan'] <> $parameters['Channel'] && $chanData['ChannelStateDesc'] === self::STATE_UP){ + if(($this->callType[$linkedId]['src_chan'] ?? '') !== $channel && $chanData['ChannelStateDesc'] === self::STATE_UP){ // Обновляем время ответа на вызов. - $this->callType[$linkedId]['answer'] = $parameters['Timestamp']; - } - $this->activeChannels[$linkedId][$parameters['Channel']] = $chanData; - }elseif ('NewCallerid' === $parameters['Event'] && str_starts_with($parameters['Channel'], 'PJSIP/') && - isset($this->activeChannels[$parameters['Linkedid']][$parameters['Channel']]) ){ - $this->activeChannels[$parameters['Linkedid']][$parameters['Channel']]['CallerIDNum'] = $parameters['CallerIDNum']; - }elseif ('BridgeEnter' === $parameters['Event']){ - $linkedId = $parameters['Linkedid']; - $this->activeBridges[$linkedId][$parameters['BridgeUniqueid']][$parameters['Channel']] = $parameters['Timestamp']; - }elseif ('ChanSpyStart' === $parameters['Event']){ - - if(stripos($parameters['SpyerChannel'], 'local') !==false){ - $linkedId = $parameters['SpyerLinkedid']; + $this->callType[$linkedId]['answer'] = $parameters['Timestamp'] ?? time(); + } + $this->activeChannels[$linkedId][$channel] = $chanData; + }elseif ('NewCallerid' === $event){ + $ncChannel = $parameters['Channel'] ?? ''; + $ncLinkedId = $parameters['Linkedid'] ?? ''; + if (!empty($ncChannel) && strpos($ncChannel, 'PJSIP/') === 0 && + isset($this->activeChannels[$ncLinkedId][$ncChannel])) { + $this->activeChannels[$ncLinkedId][$ncChannel]['CallerIDNum'] = $parameters['CallerIDNum'] ?? ''; + } + }elseif ('BridgeEnter' === $event){ + $linkedId = $parameters['Linkedid'] ?? ''; + $bridgeUniqueid = $parameters['BridgeUniqueid'] ?? ''; + $beChannel = $parameters['Channel'] ?? ''; + if (!empty($linkedId) && !empty($bridgeUniqueid) && !empty($beChannel)) { + $this->activeBridges[$linkedId][$bridgeUniqueid][$beChannel] = $parameters['Timestamp'] ?? time(); + } + }elseif ('ChanSpyStart' === $event){ + $spyerChannel = $parameters['SpyerChannel'] ?? ''; + $spyerLinkedId = $parameters['SpyerLinkedid'] ?? ''; + $spyeeLinkedId = $parameters['SpyeeLinkedid'] ?? ''; + if (empty($spyerLinkedId) || empty($spyeeLinkedId)) { + return; + } + + if(stripos($spyerChannel, 'local') !== false){ + $linkedId = $spyerLinkedId; $tmpBridgeStart = time(); - $tmpDstChannel = $this->swapLocalSuffix($parameters['SpyerChannel']); - $orgChan = $this->findBridgeChannel($linkedId,$tmpDstChannel, $tmpBridgeStart)?$tmpDstChannel:''; + $tmpDstChannel = $this->swapLocalSuffix($spyerChannel); + $orgChan = $this->findBridgeChannel($linkedId, $tmpDstChannel, $tmpBridgeStart) ? $tmpDstChannel : ''; }else{ - $orgChan = $parameters['SpyerChannel']; + $orgChan = $spyerChannel; } - $this->spyerChannels[$parameters['SpyerLinkedid']] = [ + $this->spyerChannels[$spyerLinkedId] = [ 'spyer' => true, 'src_chan' => $orgChan, - 'src_num' => $parameters['SpyerCallerIDNum'], - 'dst_chan' => $parameters['SpyeeChannel'], - 'dst_num' => $parameters['SpyeeCallerIDNum'], + 'src_num' => $parameters['SpyerCallerIDNum'] ?? '', + 'dst_chan' => $parameters['SpyeeChannel'] ?? '', + 'dst_num' => $parameters['SpyeeCallerIDNum'] ?? '', ]; - $this->spyerChannels[$parameters['SpyeeLinkedid']] = [ + $this->spyerChannels[$spyeeLinkedId] = [ 'spyer' => false, 'src_chan' => $orgChan, - 'src_num' => $parameters['SpyerCallerIDNum'], - 'dst_chan' => $parameters['SpyeeChannel'], - 'dst_num' => $parameters['SpyeeCallerIDNum'], + 'src_num' => $parameters['SpyerCallerIDNum'] ?? '', + 'dst_chan' => $parameters['SpyeeChannel'] ?? '', + 'dst_num' => $parameters['SpyeeCallerIDNum'] ?? '', ]; - }elseif ('ChanSpyStop' === $parameters['Event']){ + }elseif ('ChanSpyStop' === $event){ + $spyeeLinkedId = $parameters['SpyeeLinkedid'] ?? ''; + $spyerLinkedId = $parameters['SpyerLinkedid'] ?? ''; unset( - $this->spyerChannels[$parameters['SpyeeLinkedid']], - $this->spyerChannels[$parameters['SpyerLinkedid']] + $this->spyerChannels[$spyeeLinkedId], + $this->spyerChannels[$spyerLinkedId] ); - }elseif ('BridgeLeave' === $parameters['Event']){ - $linkedId = $parameters['Linkedid']; - unset($this->activeBridges[$linkedId][$parameters['BridgeUniqueid']][$parameters['Channel']]); - if(empty($this->activeBridges[$linkedId][$parameters['BridgeUniqueid']])){ - unset($this->activeBridges[$linkedId][$parameters['BridgeUniqueid']]); + }elseif ('BridgeLeave' === $event){ + $linkedId = $parameters['Linkedid'] ?? ''; + $bridgeUniqueid = $parameters['BridgeUniqueid'] ?? ''; + $blChannel = $parameters['Channel'] ?? ''; + if (empty($linkedId) || empty($bridgeUniqueid) || empty($blChannel)) { + return; + } + unset($this->activeBridges[$linkedId][$bridgeUniqueid][$blChannel]); + if(empty($this->activeBridges[$linkedId][$bridgeUniqueid])){ + unset($this->activeBridges[$linkedId][$bridgeUniqueid]); } if(empty($this->activeBridges[$linkedId])){ unset($this->activeBridges[$linkedId]); @@ -859,20 +998,40 @@ public static function getEndpointName(string $channel):string */ public function queueEvents($parameters):void { - if('QueueCallerJoin' === $parameters['Event']){ - $this->queueEntryes[$parameters['Queue']][$parameters['Channel']] = [ + $event = $parameters['Event'] ?? ''; + if (empty($event)) { + return; + } + + if('QueueCallerJoin' === $event){ + $queue = $parameters['Queue'] ?? ''; + $channel = $parameters['Channel'] ?? ''; + $linkedId = $parameters['Linkedid'] ?? ''; + if (empty($queue) || empty($channel)) { + return; + } + $this->queueEntryes[$queue][$channel] = [ 'EnterTime' => time(), - 'Uniqueid' => $parameters['Uniqueid'], - 'Linkedid' => $parameters['Linkedid'] + 'Uniqueid' => $parameters['Uniqueid'] ?? '', + 'Linkedid' => $linkedId ]; - - $this->callType[$parameters['Linkedid']]['queue'] = $parameters['Queue']; - }elseif ('QueueMemberStatus' === $parameters['Event'] && isset($this->mobileStates[$parameters['MemberName']])){ - $this->mobileStates[$parameters['MemberName']]['state'] = self::QUEUE_AGENT_STATES[$parameters['Status']]??self::STATE_UNAVAILIBLE; - }elseif ('QueueCallerLeave' === $parameters['Event'] ){ - unset($this->queueEntryes[$parameters['Queue']][$parameters['Channel']]); - if(empty($this->queueEntryes[$parameters['Queue']])){ - unset($this->queueEntryes[$parameters['Queue']]); + if (!empty($linkedId)) { + $this->callType[$linkedId]['queue'] = $queue; + } + }elseif ('QueueMemberStatus' === $event){ + $memberName = $parameters['MemberName'] ?? ''; + if (!empty($memberName) && isset($this->mobileStates[$memberName])){ + $this->mobileStates[$memberName]['state'] = self::QUEUE_AGENT_STATES[$parameters['Status'] ?? ''] ?? self::STATE_UNAVAILABLE; + } + }elseif ('QueueCallerLeave' === $event){ + $queue = $parameters['Queue'] ?? ''; + $channel = $parameters['Channel'] ?? ''; + if (empty($queue) || empty($channel)) { + return; + } + unset($this->queueEntryes[$queue][$channel]); + if(empty($this->queueEntryes[$queue])){ + unset($this->queueEntryes[$queue]); } }else{ return; @@ -889,7 +1048,12 @@ public function queueEvents($parameters):void */ public function stateEvents($parameters):void { - if ($parameters['Event'] === 'UserEvent' && $this->replyOnPingRequest($parameters)){ + $event = $parameters['Event'] ?? ''; + if (empty($event)) { + return; + } + + if ($event === 'UserEvent' && $this->replyOnPingRequest($parameters)){ $this->logger->writeInfo($parameters,'update settings...'); $this->getExtensionsInfo(); $this->collectQueuesInfo(); @@ -899,9 +1063,10 @@ public function stateEvents($parameters):void $this->printActiveCalls(); return; } - if($parameters['Event'] === 'ExtensionStatus'){ - if(isset($this->states[$parameters['Exten']])){ - $this->states[$parameters['Exten']]['state'] = $parameters['StatusText']; + if($event === 'ExtensionStatus'){ + $exten = $parameters['Exten'] ?? ''; + if(!empty($exten) && isset($this->states[$exten])){ + $this->states[$exten]['state'] = $parameters['StatusText'] ?? ''; $this->logger->writeInfo($parameters,'stateEvents...'); $this->printActiveCalls(); $this->updateCacheState(); From d942e34cd8fc89c6787c600a01c7ddc4f313643f Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Thu, 29 Jan 2026 19:37:05 +0800 Subject: [PATCH 19/23] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D1=83=20=D0=BF=D1=81=D0=B5=D0=B2=D0=B4=D0=BE-=D0=BA=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=D0=BE=D0=B2=20=D1=82=D0=B8=D0=BF=D0=B0=20Out?= =?UTF-8?q?goingSpoolFailed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена проверка на наличие слеша в имени канала перед вызовом getEndpointName(), который ожидает формат TECH/endpoint-uniqueid. --- bin/WorkerActiveCalls.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 53ff939..3cca787 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -163,8 +163,10 @@ private function channelAdditionalControl() foreach (array_keys($this->activeChannels[$linkedId]) as $channel) { if (!isset($actualChannels[$channel])) { unset($this->activeChannels[$linkedId][$channel]); - $endpoint = self::getEndpointName($channel); - unset($this->states[$endpoint]['channels'][$channel]); + if(strpos($channel, '/') !== false) { + $endpoint = self::getEndpointName($channel); + unset($this->states[$endpoint]['channels'][$channel]); + } } } @@ -626,6 +628,10 @@ private function collectActiveChannels():void if(stripos($channel, 'local') !== false) { continue; } + // Пропускаем каналы без слеша (например, OutgoingSpoolFailed) + if(strpos($channel, '/') === false) { + continue; + } $endpoint = self::getEndpointName($channel); $context = $this->amCustom->GetVar($channel, 'CONTEXT', '', false); if(strpos($context, 'ivr-') === 0){ @@ -844,7 +850,7 @@ public function callEvents($parameters):void if('Hangup' === $event){ $linkedId = $parameters['Linkedid'] ?? ''; $channel = $parameters['Channel'] ?? ''; - if (empty($linkedId) || empty($channel)) { + if (empty($linkedId) || empty($channel) || strpos($channel, '/') === false) { return; } $endpoint = self::getEndpointName($channel); @@ -860,6 +866,10 @@ public function callEvents($parameters):void if (empty($linkedId) || empty($channel)) { return; } + // Пропускаем каналы без слеша (например, OutgoingSpoolFailed) + if(strpos($channel, '/') === false) { + return; + } $endpoint = self::getEndpointName($channel); $context = $parameters['Context'] ?? ''; From 9026dfb8c929ff15a11cdfe496e1f8acd6f6a165 Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Fri, 30 Jan 2026 04:28:28 +0800 Subject: [PATCH 20/23] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20ConnectedLineNum=20=D0=B2=20=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=82=D1=83=D1=80=D1=83=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20=D1=81=D0=BE=D0=B1=D0=B5=D1=81=D0=B5=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Теперь в states->channels->number передаётся номер собеседника из AMI-события даже когда канал ещё не в бридже (звонит/ожидает). --- bin/WorkerActiveCalls.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 3cca787..07c29bd 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -474,6 +474,16 @@ private function enrichStatesWithConnections(): array } } + // Строим карту channel -> ConnectedLineNum из activeChannels + $channelToConnectedLine = []; + foreach ($this->activeChannels as $linkedId => $channels) { + foreach ($channels as $channel => $data) { + if (!empty($data['ConnectedLineNum'])) { + $channelToConnectedLine[$channel] = $data['ConnectedLineNum']; + } + } + } + // Обновляем channels в копии states foreach ($states as $endpoint => &$stateData) { if (empty($stateData['channels'])) { @@ -484,8 +494,9 @@ private function enrichStatesWithConnections(): array if (isset($channelConnections[$channel])) { $enrichedChannels[$channel] = $channelConnections[$channel]; } else { - // Канал не в бридже (звонит/ожидает) - $enrichedChannels[$channel] = ['channel' => '', 'number' => '']; + // Канал не в бридже (звонит/ожидает) - используем ConnectedLineNum + $connectedNum = $channelToConnectedLine[$channel] ?? ''; + $enrichedChannels[$channel] = ['channel' => '', 'number' => $connectedNum]; } } $stateData['channels'] = $enrichedChannels; @@ -645,6 +656,7 @@ private function collectActiveChannels():void $chanData = [ 'ChannelStateDesc' => $this->amCustom->GetVar($channel, 'CHANNEL(state)', '', false), 'CallerIDNum' => $this->amCustom->GetVar($channel, 'CALLERID(num)','', false), + 'ConnectedLineNum' => $this->amCustom->GetVar($channel, 'CONNECTEDLINE(num)','', false), 'Uniqueid' => $this->amCustom->GetVar($channel, 'CHANNEL(uniqueid)','', false), 'Endpoint' => $endpoint, 'Type' => (stripos($endpoint, 'SIP-') !== false)?self::ENDPOINT_TYPE_PROVIDER:self::ENDPOINT_TYPE_PEER, @@ -884,6 +896,7 @@ public function callEvents($parameters):void $chanData = [ 'ChannelStateDesc' => $parameters['ChannelStateDesc'] ?? '', 'CallerIDNum' => $parameters['CallerIDNum'] ?? '', + 'ConnectedLineNum' => $parameters['ConnectedLineNum'] ?? '', 'Uniqueid' => $parameters['Uniqueid'] ?? '', 'Endpoint' => $endpoint, 'Type' => (stripos($endpoint, 'SIP-') !== false)?self::ENDPOINT_TYPE_PROVIDER:self::ENDPOINT_TYPE_PEER, From 8a8891943a28d8249cc871d3e3665dc6a7f87ca9 Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Fri, 30 Jan 2026 04:38:01 +0800 Subject: [PATCH 21/23] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83?= =?UTF-8?q?=20NewConnectedLine=20=D0=B8=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Слушаем событие NewConnectedLine для обновления номера собеседника - Фильтруем значения типа — показываем пустую строку --- bin/WorkerActiveCalls.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 07c29bd..24ddc6b 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -63,6 +63,7 @@ class WorkerActiveCalls extends WorkerBase 'UserEvent', 'ExtensionStatus', 'NewCallerid', + 'NewConnectedLine', 'BridgeEnter', 'BridgeLeave', 'ChanSpyStart', @@ -478,8 +479,10 @@ private function enrichStatesWithConnections(): array $channelToConnectedLine = []; foreach ($this->activeChannels as $linkedId => $channels) { foreach ($channels as $channel => $data) { - if (!empty($data['ConnectedLineNum'])) { - $channelToConnectedLine[$channel] = $data['ConnectedLineNum']; + $connectedNum = $data['ConnectedLineNum'] ?? ''; + // Фильтруем и подобные значения + if (!empty($connectedNum) && strpos($connectedNum, '<') === false) { + $channelToConnectedLine[$channel] = $connectedNum; } } } @@ -940,6 +943,15 @@ public function callEvents($parameters):void isset($this->activeChannels[$ncLinkedId][$ncChannel])) { $this->activeChannels[$ncLinkedId][$ncChannel]['CallerIDNum'] = $parameters['CallerIDNum'] ?? ''; } + }elseif ('NewConnectedLine' === $event){ + $nclChannel = $parameters['Channel'] ?? ''; + $nclLinkedId = $parameters['Linkedid'] ?? ''; + $connectedNum = $parameters['ConnectedLineNum'] ?? ''; + if (!empty($nclChannel) && !empty($nclLinkedId) && + isset($this->activeChannels[$nclLinkedId][$nclChannel]) && + !empty($connectedNum) && strpos($connectedNum, '<') === false) { + $this->activeChannels[$nclLinkedId][$nclChannel]['ConnectedLineNum'] = $connectedNum; + } }elseif ('BridgeEnter' === $event){ $linkedId = $parameters['Linkedid'] ?? ''; $bridgeUniqueid = $parameters['BridgeUniqueid'] ?? ''; From 3143a127d38ef52abb2936e8129a5732e6d4e4c6 Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Mon, 2 Feb 2026 20:19:35 +0800 Subject: [PATCH 22/23] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20UI=20=D0=B8=20=D0=B8=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85=20=D0=B2=D1=8B=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Исправлено скрытие текста "Выберите очередь" при выбранных очередях - Исправлена ошибка JS TypeError: undefined is not iterable (this.calls → this.allCalls) - Добавлена защита от сброса выбранных очередей при refresh dropdown - Добавлено сохранение queueEnterTime в callType как fallback для queueData - Исправлено отображение номера телефона для входящих вызовов (убран need-update для incoming) - Адаптивная ширина карточек агентов (минимум 240px, растягиваются на всю ширину) - Добавлен поиск по наименованию в dropdown выбора очередей --- .../ModuleMonitorActiveCallsController.php | 22 +- App/Views/index.volt | 85 +++-- Messages/en.php | 2 + Messages/ru.php | 4 +- bin/WorkerActiveCalls.php | 30 +- .../js/module-monitor-active-calls-index.js | 320 +++++++++++------ .../module-monitor-active-calls-index.js.map | 2 +- .../src/module-monitor-active-calls-index.js | 324 +++++++++++------- 8 files changed, 511 insertions(+), 278 deletions(-) diff --git a/App/Controllers/ModuleMonitorActiveCallsController.php b/App/Controllers/ModuleMonitorActiveCallsController.php index cdc6a5f..b8a9ff7 100644 --- a/App/Controllers/ModuleMonitorActiveCallsController.php +++ b/App/Controllers/ModuleMonitorActiveCallsController.php @@ -84,18 +84,19 @@ public function indexAction(): void $this->view->userId = $userId; $this->view->userNumber = $userNumber; $this->view->cid = $cid; - $this->view->queueId = ''; + $this->view->queueIds = []; $settings = UsersSettings::find([ 'userId=:userId:', 'bind' => [ - 'userId' => $userId, + 'userId' => (string)$userId, ] ]); $minWaitVisible = 0; foreach ($settings as $setting){ - if('queueId' === $setting->key ){ - $this->view->queueId = $setting->value; + if('queueIds' === $setting->key ){ + $decoded = json_decode($setting->value, true); + $this->view->queueIds = is_array($decoded) ? $decoded : []; }elseif ('minWaitVisible' === $setting->key ){ $minWaitVisible = intval($setting->value); } @@ -190,9 +191,10 @@ public function saveUserAction():void } $settings->value = $data['minWaitVisible']??''; $this->view->success = $settings->save(); - }elseif (isset($data['queueId']) ){ + }elseif (isset($data['queueIds']) ){ [,,$userId,] = $this->getUserData(); - $key = 'queueId'; + $userId = (string)$userId; + $key = 'queueIds'; $settings = UsersSettings::findFirst([ 'userId=:userId: AND key=:key:', 'bind' => [ @@ -205,7 +207,13 @@ public function saveUserAction():void $settings->userId = $userId; $settings->key = $key; } - $settings->value = $data['queueId']??''; + // Принимаем массив или JSON-строку + $queueIds = $data['queueIds']; + if (is_string($queueIds)) { + $decoded = json_decode($queueIds, true); + $queueIds = is_array($decoded) ? $decoded : []; + } + $settings->value = json_encode(is_array($queueIds) ? $queueIds : []); $this->view->success = $settings->save(); } $this->view->data = $data; diff --git a/App/Views/index.volt b/App/Views/index.volt index 259f006..698689b 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -6,7 +6,8 @@ - + + {% if cid !== "" %} @@ -65,29 +66,34 @@

-
-
-
+ +
+ +
+ + +
+
+ +

- - + <% queues[queueId].name %> [<% queues[queueId].number %>]

-
-
-
-
- +
@@ -96,16 +102,20 @@
{{ t._('module_monitorCalls_waitingTitleClient') }}: <% formatElapsedTime(call.queueData.EnterTime) %>
+
+
+
{{ t._('module_monitorCalls_noWaitingCalls') }}
+
+
-
-
-
+ +
-
{{ t._('module_monitorCalls_legendTitleIdle') }}
-
{{ t._('module_monitorCalls_legendTitleInCall') }}
-
{{ t._('module_monitorCalls_legendTitleCalling') }}
-
{{ t._('module_monitorCalls_legendTitleSpy') }}
-
{{ t._('module_monitorCalls_legendTitleDisable') }}
-
+ + +
+
+ + {{ t._('module_monitorCalls_needSelectQueue') }} +
+
+ + +
+
+
{{ t._('module_monitorCalls_legendTitleIdle') }}
+
{{ t._('module_monitorCalls_legendTitleInCall') }}
+
{{ t._('module_monitorCalls_legendTitleCalling') }}
+
{{ t._('module_monitorCalls_legendTitleSpy') }}
+
{{ t._('module_monitorCalls_legendTitleDisable') }}
+
+
@@ -176,7 +197,7 @@ 'row-dialing': (call.dst_num === '' && call.calledChannels && call.calledChannels.length), }"> <% formatTimestampToTime(call.start) %> - <% getClientHeader(call.src_num) %> + <% getClientHeader(call.src_num) %> <% getClientHeader(call.dst_num) %> diff --git a/Messages/en.php b/Messages/en.php index 8144609..b9e1e73 100644 --- a/Messages/en.php +++ b/Messages/en.php @@ -49,4 +49,6 @@ 'module_monitorCalls_legendTitleSpy' => 'Eavesdropping', 'module_monitorCalls_needSelectQueue' => 'Select a queue', 'module_monitorCalls_legendTitleCalling' => 'Dialing', + 'module_monitorCalls_noWaitingCalls' => 'No waiting calls', + 'module_monitorCalls_saveQueuesFilter' => 'Apply', ]; diff --git a/Messages/ru.php b/Messages/ru.php index c5ece90..342b4fb 100644 --- a/Messages/ru.php +++ b/Messages/ru.php @@ -40,6 +40,6 @@ 'module_monitorCalls_columnTitleWaitTime' => 'Ожидание', 'module_monitorCalls_columnTitleTalkTime' => 'Разговор', 'module_monitorCalls_columnTitleAction' => 'Действия', - - + 'module_monitorCalls_noWaitingCalls' => 'Нет ожидающих звонков', + 'module_monitorCalls_saveQueuesFilter' => 'Применить', ]; \ No newline at end of file diff --git a/bin/WorkerActiveCalls.php b/bin/WorkerActiveCalls.php index 24ddc6b..0fe2a42 100644 --- a/bin/WorkerActiveCalls.php +++ b/bin/WorkerActiveCalls.php @@ -333,7 +333,7 @@ private function printActiveCalls():void 'spyer' => false, 'spy_num' => '', 'spy_chan' => '', - 'queueData' => $queueCalls[$linkedid]??[], + 'queueData' => $this->getQueueData($queueCalls, $linkedid), 'lastQueue' => $this->callType[$linkedid]['queue']??'' ]; $dstChannel = $srcChan; @@ -509,6 +509,30 @@ private function enrichStatesWithConnections(): array return $states; } + /** + * Получение данных о времени входа в очередь. + * Использует queueCalls если доступно, иначе берёт из callType. + * @param array $queueCalls + * @param string $linkedid + * @return array + */ + private function getQueueData(array $queueCalls, string $linkedid): array + { + if (!empty($queueCalls[$linkedid])) { + return $queueCalls[$linkedid]; + } + // Fallback: использовать сохранённые данные из callType + $queueId = $this->callType[$linkedid]['queue'] ?? ''; + $enterTime = $this->callType[$linkedid]['queueEnterTime'] ?? 0; + if (!empty($queueId) && $enterTime > 0) { + return [ + 'QueueID' => $queueId, + 'EnterTime' => $enterTime, + ]; + } + return []; + } + /** * Поиск связанного канала. * @param $linkedId @@ -1045,13 +1069,15 @@ public function queueEvents($parameters):void if (empty($queue) || empty($channel)) { return; } + $enterTime = time(); $this->queueEntryes[$queue][$channel] = [ - 'EnterTime' => time(), + 'EnterTime' => $enterTime, 'Uniqueid' => $parameters['Uniqueid'] ?? '', 'Linkedid' => $linkedId ]; if (!empty($linkedId)) { $this->callType[$linkedId]['queue'] = $queue; + $this->callType[$linkedId]['queueEnterTime'] = $enterTime; } }elseif ('QueueMemberStatus' === $event){ $memberName = $parameters['MemberName'] ?? ''; diff --git a/public/assets/js/module-monitor-active-calls-index.js b/public/assets/js/module-monitor-active-calls-index.js index bb938d8..4cd8e45 100644 --- a/public/assets/js/module-monitor-active-calls-index.js +++ b/public/assets/js/module-monitor-active-calls-index.js @@ -1,15 +1,15 @@ "use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); } +function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); } function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); } function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } @@ -19,7 +19,7 @@ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLim function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } /* * Copyright (C) MIKO LLC - All Rights Reserved @@ -37,7 +37,7 @@ var inputClassName = 'mikopbx-module-input'; var ModuleMonitorActiveCalls = { isInit: true, contactsCacheTtlMs: 120 * 60 * 1000, - queueNameSelector: '#app-queue div.scrolling.dropdown', + queuesFilterSelector: '#queuesFilter', $formObj: $('#' + idForm), $checkBoxes: $('#' + idForm + ' .ui.checkbox'), $dropDowns: $('#' + idForm + ' .ui.dropdown'), @@ -75,41 +75,85 @@ var ModuleMonitorActiveCalls = { delimiters: ["<%", "%>"], methods: { updatedCallsFromResponse: function updatedCallsFromResponse(data) { - var _this = this; // Keep last payload to allow re-render on queue switch (WS mode). this.lastActiveCallsPayload = data; - var queueNameEl = $(window[className].queueNameSelector); this.minWaitVisible = 1 * $('#minWaitVisibleValue').val(); - this.queues = data.queues; - this.allCalls = data.calls; - var queueId = $('#queueId').val(); - if (queueId in data.queues) { - this.id = data.queues[queueId].id; - this.name = data.queues[queueId].name; - this.number = data.queues[queueId].number; - this.agents = data.queues[queueId].agents; - this.agentsList = this.buildAgentsList(this.agents); - this.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : []; - } else { - this.calls = []; - this.agentsList = []; - } - if (queueNameEl.dropdown('is hidden')) { - queueNameEl.dropdown({ - onChange: function onChange(value, text, $choice) { - window[className].onChangeSetting('queueId', value); - } - }); - if (queueNameEl.dropdown('get value') === '') { - window[className].isInit = true; - queueNameEl.dropdown('set value', $('#queueId').val()); - window[className].isInit = false; - } - } + this.queues = data.queues || {}; + this.allCalls = data.calls || []; + + // Initialize multi-select dropdown if not yet done + this.initQueuesFilter(); // Normalize Semantic UI Card typography after render this.$nextTick(function () { - _this.normalizeAgentCards(); + this.normalizeAgentCards(); + }); + }, + initQueuesFilter: function initQueuesFilter() { + var self = this; + var $filter = $(window[className].queuesFilterSelector); + if ($filter.length === 0) return; + + // Wait for Vue to render menu items + this.$nextTick(function () { + // Reinitialize dropdown to pick up new menu items + if ($filter.data('initialized')) { + // Dropdown already exists, just refresh menu + // Save current selection before refresh to prevent reset + var currentSelection = self.selectedQueueIds ? self.selectedQueueIds.slice() : []; + $filter.data('refreshing', true); + $filter.dropdown('refresh'); + $filter.data('refreshing', false); + + // Restore selection after refresh if it was cleared + if (currentSelection.length > 0 && (!self.selectedQueueIds || self.selectedQueueIds.length === 0)) { + self.selectedQueueIds = currentSelection; + $filter.dropdown('set exactly', currentSelection); + } + + // After refresh, ensure default text is hidden if we have selections + if (self.selectedQueueIds && self.selectedQueueIds.length > 0) { + $filter.find('.default.text').hide(); + } else { + $filter.find('.default.text').show(); + } + } else { + // First time initialization + $filter.data('initialized', true); + $filter.dropdown({ + fullTextSearch: true, + onChange: function onChange(value) { + // Skip onChange during programmatic refresh + if ($filter.data('refreshing')) { + return; + } + // value is comma-separated string of selected queue IDs + var selectedIds = value ? value.split(',').filter(function (v) { + return v !== ''; + }) : []; + self.selectedQueueIds = selectedIds; + // Auto-save on change + window[className].onChangeSetting('queueIds', JSON.stringify(selectedIds)); + } + }); + + // Set initial values from hidden input + var savedQueueIds = []; + try { + var raw = $('#queueIds').val(); + savedQueueIds = JSON.parse(raw || '[]'); + } catch (e) { + savedQueueIds = []; + } + if (Array.isArray(savedQueueIds) && savedQueueIds.length > 0) { + window[className].isInit = true; + $filter.dropdown('set exactly', savedQueueIds); + self.selectedQueueIds = savedQueueIds; + window[className].isInit = false; + // Hide default text when values are selected + $filter.find('.default.text').hide(); + } + } }); }, refreshFromLastPayload: function refreshFromLastPayload() { @@ -117,6 +161,30 @@ var ModuleMonitorActiveCalls = { this.updatedCallsFromResponse(this.lastActiveCallsPayload); } }, + getQueueCalls: function getQueueCalls(queueId) { + var queue = this.queues[queueId]; + if (!queue) return []; + return Array.isArray(queue.calls) ? queue.calls : []; + }, + getQueueAgentsList: function getQueueAgentsList(queueId) { + var queue = this.queues[queueId]; + if (!queue || !queue.agents) return []; + return this.buildAgentsList(queue.agents); + }, + hasWaitingCalls: function hasWaitingCalls(queueId) { + var calls = this.getQueueCalls(queueId); + var self = this; + for (var i = 0; i < calls.length; i++) { + var call = calls[i]; + if (call.dst_chan === '' && call.queueData && call.queueData.EnterTime !== undefined) { + var elapsed = self.formatElapsedTime(call.queueData.EnterTime); + if (self.minWaitVisible <= elapsed) { + return true; + } + } + } + return false; + }, buildAgentsList: function buildAgentsList(agentsObj) { var entries = Object.entries(agentsObj || {}); var available = []; @@ -172,25 +240,25 @@ var ModuleMonitorActiveCalls = { return window[className].formatElapsedTime(enterTime); }, normalizeAgentCards: function normalizeAgentCards() { - var _this2 = this; if (!this.$el) return; + var self = this; // Cleanup artifacts from previous experiments (placeholders/spacers). var artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer'); artifacts.forEach(function (el) { - return el.remove(); + el.remove(); }); // Dense layout (masonry) that still fills left-to-right: // flex-wrap can't place items into vertical gaps under tall cards. this.ensureAgentCardsGridMasonry(); - // Prevent "equal height" cards in one row (Semantic UI cards are flex). - var cardsContainer = this.$el.querySelector('.ui.cards.agent-cards'); - if (cardsContainer) { + // Process all agent card containers (one per queue block) + var cardsContainers = this.$el.querySelectorAll('.ui.cards.agent-cards'); + cardsContainers.forEach(function (cardsContainer) { cardsContainer.style.alignItems = 'flex-start'; cardsContainer.style.alignContent = 'flex-start'; - } + }); var cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card'); cards.forEach(function (card) { card.style.alignSelf = 'flex-start'; @@ -243,7 +311,7 @@ var ModuleMonitorActiveCalls = { // Grid masonry needs row-span calculation after layout. requestAnimationFrame(function () { requestAnimationFrame(function () { - _this2.layoutAgentCardsGridMasonry(); + self.layoutAgentCardsGridMasonry(); }); }); }, @@ -288,7 +356,7 @@ var ModuleMonitorActiveCalls = { container.style.setProperty('--agent-card-col-count', String(count)); }, ensureAgentCardsGridMasonry: function ensureAgentCardsGridMasonry() { - var _this3 = this; + var self = this; var styleId = 'agent-cards-layout-style'; var styleEl = document.getElementById(styleId); if (!styleEl) { @@ -298,25 +366,51 @@ var ModuleMonitorActiveCalls = { } // Grid masonry: fills left-to-right and can pack items into gaps. - styleEl.textContent = "\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t".trim(); - var cardsContainer = this.$el && this.$el.querySelector ? this.$el.querySelector('.ui.cards.agent-cards') : null; - if (cardsContainer) { + // minmax(240px, 1fr) - карточки минимум 240px, растягиваются равномерно + styleEl.textContent = '\ +.ui.cards.agent-cards.agent-cards-grid {\ + display: grid !important;\ + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\ + justify-content: start;\ + gap: var(--agent-card-gap, 8px);\ + grid-auto-rows: 1px;\ + margin-bottom: 1em !important;\ +}\ +.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\ + width: 100% !important;\ + min-width: 0;\ + margin: 0 !important;\ + overflow: hidden;\ + align-self: start;\ +}'; + + // Process all agent card containers (one per queue block) + var cardsContainers = this.$el ? this.$el.querySelectorAll('.ui.cards.agent-cards') : []; + cardsContainers.forEach(function (cardsContainer) { cardsContainer.classList.remove('agent-cards-masonry'); cardsContainer.classList.remove('agent-cards-flex'); cardsContainer.classList.add('agent-cards-grid'); + }); - // Bind once: relayout on resize. - if (!this._agentCardsResizeBound) { - this._agentCardsResizeBound = true; - window.addEventListener('resize', function () { - _this3.layoutAgentCardsGridMasonry(); - }); - } + // Bind once: relayout on resize. + if (!this._agentCardsResizeBound) { + this._agentCardsResizeBound = true; + window.addEventListener('resize', function () { + self.layoutAgentCardsGridMasonry(); + }); } }, layoutAgentCardsGridMasonry: function layoutAgentCardsGridMasonry() { if (!this.$el) return; - var grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid'); + var self = this; + + // Process all grid containers (one per queue block) + var grids = this.$el.querySelectorAll('.ui.cards.agent-cards.agent-cards-grid'); + grids.forEach(function (grid) { + self.layoutSingleGridMasonry(grid); + }); + }, + layoutSingleGridMasonry: function layoutSingleGridMasonry(grid) { if (!grid) return; var cs = window.getComputedStyle(grid); var rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1; @@ -332,25 +426,27 @@ var ModuleMonitorActiveCalls = { var tall = items.filter(function (c) { return c.querySelector('.meta.agent-peer'); }); - var _short = items.filter(function (c) { + var short = items.filter(function (c) { return !c.querySelector('.meta.agent-peer'); }); // If we don't have both types, just do normal masonry spans. - if (!tall.length || !_short.length) { + if (!tall.length || !short.length) { items.forEach(function (item) { var h = item.getBoundingClientRect().height; var span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap))); - item.style.gridRowEnd = "span ".concat(span); + item.style.gridRowEnd = 'span ' + span; }); return; } - var hs = Math.max.apply(Math, _toConsumableArray(_short.map(function (c) { + var shortHeights = short.map(function (c) { return c.getBoundingClientRect().height; - }))); - var ht = Math.max.apply(Math, _toConsumableArray(tall.map(function (c) { + }); + var tallHeights = tall.map(function (c) { return c.getBoundingClientRect().height; - }))); + }); + var hs = Math.max.apply(Math, shortHeights); + var ht = Math.max.apply(Math, tallHeights); // Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs var g = ht - 2 * hs; @@ -358,14 +454,14 @@ var ModuleMonitorActiveCalls = { g = Math.max(0, Math.min(24, Math.round(g))); // Apply gap and enforce min-heights so the relation holds visually. - grid.style.setProperty('--agent-card-gap', "".concat(g, "px")); + grid.style.setProperty('--agent-card-gap', g + 'px'); var shortH = Math.round(hs); var tallH = Math.round(Math.max(ht, 2 * hs + g)); - _short.forEach(function (c) { - c.style.minHeight = "".concat(shortH, "px"); + short.forEach(function (c) { + c.style.minHeight = shortH + 'px'; }); tall.forEach(function (c) { - c.style.minHeight = "".concat(tallH, "px"); + c.style.minHeight = tallH + 'px'; }); // Now compute row spans from final rendered heights. @@ -373,13 +469,13 @@ var ModuleMonitorActiveCalls = { items.forEach(function (item) { var h = item.getBoundingClientRect().height; var span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap))); - item.style.gridRowEnd = "span ".concat(span); + item.style.gridRowEnd = 'span ' + span; }); }, getSrcNumForAgent: function getSrcNumForAgent(agentNumber) { var result = '-'; var answeredFound = false; - var _iterator = _createForOfIteratorHelper(this.calls), + var _iterator = _createForOfIteratorHelper(this.allCalls), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { @@ -477,14 +573,11 @@ var ModuleMonitorActiveCalls = { data: { "minWaitVisible": 30, "nowTick": 0, - "name": "", - "number": "", - "queues": [], - "agents": {}, - "agentsList": [], + "queues": {}, + "allCalls": [], + "selectedQueueIds": [], "lastActiveCallsPayload": null, - "contactsByPhone10": {}, - "calls": [] + "contactsByPhone10": {} } }); window[className].applyContactsCacheToQueueWidget(); @@ -712,6 +805,11 @@ var ModuleMonitorActiveCalls = { // Окончание форматирования базовой страницы ////// this.startPollingActiveCalls(); + + // Allow settings to be saved after initialization + setTimeout(function () { + window[className].isInit = false; + }, 1000); }, startUiTicker: function startUiTicker() { if (this._uiTicker) return; @@ -736,7 +834,7 @@ var ModuleMonitorActiveCalls = { this._activeCallsPollTimer = null; }, initContactsCache: function initContactsCache() { - var _this4 = this; + var _this = this; return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() { var _t; return _regenerator().w(function (_context) { @@ -744,17 +842,17 @@ var ModuleMonitorActiveCalls = { case 0: _context.p = 0; _context.n = 1; - return _this4.idbLoadAllContacts(); + return _this.idbLoadAllContacts(); case 1: - _this4._contactsCacheByPhone10 = _context.v; - _this4.applyContactsCacheToQueueWidget(); + _this._contactsCacheByPhone10 = _context.v; + _this.applyContactsCacheToQueueWidget(); _context.n = 3; break; case 2: _context.p = 2; _t = _context.v; console.log('contacts cache init error', _t); - _this4._contactsCacheByPhone10 = {}; + _this._contactsCacheByPhone10 = {}; case 3: return _context.a(2); } @@ -799,14 +897,14 @@ var ModuleMonitorActiveCalls = { }); }, idbPutContact: function idbPutContact(phone10, client) { - var _this5 = this; + var _this2 = this; return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() { var db; return _regenerator().w(function (_context2) { while (1) switch (_context2.n) { case 0: _context2.n = 1; - return _this5.idbOpenContactsDb(); + return _this2.idbOpenContactsDb(); case 1: db = _context2.v; return _context2.a(2, new Promise(function (resolve, reject) { @@ -832,14 +930,14 @@ var ModuleMonitorActiveCalls = { }))(); }, idbLoadAllContacts: function idbLoadAllContacts() { - var _this6 = this; + var _this3 = this; return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() { var db; return _regenerator().w(function (_context3) { while (1) switch (_context3.n) { case 0: _context3.n = 1; - return _this6.idbOpenContactsDb(); + return _this3.idbOpenContactsDb(); case 1: db = _context3.v; return _context3.a(2, new Promise(function (resolve, reject) { @@ -849,7 +947,7 @@ var ModuleMonitorActiveCalls = { req.onsuccess = function () { var map = {}; var now = Date.now(); - var ttlMs = Number(_this6.contactsCacheTtlMs) || 120 * 60 * 1000; + var ttlMs = Number(_this3.contactsCacheTtlMs) || 120 * 60 * 1000; var _iterator2 = _createForOfIteratorHelper(req.result || []), _step2; try { @@ -864,7 +962,7 @@ var ModuleMonitorActiveCalls = { } else if (phone10) { // Cleanup expired/broken records try { - store["delete"](phone10); + store.delete(phone10); } catch (e) {/* ignore */} } } @@ -947,7 +1045,7 @@ var ModuleMonitorActiveCalls = { }, scheduleContactsWsTokenRefresh: function scheduleContactsWsTokenRefresh() { var _this$_authTokens2, - _this7 = this; + _this4 = this; // Proactively refresh token shortly before expiry by re-requesting backendEnable. if (this._contactsWsTokenTimer) { clearTimeout(this._contactsWsTokenTimer); @@ -959,11 +1057,11 @@ var ModuleMonitorActiveCalls = { var refreshInSec = Math.max(1, exp - now - 15); // 15s before exp this._contactsWsTokenTimer = setTimeout(function () { // Re-get tokens and reconnect WS - _this7.requestBackendEnable(); + _this4.requestBackendEnable(); }, refreshInSec * 1000); }, scheduleContactsWsReconnect: function scheduleContactsWsReconnect(reason) { - var _this8 = this; + var _this5 = this; var forceReAuth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (this._contactsWsReconnectTimer) { clearTimeout(this._contactsWsReconnectTimer); @@ -972,10 +1070,10 @@ var ModuleMonitorActiveCalls = { this._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1; var delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1))); this._contactsWsReconnectTimer = setTimeout(function () { - if (forceReAuth || _this8.isAccessTokenExpired(5)) { - _this8.requestBackendEnable(); + if (forceReAuth || _this5.isAccessTokenExpired(5)) { + _this5.requestBackendEnable(); } else { - _this8.connectContactsWs(); + _this5.connectContactsWs(); } }, delay); console.log('contacts ws reconnect scheduled', { @@ -984,7 +1082,7 @@ var ModuleMonitorActiveCalls = { }); }, connectContactsWs: function connectContactsWs() { - var _this9 = this; + var _this6 = this; try { var _this$_authTokens3; var accessToken = (_this$_authTokens3 = this._authTokens) === null || _this$_authTokens3 === void 0 ? void 0 : _this$_authTokens3.access_token; @@ -1003,10 +1101,10 @@ var ModuleMonitorActiveCalls = { this._contactsWs = new WebSocket(wsUrl); this._contactsWs.onopen = function () { console.log('contacts ws connected'); - _this9.scheduleContactsWsTokenRefresh(); + _this6.scheduleContactsWsTokenRefresh(); }; this._contactsWs.onmessage = function (event) { - _this9.handleContactsWsMessage(event === null || event === void 0 ? void 0 : event.data); + _this6.handleContactsWsMessage(event === null || event === void 0 ? void 0 : event.data); }; this._contactsWs.onerror = function (event) { console.log('contacts ws error', event); @@ -1018,15 +1116,15 @@ var ModuleMonitorActiveCalls = { code: code, reason: reason }); - if (_this9._contactsWsTokenTimer) { - clearTimeout(_this9._contactsWsTokenTimer); - _this9._contactsWsTokenTimer = null; + if (_this6._contactsWsTokenTimer) { + clearTimeout(_this6._contactsWsTokenTimer); + _this6._contactsWsTokenTimer = null; } // 1000 = normal close -> reconnect; auth closes vary by server implementation. var authCloseCodes = new Set([1008, 4001, 4401, 4403]); - var forceReAuth = authCloseCodes.has(code) || _this9.isAccessTokenExpired(0); - _this9.scheduleContactsWsReconnect('close', forceReAuth); + var forceReAuth = authCloseCodes.has(code) || _this6.isAccessTokenExpired(0); + _this6.scheduleContactsWsReconnect('close', forceReAuth); }; } catch (e) { console.log('contacts ws init error', e); @@ -1034,7 +1132,7 @@ var ModuleMonitorActiveCalls = { } }, scheduleActiveCallsWsReconnect: function scheduleActiveCallsWsReconnect(reason) { - var _this0 = this; + var _this7 = this; var forceReAuth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (this._activeCallsWsReconnectTimer) { clearTimeout(this._activeCallsWsReconnectTimer); @@ -1043,10 +1141,10 @@ var ModuleMonitorActiveCalls = { this._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1; var delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1))); this._activeCallsWsReconnectTimer = setTimeout(function () { - if (forceReAuth || _this0.isAccessTokenExpired(5)) { - _this0.requestBackendEnable(); + if (forceReAuth || _this7.isAccessTokenExpired(5)) { + _this7.requestBackendEnable(); } else { - _this0.connectActiveCallsWs(); + _this7.connectActiveCallsWs(); } }, delay); console.log('active-calls ws reconnect scheduled', { @@ -1055,7 +1153,7 @@ var ModuleMonitorActiveCalls = { }); }, connectActiveCallsWs: function connectActiveCallsWs() { - var _this1 = this; + var _this8 = this; try { var _this$_authTokens4; var accessToken = (_this$_authTokens4 = this._authTokens) === null || _this$_authTokens4 === void 0 ? void 0 : _this$_authTokens4.access_token; @@ -1078,10 +1176,10 @@ var ModuleMonitorActiveCalls = { this._activeCallsWs.onopen = function () { console.log('active-calls ws connected'); // Reuse the same token refresh timer (it triggers requestBackendEnable) - _this1.scheduleContactsWsTokenRefresh(); + _this8.scheduleContactsWsTokenRefresh(); }; this._activeCallsWs.onmessage = function (event) { - _this1.handleActiveCallsWsMessage(event === null || event === void 0 ? void 0 : event.data); + _this8.handleActiveCallsWsMessage(event === null || event === void 0 ? void 0 : event.data); }; this._activeCallsWs.onerror = function (event) { console.log('active-calls ws error', event); @@ -1096,8 +1194,8 @@ var ModuleMonitorActiveCalls = { // Auth closes vary by server implementation. var authCloseCodes = new Set([1008, 4001, 4401, 4403]); - var forceReAuth = authCloseCodes.has(code) || _this1.isAccessTokenExpired(0); - _this1.scheduleActiveCallsWsReconnect('close', forceReAuth); + var forceReAuth = authCloseCodes.has(code) || _this8.isAccessTokenExpired(0); + _this8.scheduleActiveCallsWsReconnect('close', forceReAuth); }; } catch (e) { console.log('active-calls ws init error', e); @@ -1120,7 +1218,7 @@ var ModuleMonitorActiveCalls = { if (phone10 && displayName) { this._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {}; this._contactsCacheByPhone10[phone10] = displayName; - this.idbPutContact(phone10, displayName)["catch"](function (e) { + this.idbPutContact(phone10, displayName).catch(function (e) { return console.log('contacts cache save error', e); }); } @@ -1180,7 +1278,8 @@ var ModuleMonitorActiveCalls = { if (window[className].isInit) { return; } - var data = _defineProperty({}, settingName, value); + var data = {}; + data[settingName] = value; $.api({ url: window[className].saveUserActionUrl, on: 'now', @@ -1190,8 +1289,9 @@ var ModuleMonitorActiveCalls = { return response !== undefined && Object.keys(response).length > 0 && response.success === true; }, onSuccess: function onSuccess(response) { - if (settingName === 'queueId') { - $('#queueId').val($(window[className].queueNameSelector).dropdown('get value')); + if (settingName === 'queueIds') { + // Update hidden input and Vue data + $('#queueIds').val(value); // Re-render queue widget from last received payload (WS mode) if (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') { window[className].$widgetQueues.refreshFromLastPayload(); diff --git a/public/assets/js/module-monitor-active-calls-index.js.map b/public/assets/js/module-monitor-active-calls-index.js.map index e0140f2..1058f22 100644 --- a/public/assets/js/module-monitor-active-calls-index.js.map +++ b/public/assets/js/module-monitor-active-calls-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queueNameSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","_this","lastActiveCallsPayload","queueNameEl","minWaitVisible","queues","allCalls","calls","queueId","id","number","agents","agentsList","buildAgentsList","$nextTick","normalizeAgentCards","refreshFromLastPayload","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","formatElapsedTime","enterTime","nowTick","_this2","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainer","querySelector","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","tallCard","find","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","_this3","styleId","styleEl","document","getElementById","createElement","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grid","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","map","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","dst_chan","queueData","EnterTime","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","queue","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","startUiTicker","removeClass","hide","startPollingActiveCalls","_uiTicker","setInterval","_activeCallsPollTimer","updateLines","stopPollingActiveCalls","clearInterval","_this4","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this5","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this6","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","split","payloadB64","padded","repeat","json","atob","payload","JSON","parse","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this7","_contactsWsTokenTimer","clearTimeout","refreshInSec","setTimeout","scheduleContactsWsReconnect","reason","_this8","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this9","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this0","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this1","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","$forceUpdate","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueueNameSelector: '#app-queue div.scrolling.dropdown',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tlet queueNameEl = $(window[className].queueNameSelector);\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\n\t\t\t\t\tthis.queues = data.queues;\n\t\t\t\t\tthis.allCalls = data.calls;\n\t\t\t\t\tlet queueId = $('#queueId').val();\n\t\t\t\t\tif (queueId in data.queues) {\n\t\t\t\t\t\tthis.id = data.queues[queueId].id;\n\t\t\t\t\t\tthis.name = data.queues[queueId].name;\n\t\t\t\t\t\tthis.number = data.queues[queueId].number;\n\t\t\t\t\t\tthis.agents = data.queues[queueId].agents;\n\t\t\t\t\t\tthis.agentsList = this.buildAgentsList(this.agents);\n\t\t\t\t\t\tthis.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : [];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.calls = [];\n\t\t\t\t\t\tthis.agentsList = [];\n\t\t\t\t\t}\n\t\t\t\t\tif(queueNameEl.dropdown('is hidden')){\n\t\t\t\t\t\tqueueNameEl.dropdown({\n\t\t\t\t\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueId', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(queueNameEl.dropdown('get value') === ''){\n\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\tqueueNameEl.dropdown('set value', $('#queueId').val())\n\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst displayName = String(contact?.client || contact?.contact || '').trim();\n\t\t\t\t\tif (!displayName) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, displayName);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = displayName;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\t// Make this method reactive to the UI ticker.\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tconst artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach((el) => el.remove());\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Prevent \"equal height\" cards in one row (Semantic UI cards are flex).\n\t\t\t\t\tconst cardsContainer = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach((card) => {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tconst headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tconst numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach((el) => {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tconst names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach((el) => {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tconst styleId = 'agent-cards-layout-style';\n\t\t\t\t\tlet styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\tstyleEl.textContent = `\n.ui.cards.agent-cards.agent-cards-grid {\n display: grid !important;\n grid-template-columns: repeat(auto-fill, 240px);\n justify-content: start;\n gap: var(--agent-card-gap, 8px);\n grid-auto-rows: 1px;\n /* Prevent overlap with the legend block below */\n margin-bottom: 1em !important;\n}\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\n width: 240px !important;\n margin: 0 !important;\n overflow: hidden;\n /* reset from previous layouts */\n align-self: start;\n}\n\t\t\t\t\t`.trim();\n\n\t\t\t\t\tconst cardsContainer = this.$el && this.$el.querySelector\n\t\t\t\t\t\t? this.$el.querySelector('.ui.cards.agent-cards')\n\t\t\t\t\t\t: null;\n\t\t\t\t\tif (cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\n\t\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\t\t\t\tthis.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(grid);\n\t\t\t\t\tconst rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tconst rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tconst items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tconst tall = items.filter((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst short = items.filter((c) => !c.querySelector('.meta.agent-peer'));\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hs = Math.max(...short.map((c) => c.getBoundingClientRect().height));\n\t\t\t\t\tconst ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height));\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tlet g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', `${g}px`);\n\n\t\t\t\t\tconst shortH = Math.round(hs);\n\t\t\t\t\tconst tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach((c) => { c.style.minHeight = `${shortH}px`; });\n\t\t\t\t\ttall.forEach((c) => { c.style.minHeight = `${tallH}px`; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tconst effectiveGap = g;\n\t\t\t\t\titems.forEach((item) => {\n\t\t\t\t\t\tconst h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tconst span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = `span ${span}`;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.calls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"number\": \"\",\n\t\t\t\t\"queues\": [],\n\t\t\t\t\"agents\": {\n\t\t\t\t},\n\t\t\t\t\"agentsList\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {},\n\t\t\t\t\"calls\": [\n\t\t\t\t]\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\twindow[className].startUiTicker();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\t},\n\tstartUiTicker() {\n\t\tif (this._uiTicker) return;\n\t\tthis._uiTicker = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\twindow[className].$widgetQueues.nowTick = now;\n\t\t\t}\n\t\t\tif (window[className].$callsWidget) {\n\t\t\t\twindow[className].$callsWidget.nowTick = now;\n\t\t\t}\n\t\t}, 1000);\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst displayName = String(item?.client || item?.contact || '').trim();\n\t\t\t\tif (phone10 && displayName) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = displayName;\n\t\t\t\t\tthis.idbPutContact(phone10, displayName).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t\t// Calls table is a separate Vue instance and reads client name via $widgetQueues.\n\t\t\t\t// Vue can't track cross-instance dependency, so force re-render on contact update.\n\t\t\t\tif (window[className].$callsWidget && typeof window[className].$callsWidget.$forceUpdate === 'function') {\n\t\t\t\t\twindow[className].$callsWidget.$forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tlet data = {\n\t\t\t[settingName]: value\n\t\t};\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tif(settingName === 'queueId'){\n\t\t\t\t\t$('#queueId').val($(window[className].queueNameSelector).dropdown('get value'));\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-monitor-active-calls-index.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","return","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_createForOfIteratorHelper","_n","F","s","next","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","idUrl","idForm","className","inputClassName","ModuleMonitorActiveCalls","isInit","contactsCacheTtlMs","queuesFilterSelector","$formObj","$","$checkBoxes","$dropDowns","activeChannelsUrl","globalRootUrl","activeChannelsUrlV2","backendEnableUrl","executeCallUrl","saveUserActionUrl","$widget","undefined","validateRules","initialize","initContactsCache","requestBackendEnable","dropdown","onChange","text","$choice","window","onChangeSetting","val","userNumber","$widgetQueues","Vue","el","delimiters","methods","updatedCallsFromResponse","data","lastActiveCallsPayload","minWaitVisible","queues","allCalls","calls","initQueuesFilter","$nextTick","normalizeAgentCards","self","$filter","currentSelection","selectedQueueIds","find","hide","show","fullTextSearch","selectedIds","split","JSON","stringify","savedQueueIds","raw","parse","refreshFromLastPayload","getQueueCalls","queueId","queue","getQueueAgentsList","agents","buildAgentsList","hasWaitingCalls","dst_chan","queueData","EnterTime","elapsed","formatElapsedTime","agentsObj","entries","available","unavailable","_i","_entries","_entries$_i","number","agent","state","item","concat","normalizePhone10","phone","digits","replace","updateContactFromWs","contact","phone10","client","trim","$set","contactsByPhone10","getClientNameByPhone","getClientHeader","hasClientByPhone","enterTime","nowTick","$el","artifacts","querySelectorAll","remove","ensureAgentCardsGridMasonry","cardsContainers","cardsContainer","style","alignItems","alignContent","cards","card","alignSelf","headers","fontSize","lineHeight","display","gap","whiteSpace","metas","numLabels","paddingTop","paddingBottom","flex","minWidth","maxWidth","overflow","textOverflow","names","requestAnimationFrame","layoutAgentCardsGridMasonry","adjustAgentCardsGap","container","querySelector","tallCard","shortCard","ht","getBoundingClientRect","height","hs","isFinite","Math","max","min","round","setProperty","adjustAgentCardsColumnCount","clientWidth","minCardWidth","cs","getComputedStyle","gapRaw","columnGap","getPropertyValue","gapPx","parseFloat","count","floor","styleId","styleEl","document","getElementById","createElement","id","head","appendChild","textContent","classList","add","_agentCardsResizeBound","addEventListener","grids","grid","layoutSingleGridMasonry","rowHeight","rowGap","items","gridRowEnd","minHeight","tall","short","h","span","ceil","shortHeights","map","tallHeights","g","shortH","tallH","effectiveGap","getSrcNumForAgent","agentNumber","result","answeredFound","_iterator","_step","dst_num","src_num","calledChannels","match","ch","bridgeChannels","err","tmpCall","spyer","spy_num","exten","hasPeerPhone","getPeerPhoneLabel","getPeerNameLabel","applyContactsCacheToQueueWidget","$callsWidget","fullAccess","callIsVisible","getWaitTime","formatTimestampToTime","timestamp","ts","ms","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","answer","now","secondToTime","start","getCallTime","_data$calls","Extensions","updatePhonesRepresent","q","hangupAction","event","target","attr","parent","executeCallAction","action","ch1","ch2","joinAction","whisperAction","spChannel","listenAction","lines","checkbox","initializeForm","tab","startUiTicker","removeClass","startPollingActiveCalls","setTimeout","_uiTicker","setInterval","_activeCallsPollTimer","updateLines","stopPollingActiveCalls","clearInterval","_this","_callee","_t","_context","idbLoadAllContacts","_contactsCacheByPhone10","console","log","_i2","_Object$entries","_Object$entries$_i","idbOpenContactsDb","reject","req","indexedDB","open","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","idbPutContact","_this2","_callee2","_context2","tx","transaction","store","objectStore","put","updatedAt","oncomplete","close","_this3","_callee3","_context3","getAll","ttlMs","_iterator2","_step2","row","isFresh","delete","api","url","on","method","onSuccess","response","_response$data","_response$data2","accessToken","access_token","refreshToken","refresh_token","setAuthTokens","connectContactsWs","connectActiveCallsWs","onFailure","onError","errorMessage","element","xhr","_authTokens","exp","getJwtExp","token","parts","payloadB64","padded","repeat","json","atob","payload","isAccessTokenExpired","_this$_authTokens","skewSeconds","scheduleContactsWsTokenRefresh","_this$_authTokens2","_this4","_contactsWsTokenTimer","clearTimeout","refreshInSec","scheduleContactsWsReconnect","reason","_this5","forceReAuth","_contactsWsReconnectTimer","_contactsWsReconnectAttempt","delay","pow","delayMs","_this6","_this$_authTokens3","_contactsWs","readyState","WebSocket","OPEN","CONNECTING","wsProto","location","protocol","wsHost","host","tokenParam","encodeURIComponent","wsUrl","onopen","onmessage","handleContactsWsMessage","onclose","code","authCloseCodes","Set","has","scheduleActiveCallsWsReconnect","_this7","_activeCallsWsReconnectTimer","_activeCallsWsReconnectAttempt","_this8","_this$_authTokens4","_activeCallsWs","handleActiveCallsWsMessage","parsed","_iterator3","_step3","catch","$forceUpdate","_parsed$data","diffSeconds","settingName","successTest","success","href","cbBeforeSendForm","settings","form","cbAfterSendForm","Form","ready"],"sources":["src/module-monitor-active-calls-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-monitor-active-calls';\nconst idForm = 'module-monitor-active-calls-form';\nconst className = 'ModuleMonitorActiveCalls';\nconst inputClassName = 'mikopbx-module-input';\n\n/* global $, globalRootUrl, globalTranslate, Form, Config, Vue, Extensions */\nconst ModuleMonitorActiveCalls = {\n\tisInit: true,\n\tcontactsCacheTtlMs: 120 * 60 * 1000,\n\tqueuesFilterSelector: '#queuesFilter',\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tactiveChannelsUrl: globalRootUrl + idUrl + \"/getActiveChannels\",\n\tactiveChannelsUrlV2: globalRootUrl + idUrl + \"/getActiveChannelsV2\",\n\tbackendEnableUrl: globalRootUrl + idUrl + \"/backandEnable\",\n\texecuteCallUrl: globalRootUrl + idUrl + \"/executeCall\",\n\tsaveUserActionUrl: globalRootUrl + idUrl + \"/saveUser\",\n\t$widget: undefined,\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {},\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tthis.initContactsCache();\n\t\tthis.requestBackendEnable();\n\n\t\t$(\"#nowUser.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\twindow[className].onChangeSetting('adminUserId', value);\n\t\t\t}\n\t\t});\n\t\t$(\"#minWaitVisible.dropdown.enable\").dropdown({\n\t\t\tonChange: function onChange(value, text, $choice) {\n\t\t\t\t$('#minWaitVisibleValue').val(value);\n\t\t\t\twindow[className].onChangeSetting('minWaitVisible', value);\n\t\t\t}\n\t\t});\n\t\tlet userNumber = $('#userNumber').val();\n\n\t\twindow[className].$widgetQueues = new Vue({\n\t\t\tel: '#app-queue',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\t// Keep last payload to allow re-render on queue switch (WS mode).\n\t\t\t\t\tthis.lastActiveCallsPayload = data;\n\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\tthis.queues = data.queues || {};\n\t\t\t\t\tthis.allCalls = data.calls || [];\n\n\t\t\t\t\t// Initialize multi-select dropdown if not yet done\n\t\t\t\t\tthis.initQueuesFilter();\n\n\t\t\t\t\t// Normalize Semantic UI Card typography after render\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\tthis.normalizeAgentCards();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tinitQueuesFilter() {\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tvar $filter = $(window[className].queuesFilterSelector);\n\t\t\t\t\tif ($filter.length === 0) return;\n\n\t\t\t\t\t// Wait for Vue to render menu items\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\t// Reinitialize dropdown to pick up new menu items\n\t\t\t\t\t\tif ($filter.data('initialized')) {\n\t\t\t\t\t\t\t// Dropdown already exists, just refresh menu\n\t\t\t\t\t\t\t// Save current selection before refresh to prevent reset\n\t\t\t\t\t\t\tvar currentSelection = self.selectedQueueIds ? self.selectedQueueIds.slice() : [];\n\t\t\t\t\t\t\t$filter.data('refreshing', true);\n\t\t\t\t\t\t\t$filter.dropdown('refresh');\n\t\t\t\t\t\t\t$filter.data('refreshing', false);\n\n\t\t\t\t\t\t\t// Restore selection after refresh if it was cleared\n\t\t\t\t\t\t\tif (currentSelection.length > 0 && (!self.selectedQueueIds || self.selectedQueueIds.length === 0)) {\n\t\t\t\t\t\t\t\tself.selectedQueueIds = currentSelection;\n\t\t\t\t\t\t\t\t$filter.dropdown('set exactly', currentSelection);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// After refresh, ensure default text is hidden if we have selections\n\t\t\t\t\t\t\tif (self.selectedQueueIds && self.selectedQueueIds.length > 0) {\n\t\t\t\t\t\t\t\t$filter.find('.default.text').hide();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$filter.find('.default.text').show();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// First time initialization\n\t\t\t\t\t\t\t$filter.data('initialized', true);\n\t\t\t\t\t\t\t$filter.dropdown({\n\t\t\t\t\t\t\t\tfullTextSearch: true,\n\t\t\t\t\t\t\t\tonChange: function(value) {\n\t\t\t\t\t\t\t\t\t// Skip onChange during programmatic refresh\n\t\t\t\t\t\t\t\t\tif ($filter.data('refreshing')) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// value is comma-separated string of selected queue IDs\n\t\t\t\t\t\t\t\t\tvar selectedIds = value ? value.split(',').filter(function(v) { return v !== ''; }) : [];\n\t\t\t\t\t\t\t\t\tself.selectedQueueIds = selectedIds;\n\t\t\t\t\t\t\t\t\t// Auto-save on change\n\t\t\t\t\t\t\t\t\twindow[className].onChangeSetting('queueIds', JSON.stringify(selectedIds));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Set initial values from hidden input\n\t\t\t\t\t\t\tvar savedQueueIds = [];\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tvar raw = $('#queueIds').val();\n\t\t\t\t\t\t\t\tsavedQueueIds = JSON.parse(raw || '[]');\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tsavedQueueIds = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (Array.isArray(savedQueueIds) && savedQueueIds.length > 0) {\n\t\t\t\t\t\t\t\twindow[className].isInit = true;\n\t\t\t\t\t\t\t\t$filter.dropdown('set exactly', savedQueueIds);\n\t\t\t\t\t\t\t\tself.selectedQueueIds = savedQueueIds;\n\t\t\t\t\t\t\t\twindow[className].isInit = false;\n\t\t\t\t\t\t\t\t// Hide default text when values are selected\n\t\t\t\t\t\t\t\t$filter.find('.default.text').hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\trefreshFromLastPayload() {\n\t\t\t\t\tif (this.lastActiveCallsPayload) {\n\t\t\t\t\t\tthis.updatedCallsFromResponse(this.lastActiveCallsPayload);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetQueueCalls(queueId) {\n\t\t\t\t\tvar queue = this.queues[queueId];\n\t\t\t\t\tif (!queue) return [];\n\t\t\t\t\treturn Array.isArray(queue.calls) ? queue.calls : [];\n\t\t\t\t},\n\t\t\t\tgetQueueAgentsList(queueId) {\n\t\t\t\t\tvar queue = this.queues[queueId];\n\t\t\t\t\tif (!queue || !queue.agents) return [];\n\t\t\t\t\treturn this.buildAgentsList(queue.agents);\n\t\t\t\t},\n\t\t\t\thasWaitingCalls(queueId) {\n\t\t\t\t\tvar calls = this.getQueueCalls(queueId);\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tfor (var i = 0; i < calls.length; i++) {\n\t\t\t\t\t\tvar call = calls[i];\n\t\t\t\t\t\tif (call.dst_chan === '' && call.queueData && call.queueData.EnterTime !== undefined) {\n\t\t\t\t\t\t\tvar elapsed = self.formatElapsedTime(call.queueData.EnterTime);\n\t\t\t\t\t\t\tif (self.minWaitVisible <= elapsed) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tbuildAgentsList(agentsObj) {\n\t\t\t\t\tconst entries = Object.entries(agentsObj || {});\n\t\t\t\t\tconst available = [];\n\t\t\t\t\tconst unavailable = [];\n\t\t\t\t\tfor (const [number, agent] of entries) {\n\t\t\t\t\t\tconst state = agent?.state || '';\n\t\t\t\t\t\tconst item = { number, ...agent };\n\t\t\t\t\t\tif (state === 'Unavailable') {\n\t\t\t\t\t\t\tunavailable.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavailable.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn available.concat(unavailable);\n\t\t\t\t},\n\t\t\t\tnormalizePhone10(phone) {\n\t\t\t\t\tconst digits = String(phone || '').replace(/\\D+/g, '');\n\t\t\t\t\tif (digits.length <= 10) return digits;\n\t\t\t\t\treturn digits.slice(-10);\n\t\t\t\t},\n\t\t\t\tupdateContactFromWs(contact) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(contact?.number);\n\t\t\t\t\tif (!phone10) return;\n\t\t\t\t\tconst displayName = String(contact?.client || contact?.contact || '').trim();\n\t\t\t\t\tif (!displayName) return;\n\t\t\t\t\t// Vue2: ensure reactivity for new keys\n\t\t\t\t\tif (this.$set) {\n\t\t\t\t\t\tthis.$set(this.contactsByPhone10, phone10, displayName);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contactsByPhone10[phone10] = displayName;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetClientNameByPhone(phone) {\n\t\t\t\t\tconst phone10 = this.normalizePhone10(phone);\n\t\t\t\t\treturn this.contactsByPhone10[phone10] || '';\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\tif (!client) return phone;\n\t\t\t\t\treturn `${client} <${phone}>`;\n\t\t\t\t},\n\t\t\t\thasClientByPhone(phone) {\n\t\t\t\t\treturn !!this.getClientNameByPhone(phone);\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\t// Make this method reactive to the UI ticker.\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tnormalizeAgentCards() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t// Cleanup artifacts from previous experiments (placeholders/spacers).\n\t\t\t\t\tvar artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer');\n\t\t\t\t\tartifacts.forEach(function(el) { el.remove(); });\n\n\t\t\t\t\t// Dense layout (masonry) that still fills left-to-right:\n\t\t\t\t\t// flex-wrap can't place items into vertical gaps under tall cards.\n\t\t\t\t\tthis.ensureAgentCardsGridMasonry();\n\n\t\t\t\t\t// Process all agent card containers (one per queue block)\n\t\t\t\t\tvar cardsContainers = this.$el.querySelectorAll('.ui.cards.agent-cards');\n\t\t\t\t\tcardsContainers.forEach(function(cardsContainer) {\n\t\t\t\t\t\tcardsContainer.style.alignItems = 'flex-start';\n\t\t\t\t\t\tcardsContainer.style.alignContent = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\tvar cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card');\n\t\t\t\t\tcards.forEach(function(card) {\n\t\t\t\t\t\tcard.style.alignSelf = 'flex-start';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Semantic UI makes .header bigger than normal text; we need same font size.\n\t\t\t\t\tvar headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header');\n\t\t\t\t\theaders.forEach(function(el) {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.gap = '0.5em';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\tvar metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer');\n\t\t\t\t\tmetas.forEach(function(el) {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Normalize label/name typography so they have same text height.\n\t\t\t\t\tvar numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label');\n\t\t\t\t\tnumLabels.forEach(function(el) {\n\t\t\t\t\t\tel.style.fontSize = '1em';\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\tel.style.display = 'inline-flex';\n\t\t\t\t\t\tel.style.alignItems = 'center';\n\t\t\t\t\t\tel.style.paddingTop = '0';\n\t\t\t\t\t\tel.style.paddingBottom = '0';\n\t\t\t\t\t\t// Allow label to shrink (otherwise long numbers force card wider than 180px)\n\t\t\t\t\t\tel.style.flex = '0 1 auto';\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.maxWidth = '14ch';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\t\t\t\t\tvar names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name');\n\t\t\t\t\tnames.forEach(function(el) {\n\t\t\t\t\t\tel.style.lineHeight = '1.2';\n\t\t\t\t\t\t// Ellipsis for long names (e.g. \"Салтыков-Щедрин\")\n\t\t\t\t\t\tel.style.minWidth = '0';\n\t\t\t\t\t\tel.style.flex = '1 1 auto';\n\t\t\t\t\t\tel.style.overflow = 'hidden';\n\t\t\t\t\t\tel.style.textOverflow = 'ellipsis';\n\t\t\t\t\t\tel.style.whiteSpace = 'nowrap';\n\t\t\t\t\t});\n\n\t\t\t\t\t// Grid masonry needs row-span calculation after layout.\n\t\t\t\t\trequestAnimationFrame(function() {\n\t\t\t\t\t\trequestAnimationFrame(function() {\n\t\t\t\t\t\t\tself.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsGap() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst cards = Array.from(container.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!cards.length) return;\n\n\t\t\t\t\tconst tallCard = cards.find((c) => c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tconst shortCard = cards.find((c) => !c.querySelector('.meta.agent-peer'));\n\t\t\t\t\tif (!tallCard || !shortCard) return;\n\n\t\t\t\t\tconst ht = tallCard.getBoundingClientRect().height;\n\t\t\t\t\tconst hs = shortCard.getBoundingClientRect().height;\n\t\t\t\t\tif (!ht || !hs) return;\n\n\t\t\t\t\t// From 2*(hs+g) = ht+g => g = ht - 2*hs\n\t\t\t\t\tlet gap = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(gap)) return;\n\n\t\t\t\t\t// Clamp to sane range; negative means \"no extra gap needed\".\n\t\t\t\t\tgap = Math.max(0, Math.min(20, Math.round(gap)));\n\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-gap', `${gap}px`);\n\t\t\t\t},\n\t\t\t\tadjustAgentCardsColumnCount() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tconst container = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-masonry');\n\t\t\t\t\tif (!container) return;\n\n\t\t\t\t\tconst w = container.clientWidth;\n\t\t\t\t\tif (!w) return;\n\n\t\t\t\t\t// Minimum acceptable card width in px (tune if needed)\n\t\t\t\t\tconst minCardWidth = 150;\n\n\t\t\t\t\tconst cs = window.getComputedStyle(container);\n\t\t\t\t\tconst gapRaw = cs.columnGap || cs.getPropertyValue('column-gap') || '16px';\n\t\t\t\t\tconst gapPx = parseFloat(gapRaw) || 16;\n\n\t\t\t\t\tconst count = Math.max(1, Math.min(12, Math.floor((w + gapPx) / (minCardWidth + gapPx))));\n\t\t\t\t\tcontainer.style.setProperty('--agent-card-col-count', String(count));\n\t\t\t\t},\n\t\t\t\tensureAgentCardsGridMasonry() {\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tvar styleId = 'agent-cards-layout-style';\n\t\t\t\t\tvar styleEl = document.getElementById(styleId);\n\t\t\t\t\tif (!styleEl) {\n\t\t\t\t\t\tstyleEl = document.createElement('style');\n\t\t\t\t\t\tstyleEl.id = styleId;\n\t\t\t\t\t\tdocument.head.appendChild(styleEl);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Grid masonry: fills left-to-right and can pack items into gaps.\n\t\t\t\t\t// minmax(240px, 1fr) - карточки минимум 240px, растягиваются равномерно\n\t\t\t\t\tstyleEl.textContent = '\\\n.ui.cards.agent-cards.agent-cards-grid {\\\n display: grid !important;\\\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\\\n justify-content: start;\\\n gap: var(--agent-card-gap, 8px);\\\n grid-auto-rows: 1px;\\\n margin-bottom: 1em !important;\\\n}\\\n.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\\\n width: 100% !important;\\\n min-width: 0;\\\n margin: 0 !important;\\\n overflow: hidden;\\\n align-self: start;\\\n}';\n\n\t\t\t\t\t// Process all agent card containers (one per queue block)\n\t\t\t\t\tvar cardsContainers = this.$el ? this.$el.querySelectorAll('.ui.cards.agent-cards') : [];\n\t\t\t\t\tcardsContainers.forEach(function(cardsContainer) {\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-masonry');\n\t\t\t\t\t\tcardsContainer.classList.remove('agent-cards-flex');\n\t\t\t\t\t\tcardsContainer.classList.add('agent-cards-grid');\n\t\t\t\t\t});\n\n\t\t\t\t\t// Bind once: relayout on resize.\n\t\t\t\t\tif (!this._agentCardsResizeBound) {\n\t\t\t\t\t\tthis._agentCardsResizeBound = true;\n\t\t\t\t\t\twindow.addEventListener('resize', function() {\n\t\t\t\t\t\t\tself.layoutAgentCardsGridMasonry();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlayoutAgentCardsGridMasonry() {\n\t\t\t\t\tif (!this.$el) return;\n\t\t\t\t\tvar self = this;\n\n\t\t\t\t\t// Process all grid containers (one per queue block)\n\t\t\t\t\tvar grids = this.$el.querySelectorAll('.ui.cards.agent-cards.agent-cards-grid');\n\t\t\t\t\tgrids.forEach(function(grid) {\n\t\t\t\t\t\tself.layoutSingleGridMasonry(grid);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tlayoutSingleGridMasonry(grid) {\n\t\t\t\t\tif (!grid) return;\n\n\t\t\t\t\tvar cs = window.getComputedStyle(grid);\n\t\t\t\t\tvar rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1;\n\t\t\t\t\tvar rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8;\n\n\t\t\t\t\tvar items = Array.from(grid.querySelectorAll('.ui.card.agent-card'));\n\t\t\t\t\tif (!items.length) return;\n\n\t\t\t\t\t// Reset row spans and min-heights to measure natural heights.\n\t\t\t\t\titems.forEach(function(item) {\n\t\t\t\t\t\titem.style.gridRowEnd = '';\n\t\t\t\t\t\titem.style.minHeight = '';\n\t\t\t\t\t});\n\n\t\t\t\t\tvar tall = items.filter(function(c) { return c.querySelector('.meta.agent-peer'); });\n\t\t\t\t\tvar short = items.filter(function(c) { return !c.querySelector('.meta.agent-peer'); });\n\n\t\t\t\t\t// If we don't have both types, just do normal masonry spans.\n\t\t\t\t\tif (!tall.length || !short.length) {\n\t\t\t\t\t\titems.forEach(function(item) {\n\t\t\t\t\t\t\tvar h = item.getBoundingClientRect().height;\n\t\t\t\t\t\t\tvar span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap)));\n\t\t\t\t\t\t\titem.style.gridRowEnd = 'span ' + span;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar shortHeights = short.map(function(c) { return c.getBoundingClientRect().height; });\n\t\t\t\t\tvar tallHeights = tall.map(function(c) { return c.getBoundingClientRect().height; });\n\t\t\t\t\tvar hs = Math.max.apply(Math, shortHeights);\n\t\t\t\t\tvar ht = Math.max.apply(Math, tallHeights);\n\n\t\t\t\t\t// Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs\n\t\t\t\t\tvar g = ht - 2 * hs;\n\t\t\t\t\tif (!Number.isFinite(g)) g = rowGap;\n\t\t\t\t\tg = Math.max(0, Math.min(24, Math.round(g)));\n\n\t\t\t\t\t// Apply gap and enforce min-heights so the relation holds visually.\n\t\t\t\t\tgrid.style.setProperty('--agent-card-gap', g + 'px');\n\n\t\t\t\t\tvar shortH = Math.round(hs);\n\t\t\t\t\tvar tallH = Math.round(Math.max(ht, 2 * hs + g));\n\t\t\t\t\tshort.forEach(function(c) { c.style.minHeight = shortH + 'px'; });\n\t\t\t\t\ttall.forEach(function(c) { c.style.minHeight = tallH + 'px'; });\n\n\t\t\t\t\t// Now compute row spans from final rendered heights.\n\t\t\t\t\tvar effectiveGap = g;\n\t\t\t\t\titems.forEach(function(item) {\n\t\t\t\t\t\tvar h = item.getBoundingClientRect().height;\n\t\t\t\t\t\tvar span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap)));\n\t\t\t\t\t\titem.style.gridRowEnd = 'span ' + span;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetSrcNumForAgent(agentNumber) {\n\t\t\t\t\tlet result = '-';\n\t\t\t\t\tlet answeredFound = false;\n\t\t\t\t\tfor (const call of this.allCalls) {\n\t\t\t\t\t\tif(call.dst_num === agentNumber){\n\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.calledChannels && Array.isArray(call.calledChannels)) {\n\t\t\t\t\t\t\tconst match = call.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tresult = call.src_num;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (call.bridgeChannels && Array.isArray(call.bridgeChannels)) {\n\t\t\t\t\t\t\tconst match = call.bridgeChannels.find(ch => (ch.src_num === agentNumber || ch.dst_num === agentNumber));\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tif(match.src_num === agentNumber){\n\t\t\t\t\t\t\t\t\tresult = match.dst_num;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = match.src_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tansweredFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(answeredFound === false){\n\t\t\t\t\t\tfor (let i = 0; i < this.allCalls.length; i++) {\n\t\t\t\t\t\t\tconst tmpCall = this.allCalls[i];\n\t\t\t\t\t\t\tif(tmpCall.src_num === agentNumber){\n\t\t\t\t\t\t\t\t// Исходящий\n\t\t\t\t\t\t\t\tif(tmpCall.dst_num === ''){\n\t\t\t\t\t\t\t\t\t// не ответа, дозвон.\n\t\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels) && tmpCall.calledChannels.length) {\n\t\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number !== agentNumber);\n\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\tresult = match.number;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}else if(tmpCall.spyer){\n\t\t\t\t\t\t\t\t\t\t// шпионит за номером.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.spy_num;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t// нет вызываемых каналов, возможно это вызов на приложение / ivr.\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.exten;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tresult = tmpCall.dst_num;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else if(tmpCall.dst_num === agentNumber){\n\t\t\t\t\t\t\t\t// Входящий на агента, отвечен.\n\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tif (tmpCall.calledChannels && Array.isArray(tmpCall.calledChannels)) {\n\t\t\t\t\t\t\t\t\tconst match = tmpCall.calledChannels.find(ch => ch.number === agentNumber);\n\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\tresult = tmpCall.src_num;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\thasPeerPhone(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn phone !== '' && phone !== '-' && phone !== '—';\n\t\t\t\t},\n\t\t\t\tgetPeerPhoneLabel(agentNumber) {\n\t\t\t\t\tconst phone = String(this.getSrcNumForAgent(agentNumber) || '').trim();\n\t\t\t\t\treturn this.hasPeerPhone(agentNumber) ? phone : '—';\n\t\t\t\t},\n\t\t\t\tgetPeerNameLabel(agentNumber) {\n\t\t\t\t\t// Use cached contacts (WS + IndexedDB) to show client name for peer phone.\n\t\t\t\t\tconst phone = this.getPeerPhoneLabel(agentNumber);\n\t\t\t\t\tconst client = this.getClientNameByPhone(phone);\n\t\t\t\t\treturn client || '—';\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\t\"queues\": {},\n\t\t\t\t\"allCalls\": [],\n\t\t\t\t\"selectedQueueIds\": [],\n\t\t\t\t\"lastActiveCallsPayload\": null,\n\t\t\t\t\"contactsByPhone10\": {}\n\t\t\t},\n\t\t});\n\t\twindow[className].applyContactsCacheToQueueWidget();\n\n\t\twindow[className].$callsWidget = new Vue({\n\t\t\tel: '#calls',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\t\"minWaitVisible\": 30,\n\t\t\t\t\"nowTick\": 0,\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tcallIsVisible(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.dst_chan==='' && call.queueData.EnterTime !== undefined ){\n\t\t\t\t\t\treturn this.minWaitVisible <= this.getWaitTime(call);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tformatTimestampToTime(timestamp) {\n\t\t\t\t\t// Если timestamp строка — приводим к числу\n\t\t\t\t\tconst ts = typeof timestamp === 'string' ? parseFloat(timestamp) : timestamp;\n\n\t\t\t\t\t// Если timestamp в секундах (меньше 1e10), умножаем на 1000\n\t\t\t\t\tconst ms = ts < 1e10 ? ts * 1000 : ts;\n\n\t\t\t\t\tconst date = new Date(ms);\n\n\t\t\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\t\t\tconst seconds = String(date.getSeconds()).padStart(2, '0');\n\n\t\t\t\t\treturn `${hours}:${minutes}:${seconds}`;\n\t\t\t\t},\n\t\t\t\tgetWaitTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tlet answer = Math.floor(Date.now() / 1000);\n\t\t\t\t\tif(call.answer !== ''){\n\t\t\t\t\t\tanswer = call.answer\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].secondToTime(answer - call.start);\n\t\t\t\t},\n\t\t\t\tgetCallTime(call){\n\t\t\t\t\tvoid this.nowTick;\n\t\t\t\t\tif(call.answer === ''){\n\t\t\t\t\t\treturn '-';\n\t\t\t\t\t}\n\t\t\t\t\treturn window[className].formatElapsedTime(call.answer);\n\t\t\t\t},\n\t\t\t\tupdatedCallsFromResponse(data) {\n\t\t\t\t\tthis.minWaitVisible = 1*$('#minWaitVisibleValue').val();\n\t\t\t\t\t// Проходим по всем очередям\n\t\t\t\t\tfor (const queueId in data.queues) {\n\t\t\t\t\t\tconst queue = data.queues[queueId];\n\t\t\t\t\t\t// Проверяем, есть ли у очереди поле calls и является ли оно массивом\n\t\t\t\t\t\tif (Array.isArray(queue.calls)) {\n\t\t\t\t\t\t\t// Добавляем все вызовы из этой очереди в общий массив\n\t\t\t\t\t\t\tdata.calls.push(...queue.calls);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calls = data.calls;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tformatElapsedTime(enterTime) {\n\t\t\t\t\treturn window[className].formatElapsedTime(enterTime);\n\t\t\t\t},\n\t\t\t\tgetClientHeader(phone) {\n\t\t\t\t\tconst q = window[className].$widgetQueues;\n\t\t\t\t\tif (q && typeof q.getClientHeader === 'function') {\n\t\t\t\t\t\treturn q.getClientHeader(phone);\n\t\t\t\t\t}\n\t\t\t\t\treturn phone;\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\twindow[className].$widget = new Vue({\n\t\t\tel: '#app',\n\t\t\tdelimiters: [\"<%\",\"%>\"],\n\t\t\tdata: {\n\t\t\t\tuserNumber: userNumber,\n\t\t\t\tfullAccess: ($('#fullAccess').val() === \"1\" || userNumber === ''),\n\t\t\t\tcalls: [\n\t\t\t\t]\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tupdatedCallsFromResponse(lines) {\n\t\t\t\t\tthis.calls = lines;\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\thangupAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'hangup', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2')});\n\t\t\t\t},\n\t\t\t\tjoinAction(event) {\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'join', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t},\n\t\t\t\twhisperAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet spChannel = target.attr('data-ch1');\n\t\t\t\t\tif('incoming' === target.attr('data-call-type')){\n\t\t\t\t\t\tspChannel = target.attr('data-ch2');\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'whisper', ch1: spChannel, ch2: '', number: this.userNumber});\n\t\t\t\t},\n\t\t\t\tlistenAction(event){\n\t\t\t\t\tlet target = $(event.target);\n\t\t\t\t\tif(target.attr('data-ch1') === undefined){\n\t\t\t\t\t\ttarget = $(event.target).parent();\n\t\t\t\t\t}\n\t\t\t\t\tif(this.userNumber === ''){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\twindow[className].executeCallAction({action: 'listen', ch1: target.attr('data-ch1'), ch2: target.attr('data-ch2'), number: this.userNumber});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\twindow[className].$checkBoxes.checkbox();\n\t\twindow[className].$dropDowns.dropdown();\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\t\twindow[className].startUiTicker();\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tthis.startPollingActiveCalls();\n\n\t\t// Allow settings to be saved after initialization\n\t\tsetTimeout(function() {\n\t\t\twindow[className].isInit = false;\n\t\t}, 1000);\n\t},\n\tstartUiTicker() {\n\t\tif (this._uiTicker) return;\n\t\tthis._uiTicker = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\twindow[className].$widgetQueues.nowTick = now;\n\t\t\t}\n\t\t\tif (window[className].$callsWidget) {\n\t\t\t\twindow[className].$callsWidget.nowTick = now;\n\t\t\t}\n\t\t}, 1000);\n\t},\n\tstartPollingActiveCalls() {\n\t\tif (this._activeCallsPollTimer) return;\n\t\twindow[className].updateLines();\n\t\tthis._activeCallsPollTimer = setInterval(window[className].updateLines, 2000);\n\t},\n\tstopPollingActiveCalls() {\n\t\tif (!this._activeCallsPollTimer) return;\n\t\tclearInterval(this._activeCallsPollTimer);\n\t\tthis._activeCallsPollTimer = null;\n\t},\n\tasync initContactsCache() {\n\t\ttry {\n\t\t\tthis._contactsCacheByPhone10 = await this.idbLoadAllContacts();\n\t\t\tthis.applyContactsCacheToQueueWidget();\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts cache init error', e);\n\t\t\tthis._contactsCacheByPhone10 = {};\n\t\t}\n\t},\n\tapplyContactsCacheToQueueWidget() {\n\t\tif (!this._contactsCacheByPhone10) return;\n\t\tif (!window[className].$widgetQueues) return;\n\t\tfor (const [phone10, client] of Object.entries(this._contactsCacheByPhone10)) {\n\t\t\tif (window[className].$widgetQueues.$set) {\n\t\t\t\twindow[className].$widgetQueues.$set(window[className].$widgetQueues.contactsByPhone10, phone10, client);\n\t\t\t} else {\n\t\t\t\twindow[className].$widgetQueues.contactsByPhone10[phone10] = client;\n\t\t\t}\n\t\t}\n\t},\n\tidbOpenContactsDb() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst req = indexedDB.open('ModuleMonitorActiveCalls', 1);\n\t\t\t\treq.onupgradeneeded = () => {\n\t\t\t\t\tconst db = req.result;\n\t\t\t\t\tif (!db.objectStoreNames.contains('contactsByPhone10')) {\n\t\t\t\t\t\tdb.createObjectStore('contactsByPhone10', { keyPath: 'phone10' });\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treq.onsuccess = () => resolve(req.result);\n\t\t\t\treq.onerror = () => reject(req.error);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t},\n\tasync idbPutContact(phone10, client) {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tstore.put({ phone10, client, updatedAt: Date.now() });\n\t\t\ttx.oncomplete = () => { db.close(); resolve(); };\n\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t});\n\t},\n\tasync idbLoadAllContacts() {\n\t\tconst db = await this.idbOpenContactsDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction('contactsByPhone10', 'readwrite');\n\t\t\tconst store = tx.objectStore('contactsByPhone10');\n\t\t\tconst req = store.getAll();\n\t\t\treq.onsuccess = () => {\n\t\t\t\tconst map = {};\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst ttlMs = Number(this.contactsCacheTtlMs) || (120 * 60 * 1000);\n\t\t\t\tfor (const row of req.result || []) {\n\t\t\t\t\tconst phone10 = row?.phone10;\n\t\t\t\t\tconst client = row?.client;\n\t\t\t\t\tconst updatedAt = Number(row?.updatedAt) || 0;\n\t\t\t\t\tconst isFresh = phone10 && client && updatedAt > 0 && (now - updatedAt) <= ttlMs;\n\t\t\t\t\tif (isFresh) {\n\t\t\t\t\t\tmap[phone10] = client;\n\t\t\t\t\t} else if (phone10) {\n\t\t\t\t\t\t// Cleanup expired/broken records\n\t\t\t\t\t\ttry { store.delete(phone10); } catch (e) { /* ignore */ }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = () => { db.close(); resolve(map); };\n\t\t\t\ttx.onerror = () => { const err = tx.error; db.close(); reject(err); };\n\t\t\t};\n\t\t\treq.onerror = () => { const err = req.error; db.close(); reject(err); };\n\t\t});\n\t},\n\trequestBackendEnable() {\n\t\t$.api({\n\t\t\turl: window[className].backendEnableUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log('backandEnable response', response);\n\t\t\t\tconst accessToken = response?.data?.access_token;\n\t\t\t\tconst refreshToken = response?.data?.refresh_token;\n\t\t\t\tif (accessToken && refreshToken) {\n\t\t\t\t\twindow[className].setAuthTokens(accessToken, refreshToken);\n\t\t\t\t\twindow[className].connectContactsWs();\n\t\t\t\t\twindow[className].connectActiveCallsWs();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log('backandEnable failure', response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log('backandEnable error', errorMessage, xhr);\n\t\t\t}\n\t\t});\n\t},\n\tsetAuthTokens(accessToken, refreshToken) {\n\t\tthis._authTokens = this._authTokens || {};\n\t\tthis._authTokens.access_token = accessToken;\n\t\tthis._authTokens.refresh_token = refreshToken;\n\t\tthis._authTokens.exp = this.getJwtExp(accessToken);\n\t},\n\tgetJwtExp(token) {\n\t\ttry {\n\t\t\tif (!token || typeof token !== 'string') return 0;\n\t\t\tconst parts = token.split('.');\n\t\t\tif (parts.length < 2) return 0;\n\t\t\tconst payloadB64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n\t\t\tconst padded = payloadB64 + '='.repeat((4 - (payloadB64.length % 4)) % 4);\n\t\t\tconst json = atob(padded);\n\t\t\tconst payload = JSON.parse(json);\n\t\t\treturn Number(payload?.exp) || 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t},\n\tisAccessTokenExpired(skewSeconds = 0) {\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return false; // unknown exp -> don't force refresh\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn now + skewSeconds >= exp;\n\t},\n\tscheduleContactsWsTokenRefresh() {\n\t\t// Proactively refresh token shortly before expiry by re-requesting backendEnable.\n\t\tif (this._contactsWsTokenTimer) {\n\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\tthis._contactsWsTokenTimer = null;\n\t\t}\n\t\tconst exp = Number(this._authTokens?.exp) || 0;\n\t\tif (!exp) return;\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst refreshInSec = Math.max(1, exp - now - 15); // 15s before exp\n\t\tthis._contactsWsTokenTimer = setTimeout(() => {\n\t\t\t// Re-get tokens and reconnect WS\n\t\t\tthis.requestBackendEnable();\n\t\t}, refreshInSec * 1000);\n\t},\n\tscheduleContactsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._contactsWsReconnectTimer) {\n\t\t\tclearTimeout(this._contactsWsReconnectTimer);\n\t\t\tthis._contactsWsReconnectTimer = null;\n\t\t}\n\t\tthis._contactsWsReconnectAttempt = (this._contactsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._contactsWsReconnectAttempt - 1)));\n\t\tthis._contactsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectContactsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('contacts ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectContactsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._contactsWs && (this._contactsWs.readyState === WebSocket.OPEN || this._contactsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._contactsWsReconnectAttempt = 0;\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/contacts?authorization=${tokenParam}`;\n\n\t\t\tthis._contactsWs = new WebSocket(wsUrl);\n\t\t\tthis._contactsWs.onopen = () => {\n\t\t\t\tconsole.log('contacts ws connected');\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._contactsWs.onmessage = (event) => {\n\t\t\t\tthis.handleContactsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._contactsWs.onerror = (event) => {\n\t\t\t\tconsole.log('contacts ws error', event);\n\t\t\t};\n\t\t\tthis._contactsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('contacts ws closed', { code, reason });\n\n\t\t\t\tif (this._contactsWsTokenTimer) {\n\t\t\t\t\tclearTimeout(this._contactsWsTokenTimer);\n\t\t\t\t\tthis._contactsWsTokenTimer = null;\n\t\t\t\t}\n\n\t\t\t\t// 1000 = normal close -> reconnect; auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleContactsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws init error', e);\n\t\t\tthis.scheduleContactsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\tscheduleActiveCallsWsReconnect(reason, forceReAuth = false) {\n\t\tif (this._activeCallsWsReconnectTimer) {\n\t\t\tclearTimeout(this._activeCallsWsReconnectTimer);\n\t\t\tthis._activeCallsWsReconnectTimer = null;\n\t\t}\n\t\tthis._activeCallsWsReconnectAttempt = (this._activeCallsWsReconnectAttempt || 0) + 1;\n\t\tconst delay = Math.min(30000, 1000 * Math.pow(2, Math.min(5, this._activeCallsWsReconnectAttempt - 1)));\n\t\tthis._activeCallsWsReconnectTimer = setTimeout(() => {\n\t\t\tif (forceReAuth || this.isAccessTokenExpired(5)) {\n\t\t\t\tthis.requestBackendEnable();\n\t\t\t} else {\n\t\t\t\tthis.connectActiveCallsWs();\n\t\t\t}\n\t\t}, delay);\n\t\tconsole.log('active-calls ws reconnect scheduled', { reason, delayMs: delay });\n\t},\n\tconnectActiveCallsWs() {\n\t\ttry {\n\t\t\tconst accessToken = this._authTokens?.access_token;\n\t\t\tif (!accessToken) return;\n\n\t\t\t// Avoid reconnecting if already connected/connecting\n\t\t\tif (this._activeCallsWs && (this._activeCallsWs.readyState === WebSocket.OPEN || this._activeCallsWs.readyState === WebSocket.CONNECTING)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Reset backoff on explicit connect attempt\n\t\t\tthis._activeCallsWsReconnectAttempt = 0;\n\n\t\t\t// Token exists -> use WS, disable polling fallback\n\t\t\tthis.stopPollingActiveCalls();\n\n\t\t\tconst wsProto = window.location.protocol === 'https:' ? 'wss' : 'ws';\n\t\t\tconst wsHost = window.location.host; // host:port of current page\n\t\t\tconst tokenParam = encodeURIComponent(accessToken);\n\t\t\tconst wsUrl = `${wsProto}://${wsHost}/pbxcore/api/module-softphone-backend/v1/sub/active-calls?authorization=${tokenParam}`;\n\n\t\t\tthis._activeCallsWs = new WebSocket(wsUrl);\n\t\t\tthis._activeCallsWs.onopen = () => {\n\t\t\t\tconsole.log('active-calls ws connected');\n\t\t\t\t// Reuse the same token refresh timer (it triggers requestBackendEnable)\n\t\t\t\tthis.scheduleContactsWsTokenRefresh();\n\t\t\t};\n\t\t\tthis._activeCallsWs.onmessage = (event) => {\n\t\t\t\tthis.handleActiveCallsWsMessage(event?.data);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onerror = (event) => {\n\t\t\t\tconsole.log('active-calls ws error', event);\n\t\t\t};\n\t\t\tthis._activeCallsWs.onclose = (event) => {\n\t\t\t\tconst code = event?.code;\n\t\t\t\tconst reason = event?.reason;\n\t\t\t\tconsole.log('active-calls ws closed', { code, reason });\n\n\t\t\t\t// Auth closes vary by server implementation.\n\t\t\t\tconst authCloseCodes = new Set([1008, 4001, 4401, 4403]);\n\t\t\t\tconst forceReAuth = authCloseCodes.has(code) || this.isAccessTokenExpired(0);\n\t\t\t\tthis.scheduleActiveCallsWsReconnect('close', forceReAuth);\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws init error', e);\n\t\t\tthis.scheduleActiveCallsWsReconnect('init_error', this.isAccessTokenExpired(0));\n\t\t}\n\t},\n\thandleContactsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst items = Array.isArray(parsed) ? parsed : [parsed];\n\t\t\tfor (const item of items) {\n\t\t\t\tconst digits = String(item?.number || '').replace(/\\D+/g, '');\n\t\t\t\tconst phone10 = digits.length <= 10 ? digits : digits.slice(-10);\n\t\t\t\tconst displayName = String(item?.client || item?.contact || '').trim();\n\t\t\t\tif (phone10 && displayName) {\n\t\t\t\t\tthis._contactsCacheByPhone10 = this._contactsCacheByPhone10 || {};\n\t\t\t\t\tthis._contactsCacheByPhone10[phone10] = displayName;\n\t\t\t\t\tthis.idbPutContact(phone10, displayName).catch((e) => console.log('contacts cache save error', e));\n\t\t\t\t}\n\t\t\t\tif (window[className].$widgetQueues) {\n\t\t\t\t\twindow[className].$widgetQueues.updateContactFromWs(item);\n\t\t\t\t}\n\t\t\t\t// Calls table is a separate Vue instance and reads client name via $widgetQueues.\n\t\t\t\t// Vue can't track cross-instance dependency, so force re-render on contact update.\n\t\t\t\tif (window[className].$callsWidget && typeof window[className].$callsWidget.$forceUpdate === 'function') {\n\t\t\t\t\twindow[className].$callsWidget.$forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log('contacts ws parse error', e);\n\t\t}\n\t},\n\thandleActiveCallsWsMessage(data) {\n\t\ttry {\n\t\t\tif (!data) return;\n\t\t\tconst parsed = typeof data === 'string' ? JSON.parse(data) : data;\n\t\t\tconst payload = parsed?.queues ? parsed : (parsed?.data?.queues ? parsed.data : null);\n\t\t\tif (!payload) return;\n\t\t\tif (!window[className].$widgetQueues || !window[className].$callsWidget) return;\n\n\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(payload);\n\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(payload);\n\t\t} catch (e) {\n\t\t\tconsole.log('active-calls ws parse error', e);\n\t\t}\n\t},\n\tformatElapsedTime(enterTime) {\n\t\tif (!enterTime) return '—';\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\tconst diffSeconds = now - enterTime;\n\n\t\treturn window[className].secondToTime(diffSeconds);\n\t},\n\tsecondToTime(diffSeconds){\n\t\tif (diffSeconds < 0) return '0';\n\t\t// Форматируем: чч:мм:сс или мм:сс, или просто секунды\n\t\tconst hours = Math.floor(diffSeconds / 3600);\n\t\tconst minutes = Math.floor((diffSeconds % 3600) / 60);\n\t\tconst seconds = Math.round(diffSeconds % 60);\n\t\tif (hours > 0) {\n\t\t\treturn `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else if (minutes > 0) {\n\t\t\treturn `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\t\t} else {\n\t\t\treturn `${seconds}`;\n\t\t}\n\t},\n\tonChangeSetting(settingName, value) {\n\t\tif(window[className].isInit){\n\t\t\treturn;\n\t\t}\n\t\tvar data = {};\n\t\tdata[settingName] = value;\n\t\t$.api({\n\t\t\turl: window[className].saveUserActionUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest: function(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess: function(response) {\n\t\t\t\tif(settingName === 'queueIds'){\n\t\t\t\t\t// Update hidden input and Vue data\n\t\t\t\t\t$('#queueIds').val(value);\n\t\t\t\t\t// Re-render queue widget from last received payload (WS mode)\n\t\t\t\t\tif (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') {\n\t\t\t\t\t\twindow[className].$widgetQueues.refreshFromLastPayload();\n\t\t\t\t\t}\n\t\t\t\t}else if( settingName === 'adminUserId'){\n\t\t\t\t\twindow.location.href = window.location.href;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure: function(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError: function(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\texecuteCallAction(data) {\n\t\t$.api({\n\t\t\turl: window[className].executeCallUrl,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tdata: data,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\tupdateLines() {\n\t\t$.api({\n\t\t\turl: window[className].activeChannelsUrlV2,\n\t\t\ton: 'now',\n\t\t\tmethod: 'POST',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined && Object.keys(response).length > 0 && response.success === true;\n\t\t\t},\n\t\t\tonSuccess(response) {\n\t\t\t\twindow[className].$widgetQueues.updatedCallsFromResponse(response);\n\t\t\t\twindow[className].$callsWidget.updatedCallsFromResponse(response);\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tconsole.log(response);\n\t\t\t},\n\t\t\tonError(errorMessage, element, xhr) {\n\t\t\t\tconsole.log(errorMessage,xhr);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\n\t},\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-monitor-active-calls-index.js b/public/assets/js/src/module-monitor-active-calls-index.js index beef3ea..68d6229 100644 --- a/public/assets/js/src/module-monitor-active-calls-index.js +++ b/public/assets/js/src/module-monitor-active-calls-index.js @@ -14,7 +14,7 @@ const inputClassName = 'mikopbx-module-input'; const ModuleMonitorActiveCalls = { isInit: true, contactsCacheTtlMs: 120 * 60 * 1000, - queueNameSelector: '#app-queue div.scrolling.dropdown', + queuesFilterSelector: '#queuesFilter', $formObj: $('#'+idForm), $checkBoxes: $('#'+idForm+' .ui.checkbox'), $dropDowns: $('#'+idForm+' .ui.dropdown'), @@ -58,46 +58,112 @@ const ModuleMonitorActiveCalls = { // Keep last payload to allow re-render on queue switch (WS mode). this.lastActiveCallsPayload = data; - let queueNameEl = $(window[className].queueNameSelector); this.minWaitVisible = 1*$('#minWaitVisibleValue').val(); + this.queues = data.queues || {}; + this.allCalls = data.calls || []; - this.queues = data.queues; - this.allCalls = data.calls; - let queueId = $('#queueId').val(); - if (queueId in data.queues) { - this.id = data.queues[queueId].id; - this.name = data.queues[queueId].name; - this.number = data.queues[queueId].number; - this.agents = data.queues[queueId].agents; - this.agentsList = this.buildAgentsList(this.agents); - this.calls = Array.isArray(data.queues[queueId].calls) ? data.queues[queueId].calls : []; - }else{ - this.calls = []; - this.agentsList = []; - } - if(queueNameEl.dropdown('is hidden')){ - queueNameEl.dropdown({ - onChange: function onChange(value, text, $choice) { - window[className].onChangeSetting('queueId', value); - } - }); - if(queueNameEl.dropdown('get value') === ''){ - window[className].isInit = true; - queueNameEl.dropdown('set value', $('#queueId').val()) - window[className].isInit = false; - } - } + // Initialize multi-select dropdown if not yet done + this.initQueuesFilter(); // Normalize Semantic UI Card typography after render - this.$nextTick(() => { + this.$nextTick(function() { this.normalizeAgentCards(); }); }, + initQueuesFilter() { + var self = this; + var $filter = $(window[className].queuesFilterSelector); + if ($filter.length === 0) return; + + // Wait for Vue to render menu items + this.$nextTick(function() { + // Reinitialize dropdown to pick up new menu items + if ($filter.data('initialized')) { + // Dropdown already exists, just refresh menu + // Save current selection before refresh to prevent reset + var currentSelection = self.selectedQueueIds ? self.selectedQueueIds.slice() : []; + $filter.data('refreshing', true); + $filter.dropdown('refresh'); + $filter.data('refreshing', false); + + // Restore selection after refresh if it was cleared + if (currentSelection.length > 0 && (!self.selectedQueueIds || self.selectedQueueIds.length === 0)) { + self.selectedQueueIds = currentSelection; + $filter.dropdown('set exactly', currentSelection); + } + + // After refresh, ensure default text is hidden if we have selections + if (self.selectedQueueIds && self.selectedQueueIds.length > 0) { + $filter.find('.default.text').hide(); + } else { + $filter.find('.default.text').show(); + } + } else { + // First time initialization + $filter.data('initialized', true); + $filter.dropdown({ + fullTextSearch: true, + onChange: function(value) { + // Skip onChange during programmatic refresh + if ($filter.data('refreshing')) { + return; + } + // value is comma-separated string of selected queue IDs + var selectedIds = value ? value.split(',').filter(function(v) { return v !== ''; }) : []; + self.selectedQueueIds = selectedIds; + // Auto-save on change + window[className].onChangeSetting('queueIds', JSON.stringify(selectedIds)); + } + }); + + // Set initial values from hidden input + var savedQueueIds = []; + try { + var raw = $('#queueIds').val(); + savedQueueIds = JSON.parse(raw || '[]'); + } catch (e) { + savedQueueIds = []; + } + if (Array.isArray(savedQueueIds) && savedQueueIds.length > 0) { + window[className].isInit = true; + $filter.dropdown('set exactly', savedQueueIds); + self.selectedQueueIds = savedQueueIds; + window[className].isInit = false; + // Hide default text when values are selected + $filter.find('.default.text').hide(); + } + } + }); + }, refreshFromLastPayload() { if (this.lastActiveCallsPayload) { this.updatedCallsFromResponse(this.lastActiveCallsPayload); } }, + getQueueCalls(queueId) { + var queue = this.queues[queueId]; + if (!queue) return []; + return Array.isArray(queue.calls) ? queue.calls : []; + }, + getQueueAgentsList(queueId) { + var queue = this.queues[queueId]; + if (!queue || !queue.agents) return []; + return this.buildAgentsList(queue.agents); + }, + hasWaitingCalls(queueId) { + var calls = this.getQueueCalls(queueId); + var self = this; + for (var i = 0; i < calls.length; i++) { + var call = calls[i]; + if (call.dst_chan === '' && call.queueData && call.queueData.EnterTime !== undefined) { + var elapsed = self.formatElapsedTime(call.queueData.EnterTime); + if (self.minWaitVisible <= elapsed) { + return true; + } + } + } + return false; + }, buildAgentsList(agentsObj) { const entries = Object.entries(agentsObj || {}); const available = []; @@ -149,30 +215,31 @@ const ModuleMonitorActiveCalls = { }, normalizeAgentCards() { if (!this.$el) return; + var self = this; // Cleanup artifacts from previous experiments (placeholders/spacers). - const artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer'); - artifacts.forEach((el) => el.remove()); + var artifacts = this.$el.querySelectorAll('.agent-peer-placeholder, .agent-peer-spacer'); + artifacts.forEach(function(el) { el.remove(); }); // Dense layout (masonry) that still fills left-to-right: // flex-wrap can't place items into vertical gaps under tall cards. this.ensureAgentCardsGridMasonry(); - // Prevent "equal height" cards in one row (Semantic UI cards are flex). - const cardsContainer = this.$el.querySelector('.ui.cards.agent-cards'); - if (cardsContainer) { + // Process all agent card containers (one per queue block) + var cardsContainers = this.$el.querySelectorAll('.ui.cards.agent-cards'); + cardsContainers.forEach(function(cardsContainer) { cardsContainer.style.alignItems = 'flex-start'; cardsContainer.style.alignContent = 'flex-start'; - } + }); - const cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card'); - cards.forEach((card) => { + var cards = this.$el.querySelectorAll('.ui.cards.agent-cards > .ui.card.agent-card'); + cards.forEach(function(card) { card.style.alignSelf = 'flex-start'; }); // Semantic UI makes .header bigger than normal text; we need same font size. - const headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header'); - headers.forEach((el) => { + var headers = this.$el.querySelectorAll('.ui.card.agent-card .header.agent-card-header'); + headers.forEach(function(el) { el.style.fontSize = '1em'; el.style.lineHeight = '1.2'; el.style.display = 'flex'; @@ -181,15 +248,15 @@ const ModuleMonitorActiveCalls = { el.style.whiteSpace = 'nowrap'; }); - const metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer'); - metas.forEach((el) => { + var metas = this.$el.querySelectorAll('.ui.card.agent-card .meta.agent-peer'); + metas.forEach(function(el) { el.style.fontSize = '1em'; el.style.lineHeight = '1.2'; }); // Normalize label/name typography so they have same text height. - const numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label'); - numLabels.forEach((el) => { + var numLabels = this.$el.querySelectorAll('.ui.card.agent-card .agent-num-label'); + numLabels.forEach(function(el) { el.style.fontSize = '1em'; el.style.lineHeight = '1.2'; el.style.display = 'inline-flex'; @@ -204,8 +271,8 @@ const ModuleMonitorActiveCalls = { el.style.textOverflow = 'ellipsis'; el.style.whiteSpace = 'nowrap'; }); - const names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name'); - names.forEach((el) => { + var names = this.$el.querySelectorAll('.ui.card.agent-card .agent-name'); + names.forEach(function(el) { el.style.lineHeight = '1.2'; // Ellipsis for long names (e.g. "Салтыков-Щедрин") el.style.minWidth = '0'; @@ -216,9 +283,9 @@ const ModuleMonitorActiveCalls = { }); // Grid masonry needs row-span calculation after layout. - requestAnimationFrame(() => { - requestAnimationFrame(() => { - this.layoutAgentCardsGridMasonry(); + requestAnimationFrame(function() { + requestAnimationFrame(function() { + self.layoutAgentCardsGridMasonry(); }); }); }, @@ -266,8 +333,9 @@ const ModuleMonitorActiveCalls = { container.style.setProperty('--agent-card-col-count', String(count)); }, ensureAgentCardsGridMasonry() { - const styleId = 'agent-cards-layout-style'; - let styleEl = document.getElementById(styleId); + var self = this; + var styleId = 'agent-cards-layout-style'; + var styleEl = document.getElementById(styleId); if (!styleEl) { styleEl = document.createElement('style'); styleEl.id = styleId; @@ -275,101 +343,109 @@ const ModuleMonitorActiveCalls = { } // Grid masonry: fills left-to-right and can pack items into gaps. - styleEl.textContent = ` -.ui.cards.agent-cards.agent-cards-grid { - display: grid !important; - grid-template-columns: repeat(auto-fill, 240px); - justify-content: start; - gap: var(--agent-card-gap, 8px); - grid-auto-rows: 1px; - /* Prevent overlap with the legend block below */ - margin-bottom: 1em !important; -} -.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card { - width: 240px !important; - margin: 0 !important; - overflow: hidden; - /* reset from previous layouts */ - align-self: start; -} - `.trim(); - - const cardsContainer = this.$el && this.$el.querySelector - ? this.$el.querySelector('.ui.cards.agent-cards') - : null; - if (cardsContainer) { + // minmax(240px, 1fr) - карточки минимум 240px, растягиваются равномерно + styleEl.textContent = '\ +.ui.cards.agent-cards.agent-cards-grid {\ + display: grid !important;\ + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\ + justify-content: start;\ + gap: var(--agent-card-gap, 8px);\ + grid-auto-rows: 1px;\ + margin-bottom: 1em !important;\ +}\ +.ui.cards.agent-cards.agent-cards-grid > .ui.card.agent-card {\ + width: 100% !important;\ + min-width: 0;\ + margin: 0 !important;\ + overflow: hidden;\ + align-self: start;\ +}'; + + // Process all agent card containers (one per queue block) + var cardsContainers = this.$el ? this.$el.querySelectorAll('.ui.cards.agent-cards') : []; + cardsContainers.forEach(function(cardsContainer) { cardsContainer.classList.remove('agent-cards-masonry'); cardsContainer.classList.remove('agent-cards-flex'); cardsContainer.classList.add('agent-cards-grid'); + }); - // Bind once: relayout on resize. - if (!this._agentCardsResizeBound) { - this._agentCardsResizeBound = true; - window.addEventListener('resize', () => { - this.layoutAgentCardsGridMasonry(); - }); - } + // Bind once: relayout on resize. + if (!this._agentCardsResizeBound) { + this._agentCardsResizeBound = true; + window.addEventListener('resize', function() { + self.layoutAgentCardsGridMasonry(); + }); } }, layoutAgentCardsGridMasonry() { if (!this.$el) return; - const grid = this.$el.querySelector('.ui.cards.agent-cards.agent-cards-grid'); + var self = this; + + // Process all grid containers (one per queue block) + var grids = this.$el.querySelectorAll('.ui.cards.agent-cards.agent-cards-grid'); + grids.forEach(function(grid) { + self.layoutSingleGridMasonry(grid); + }); + }, + layoutSingleGridMasonry(grid) { if (!grid) return; - const cs = window.getComputedStyle(grid); - const rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1; - const rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8; + var cs = window.getComputedStyle(grid); + var rowHeight = parseFloat(cs.getPropertyValue('grid-auto-rows')) || 1; + var rowGap = parseFloat(cs.getPropertyValue('row-gap')) || parseFloat(cs.getPropertyValue('gap')) || 8; - const items = Array.from(grid.querySelectorAll('.ui.card.agent-card')); + var items = Array.from(grid.querySelectorAll('.ui.card.agent-card')); if (!items.length) return; // Reset row spans and min-heights to measure natural heights. - items.forEach((item) => { + items.forEach(function(item) { item.style.gridRowEnd = ''; item.style.minHeight = ''; }); - const tall = items.filter((c) => c.querySelector('.meta.agent-peer')); - const short = items.filter((c) => !c.querySelector('.meta.agent-peer')); + var tall = items.filter(function(c) { return c.querySelector('.meta.agent-peer'); }); + var short = items.filter(function(c) { return !c.querySelector('.meta.agent-peer'); }); // If we don't have both types, just do normal masonry spans. if (!tall.length || !short.length) { - items.forEach((item) => { - const h = item.getBoundingClientRect().height; - const span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap))); - item.style.gridRowEnd = `span ${span}`; + items.forEach(function(item) { + var h = item.getBoundingClientRect().height; + var span = Math.max(1, Math.ceil((h + rowGap) / (rowHeight + rowGap))); + item.style.gridRowEnd = 'span ' + span; }); return; } - const hs = Math.max(...short.map((c) => c.getBoundingClientRect().height)); - const ht = Math.max(...tall.map((c) => c.getBoundingClientRect().height)); + var shortHeights = short.map(function(c) { return c.getBoundingClientRect().height; }); + var tallHeights = tall.map(function(c) { return c.getBoundingClientRect().height; }); + var hs = Math.max.apply(Math, shortHeights); + var ht = Math.max.apply(Math, tallHeights); // Want: 2*(hs + g) = (ht + g) => g = ht - 2*hs - let g = ht - 2 * hs; + var g = ht - 2 * hs; if (!Number.isFinite(g)) g = rowGap; g = Math.max(0, Math.min(24, Math.round(g))); // Apply gap and enforce min-heights so the relation holds visually. - grid.style.setProperty('--agent-card-gap', `${g}px`); + grid.style.setProperty('--agent-card-gap', g + 'px'); - const shortH = Math.round(hs); - const tallH = Math.round(Math.max(ht, 2 * hs + g)); - short.forEach((c) => { c.style.minHeight = `${shortH}px`; }); - tall.forEach((c) => { c.style.minHeight = `${tallH}px`; }); + var shortH = Math.round(hs); + var tallH = Math.round(Math.max(ht, 2 * hs + g)); + short.forEach(function(c) { c.style.minHeight = shortH + 'px'; }); + tall.forEach(function(c) { c.style.minHeight = tallH + 'px'; }); // Now compute row spans from final rendered heights. - const effectiveGap = g; - items.forEach((item) => { - const h = item.getBoundingClientRect().height; - const span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap))); - item.style.gridRowEnd = `span ${span}`; + var effectiveGap = g; + items.forEach(function(item) { + var h = item.getBoundingClientRect().height; + var span = Math.max(1, Math.ceil((h + effectiveGap) / (rowHeight + effectiveGap))); + item.style.gridRowEnd = 'span ' + span; }); }, getSrcNumForAgent(agentNumber) { let result = '-'; let answeredFound = false; - for (const call of this.calls) { + for (const call of this.allCalls) { if(call.dst_num === agentNumber){ answeredFound = true; result = call.src_num; @@ -450,16 +526,11 @@ const ModuleMonitorActiveCalls = { data: { "minWaitVisible": 30, "nowTick": 0, - "name": "", - "number": "", - "queues": [], - "agents": { - }, - "agentsList": [], + "queues": {}, + "allCalls": [], + "selectedQueueIds": [], "lastActiveCallsPayload": null, - "contactsByPhone10": {}, - "calls": [ - ] + "contactsByPhone10": {} }, }); window[className].applyContactsCacheToQueueWidget(); @@ -655,6 +726,11 @@ const ModuleMonitorActiveCalls = { // Окончание форматирования базовой страницы ////// this.startPollingActiveCalls(); + + // Allow settings to be saved after initialization + setTimeout(function() { + window[className].isInit = false; + }, 1000); }, startUiTicker() { if (this._uiTicker) return; @@ -1011,20 +1087,20 @@ const ModuleMonitorActiveCalls = { if(window[className].isInit){ return; } - let data = { - [settingName]: value - }; + var data = {}; + data[settingName] = value; $.api({ url: window[className].saveUserActionUrl, on: 'now', method: 'POST', data: data, - successTest(response) { + successTest: function(response) { return response !== undefined && Object.keys(response).length > 0 && response.success === true; }, - onSuccess(response) { - if(settingName === 'queueId'){ - $('#queueId').val($(window[className].queueNameSelector).dropdown('get value')); + onSuccess: function(response) { + if(settingName === 'queueIds'){ + // Update hidden input and Vue data + $('#queueIds').val(value); // Re-render queue widget from last received payload (WS mode) if (window[className].$widgetQueues && typeof window[className].$widgetQueues.refreshFromLastPayload === 'function') { window[className].$widgetQueues.refreshFromLastPayload(); @@ -1033,10 +1109,10 @@ const ModuleMonitorActiveCalls = { window.location.href = window.location.href; } }, - onFailure(response) { + onFailure: function(response) { console.log(response); }, - onError(errorMessage, element, xhr) { + onError: function(errorMessage, element, xhr) { console.log(errorMessage,xhr); } }); From 45f95aba61c52dd5808c0c8f078a68faeb83ca9f Mon Sep 17 00:00:00 2001 From: Sumonchai Wongphithak Date: Mon, 2 Feb 2026 03:57:01 +0000 Subject: [PATCH 23/23] Translated using Weblate (Thai) Currently translated at 3.1% (1 of 32 strings) Translation: MIKOPBX/ModuleMonitorActiveCalls Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/modulemonitoractivecalls/th/ --- Messages/th.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Messages/th.php b/Messages/th.php index c03242c..c9b02fd 100644 --- a/Messages/th.php +++ b/Messages/th.php @@ -11,7 +11,7 @@ 'mo_ModuleModuleMonitorActiveCalls' => '', 'BreadcrumbModuleMonitorActiveCalls' => '', 'SubHeaderModuleMonitorActiveCalls' => '', - 'module_template_AddNewRecord' => '', + 'module_template_AddNewRecord' => 'เพิ่ม', 'module_monitor_active_callsTextFieldLabel' => '', 'module_monitor_active_callsTextAreaFieldLabel' => '', 'module_monitor_active_callsPasswordFieldLabel' => '',