var Advertisers = function(core, target, data, returnCB){ var events = new EventManager, template = new AdvertisersTemplate, element = getElementFromString(render(template.index, null)), elements = null, data = null; this.search = search; this.exit = exit; new ApiManager({ 'advertiserList' : null, 'spendHistory7' : { 'source' : 'spendHistory/byAgency/' + core.userID + "/7", 'noID' : true }, 'spendHistory30' : { 'source' : 'spendHistory/byAgency/' + core.userID + "/30", 'noID' : true } }, core.userID, init); function init(error, d){ data = getDataObj(d); initHeader(); setElements(); if(getEmptyState(error)) initFresh() else initTable(); setButtons(getSimpleJSONCopy(clientsButtonObj)); if(returnCB) returnCB(); insertElement(); } function initHeader(){ var h = element.querySelector('header'); events.add(h.querySelector('a'), 'click', popAnchor); } function initTable(){ var d = data.table, tableEle = element.querySelector('.manageTable'); d.rows.sort(function(a, b) { return parseInt(a.id) < parseInt(b.id) ? -1 : 1; }); elements.actions = element.querySelector('actions'); elements.table = NewMTable(tableEle, d, tableUpdate); tableUpdate(); } function initFresh(){ elements.fresh = getElementFromString(template.fresh); hideManage(); data.table.rows = []; element.appendChild(elements.fresh); } function insertElement(){ target.appendChild(element); } function Advertiser(o, spent7, spent30){ this.id = isDefined(o.id) ? o.id : null; this.name = isDefined(o.name) ? o.name : '[Not set]'; this.status = isDefined(o.status) && o.status == true ? 'On' : 'Off'; this.spent7 = spent7; this.spent30 = spent30; this.conversions = isDefined(o.conversions) ? o.conversions : 0; this.numCmps = o.numCmps; } function search(e){ var tbl = elements.table; if(!tbl){ return; } tbl.search("name", e.target.value); } function getDataObj(o){ var d = getSimpleJSONCopy(clientsDummyData); d.table.rows = getList(o); return d; } function getEmptyState(e){ return isArray(e) && e.length > 0 && e[0].error == getAPIErrorMessage('noMatch'); } function getList(d){ var a = [], list = d.advertiserList, spend7 = d.spendHistory7, spend30 = d.spendHistory30; forEach(list, p); return a; function p(t){ var spent7 = 0, spent30 = 0, sh7 = spend7[t.id] || [], sh30 = spend30[t.id] || []; sh7.forEach(function(v) { spent7 += v.usd; }); sh30.forEach(function(v) { spent30 += v.usd; }); a.push(new Advertiser(t, spent7, spent30)); } } function setElements(){ elements = new Elements(element, { 'switch' : { 'selector' : '.switchButton' }, 'edit' : { 'selector' : '.editButton' }, 'del' : {}, 'fresh' : {}, 'table' : {}, 'actions' : {}, 'rows' : {} }); } function setButtons(buttonsObj){ elements.del = new ConfirmationButton(element.querySelector('.del'), buttonsObj.del, delAction); events.add(elements.switch, 'click', switchAction); events.add(elements.edit, 'click', editAction); } function hideManage(){ element.querySelector('.manageRow').classList.add('noDisplay'); } function switchAction(e){ var id = getSelectedRowId(); if(e && e.preventDefault) e.preventDefault(); ga('send', 'event', 'Advertisers', 'Switch to advertiser', id); core.switchUser(id); } function editAction(e){ if(e && e.preventDefault) e.preventDefault(); pop('Pop!', 'Advertisers - Edit', '/dashboard/advertisers/edit/' + getSelectedRowId()); } function getSelectedRowId(){ return elements.table.getSelectedRows()[0].getData().id; } function delAction(e){ if(e && e.preventDefault) e.preventDefault(); new ApiDelete(data, elements.table.getSelectedRows(), 'advertisers', core.userID, updateActionCB); } function refreshTable(){ if(elements.table) elements.table.exit(); initTable(); } function tableUpdate(){ var l = elements.table.getSelectedRows().length; if(l == 1){ showSingleActions(); } else if(l > 1){ hideSingleActions(); } else { hideActions(); } } function updateActionCB(e){ updateErrorCheck(e); getAdvertisersList(updateAdvertisersList); } function updateErrorCheck(e){ for(var k in e){ if(isDefined(e[k]) && isDefined(e[k].error)){ new core.notifications.setError(e[k].message); return true; } } } function getAdvertisersList(cb){ new ApiManager({ 'advertiserList' : null, 'campaigns' : { 'source' : 'campaigns/byAgency' } }, core.userID, cb); } function updateAdvertisersList(e, o){ data = getDataObj(o); refreshTable(); } function hideSingleActions(){ elements.switch.classList.add('noDisplay'); elements.edit.classList.add('noDisplay'); showActions(); } function showSingleActions(){ elements.switch.classList.remove('noDisplay'); elements.edit.classList.remove('noDisplay'); showActions(); } function hideActions(){ elements.actions.classList.add('noDisplay'); } function showActions(){ elements.actions.classList.remove('noDisplay'); } function exit(){ if(element) removeChild(target, element); if(events) events.reset(); if(elements) elements.exit(); housekeeping(); } function housekeeping(){ core = target = data = returnCB = events = template = element = data = elements = null; } };