Files
Saxonite/SaxoniteCoreWebAdmin/wwwroot/js/sax-codeSelection.js
T
2021-05-11 19:38:43 +01:00

83 lines
3.0 KiB
JavaScript

/*
* Admin - User page scripts.
*/
(function (win, doc, undef)
{
"use strict";
let cs = sax.codeSelection = sax.codeSelection || { fn: {}, $dlg: {}, codeIdPrefix: 'Code_' };
//--------------------------------------------------------------
/*
* Code selection config:
* - caption - dialog title.
* - width: preferred dialog width (default: 400).
* - height: preferred dialog height (default: 400).
* - showFilter: whether to display filter control(s).
* - filterLabel: filter code field caption.
* - maxItems: maximum number of available items to list.
* - codes - list of {code,desc,comment} objects
* - selectedCodes - list of codes.
* - fnCallback - method to call on completion to store codes taking list of selected codes as parameter.
*/
cs.fn.openCodeSelection = function (cfg)
{
sax.debug('openCodeSelection', cfg);
cs.fn.init();
cs.cfg = cfg;
cs.selectedCodes = cfg.selectedCodes || [];
cs.fn.displayCodes(cfg.codes);
sax.openDialog(cs.$dlg.dialog('option', { title: cfg.caption || 'Select Codes' }), cs.cfg.width || 400, cs.cfg.height || 400);
}
cs.fn.displayCodes = function (codes)
{
let $codesAvail = $('.sax-codeSelection-codes.AvailableCodes').empty();
let $codesSelec = $('.sax-codeSelection-codes.SelectedCodes').empty();
let $codeTmpl = $('.sax-panel-item-template .sax-panel-item.Code');
for (let codeIdx = 0; codeIdx < codes.length; codeIdx++)
{
let code = codes[codeIdx];
let selected = cs.selectedCodes.indexOf(code.code) >= 0;
let $code = $codeTmpl.clone();
$($code).prop('id', cs.codeIdPrefix + code.code).attr('aria-code', code.code).on('click', function () { cs.fn.onClickCode(code.code); }).on('dblclick', function () { cs.fn.onDblClickCode(code.code); }).find('.CodeDesc').text(code.desc).end();
if (selected) $codesSelec.append($code);
else $codesAvail.append($code);
}
}
cs.fn.onClickCode = function (code)
{
$('.sax-panel-item.Code').removeClass('sel');
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
cs.fn.onDblClickCode = function (code)
{
let codeIdx = cs.selectedCodes.indexOf(code);
//sax.debug('onDblClickCode', code, codeIdx);
if (codeIdx >= 0) cs.selectedCodes.splice(codeIdx, 1); else cs.selectedCodes.push(code)
cs.fn.displayCodes(cs.cfg.codes)
$('.sax-panel-item.Code[aria-code="' + code + '"]').addClass('sel');
}
cs.fn.storeCodeSelection = function ()
{
//sax.debug('storeCodeSelection', cs.cfg, cs.selectedCodes);
if (cs.cfg.fnCallback) cs.cfg.fnCallback(cs.selectedCodes);
cs.$dlg.dialog('close');
delete cs.cfg;
delete cs.selectedCodes;
}
//--------------------------------------------------------------
cs.fn.init = function ()
{
if (!cs.$dlg) return;
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.ok] = function () { cs.fn.storeCodeSelection(); };
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
cs.$dlg = $('#dlgCodeSelection').dialog(opt);
}
}(window, window.document));
/* The End */