Controllers.prototype.proximityForecast = (function () { 'use strict'; const tmpl = '


Results:

', reqObj = { 'proximityList': { 'source': 'segments/proximity/byOwner', } }, segTbl = () => { return { rowSelect: false, maxPerPage: 10, columns : { 'id' : { 'title' : 'id', 'sortable' : true, 'width' : '100' }, 'name' : { 'title' : 'Name', 'valueType' : 'string', 'sortable' : true, 'width' : '450' }, 'estCost' : { 'title' : 'Est Analysis Cost', 'valueType' : 'element', 'sortable' : false, 'width' : '220', 'formatType' : 'locale' }, 'numUsers' : { 'title' : 'Analyze ($)', 'valueType' : 'element', 'sortable' : false, 'width' : '220', 'formatType' : 'locale' }, 'idfas' : { 'title' : 'IDFAs ($)', 'valueType' : 'element', 'sortable' : false, 'width' : '220', 'formatType' : 'locale' }, }, rows : null } }, resTbl = () => { return { rowSelect: false, columns : { 'name' : { 'title' : 'Name', 'valueType' : 'string', 'sortable' : true, 'width' : '450' }, 'num' : { 'title' : 'Est # Users', 'valueType' : 'element', 'sortable' : false, 'width' : '220', 'formatType' : 'locale' }, }, rows : null } }; return function (core, target, data, returnCB) { let container = getElementFromString(tmpl), elements = null, initData = null; new ApiManager(reqObj, core.userID, init); this.exit = exit; function init(_, r) { initData = r; elements = new Elements(container, { list: { target: NewMTable(container.querySelector('.list'), getTableData(r)) }, results: { target: NewMTable(container.querySelector('.results'), resTbl()) }, }) container.classList.add('manageProximity'); hackTable(container.querySelector('.list')) target.appendChild(container); returnCB(); } function getTableData(r = initData) { const rows = [], d = r.proximityList.data; for(const key of Object.keys(d)) { const seg = d[key]; rows.push({ id: key, name: seg.name, estCost: key, numUsers: key, idfas: key, }); } const ret = segTbl(); ret.rows = rows; ret.onPageChange = (t) => hackTable(t); return ret; } function hackTable(t) { const tQSA = (v) => t.querySelectorAll(v); loop(tQSA('row'), (_, r) => setupHandler(r)); } function setupHandler(r) { const estA = getElementFromString('Est Analysis Cost'), cntA = getElementFromString('Analyze ($)'), idfasA = getElementFromString('IDFAs ($)'), sp1 = r.querySelector('cell-block:nth-child(3) span'), sp2 = r.querySelector('cell-block:nth-child(4) span'), sp3 = r.querySelector('cell-block:nth-child(5) span'), id = sp1.innerText; if (sp1.dataset["loaded"]) return; sp1.dataset["loaded"] = true; sp1.innerHTML = ''; sp2.innerHTML = ''; sp3.innerHTML = ''; estA.addEventListener('click', (e) => { e.preventDefault(); sp1.innerHTML = 'Loading...'; apiRequest('GET', 'segments/proximity/forecastGeofenceEst', id, null, (resp) => { sp1.innerHTML = '$' + (addCost(resp) / 100).toFixed(2); }) }); cntA.addEventListener('click', (e) => { e.preventDefault(); sp2.innerHTML = 'Loading...'; apiRequest('GET', 'segments/proximity/forecastGeofence', id, null, (resp) => { const total = showResults(resp); sp2.innerHTML = total; }) }) idfasA.addEventListener('click', (e) => { e.preventDefault(); sp3.innerHTML = 'Loading...'; apiRequest('GET', 'segments/proximity/geofenceIDFAs', id, null, (resp) => { elements.results.exit(); const ta = getElementFromString('') ta.value = JSON.stringify(resp.data); const res = container.querySelector('.results'); res.innerHTML = ""; res.appendChild(ta); sp3.innerHTML = "Loaded" }) }) sp1.appendChild(estA); sp2.appendChild(cntA); sp3.appendChild(idfasA); } function showResults(resp) { let rows = [], tbl = resTbl(), total = 0; loop(resp.data, (k, v) => { rows.push({ name: k, num: v, }); total += v; }); tbl.rows = rows; elements.results.exit(); const res = container.querySelector('.results'); res.innerHTML = ""; elements.results = NewMTable(res, tbl); return total; } function addCost(resp) { let total = 0; loop(resp.data, (_, v) => { total += v; }); return total; } function exit() { if (elements) elements.exit(); removeChild(target, container); } }; })();