236 lines
8.9 KiB
JavaScript
236 lines
8.9 KiB
JavaScript
/*
|
|
* 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($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).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($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).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 */ |