mmhglobal-dynamicform 2.36.2 → 2.36.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/esm2020/lib/components/fieldbase.component.mjs +3 -3
- package/esm2020/lib/services/main.service.mjs +78 -17
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +15 -23
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +4 -2
- package/esm2020/lib/zgrid/zgrid.component.mjs +5 -5
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +3 -7
- package/esm2020/lib/zudf/zudf.component.mjs +3 -3
- package/fesm2015/mmhglobal-dynamicform.mjs +105 -51
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +104 -51
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/services/main.service.d.ts +8 -3
- package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +4 -2
- package/package.json +1 -1
|
@@ -832,7 +832,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
832
832
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AlertService }, { type: i2.AuthService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.ToastService }, { type: i3.ModalService }, { type: i2.WebApiService }, { type: i2.SignalrService }, { type: i2.ZCoreService }]; } });
|
|
833
833
|
|
|
834
834
|
class MainService {
|
|
835
|
-
constructor(router, activatedRoute, modalCtrl, navController, alertService, cacheService, fieldService, resourceApiService, componentErrorHandlerService, webApiService, zcoreService, modalService, storageService, debugService, translationService, signalrService, dialogService, oauth2Service, toastService, authService) {
|
|
835
|
+
constructor(router, activatedRoute, modalCtrl, navController, alertService, cacheService, fieldService, resourceApiService, componentErrorHandlerService, webApiService, zcoreService, modalService, storageService, debugService, translationService, signalrService, dialogService, oauth2Service, toastService, authService, menuService) {
|
|
836
836
|
this.router = router;
|
|
837
837
|
this.activatedRoute = activatedRoute;
|
|
838
838
|
this.modalCtrl = modalCtrl;
|
|
@@ -853,6 +853,7 @@ class MainService {
|
|
|
853
853
|
this.oauth2Service = oauth2Service;
|
|
854
854
|
this.toastService = toastService;
|
|
855
855
|
this.authService = authService;
|
|
856
|
+
this.menuService = menuService;
|
|
856
857
|
this.backNavigationPath = [];
|
|
857
858
|
this.routeParam = [];
|
|
858
859
|
this.currentUrl = '';
|
|
@@ -899,7 +900,7 @@ class MainService {
|
|
|
899
900
|
this.previousUrl = this.currentUrl || window.location.pathname;
|
|
900
901
|
this.currentUrl = event.url;
|
|
901
902
|
const triggerType = this.previousUrl === this.currentUrl ? TriggerFromType.refreshStart : TriggerFromType.navigateStart;
|
|
902
|
-
this.
|
|
903
|
+
this.updateAppMonPerformance(triggerType, this.previousUrl, true).subscribe();
|
|
903
904
|
this.dismissAllOverlays();
|
|
904
905
|
if (this.getStartupPage() === event.url) {
|
|
905
906
|
this.resetRouteParam();
|
|
@@ -908,27 +909,45 @@ class MainService {
|
|
|
908
909
|
handleNavigationEnd(event) {
|
|
909
910
|
const duration = performance.now() - this.navigationStartTime;
|
|
910
911
|
const triggerType = this.previousUrl === this.currentUrl ? TriggerFromType.refreshEnd : TriggerFromType.navigateEnd;
|
|
911
|
-
this.
|
|
912
|
+
this.updateAppMonPerformance(triggerType, event.urlAfterRedirects, true, duration).subscribe();
|
|
912
913
|
this.currentUrl = event.urlAfterRedirects;
|
|
913
914
|
console.log(event);
|
|
914
915
|
}
|
|
915
916
|
handleNavigationError(event) {
|
|
916
917
|
const duration = performance.now() - this.navigationStartTime;
|
|
917
|
-
this.
|
|
918
|
+
this.updateAppMonPerformance(TriggerFromType.navigateError, this.previousUrl, false, duration).subscribe();
|
|
918
919
|
console.log(event.error);
|
|
919
920
|
this.removeLastNavigateRecord();
|
|
920
921
|
}
|
|
921
|
-
|
|
922
|
+
updateAppMonPerformance(triggerType, url, isSuccess, duration) {
|
|
923
|
+
var _a;
|
|
924
|
+
// Initialize appmonDomainUrl if missing
|
|
922
925
|
if (!this.resourceApiService.appmonDomainUrl) {
|
|
923
|
-
this.resourceApiService.appmonDomainUrl = sessionStorage.getItem('
|
|
926
|
+
this.resourceApiService.appmonDomainUrl = sessionStorage.getItem('AppmonDomainUrl') || '';
|
|
924
927
|
}
|
|
925
|
-
|
|
926
|
-
const pad = (n) => n.toString().padStart(2, '0');
|
|
927
|
-
const timestamp = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}.${date.getMilliseconds().toString().padStart(7, '0')}`;
|
|
928
|
-
const currentDomain = window.location.origin; // Extract the current domain
|
|
928
|
+
// Check for required dependencies
|
|
929
929
|
if (!this.authService.e1Token || !this.resourceApiService.appmonDomainUrl) {
|
|
930
930
|
return of({});
|
|
931
931
|
}
|
|
932
|
+
const getCurrentTimestamp = () => {
|
|
933
|
+
const date = new Date();
|
|
934
|
+
const pad = (n) => n.toString().padStart(2, '0');
|
|
935
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}.${date.getMilliseconds().toString().padStart(7, '0')}`;
|
|
936
|
+
};
|
|
937
|
+
const timestamp = getCurrentTimestamp();
|
|
938
|
+
const currentDomain = window.location.origin;
|
|
939
|
+
// Determine menu name
|
|
940
|
+
const LOGIN_PAGE = 'LoginPage';
|
|
941
|
+
const HOME_PAGE = 'HomePage';
|
|
942
|
+
const AUTH_PATH = '/auth';
|
|
943
|
+
let menuName = sessionStorage.getItem('menuName') || null;
|
|
944
|
+
if (window.location.pathname === AUTH_PATH) {
|
|
945
|
+
menuName = LOGIN_PAGE;
|
|
946
|
+
}
|
|
947
|
+
else if (window.location.pathname === this.environment.startUpPage) {
|
|
948
|
+
menuName = HOME_PAGE;
|
|
949
|
+
}
|
|
950
|
+
// Build the request payload
|
|
932
951
|
const params = {
|
|
933
952
|
Url: `${currentDomain}${url}`,
|
|
934
953
|
IsAuthenticated: true,
|
|
@@ -936,7 +955,7 @@ class MainService {
|
|
|
936
955
|
Duration: duration !== null && duration !== void 0 ? duration : null,
|
|
937
956
|
RequestMethod: 'POST',
|
|
938
957
|
UserName: this.authService.userId,
|
|
939
|
-
UserId: this.authService.e1Token.userName,
|
|
958
|
+
UserId: ((_a = this.authService.e1Token) === null || _a === void 0 ? void 0 : _a.userName) || '',
|
|
940
959
|
Success: isSuccess,
|
|
941
960
|
Environment: 'UI',
|
|
942
961
|
ProjectCode: this.environment.projectCodes[0],
|
|
@@ -944,10 +963,13 @@ class MainService {
|
|
|
944
963
|
ComponentCode: null,
|
|
945
964
|
EventId: null,
|
|
946
965
|
EventType: triggerType,
|
|
947
|
-
SessionId: sessionStorage.getItem('sessionTabId')
|
|
966
|
+
SessionId: sessionStorage.getItem('sessionTabId'),
|
|
967
|
+
MenuName: menuName,
|
|
948
968
|
};
|
|
949
|
-
//
|
|
950
|
-
|
|
969
|
+
// API Endpoint
|
|
970
|
+
const apiEndpoint = `${this.resourceApiService.appmonDomainUrl}api/ApiSummaryInfos/`;
|
|
971
|
+
// Call the web API and handle errors
|
|
972
|
+
return this.webApiService.httpPost$(apiEndpoint, params);
|
|
951
973
|
}
|
|
952
974
|
dialogOpen(options) {
|
|
953
975
|
return this.dialogService.open(options);
|
|
@@ -1204,6 +1226,46 @@ class MainService {
|
|
|
1204
1226
|
}
|
|
1205
1227
|
return false;
|
|
1206
1228
|
}
|
|
1229
|
+
menuOnClick(item) {
|
|
1230
|
+
const { AppClientPath: appClientPath, URL: pathName, Name: name } = item;
|
|
1231
|
+
const startupPage = this.zcoreService.getEnvironment().startUpPage.toLowerCase();
|
|
1232
|
+
const LAUNCHER = 'launcher';
|
|
1233
|
+
// Save menu name to sessionStorage
|
|
1234
|
+
this.menuService.setMenuName(name);
|
|
1235
|
+
// Handle app client path navigation
|
|
1236
|
+
if (appClientPath && startupPage === LAUNCHER) {
|
|
1237
|
+
return this.handleAppClientNavigation(pathName, appClientPath);
|
|
1238
|
+
}
|
|
1239
|
+
// Determine navigation path
|
|
1240
|
+
const navigationPath = this.getNavigationPath(startupPage, pathName);
|
|
1241
|
+
// Navigate to the determined path
|
|
1242
|
+
return this.navigateToPath(navigationPath, pathName);
|
|
1243
|
+
}
|
|
1244
|
+
handleAppClientNavigation(pathName, appClientPath) {
|
|
1245
|
+
try {
|
|
1246
|
+
ZComponentHelper.openAppClientPath(pathName, appClientPath, this.authService);
|
|
1247
|
+
return false;
|
|
1248
|
+
}
|
|
1249
|
+
catch (error) {
|
|
1250
|
+
console.warn(`Failed to open App Client Path for ${pathName}:`, error);
|
|
1251
|
+
return false;
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
getNavigationPath(startupPage, pathName) {
|
|
1255
|
+
const MENU_PAGE_PREFIX = '_';
|
|
1256
|
+
return startupPage.startsWith(MENU_PAGE_PREFIX) ? [startupPage] : [pathName];
|
|
1257
|
+
}
|
|
1258
|
+
navigateToPath(navigationPath, pathName) {
|
|
1259
|
+
try {
|
|
1260
|
+
this.setNavigationParams(navigationPath);
|
|
1261
|
+
this.router.navigate([pathName]);
|
|
1262
|
+
return true;
|
|
1263
|
+
}
|
|
1264
|
+
catch (error) {
|
|
1265
|
+
console.warn(`Navigation to ${pathName} failed:`, error);
|
|
1266
|
+
return false;
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1207
1269
|
navigateFromMenu(pageName) {
|
|
1208
1270
|
const { startUpPage } = this.environment;
|
|
1209
1271
|
this.setRouteParam([`${startUpPage}`]);
|
|
@@ -2055,14 +2117,14 @@ class MainService {
|
|
|
2055
2117
|
}
|
|
2056
2118
|
}
|
|
2057
2119
|
}
|
|
2058
|
-
MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2$1.ModalController }, { token: i2$1.NavController }, { token: i2.AlertService }, { token: i2.CacheService }, { token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.ComponentErrorHandlerService }, { token: i2.WebApiService }, { token: i2.ZCoreService }, { token: i3.ModalService }, { token: i2.StorageSessionService }, { token: ZComponentDebugService }, { token: i2.TranslationService }, { token: i2.SignalrService }, { token: i6.DialogService }, { token: i2.OAuth2Service }, { token: i2.ToastService }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2120
|
+
MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2$1.ModalController }, { token: i2$1.NavController }, { token: i2.AlertService }, { token: i2.CacheService }, { token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.ComponentErrorHandlerService }, { token: i2.WebApiService }, { token: i2.ZCoreService }, { token: i3.ModalService }, { token: i2.StorageSessionService }, { token: ZComponentDebugService }, { token: i2.TranslationService }, { token: i2.SignalrService }, { token: i6.DialogService }, { token: i2.OAuth2Service }, { token: i2.ToastService }, { token: i2.AuthService }, { token: i2.MenuService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2059
2121
|
MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, providedIn: 'root' });
|
|
2060
2122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, decorators: [{
|
|
2061
2123
|
type: Injectable,
|
|
2062
2124
|
args: [{
|
|
2063
2125
|
providedIn: 'root',
|
|
2064
2126
|
}]
|
|
2065
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2$1.ModalController }, { type: i2$1.NavController }, { type: i2.AlertService }, { type: i2.CacheService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.WebApiService }, { type: i2.ZCoreService }, { type: i3.ModalService }, { type: i2.StorageSessionService }, { type: ZComponentDebugService }, { type: i2.TranslationService }, { type: i2.SignalrService }, { type: i6.DialogService }, { type: i2.OAuth2Service }, { type: i2.ToastService }, { type: i2.AuthService }]; } });
|
|
2127
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2$1.ModalController }, { type: i2$1.NavController }, { type: i2.AlertService }, { type: i2.CacheService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.WebApiService }, { type: i2.ZCoreService }, { type: i3.ModalService }, { type: i2.StorageSessionService }, { type: ZComponentDebugService }, { type: i2.TranslationService }, { type: i2.SignalrService }, { type: i6.DialogService }, { type: i2.OAuth2Service }, { type: i2.ToastService }, { type: i2.AuthService }, { type: i2.MenuService }]; } });
|
|
2066
2128
|
function refreshGrid(group) {
|
|
2067
2129
|
const zgridControl = group["gridOptions"];
|
|
2068
2130
|
if (zgridControl) {
|
|
@@ -3205,7 +3267,9 @@ class ZGridBindingDirective extends DataBindingDirective {
|
|
|
3205
3267
|
dataSet.forEach(data => {
|
|
3206
3268
|
ignoreTimeZoneColumns.forEach(col => {
|
|
3207
3269
|
// Adjust datetime based on the timezone ignoring setting
|
|
3208
|
-
|
|
3270
|
+
if (data[col.Value]) {
|
|
3271
|
+
data[col.Value] = this.componentService.localizeDateTimeByIgnoringTimeZone(data[col.Value], col);
|
|
3272
|
+
}
|
|
3209
3273
|
});
|
|
3210
3274
|
});
|
|
3211
3275
|
}
|
|
@@ -4481,10 +4545,10 @@ class FieldBase {
|
|
|
4481
4545
|
this.componentProperties.isRequired = status;
|
|
4482
4546
|
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
|
|
4483
4547
|
if (this.data.Type === 'ztexteditor') {
|
|
4484
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
4548
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
4485
4549
|
}
|
|
4486
4550
|
else {
|
|
4487
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
4551
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
4488
4552
|
}
|
|
4489
4553
|
};
|
|
4490
4554
|
}
|
|
@@ -5369,32 +5433,25 @@ class UiappmenucontentComponent {
|
|
|
5369
5433
|
this.authService = authService;
|
|
5370
5434
|
this.zcoreService = zcoreService;
|
|
5371
5435
|
this.mainService = mainService;
|
|
5436
|
+
this.MENU_TYPE_DROPDOWN_SUBMENU = 'dropdown-submenu';
|
|
5372
5437
|
}
|
|
5373
5438
|
ngOnInit() {
|
|
5374
5439
|
}
|
|
5375
5440
|
getDivClass(item) {
|
|
5376
|
-
|
|
5441
|
+
if (!item || !item.Type)
|
|
5442
|
+
return 'col-xs-4 col-sm-4 col-md-3 col-xl-2 menu-col';
|
|
5443
|
+
return (item.Type === this.MENU_TYPE_DROPDOWN_SUBMENU ? 'flex-show' : 'col-xs-4 col-sm-4 col-md-3 col-xl-2') + ' menu-col';
|
|
5377
5444
|
}
|
|
5378
5445
|
getMenuList(item) {
|
|
5379
|
-
|
|
5446
|
+
if (!item || item.Type !== this.MENU_TYPE_DROPDOWN_SUBMENU)
|
|
5447
|
+
return null;
|
|
5448
|
+
return this.menuService.getMenuFolder(item.URL);
|
|
5380
5449
|
}
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
}
|
|
5387
|
-
else {
|
|
5388
|
-
if (startupPage.indexOf('_', 0) == 0) {
|
|
5389
|
-
// menu page
|
|
5390
|
-
this.mainService.setNavigationParams([startupPage]);
|
|
5391
|
-
}
|
|
5392
|
-
else {
|
|
5393
|
-
// home page
|
|
5394
|
-
this.mainService.setNavigationParams([pathName]);
|
|
5395
|
-
}
|
|
5396
|
-
this.router.navigate([pathName]);
|
|
5397
|
-
}
|
|
5450
|
+
trackByFn(index, item) {
|
|
5451
|
+
return item.URL || index.toString(); // Unique identifier or fallback to index
|
|
5452
|
+
}
|
|
5453
|
+
menuOnClick(item) {
|
|
5454
|
+
return this.mainService.menuOnClick(item);
|
|
5398
5455
|
}
|
|
5399
5456
|
setMapInput(key, value) {
|
|
5400
5457
|
const mapInput = document.createElement('input');
|
|
@@ -5405,10 +5462,10 @@ class UiappmenucontentComponent {
|
|
|
5405
5462
|
}
|
|
5406
5463
|
}
|
|
5407
5464
|
UiappmenucontentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiappmenucontentComponent, deps: [{ token: i1.Router }, { token: i2.MenuService }, { token: i2.AuthService }, { token: i2.ZCoreService }, { token: MainService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5408
|
-
UiappmenucontentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiappmenucontentComponent, selector: "app-uiappmenucontent", inputs: { items: "items" }, ngImport: i0, template: "<ion-grid>\r\n <ion-row>\r\n <ion-col
|
|
5465
|
+
UiappmenucontentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiappmenucontentComponent, selector: "app-uiappmenucontent", inputs: { items: "items" }, ngImport: i0, template: "<ion-grid>\r\n <ion-row>\r\n <ion-col\r\n [ngClass]=\"getDivClass(item)\"\r\n *ngFor=\"let item of items; index as i; trackBy: trackByFn\"\r\n >\r\n\r\n <!-- Regular Menu Item (non-submenu) -->\r\n <div\r\n *ngIf=\"item.Type !== MENU_TYPE_DROPDOWN_SUBMENU\"\r\n class=\"menu-btn ion-activatable ripple-parent\"\r\n (click)=\"menuOnClick(item)\">\r\n <ion-label class=\"menu-btn-label menu-btn-icon\">\r\n <fa-icon\r\n class=\"menu-icon\"\r\n [icon]=\"['fas', item.Icon]\"\r\n [inverse]=\"true\"\r\n ></fa-icon>\r\n\r\n <!-- 1) Spinner if loading -->\r\n <ion-badge \r\n class=\"pending-counter\"\r\n *ngIf=\"item.counterLoading\">\r\n <ion-spinner name=\"bubbles\"></ion-spinner>\r\n </ion-badge>\r\n\r\n <!-- 2) Numeric badge if loaded & > 0 -->\r\n <ion-badge\r\n class=\"pending-counter\"\r\n *ngIf=\"!item.counterLoading && item.PendingCounter && item.PendingCounter > 0\">\r\n {{ item.PendingCounter }}\r\n </ion-badge>\r\n </ion-label>\r\n\r\n <ion-label class=\"menu-btn-label-text\">\r\n {{ item.Label }}\r\n </ion-label>\r\n\r\n <ion-label\r\n *ngIf=\"item.Description\"\r\n class=\"menu-btn-label-text menu-btn-label-text-desc\"\r\n >\r\n {{ item.Description }}\r\n </ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </div>\r\n\r\n <!-- Dropdown Submenu -->\r\n <kendo-card *ngIf=\"item.Type === MENU_TYPE_DROPDOWN_SUBMENU\">\r\n <kendo-card-header class=\"k-hstack\">\r\n <ion-label class=\"card-title\" kendoCardTitle>\r\n {{ item.Label }}\r\n </ion-label>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div>\r\n <app-uiappmenucontent [items]=\"getMenuList(item) || []\"></app-uiappmenucontent>\r\n </div>\r\n </kendo-card-body>\r\n </kendo-card>\r\n </ion-col>\r\n </ion-row>\r\n</ion-grid>\r\n", styles: ["ion-grid{max-width:2000px;margin-top:10px}:host ::ng-deep kendo-card{width:95%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card .k-card-body{padding-top:0}.menu-col{padding:10px}.menu-btn{margin:0;padding:0;border:0px;display:flex;flex-flow:column;align-items:stretch;background-color:#fff;cursor:pointer;border-radius:5px;box-shadow:1px 1px 4px #797979;min-width:180px;max-width:250px;min-height:123px;max-height:123px;color:#fff;background:var(--ion-color-primary)}.menu-btn:hover{box-shadow:0 0 2px 2px var(--ion-color-secondary)}.menu-btn:hover .menu-btn-label-text-desc{bottom:0;transition:.5s ease bottom;width:100%}.menu-btn-label-text{text-align:center;font-size:16px;font-weight:600;padding:10px 5px}.menu-btn-label-text-desc{bottom:-100%;transition:.5s ease bottom;display:block;position:absolute;color:#000;font-size:16px;background-color:#fff;padding:8px 10px;border:1px solid #797979;border-radius:5px;text-shadow:0px 0px black;width:100%;text-align:left;font-size:14px;font-weight:500}.ripple-parent{position:relative;overflow:hidden}.menu-btn-label{text-align:center;font-size:15px}.menu-icon{zoom:3;position:relative;top:2px}.menu-btn-icon{position:relative;background-size:100%;text-align:center;font-size:15px;top:.4em}.pending-counter{position:absolute;top:.4em;right:.4em;background-color:#ff243a;color:#fff;border-radius:1em;min-width:2.5em;max-width:6em;height:1.5em;display:inline-flex;align-items:center;justify-content:center;text-align:center;padding:0 .5em;box-sizing:border-box;font-size:1.2rem;line-height:1.1}\n"], components: [{ type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2$1.IonRow, selector: "ion-row" }, { type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2$1.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { type: i2$1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i2$1.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }, { type: i2$5.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { type: i2$5.CardHeaderComponent, selector: "kendo-card-header" }, { type: i2$5.CardBodyComponent, selector: "kendo-card-body" }, { type: UiappmenucontentComponent, selector: "app-uiappmenucontent", inputs: ["items"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$5.CardTitleDirective, selector: "[kendoCardTitle]" }] });
|
|
5409
5466
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiappmenucontentComponent, decorators: [{
|
|
5410
5467
|
type: Component,
|
|
5411
|
-
args: [{ selector: 'app-uiappmenucontent', template: "<ion-grid>\r\n <ion-row>\r\n <ion-col
|
|
5468
|
+
args: [{ selector: 'app-uiappmenucontent', template: "<ion-grid>\r\n <ion-row>\r\n <ion-col\r\n [ngClass]=\"getDivClass(item)\"\r\n *ngFor=\"let item of items; index as i; trackBy: trackByFn\"\r\n >\r\n\r\n <!-- Regular Menu Item (non-submenu) -->\r\n <div\r\n *ngIf=\"item.Type !== MENU_TYPE_DROPDOWN_SUBMENU\"\r\n class=\"menu-btn ion-activatable ripple-parent\"\r\n (click)=\"menuOnClick(item)\">\r\n <ion-label class=\"menu-btn-label menu-btn-icon\">\r\n <fa-icon\r\n class=\"menu-icon\"\r\n [icon]=\"['fas', item.Icon]\"\r\n [inverse]=\"true\"\r\n ></fa-icon>\r\n\r\n <!-- 1) Spinner if loading -->\r\n <ion-badge \r\n class=\"pending-counter\"\r\n *ngIf=\"item.counterLoading\">\r\n <ion-spinner name=\"bubbles\"></ion-spinner>\r\n </ion-badge>\r\n\r\n <!-- 2) Numeric badge if loaded & > 0 -->\r\n <ion-badge\r\n class=\"pending-counter\"\r\n *ngIf=\"!item.counterLoading && item.PendingCounter && item.PendingCounter > 0\">\r\n {{ item.PendingCounter }}\r\n </ion-badge>\r\n </ion-label>\r\n\r\n <ion-label class=\"menu-btn-label-text\">\r\n {{ item.Label }}\r\n </ion-label>\r\n\r\n <ion-label\r\n *ngIf=\"item.Description\"\r\n class=\"menu-btn-label-text menu-btn-label-text-desc\"\r\n >\r\n {{ item.Description }}\r\n </ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </div>\r\n\r\n <!-- Dropdown Submenu -->\r\n <kendo-card *ngIf=\"item.Type === MENU_TYPE_DROPDOWN_SUBMENU\">\r\n <kendo-card-header class=\"k-hstack\">\r\n <ion-label class=\"card-title\" kendoCardTitle>\r\n {{ item.Label }}\r\n </ion-label>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div>\r\n <app-uiappmenucontent [items]=\"getMenuList(item) || []\"></app-uiappmenucontent>\r\n </div>\r\n </kendo-card-body>\r\n </kendo-card>\r\n </ion-col>\r\n </ion-row>\r\n</ion-grid>\r\n", styles: ["ion-grid{max-width:2000px;margin-top:10px}:host ::ng-deep kendo-card{width:95%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card .k-card-body{padding-top:0}.menu-col{padding:10px}.menu-btn{margin:0;padding:0;border:0px;display:flex;flex-flow:column;align-items:stretch;background-color:#fff;cursor:pointer;border-radius:5px;box-shadow:1px 1px 4px #797979;min-width:180px;max-width:250px;min-height:123px;max-height:123px;color:#fff;background:var(--ion-color-primary)}.menu-btn:hover{box-shadow:0 0 2px 2px var(--ion-color-secondary)}.menu-btn:hover .menu-btn-label-text-desc{bottom:0;transition:.5s ease bottom;width:100%}.menu-btn-label-text{text-align:center;font-size:16px;font-weight:600;padding:10px 5px}.menu-btn-label-text-desc{bottom:-100%;transition:.5s ease bottom;display:block;position:absolute;color:#000;font-size:16px;background-color:#fff;padding:8px 10px;border:1px solid #797979;border-radius:5px;text-shadow:0px 0px black;width:100%;text-align:left;font-size:14px;font-weight:500}.ripple-parent{position:relative;overflow:hidden}.menu-btn-label{text-align:center;font-size:15px}.menu-icon{zoom:3;position:relative;top:2px}.menu-btn-icon{position:relative;background-size:100%;text-align:center;font-size:15px;top:.4em}.pending-counter{position:absolute;top:.4em;right:.4em;background-color:#ff243a;color:#fff;border-radius:1em;min-width:2.5em;max-width:6em;height:1.5em;display:inline-flex;align-items:center;justify-content:center;text-align:center;padding:0 .5em;box-sizing:border-box;font-size:1.2rem;line-height:1.1}\n"] }]
|
|
5412
5469
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.MenuService }, { type: i2.AuthService }, { type: i2.ZCoreService }, { type: MainService }]; }, propDecorators: { items: [{
|
|
5413
5470
|
type: Input
|
|
5414
5471
|
}] } });
|
|
@@ -8597,11 +8654,8 @@ class ZtextareaComponent extends InputFieldBase {
|
|
|
8597
8654
|
}
|
|
8598
8655
|
setCharCounterDisplayStr() {
|
|
8599
8656
|
let characterCount = 0;
|
|
8600
|
-
if (
|
|
8601
|
-
characterCount =
|
|
8602
|
-
}
|
|
8603
|
-
else {
|
|
8604
|
-
characterCount = ZComponentHelper.getValueWithoutContinuousSpaces(this.group.zModel[this.data.Value]).length;
|
|
8657
|
+
if (this.group.zModel && this.group.zModel[this.data.Value]) {
|
|
8658
|
+
characterCount = this.group.zModel[this.data.Value].length;
|
|
8605
8659
|
}
|
|
8606
8660
|
this.charCounterDisplayStr = `${characterCount} ${this.data.MaxLength ? (' / ' + this.data.MaxLength) : ''}`;
|
|
8607
8661
|
}
|
|
@@ -10267,10 +10321,10 @@ class ZgridComponent extends DataListingFieldBase {
|
|
|
10267
10321
|
if (col.IsRequired) {
|
|
10268
10322
|
validators.push(Validators.required);
|
|
10269
10323
|
if (col.Type === 'ztexteditor') {
|
|
10270
|
-
validators.push(ZComponentHelper.
|
|
10324
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
10271
10325
|
}
|
|
10272
10326
|
else {
|
|
10273
|
-
validators.push(ZComponentHelper.
|
|
10327
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
10274
10328
|
}
|
|
10275
10329
|
}
|
|
10276
10330
|
if (col.ValidatorPattern) {
|
|
@@ -10340,10 +10394,10 @@ class ZgridComponent extends DataListingFieldBase {
|
|
|
10340
10394
|
if (col.IsRequired) {
|
|
10341
10395
|
validators.push(Validators.required);
|
|
10342
10396
|
if (col.Type === 'ztexteditor') {
|
|
10343
|
-
validators.push(ZComponentHelper.
|
|
10397
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
10344
10398
|
}
|
|
10345
10399
|
else {
|
|
10346
|
-
validators.push(ZComponentHelper.
|
|
10400
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
10347
10401
|
}
|
|
10348
10402
|
}
|
|
10349
10403
|
if (col.ValidatorPattern) {
|
|
@@ -12879,10 +12933,10 @@ class ZudfComponent extends ContainerFieldBase {
|
|
|
12879
12933
|
this.componentProperties.isRequired = status;
|
|
12880
12934
|
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
|
|
12881
12935
|
if (this.data.Type === 'ztexteditor') {
|
|
12882
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
12936
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
12883
12937
|
}
|
|
12884
12938
|
else {
|
|
12885
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
12939
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
12886
12940
|
}
|
|
12887
12941
|
};
|
|
12888
12942
|
}
|