Controllers.prototype.proximityForecast = (function () {
'use strict';
const tmpl = '
',
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);
}
};
})();