var Agencies = function(core, target, data, returnCB){ var events = new EventManager, template = new AgenciesTemplate, element = getElementFromString(render(template.index, null)), elements = null, data = null; this.search = search; this.exit = exit; new ApiManager({ 'agenciesList' : null }, null, init); function init(error, d){ data = getDataObj(d); initHeader(); setElements(); if(!error) initTable(); else if(getEmptyState(error)) initFresh(); setButtons(getSimpleJSONCopy(clientsButtonObj)); if(returnCB) returnCB(); insertElement(); } function search(e){ var tbl = elements.table; if(!tbl){ return; } tbl.search("name", e.target.value); } function initHeader(){ var h = element.querySelector('header'); events.add(h.querySelector('a'), 'click', popAnchor); } function initTable(){ elements.actions = element.querySelector('actions'); data.table.rows.sort(function(a, b) { return parseInt(a.id) < parseInt(b.id) ? -1 : 1; }); elements.table = NewMTable(element.querySelector('.manageTable'), data.table, tableUpdate); tableUpdate(); } function initFresh(){ elements.fresh = getElementFromString(template.fresh); hideManage(); data.table.rows = []; element.appendChild(elements.fresh); } function insertElement(){ target.appendChild(element); } function Agency(o, i){ this.id = isDefined(o.id) ? o.id : null; this.name = isDefined(o.name) ? o.name : '[Not set]'; } function getDataObj(o){ var d = getSimpleJSONCopy(AgencyTemplateData); d.table.rows = getAgencyList(o.agenciesList); return d; } function getEmptyState(e){ return e[0].error == getAPIErrorMessage('noMatch'); } function getAgencyList(d){ var a = []; forEach(d, p); return a; function p(t, d, i){ a.push(new Agency(t, i)); } } 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 = elements.table.getSelectedRows()[0].getData().id; if(e && e.preventDefault) e.preventDefault(); ga('send', 'event', 'Admins', 'Switch to agency', id); core.switchUser(id); } function delAction(e){ if(e && e.preventDefault) e.preventDefault(); new ApiDelete(data, elements.table.getSelectedRows(), 'agencies', core.userID, updateActionCB); } function refreshTable(){ if(elements.table) elements.table.exit(); initTable(); } function tableUpdate(){ var l = elements.table.getSelectedRows().length, t = elements.actions; if(l == 1) showSwitch(); else if(l > 1) hideSwitch(); else hideActions(); } function updateActionCB(e){ updateErrorCheck(e); getAgenciesList(updateAgenciesList); } function updateErrorCheck(e){ for(var k in e){ if(isDefined(e[k]) && e[k].error === true){ new core.notifications.setError(e[k].message); return true; } } } function editAction(e){ if(e && e.preventDefault) e.preventDefault(); pop('Pop!', 'Agencies - Edit', '/dashboard/agencies/edit/' + getSelectedRowId()); } function getSelectedRowId(){ return elements.table.getSelectedRows()[0].getData().id; } function getAgenciesList(cb){ new ApiManager({ 'agenciesList' : null }, null, cb); } function updateAgenciesList(e, o){ data = getDataObj(o); refreshTable(); } function hideSwitch(){ elements.switch.classList.add('noDisplay'); showActions(); } function showSwitch(){ elements.switch.classList.remove('noDisplay'); showActions(); } function hideActions(){ elements.actions.classList.add('noDisplay'); } function showActions(){ elements.actions.classList.remove('noDisplay'); } function switchCheck(l){ if(l > 1) unsetSwitchButton(); else setSwitchButton(); } function setSwitchButton(){ elements.switch.style.display = ''; } function unsetSwitchButton(){ elements.switch.style.display = 'none'; } 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; } };