Controllers.prototype.manageStores = (function() { 'use strict'; return function(core, target, data, returnCB) { var tableData = { "columns": { "name": { "title": "Name", "valueType": "string", "sortable": true, "width": "400" }, "visits": { "title": "In Store Visits", "valueType": "number", "sortable": true, "width": "126", "formatType": "locale" }, }, "rows": null, "maxPerPage": 10 }; var events = new EventManager(), template = new Template(), element = getElementFromString(template.index, {}), table = null, elements = null; apiRequest("GET", "segments/inStoreVisits/byOwner", core.userID, null, init); this.exit = exit; this.search = search; function init(d) { var buttonsObj = getSimpleJSONCopy(segmentsButtonObj); elements = new Elements(element, { 'actions': { 'selector': 'actions' }, 'edit': { 'selector': '.editButton' }, 'add': { 'selector': '.addButton' }, 'del': {}, 'fresh': {} }); elements.del = new ConfirmationButton(elements.actions.querySelector('.delete'), buttonsObj.del, delAction); events.add(elements.edit, 'click', editAction); events.add(elements.add, 'click', popAnchor); initData(d); target.appendChild(element); if (returnCB) returnCB(); } function initData(d) { if (table) table.exit(); if (!!d.data && Object.keys(d.data).length) { initTable(d.data); showManage(); } else { initFresh(); } } function initDefault(d) { initTable(d); showManage(); } function initTable(d) { table = NewMTable(element.querySelector('.manageTable'), getTableObj(d), tableUpdate); tableUpdate(); } function initFresh() { hideManage(); elements.fresh = getElementFromString(template.fresh); element.appendChild(elements.fresh); } function hideManage() { element.querySelector('.manageRow').classList.add('noDisplay'); } function showManage() { element.querySelector('.manageRow').classList.remove('noDisplay'); } function resetConfirmation() { elements.del.resetState(); } function getTableObj(o) { var d = getSimpleJSONCopy(tableData), rows = []; loop(o, function(k, v) { rows.push(new Segment(k, v)); }); d.rows = rows; return d; } function Segment(id, isv) { this.id = id; this.name = isv.name; this.visits = isv.visits; } function delAction(e) { preventDefault(e); var rows = table.getSelectedRows(), ids = rows.map(function(v) { return v.getData().id; }), cnt = ids.length; ids.forEach(function(id) { apiRequest("DELETE", "segments/inStoreVisits/byKey/" + core.userID, id, null, cb); }); function cb() { if (--cnt === 0) apiRequest("GET", "segments/inStoreVisits/byOwner", core.userID, null, initData); } ga('send', 'event', 'Stores', 'Delete', ids.join(', ')); } function editAction(e) { preventDefault(e); var row = table.getSelectedRows()[0].getData(); pop('Pop!', 'Stores - Edit', '/dashboard/stores/edit/' + row.id); } function search(v) { table.search('name', v.target.value); } function tableUpdate() { resetConfirmation(); var rows = table.getSelectedRows(), l = rows.length; if (l > 0) { elements.actions.className = ''; } else { elements.actions.className = 'disabled'; } if (l === 1) { elements.edit.style.display = ''; } else { elements.edit.style.display = 'none'; } } function Template() { var header = '
Add
', edit = 'Edit', del = '', manageRow = '

Manage Stores

' + edit + del + '
', manageTable = '
'; this.index = '
' + header + manageRow + manageTable + '
'; this.fresh = '

Oh no! It appears that we have no store locations here. We should add some. Try it out - it\'s simple!

'; } function removeTable() { var mt = element.querySelector('.manageTable'), t = mt ? mt.querySelector('m-table') : null; if (mt && t) removeChild(mt, t); table = null; } function exit() { if (elements) elements.exit(); if (events) events.reset(); if (table) table.exit(); if (element) target.removeChild(element); housekeeping(); } function housekeeping() { core = target = returnCB = events = template = element = table = elements = null; } }; })();