Move Saxonite’s projects into a dedicated `Workspace` folder and align the solution with .NET 10 and the current Common workspace. Update encryption integration, test project structure and coverage, and repository guidance and upgrade notes. - Relocate application and library projects while retaining Git rename history. - Split tests into Admin, Online, and Shared projects; add representative behavioral and serialization tests. - Update Common integration, application version, and repository documentation. Application version: 1.3.0 Reviewed-on: #1 Co-authored-by: andy <andy@sarand.com>
252 lines
10 KiB
JavaScript
252 lines
10 KiB
JavaScript
/*
|
|
* Profile Eligibility scripts.
|
|
*/
|
|
(function (win, doc, undef)
|
|
{
|
|
//--------------------------------------------------------------
|
|
"use strict";
|
|
let ue = sax.mdl.userEligibility = { ajax: {}, data: {}, $pnl: {}, $dlg: {}, $frm: {} };
|
|
let $pnl = ue.$pnl, $dlg = ue.$dlg, $frm = ue.$frm;
|
|
//--------------------------------------------------------------
|
|
sax.refreshProfileEligibilityInfo = function (delay)
|
|
{
|
|
$pnl.infoTip.hide().find('.sax-info').text(sax.msg.eligibilityInfo);
|
|
$pnl.usrElg.removeClass('sax-edit').addClass('sax-populating');
|
|
$('.sax-property', $pnl.usrElg).hide();
|
|
sax.showDataRefreshingMsg($pnl.usrElg);
|
|
ue.refreshUserEligibilities(ue.displayUserEligibilities);
|
|
}
|
|
ue.refreshUserEligibilities = function (callbackFn)
|
|
{
|
|
delete sax.page.profileEligibilityChanged;
|
|
ue.ajax.listItems = ue.ajax.listItems || { url: sax.url.base + 'Account/Ajax/GetUserEligibilities', formId: 'frmNavigate', noWaitIcon: true };
|
|
ue.ajax.listItems.callbackFn = callbackFn;
|
|
sax.doAjaxRequest(ue.ajax.listItems, 50);
|
|
}
|
|
ue.displayUserEligibilities = function (response)
|
|
{
|
|
//sax.debug('displayUserEligibilities', response);
|
|
ue.clearItem();
|
|
if (!response || !response.success) return;
|
|
ue.data.types = response.types;
|
|
$pnl.infoTip.toggle(!response.config.hideInfo);
|
|
$('.sax-panel-messages', $pnl.results).stop(true, false).hide();
|
|
let items = response.eligibilities;
|
|
if (!items) return;
|
|
let $items = $('.sax-panel-item-list', $pnl.results).empty();
|
|
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
|
|
$items.append(ue.populateItem(ue.getItemTemplate(), items[itemIdx]));
|
|
$items.show();
|
|
sax.showNoInfoMsg($pnl.usrElg);
|
|
$pnl.usrElg.removeClass('sax-populating');
|
|
}
|
|
ue.populateItem = function ($item, item)
|
|
{
|
|
if (!item) return;
|
|
$item.prop('id', item.id);
|
|
let fnUpd = function (evt) { ue.updateItem(item, $item); }
|
|
let fnRmv = function (evt) { ue.removeItem(item, $item); }
|
|
$('.sax-header .sax-caption', $item).on('click', fnUpd);
|
|
$('.sax-content', $item).on('dblclick', fnUpd);
|
|
|
|
let $bgr = $('.sax-burger', $item);
|
|
let $mnu = $('ul.sax-dropdown-menu', $bgr).empty();
|
|
$mnu.append(ue.getItemMenuOption(sax.lbl.edit, fnUpd, 'sax-edit'));
|
|
$mnu.append(ue.getItemMenuOption(sax.lbl.remove, fnRmv, 'sax-remove'));
|
|
$bgr.toggle(!!$('.sax-dropdown-menu .sax-dropdown-item', $item).length);
|
|
|
|
$('.EligibilityRegionName', $item).text(item.regionName);
|
|
$('.EligibilityType', $item).text(item.eligibilityTypeDesc);
|
|
$('.EligibilityExpiry', $item).toggle(!!item.expiresOnFmt).find('.EligibilityExpiresOn').text(item.expiresOnFmt);
|
|
return $item;
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.getHeaderDropdownTemplate = function ()
|
|
{
|
|
return $('.sax-panel-item-template .sax-dropdown-menu.UserEligibilities li.sax-dropdown-item', $pnl.section).clone();
|
|
}
|
|
ue.getItemTemplate = function ()
|
|
{
|
|
return $('.sax-panel-item-template .sax-panel-item.UserEligibility', $pnl.usrElg).clone();
|
|
}
|
|
ue.getItemDropdownTemplate = function ()
|
|
{
|
|
return $('.sax-panel-item-template .sax-dropdown-menu.UserEligibility li.sax-dropdown-item', $pnl.section).clone();
|
|
}
|
|
ue.getHeaderMenuOption = function (lbl, fn, cls)
|
|
{
|
|
return ue.getMenuOption(ue.getHeaderDropdownTemplate(), lbl, fn, cls);
|
|
}
|
|
ue.getItemMenuOption = function (lbl, fn, cls)
|
|
{
|
|
return ue.getMenuOption(ue.getItemDropdownTemplate(), lbl, fn, cls);
|
|
}
|
|
ue.getMenuOption = function ($opt, lbl, fn, cls)
|
|
{
|
|
return $opt.find('div.sax-label').text(lbl).end().on('click', fn).addClass(cls);
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.data.hideInfoKey = 'HideProfileEligibilityInfo';
|
|
ue.showInfoTip = function ()
|
|
{
|
|
//sax.debug('showInfoTip');
|
|
$pnl.infoTip.show();
|
|
sax.updateUserConfigOption(ue.data.hideInfoKey, 0);
|
|
}
|
|
ue.hideInfoTip = function ()
|
|
{
|
|
$pnl.infoTip.hide();
|
|
sax.updateUserConfigOption(ue.data.hideInfoKey, 1);
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.addItem = function ()
|
|
{
|
|
ue.clearItem();
|
|
ue.showEligibilityDialog();
|
|
}
|
|
ue.showEligibilityDialog = function ()
|
|
{
|
|
sax.openDialog($dlg.usrElg.dialog('option', 'title', sax.dlg.title.addUserEligibility), 640, 480);
|
|
}
|
|
ue.clearItem = function ()
|
|
{
|
|
delete ue.data.item;
|
|
delete ue.data.$item;
|
|
let frm = $frm.usrElg;
|
|
$('.UserEligibilityId,.EligibilityExists,.EligibilityRegionId,input.sax-input,textarea.sax-textarea,select.sax-select', frm).val('');
|
|
$('.SelectEligibilityRegion', frm).show();
|
|
ue.$selType.prop('disabled', false).change();
|
|
ue.$chkExpires.prop("checked", false);
|
|
sax.clearControlErrors(frm);
|
|
}
|
|
ue.updateItem = function (item, $item)
|
|
{
|
|
//sax.debug('updateItem', item);
|
|
ue.data.item = item;
|
|
ue.data.$item = $item;
|
|
$('.UserEligibilityId', $frm.usrElgId).val(item.id);
|
|
ue.ajax.getItem = ue.ajax.getItem || { url: sax.url.base + 'Account/Ajax/GetUserEligibility', formId: 'frmUserEligibilityId', callbackFn: ue.doUpdateItem };
|
|
sax.doAjaxRequest(ue.ajax.getItem, 50);
|
|
}
|
|
ue.doUpdateItem = function (response)
|
|
{
|
|
//sax.debug('doUpdateItem', response);
|
|
if (!response.success) return;
|
|
ue.clearItem();
|
|
let frm = $frm.usrElg;
|
|
let item = response.eligibility;
|
|
$('.UserEligibilityId', frm).val(item.id);
|
|
ue.$hdnExists.val(1);
|
|
$('.EligibilityRegionId', frm).val(item.regionId);
|
|
$('.sax-input.EligibilityRegionName', frm).val(item.regionName);
|
|
//$('.SelectEligibilityRegion', frm).hide();
|
|
ue.$selType.val(item.eligibilityType);//.prop('disabled', true).change();
|
|
$('.sax-textarea.EligibilityInfo', frm).val(item.info);
|
|
ue.$chkExpires.prop("checked", !!item.expiresOnFrm);
|
|
ue.$dpExpiresOn.val(item.expiresOnFrm);
|
|
ue.showEligibilityDialog();
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.selectEligibilityRegion = function ()
|
|
{
|
|
//sax.debug('selectEligibilityRegion');
|
|
let frm = $frm.usrElg;
|
|
//if (ue.$hdnExists.val()) return;
|
|
sax.mdl.selectRegion.fn.selectRegion({ caption: sax.dlg.title.selectRegion, regionId: $('#ifEligibilityRegionId', frm).val(), fnCallback: ue.storeEligibilityRegion })
|
|
}
|
|
ue.storeEligibilityRegion = function (eligibility)
|
|
{
|
|
sax.clearControlError($('#ifEligibilityRegionId').val(eligibility ? eligibility.id : ''));
|
|
$('#ifEligibilityRegionName').val(eligibility ? eligibility.name : '');
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.onChangeType = function ()
|
|
{
|
|
$('.sax-form-control.EligibilityExpiry').toggle(ue.typeAllowsDates(ue.$selType.val()));
|
|
}
|
|
ue.typeAllowsDates = function (tc)
|
|
{
|
|
for (const t of ue.data.types || [])
|
|
if (t.code == tc) return !!t.dates;
|
|
return false;
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.onToggleExpiry = function ()
|
|
{
|
|
if (ue.$chkExpires.prop("checked"))
|
|
ue.$dpExpiresOn.focus();
|
|
else
|
|
ue.$dpExpiresOn.val('');
|
|
}
|
|
ue.onChangeExpiresOn = function ()
|
|
{
|
|
ue.$chkExpires.prop("checked", !!$(this).val());
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.storeItem = function ()
|
|
{
|
|
sax.clearControlErrors();
|
|
let frm = $frm.usrElg;
|
|
$('.sax-select.EligibilityType', frm).prop('disabled', false);
|
|
ue.ajax.storeItem = ue.ajax.storeItem || { url: sax.url.base + 'Account/Ajax/StoreUserEligibility', formId: 'frmUserEligibility', callbackFn: ue.onStoreItem };
|
|
sax.doAjaxRequest(ue.ajax.storeItem, 50);
|
|
}
|
|
ue.onStoreItem = function (response)
|
|
{
|
|
sax.refreshControlValues(response.controlValues);
|
|
let frm = $frm.usrElg;
|
|
$('.sax-select.EligibilityType', frm).prop('disabled', !!ue.$hdnExists.val());
|
|
if (!response || !response.success) return;
|
|
$dlg.usrElg.dialog('close');
|
|
sax.refreshProfileEligibilityInfo();
|
|
}
|
|
//--------------------------------------------------------------
|
|
ue.removeItem = function (item, $item)
|
|
{
|
|
//sax.debug('removeItem', item);
|
|
ue.data.item = item;
|
|
ue.data.$item = $item;
|
|
let fn = function ()
|
|
{
|
|
$('.UserEligibilityId', $frm.usrElgId).val(item.id);
|
|
sax.ajax.removeItem = sax.ajax.removeItem || { url: sax.url.base + 'Account/Ajax/RemoveUserEligibility', formId: 'frmUserEligibilityId', callbackFn: ue.onItemRemoved };
|
|
sax.doAjaxRequest(sax.ajax.removeItem, 50);
|
|
}
|
|
sax.doConfirm(sax.dlg.title.removeUserEligibility, sax.msg.removeUserEligibility, fn);
|
|
}
|
|
ue.onItemRemoved = function (response)
|
|
{
|
|
if (!response.success) return;
|
|
if (ue.data.$item)
|
|
ue.data.$item.remove();
|
|
ue.clearItem();
|
|
}
|
|
//--------------------------------------------------------------
|
|
$(function ()
|
|
{
|
|
$pnl.usrElg = $('.sax-panel-section.ProfileEligibility');
|
|
$pnl.usrElg.on('click', '.sax-action.sax-add', function (evt) { ue.addItem(); });
|
|
$pnl.usrElg.on('click', '.sax-action.sax-info', function (evt) { ue.showInfoTip(); });
|
|
$pnl.results = $('.sax-panel-results', $pnl.usrElg);
|
|
$pnl.infoTip = $('.sax-panel-infotip', $pnl.results).on('click', '.sax-close', function (evt) { ue.hideInfoTip(); });
|
|
|
|
$frm.usrElgId = $('#frmUserEligibilityId', $pnl.usrElg);
|
|
var opt = sax.dlgOpts();
|
|
opt.buttons[sax.dlg.btn.ok] = function () { ue.storeItem(); };
|
|
opt.buttons[sax.dlg.btn.cancel] = function () { $(this).dialog('close'); };
|
|
$dlg.usrElg = $('#dlgUserEligibility', $pnl.usrElg).dialog(opt);
|
|
$frm.usrElg = $('#frmUserEligibility', $dlg.usrElg);
|
|
$frm.usrElg.on('dblclick', '.EligibilityRegionName.sax-input', ue.selectEligibilityRegion);
|
|
$frm.usrElg.on('click', '.SelectEligibilityRegion.sax-button', ue.selectEligibilityRegion);
|
|
ue.$hdnExists = $('.sax-hidden.EligibilityExists', $frm.usrElg);
|
|
ue.$selType = $('.sax-select.EligibilityType', $frm.usrElg).on('change', ue.onChangeType);
|
|
ue.$chkExpires = $('.sax-checkbox.EligibilityExpires', $frm.usrElg).on('change', ue.onToggleExpiry);
|
|
ue.$dpExpiresOn = $('.sax-input.EligibilityExpiresOn', $frm.usrElg).on('change', ue.onChangeExpiresOn);
|
|
sax.initCalendars('#frmUserEligibility .sax-calendar', { changeMonth: true, changeYear: true, yearRange: '-99:+12', autoClose: true });
|
|
ue.$dpExpiresOn.datepicker({ onSelect: function () { ue.onChangeExpiresOn(); }, onClose: function () { ue.onChangeExpiresOn(); } });
|
|
sax.allowClearCalendar('#frmUserEligibility .sax-calendar');
|
|
});
|
|
//--------------------------------------------------------------
|
|
}(window, window.document));
|
|
|
|
/* The End */ |