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
|
@@ -827,7 +827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
827
827
|
|
|
828
828
|
/********** Angular **********/
|
|
829
829
|
class MainService {
|
|
830
|
-
constructor(router, activatedRoute, modalCtrl, navController, alertService, cacheService, fieldService, resourceApiService, componentErrorHandlerService, webApiService, zcoreService, modalService, storageService, debugService, translationService, signalrService, dialogService, oauth2Service, toastService, authService) {
|
|
830
|
+
constructor(router, activatedRoute, modalCtrl, navController, alertService, cacheService, fieldService, resourceApiService, componentErrorHandlerService, webApiService, zcoreService, modalService, storageService, debugService, translationService, signalrService, dialogService, oauth2Service, toastService, authService, menuService) {
|
|
831
831
|
this.router = router;
|
|
832
832
|
this.activatedRoute = activatedRoute;
|
|
833
833
|
this.modalCtrl = modalCtrl;
|
|
@@ -848,6 +848,7 @@ class MainService {
|
|
|
848
848
|
this.oauth2Service = oauth2Service;
|
|
849
849
|
this.toastService = toastService;
|
|
850
850
|
this.authService = authService;
|
|
851
|
+
this.menuService = menuService;
|
|
851
852
|
this.backNavigationPath = [];
|
|
852
853
|
this.routeParam = [];
|
|
853
854
|
this.currentUrl = '';
|
|
@@ -893,7 +894,7 @@ class MainService {
|
|
|
893
894
|
this.previousUrl = this.currentUrl || window.location.pathname;
|
|
894
895
|
this.currentUrl = event.url;
|
|
895
896
|
const triggerType = this.previousUrl === this.currentUrl ? TriggerFromType.refreshStart : TriggerFromType.navigateStart;
|
|
896
|
-
this.
|
|
897
|
+
this.updateAppMonPerformance(triggerType, this.previousUrl, true).subscribe();
|
|
897
898
|
this.dismissAllOverlays();
|
|
898
899
|
if (this.getStartupPage() === event.url) {
|
|
899
900
|
this.resetRouteParam();
|
|
@@ -902,27 +903,44 @@ class MainService {
|
|
|
902
903
|
handleNavigationEnd(event) {
|
|
903
904
|
const duration = performance.now() - this.navigationStartTime;
|
|
904
905
|
const triggerType = this.previousUrl === this.currentUrl ? TriggerFromType.refreshEnd : TriggerFromType.navigateEnd;
|
|
905
|
-
this.
|
|
906
|
+
this.updateAppMonPerformance(triggerType, event.urlAfterRedirects, true, duration).subscribe();
|
|
906
907
|
this.currentUrl = event.urlAfterRedirects;
|
|
907
908
|
console.log(event);
|
|
908
909
|
}
|
|
909
910
|
handleNavigationError(event) {
|
|
910
911
|
const duration = performance.now() - this.navigationStartTime;
|
|
911
|
-
this.
|
|
912
|
+
this.updateAppMonPerformance(TriggerFromType.navigateError, this.previousUrl, false, duration).subscribe();
|
|
912
913
|
console.log(event.error);
|
|
913
914
|
this.removeLastNavigateRecord();
|
|
914
915
|
}
|
|
915
|
-
|
|
916
|
+
updateAppMonPerformance(triggerType, url, isSuccess, duration) {
|
|
917
|
+
// Initialize appmonDomainUrl if missing
|
|
916
918
|
if (!this.resourceApiService.appmonDomainUrl) {
|
|
917
|
-
this.resourceApiService.appmonDomainUrl = sessionStorage.getItem('
|
|
919
|
+
this.resourceApiService.appmonDomainUrl = sessionStorage.getItem('AppmonDomainUrl') || '';
|
|
918
920
|
}
|
|
919
|
-
|
|
920
|
-
const pad = (n) => n.toString().padStart(2, '0');
|
|
921
|
-
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')}`;
|
|
922
|
-
const currentDomain = window.location.origin; // Extract the current domain
|
|
921
|
+
// Check for required dependencies
|
|
923
922
|
if (!this.authService.e1Token || !this.resourceApiService.appmonDomainUrl) {
|
|
924
923
|
return of({});
|
|
925
924
|
}
|
|
925
|
+
const getCurrentTimestamp = () => {
|
|
926
|
+
const date = new Date();
|
|
927
|
+
const pad = (n) => n.toString().padStart(2, '0');
|
|
928
|
+
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')}`;
|
|
929
|
+
};
|
|
930
|
+
const timestamp = getCurrentTimestamp();
|
|
931
|
+
const currentDomain = window.location.origin;
|
|
932
|
+
// Determine menu name
|
|
933
|
+
const LOGIN_PAGE = 'LoginPage';
|
|
934
|
+
const HOME_PAGE = 'HomePage';
|
|
935
|
+
const AUTH_PATH = '/auth';
|
|
936
|
+
let menuName = sessionStorage.getItem('menuName') || null;
|
|
937
|
+
if (window.location.pathname === AUTH_PATH) {
|
|
938
|
+
menuName = LOGIN_PAGE;
|
|
939
|
+
}
|
|
940
|
+
else if (window.location.pathname === this.environment.startUpPage) {
|
|
941
|
+
menuName = HOME_PAGE;
|
|
942
|
+
}
|
|
943
|
+
// Build the request payload
|
|
926
944
|
const params = {
|
|
927
945
|
Url: `${currentDomain}${url}`,
|
|
928
946
|
IsAuthenticated: true,
|
|
@@ -930,7 +948,7 @@ class MainService {
|
|
|
930
948
|
Duration: duration ?? null,
|
|
931
949
|
RequestMethod: 'POST',
|
|
932
950
|
UserName: this.authService.userId,
|
|
933
|
-
UserId: this.authService.e1Token
|
|
951
|
+
UserId: this.authService.e1Token?.userName || '',
|
|
934
952
|
Success: isSuccess,
|
|
935
953
|
Environment: 'UI',
|
|
936
954
|
ProjectCode: this.environment.projectCodes[0],
|
|
@@ -938,10 +956,13 @@ class MainService {
|
|
|
938
956
|
ComponentCode: null,
|
|
939
957
|
EventId: null,
|
|
940
958
|
EventType: triggerType,
|
|
941
|
-
SessionId: sessionStorage.getItem('sessionTabId')
|
|
959
|
+
SessionId: sessionStorage.getItem('sessionTabId'),
|
|
960
|
+
MenuName: menuName,
|
|
942
961
|
};
|
|
943
|
-
//
|
|
944
|
-
|
|
962
|
+
// API Endpoint
|
|
963
|
+
const apiEndpoint = `${this.resourceApiService.appmonDomainUrl}api/ApiSummaryInfos/`;
|
|
964
|
+
// Call the web API and handle errors
|
|
965
|
+
return this.webApiService.httpPost$(apiEndpoint, params);
|
|
945
966
|
}
|
|
946
967
|
dialogOpen(options) {
|
|
947
968
|
return this.dialogService.open(options);
|
|
@@ -1197,6 +1218,46 @@ class MainService {
|
|
|
1197
1218
|
}
|
|
1198
1219
|
return false;
|
|
1199
1220
|
}
|
|
1221
|
+
menuOnClick(item) {
|
|
1222
|
+
const { AppClientPath: appClientPath, URL: pathName, Name: name } = item;
|
|
1223
|
+
const startupPage = this.zcoreService.getEnvironment().startUpPage.toLowerCase();
|
|
1224
|
+
const LAUNCHER = 'launcher';
|
|
1225
|
+
// Save menu name to sessionStorage
|
|
1226
|
+
this.menuService.setMenuName(name);
|
|
1227
|
+
// Handle app client path navigation
|
|
1228
|
+
if (appClientPath && startupPage === LAUNCHER) {
|
|
1229
|
+
return this.handleAppClientNavigation(pathName, appClientPath);
|
|
1230
|
+
}
|
|
1231
|
+
// Determine navigation path
|
|
1232
|
+
const navigationPath = this.getNavigationPath(startupPage, pathName);
|
|
1233
|
+
// Navigate to the determined path
|
|
1234
|
+
return this.navigateToPath(navigationPath, pathName);
|
|
1235
|
+
}
|
|
1236
|
+
handleAppClientNavigation(pathName, appClientPath) {
|
|
1237
|
+
try {
|
|
1238
|
+
ZComponentHelper.openAppClientPath(pathName, appClientPath, this.authService);
|
|
1239
|
+
return false;
|
|
1240
|
+
}
|
|
1241
|
+
catch (error) {
|
|
1242
|
+
console.warn(`Failed to open App Client Path for ${pathName}:`, error);
|
|
1243
|
+
return false;
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
getNavigationPath(startupPage, pathName) {
|
|
1247
|
+
const MENU_PAGE_PREFIX = '_';
|
|
1248
|
+
return startupPage.startsWith(MENU_PAGE_PREFIX) ? [startupPage] : [pathName];
|
|
1249
|
+
}
|
|
1250
|
+
navigateToPath(navigationPath, pathName) {
|
|
1251
|
+
try {
|
|
1252
|
+
this.setNavigationParams(navigationPath);
|
|
1253
|
+
this.router.navigate([pathName]);
|
|
1254
|
+
return true;
|
|
1255
|
+
}
|
|
1256
|
+
catch (error) {
|
|
1257
|
+
console.warn(`Navigation to ${pathName} failed:`, error);
|
|
1258
|
+
return false;
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1200
1261
|
navigateFromMenu(pageName) {
|
|
1201
1262
|
const { startUpPage } = this.environment;
|
|
1202
1263
|
this.setRouteParam([`${startUpPage}`]);
|
|
@@ -2037,14 +2098,14 @@ class MainService {
|
|
|
2037
2098
|
}
|
|
2038
2099
|
}
|
|
2039
2100
|
}
|
|
2040
|
-
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 });
|
|
2101
|
+
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 });
|
|
2041
2102
|
MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, providedIn: 'root' });
|
|
2042
2103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, decorators: [{
|
|
2043
2104
|
type: Injectable,
|
|
2044
2105
|
args: [{
|
|
2045
2106
|
providedIn: 'root',
|
|
2046
2107
|
}]
|
|
2047
|
-
}], 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 }]; } });
|
|
2108
|
+
}], 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 }]; } });
|
|
2048
2109
|
function refreshGrid(group) {
|
|
2049
2110
|
const zgridControl = group["gridOptions"];
|
|
2050
2111
|
if (zgridControl) {
|
|
@@ -3186,7 +3247,9 @@ class ZGridBindingDirective extends DataBindingDirective {
|
|
|
3186
3247
|
dataSet.forEach(data => {
|
|
3187
3248
|
ignoreTimeZoneColumns.forEach(col => {
|
|
3188
3249
|
// Adjust datetime based on the timezone ignoring setting
|
|
3189
|
-
|
|
3250
|
+
if (data[col.Value]) {
|
|
3251
|
+
data[col.Value] = this.componentService.localizeDateTimeByIgnoringTimeZone(data[col.Value], col);
|
|
3252
|
+
}
|
|
3190
3253
|
});
|
|
3191
3254
|
});
|
|
3192
3255
|
}
|
|
@@ -4458,10 +4521,10 @@ class FieldBase {
|
|
|
4458
4521
|
this.componentProperties.isRequired = status;
|
|
4459
4522
|
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
|
|
4460
4523
|
if (this.data.Type === 'ztexteditor') {
|
|
4461
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
4524
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
4462
4525
|
}
|
|
4463
4526
|
else {
|
|
4464
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
4527
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
4465
4528
|
}
|
|
4466
4529
|
};
|
|
4467
4530
|
}
|
|
@@ -5345,32 +5408,25 @@ class UiappmenucontentComponent {
|
|
|
5345
5408
|
this.authService = authService;
|
|
5346
5409
|
this.zcoreService = zcoreService;
|
|
5347
5410
|
this.mainService = mainService;
|
|
5411
|
+
this.MENU_TYPE_DROPDOWN_SUBMENU = 'dropdown-submenu';
|
|
5348
5412
|
}
|
|
5349
5413
|
ngOnInit() {
|
|
5350
5414
|
}
|
|
5351
5415
|
getDivClass(item) {
|
|
5352
|
-
|
|
5416
|
+
if (!item || !item.Type)
|
|
5417
|
+
return 'col-xs-4 col-sm-4 col-md-3 col-xl-2 menu-col';
|
|
5418
|
+
return (item.Type === this.MENU_TYPE_DROPDOWN_SUBMENU ? 'flex-show' : 'col-xs-4 col-sm-4 col-md-3 col-xl-2') + ' menu-col';
|
|
5353
5419
|
}
|
|
5354
5420
|
getMenuList(item) {
|
|
5355
|
-
|
|
5421
|
+
if (!item || item.Type !== this.MENU_TYPE_DROPDOWN_SUBMENU)
|
|
5422
|
+
return null;
|
|
5423
|
+
return this.menuService.getMenuFolder(item.URL);
|
|
5356
5424
|
}
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
}
|
|
5363
|
-
else {
|
|
5364
|
-
if (startupPage.indexOf('_', 0) == 0) {
|
|
5365
|
-
// menu page
|
|
5366
|
-
this.mainService.setNavigationParams([startupPage]);
|
|
5367
|
-
}
|
|
5368
|
-
else {
|
|
5369
|
-
// home page
|
|
5370
|
-
this.mainService.setNavigationParams([pathName]);
|
|
5371
|
-
}
|
|
5372
|
-
this.router.navigate([pathName]);
|
|
5373
|
-
}
|
|
5425
|
+
trackByFn(index, item) {
|
|
5426
|
+
return item.URL || index.toString(); // Unique identifier or fallback to index
|
|
5427
|
+
}
|
|
5428
|
+
menuOnClick(item) {
|
|
5429
|
+
return this.mainService.menuOnClick(item);
|
|
5374
5430
|
}
|
|
5375
5431
|
setMapInput(key, value) {
|
|
5376
5432
|
const mapInput = document.createElement('input');
|
|
@@ -5381,10 +5437,10 @@ class UiappmenucontentComponent {
|
|
|
5381
5437
|
}
|
|
5382
5438
|
}
|
|
5383
5439
|
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 });
|
|
5384
|
-
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
|
|
5440
|
+
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]" }] });
|
|
5385
5441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiappmenucontentComponent, decorators: [{
|
|
5386
5442
|
type: Component,
|
|
5387
|
-
args: [{ selector: 'app-uiappmenucontent', template: "<ion-grid>\r\n <ion-row>\r\n <ion-col
|
|
5443
|
+
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"] }]
|
|
5388
5444
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.MenuService }, { type: i2.AuthService }, { type: i2.ZCoreService }, { type: MainService }]; }, propDecorators: { items: [{
|
|
5389
5445
|
type: Input
|
|
5390
5446
|
}] } });
|
|
@@ -8567,11 +8623,8 @@ class ZtextareaComponent extends InputFieldBase {
|
|
|
8567
8623
|
}
|
|
8568
8624
|
setCharCounterDisplayStr() {
|
|
8569
8625
|
let characterCount = 0;
|
|
8570
|
-
if (
|
|
8571
|
-
characterCount =
|
|
8572
|
-
}
|
|
8573
|
-
else {
|
|
8574
|
-
characterCount = ZComponentHelper.getValueWithoutContinuousSpaces(this.group.zModel[this.data.Value]).length;
|
|
8626
|
+
if (this.group.zModel && this.group.zModel[this.data.Value]) {
|
|
8627
|
+
characterCount = this.group.zModel[this.data.Value].length;
|
|
8575
8628
|
}
|
|
8576
8629
|
this.charCounterDisplayStr = `${characterCount} ${this.data.MaxLength ? (' / ' + this.data.MaxLength) : ''}`;
|
|
8577
8630
|
}
|
|
@@ -10234,10 +10287,10 @@ class ZgridComponent extends DataListingFieldBase {
|
|
|
10234
10287
|
if (col.IsRequired) {
|
|
10235
10288
|
validators.push(Validators.required);
|
|
10236
10289
|
if (col.Type === 'ztexteditor') {
|
|
10237
|
-
validators.push(ZComponentHelper.
|
|
10290
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
10238
10291
|
}
|
|
10239
10292
|
else {
|
|
10240
|
-
validators.push(ZComponentHelper.
|
|
10293
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
10241
10294
|
}
|
|
10242
10295
|
}
|
|
10243
10296
|
if (col.ValidatorPattern) {
|
|
@@ -10307,10 +10360,10 @@ class ZgridComponent extends DataListingFieldBase {
|
|
|
10307
10360
|
if (col.IsRequired) {
|
|
10308
10361
|
validators.push(Validators.required);
|
|
10309
10362
|
if (col.Type === 'ztexteditor') {
|
|
10310
|
-
validators.push(ZComponentHelper.
|
|
10363
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
10311
10364
|
}
|
|
10312
10365
|
else {
|
|
10313
|
-
validators.push(ZComponentHelper.
|
|
10366
|
+
validators.push(ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
10314
10367
|
}
|
|
10315
10368
|
}
|
|
10316
10369
|
if (col.ValidatorPattern) {
|
|
@@ -12849,10 +12902,10 @@ class ZudfComponent extends ContainerFieldBase {
|
|
|
12849
12902
|
this.componentProperties.isRequired = status;
|
|
12850
12903
|
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
|
|
12851
12904
|
if (this.data.Type === 'ztexteditor') {
|
|
12852
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
12905
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpacesAndHTMLTags);
|
|
12853
12906
|
}
|
|
12854
12907
|
else {
|
|
12855
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.
|
|
12908
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, ZComponentHelper.requiredValidator_ExcludeWhiteSpaces);
|
|
12856
12909
|
}
|
|
12857
12910
|
};
|
|
12858
12911
|
}
|