Files
andy 9f22b522df v1.3.0 Restructure Saxonite workspace and upgrade to .NET 10 (#1)
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>
2026-10-16 18:24:16 +01:00

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 */