/* * Admin - Sport page scripts. */ (function (win, doc, undef) { "use strict"; let sm = sax.sportMgt = { $pnl: {}, $frm: {}, $dlg: {}, ajax: {}, data: {} }; let $pnl = sm.$pnl, $frm = sm.$frm, $dlg = sm.$dlg; sax.itemIdPrefix = 'Itm_'; //-------------------------------------------------------------- sm.refreshResults = function (delay) { if (!sm.awaitingRefreshResponse) { $('.sax-burger', $pnl.filter).hide(); var $items = $('.sax-panel-item-list', $pnl.results).fadeOut(200).empty(); var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty().append($('
' + sax.msg.dataQuerying + '
')).fadeIn(200); } sax.ajax.refreshResults = sax.ajax.refreshResults || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmSportFilter', callbackFn: sm.doRefreshResults }; sax.doAjaxRequest(sax.ajax.refreshResults, delay || 50); sm.awaitingRefreshResponse = true; } sm.doRefreshResults = function (response) { //sax.debug('doRefreshResults', response); delete sm.awaitingRefreshResponse; sax.refreshControlValues(response.controlValues); var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty(); var $items = $('.sax-panel-item-list', $pnl.results).hide().empty(); sax.refreshPaging(response, '#frmSportFilter', sm.refreshResults); if (!response.success) return; // Reference data - Statuses. if (response.defaultStatusCode) sax.data.defaultStatusCode = response.defaultStatusCode; if (response.statuses) sax.populateSelectCodeDesc('#cbSportStatus', response.statuses); // Menu. var $bgr = $('.sax-burger', $pnl.filter).hide(); var $mnu = $('ul.sax-dropdown-menu', $bgr).empty(); $mnu.append(sm.getFilterMenuOption(sax.lbl.refresh, function () { sm.refreshResults(); }, 'sax-refresh')); $mnu.append(sm.getFilterMenuOption(sax.lbl.create, function () { sm.createItem(); }, 'sax-add')); $bgr.toggle(!!$('.sax-dropdown-item', $mnu).length); // Items. var items = response.sports; if (!items.length) return $msgs.append($('
' + sax.msg.dataNoneFound + '
')).fadeIn(500); for (let itemIdx = 0; itemIdx < items.length; itemIdx++) $items.append(sm.populateItem(sm.getItemTemplate(), items[itemIdx])); $items.fadeIn(50); } sm.populateItem = function ($item, item) { if (!item) return; $item.prop('id', sax.itemIdPrefix + item.id); $('.SportName', $item).text(item.name); $('.SportGrouping', $item).text(item.groupingDesc); $('.SportNameParent', $item).text(item.sportNameParent); $('.SportParent', $item).toggle(!!item.sportNameParent); $('.SportSpecialityLabel', $item).text(item.specialityLabelDesc); $('.SportSpeciality', $item).toggle(!!item.specialityLabelCode); $('.StatusDesc', $item).text(item.statusDesc).removeClass(function (idx, name) { return (name.match(/(^|\s)sax-status-\S+/g) || []).join(' '); }).addClass('sax-status-' + item.statusCode.toLowerCase()); $('.sax-caption .sax-action').toggleClass('sax-action', !item.deleted); let $mnu = $('ul.sax-dropdown-menu', $item).empty(); if (!item.deleted) { $mnu.append(sm.getItemMenuOption(sax.lbl.edit, function () { sm.updateItem(item) }, 'sax-edit')); $('.sax-header .sax-action.sax-item-update', $item).off('click').on('click', function () { sm.updateItem(item) }); $item.off('dblclick').on('dblclick', function () { sm.updateItem(item) }); } $('.sax-burger', $item).toggle(!!$('.sax-dropdown-item', $mnu).length); $('.sax-panel-messages', $pnl.results).hide().empty(); return $item; } //-------------------------------------------------------------- sm.getFilterDropdownTemplate = function () { return $('.sax-panel-item-template .sax-dropdown-menu.SportFilter li.sax-dropdown-item', $pnl.filter).clone(); } sm.getItemTemplate = function () { return $('.sax-panel-item-template .sax-panel-item.Sport', $pnl.results).clone(); } sm.getItemDropdownTemplate = function () { return $('.sax-panel-item-template .sax-dropdown-menu.Sport li.sax-dropdown-item', $pnl.results).clone(); } sm.getFilterMenuOption = function (lbl, fn, cls) { return sm.getMenuOption(sm.getFilterDropdownTemplate(), lbl, fn, cls); } sm.getItemMenuOption = function (lbl, fn, cls) { return sm.getMenuOption(sm.getItemDropdownTemplate(), lbl, fn, cls); } sm.getMenuOption = function ($opt, lbl, fn, cls) { return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls); } //-------------------------------------------------------------- sm.createItem = function () { sm.clearItem(); $dlg.sport.dialog('option', 'title', sax.dlg.title.createSport); sax.openDialog($dlg.sport, 600, 600); } sm.clearItem = function () { let frm = $frm.sport; $('.SportId,input[type="text"],textarea,select', frm).val(''); $('.SportStatus', frm).val(sax.data.defaultStatusCode); sax.clearControlErrors(); } //-------------------------------------------------------------- sm.updateItem = function (item) { sm.clearItem(); $('.SportId', $frm.sportId).val(item.id); sax.ajax.updateItem = sax.ajax.updateItem || { url: sax.url.base + 'Sport/Ajax/GetItem', formId: 'frmSportId', callbackFn: sm.onUpdateItem }; sax.doAjaxRequest(sax.ajax.updateItem, 50); } sm.onUpdateItem = function (response) { //sax.debug('onUpdateItem', response); let frm = $frm.sport; $('.SportId,input[type="text"],textarea,select', frm).val(''); if (!response.success) return; let item = response.sport; $('.SportId', frm).val(item.id); $('.SportGrouping', frm).val(item.groupingCode); $('.SportIdParent', frm).val(item.sportIdParent); $('.SportNameParent', frm).val(item.sportNameParent); $('.SportName', frm).val(item.name); $('.SportSpecialityLabel', frm).val(item.specialityLabelCode); $('.SportStatus', frm).val(item.statusCode); sax.clearControlErrors(); $dlg.sport.dialog('option', 'title', sax.dlg.title.updateSport); sax.openDialog($dlg.sport, 600, 600); } //-------------------------------------------------------------- sm.populateSports = function (nextFn) { let handleResponse = function (response) { if (response && response.success && response.sports) sm.data.sports = response.sports; if (nextFn) nextFn(); } sm.ajax.sports = sm.ajax.sports || { url: sax.url.base + 'Sport/Ajax/GetList', formId: 'frmNavigate', callbackFn: handleResponse }; sax.doAjaxRequest(sm.ajax.sports, 50); } sm.selectParentSport = function () { if (!sm.data.sports) sm.populateSports(sm.showSelectParentSport); else sm.showSelectParentSport(); } sm.showSelectParentSport = function () { let sports = []; for (const spt of sm.data.sports || []) { if (spt.sportIdParent * 1 || 'a' * 1 || spt.id == $('.SportId', $frm.org).val()) continue; sports.push(spt); } sax.data.selectItem.fn.selectItem({ caption: sax.dlg.title.selectSport, items: sports, itemId: $('.SportIdParent', $frm.sport).val(), fnCallback: sm.onParentSportSelected }); } sm.onParentSportSelected = function (spt) { let frm = $frm.org; $('.SportIdParent', frm).val(spt.id); $('.SportNameParent', frm).val(spt.name); sax.clearControlError($('.SportParent', frm)); } sm.clearParentSport = function () { $('.SportIdParent,.SportNameParent', $frm.org).val(''); } //-------------------------------------------------------------- sm.storeItem = function () { sax.ajax.storeItem = sax.ajax.storeItem || { url: sax.url.base + 'Sport/Ajax/StoreItem', formId: 'frmSport', callbackFn: sm.onStoreItem }; sax.doAjaxRequest(sax.ajax.storeItem, 50); } sm.onStoreItem = function (response) { //sax.debug('onStoreItem', response); sax.refreshControlValues(response.controlValues); if (!response.success) return; $dlg.sport.dialog('close'); var item = response.sport; var $item = $('#' + sax.itemIdPrefix + item.id); if (!$item.length) { $item = sm.getItemTemplate(); $('.sax-panel-item-list', $pnl.results).prepend($item).show(); } sm.populateItem($item, item); // Force repopulation of sprts. delete sm.data.sports; } //-------------------------------------------------------------- $(function () { $pnl.sports = $('.sax-panel.Sports'); $pnl.filter = $('.sax-panel-filter', $pnl.sports); $frm.filter = $('#frmSportFilter', $pnl.filter); $('.FilterSport', $frm.filter).on('input', function () { sm.refreshResults(250); }); $pnl.results = $('.sax-panel-results', $pnl.sports); $frm.sportId = $('#frmSportId'); $frm.sport = $('#frmSport'); $frm.sport.on('input', '.sax-input', function () { sax.clearControlError(this); }).on('change', '.sax-select', function () { sax.clearControlError(this); }); $frm.sport.on('dblclick', '.SportNameParent', sm.selectParentSport).on('click', '#pbSelectParentSport', sm.selectParentSport).on('click', '.ParentSportClear', sm.clearParentSport); var opt = sax.dlgOpts(); opt.buttons[sax.dlg.btn.ok] = function () { sm.storeItem(); }; opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); }; $dlg.sport = $('#dlgSport').dialog(opt); setTimeout(sm.refreshResults, 250); }); }(window, window.document)); /* The End */