@corp-products/app-core 1.0.2 → 1.0.4
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/esm2022/lib/core/components/index.mjs +2 -5
- package/fesm2022/corp-products-app-core.mjs +48 -283
- package/fesm2022/corp-products-app-core.mjs.map +1 -1
- package/lib/core/components/index.d.ts +1 -4
- package/package.json +2 -3
- package/esm2022/lib/core/components/app-breadcrumb/app-breadcrumb.component.mjs +0 -105
- package/esm2022/lib/core/components/app-breadcrumb/app-breadcrumb.interface.mjs +0 -2
- package/esm2022/lib/core/components/app-header/app-header.component.mjs +0 -51
- package/esm2022/lib/core/components/app-side-menu/app-side-menu.component.mjs +0 -31
- package/esm2022/lib/core/components/app-side-menu/routes-names.mjs +0 -27
- package/esm2022/lib/core/components/app-side-menu/side-menu-items.mjs +0 -44
- package/esm2022/lib/core/components/app-side-menu/side-menu.mjs +0 -2
- package/lib/core/components/app-breadcrumb/app-breadcrumb.component.d.ts +0 -18
- package/lib/core/components/app-breadcrumb/app-breadcrumb.interface.d.ts +0 -12
- package/lib/core/components/app-header/app-header.component.d.ts +0 -19
- package/lib/core/components/app-side-menu/app-side-menu.component.d.ts +0 -13
- package/lib/core/components/app-side-menu/routes-names.d.ts +0 -2
- package/lib/core/components/app-side-menu/side-menu-items.d.ts +0 -2
- package/lib/core/components/app-side-menu/side-menu.d.ts +0 -11
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
|
|
3
|
-
export * from './app-side-menu/app-side-menu.component';
|
|
4
|
-
export * from './global-loader/global-loader.component';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb3JlL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXBwLWJyZWFkY3J1bWIvYXBwLWJyZWFkY3J1bWIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHAtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHAtc2lkZS1tZW51L2FwcC1zaWRlLW1lbnUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9nbG9iYWwtbG9hZGVyL2dsb2JhbC1sb2FkZXIuY29tcG9uZW50JztcclxuIl19
|
|
1
|
+
export * from "./global-loader/global-loader.component";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb3JlL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2dsb2JhbC1sb2FkZXIvZ2xvYmFsLWxvYWRlci5jb21wb25lbnRcIjtcclxuIl19
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AsyncPipe, NgClass } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import * as
|
|
5
|
-
import {
|
|
6
|
-
import { Breadcrumb } from 'primeng/breadcrumb';
|
|
7
|
-
import { filter, BehaviorSubject, tap, finalize, timer, retry, from } from 'rxjs';
|
|
8
|
-
import { AppButtonComponent } from '@corp-products/ui-components';
|
|
9
|
-
import { Menu } from 'primeng/menu';
|
|
3
|
+
import { inject, InjectionToken, Inject, Injectable, Input, Component, Directive } from '@angular/core';
|
|
4
|
+
import * as i2 from '@ngx-translate/core';
|
|
5
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
10
6
|
import { jwtDecode } from 'jwt-decode';
|
|
7
|
+
import { BehaviorSubject, tap, finalize, timer, retry, from } from 'rxjs';
|
|
11
8
|
import { map } from 'rxjs/operators';
|
|
12
9
|
import { HttpClient, HttpContextToken, HttpContext, HttpErrorResponse } from '@angular/common/http';
|
|
13
|
-
import * as i1
|
|
14
|
-
import
|
|
15
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
10
|
+
import * as i1 from 'primeng/api';
|
|
11
|
+
import { Router } from '@angular/router';
|
|
16
12
|
|
|
17
13
|
const PAGESIZE = 10;
|
|
18
14
|
const PAGE_SIZE_OPTION = [5, 10, 15, 20];
|
|
@@ -70,104 +66,6 @@ class BasePaginationService {
|
|
|
70
66
|
}
|
|
71
67
|
}
|
|
72
68
|
|
|
73
|
-
class AppBreadcrumbComponent {
|
|
74
|
-
constructor(activatedRoute, router) {
|
|
75
|
-
this.activatedRoute = activatedRoute;
|
|
76
|
-
this.router = router;
|
|
77
|
-
}
|
|
78
|
-
ngOnInit() {
|
|
79
|
-
this.router.events
|
|
80
|
-
.pipe(filter(event => event instanceof NavigationEnd))
|
|
81
|
-
.subscribe((e) => {
|
|
82
|
-
// remove duplicates
|
|
83
|
-
this.items = this._createBreadcrumbs(this.activatedRoute.root).filter((item, index, self) => index === self.findIndex((t) => t.label === item.label && t.routerLink === item.routerLink));
|
|
84
|
-
this._checkHiddenBreadcrumb();
|
|
85
|
-
this._checkEmpty();
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
_checkHiddenBreadcrumb() {
|
|
89
|
-
const activeBreadcrumb = this.items?.find((item) => {
|
|
90
|
-
return item.routerLink === this.router.url;
|
|
91
|
-
});
|
|
92
|
-
this.isShownBreadcrumb = !!activeBreadcrumb?.isShownBreadcrumb;
|
|
93
|
-
}
|
|
94
|
-
_createBreadcrumbs(activatedRoute, routerLink = '', breadcrumbs = []) {
|
|
95
|
-
const children = activatedRoute.children;
|
|
96
|
-
if (children.length === 0) {
|
|
97
|
-
return breadcrumbs;
|
|
98
|
-
}
|
|
99
|
-
for (const child of children) {
|
|
100
|
-
const routeURL = child.snapshot.url.map(segment => segment.path).join('/');
|
|
101
|
-
if (routeURL !== '') {
|
|
102
|
-
routerLink += `/${routeURL}`;
|
|
103
|
-
}
|
|
104
|
-
let label = child.snapshot.data["breadcrumb"];
|
|
105
|
-
const notClickableBreadcrumb = !!child.snapshot.data["notClickableBreadcrumb"];
|
|
106
|
-
const isShownBreadcrumb = !!child.snapshot.data["isShownBreadcrumb"];
|
|
107
|
-
const extraBreadcrumbs = child.snapshot.data["extraBreadcrumbs"] || [];
|
|
108
|
-
if (!(typeof label === 'undefined' || label === null)) {
|
|
109
|
-
const data = activatedRoute.snapshot.firstChild?.data || {};
|
|
110
|
-
// Resolve dynamic breadcrumb label
|
|
111
|
-
if (label && label.startsWith("[") && label.endsWith("]")) {
|
|
112
|
-
label = this._getRecursiveKey(data, label.slice(1, -1).split("."));
|
|
113
|
-
}
|
|
114
|
-
// Resolve dynamic URL parts
|
|
115
|
-
const resolveDynamicUrl = (route) => {
|
|
116
|
-
return route.replace(/\[([^\]]+)]/g, (_, key) => this._getRecursiveKey(data, key.split(".")) || '');
|
|
117
|
-
};
|
|
118
|
-
const mainBreadcrumb = { label, routerLink, data, notClickableBreadcrumb, isShownBreadcrumb };
|
|
119
|
-
// Process extra breadcrumbs
|
|
120
|
-
const beforeBreadcrumbs = [];
|
|
121
|
-
const afterBreadcrumbs = [];
|
|
122
|
-
extraBreadcrumbs.forEach(extra => {
|
|
123
|
-
let extraLabel = extra.label || '';
|
|
124
|
-
if (extraLabel.startsWith("[") && extraLabel.endsWith("]")) {
|
|
125
|
-
extraLabel = this._getRecursiveKey(data, extraLabel.slice(1, -1).split("."));
|
|
126
|
-
}
|
|
127
|
-
const extraUrl = resolveDynamicUrl(extra.routerLink || '');
|
|
128
|
-
const extraBreadcrumb = { ...extra, label: extraLabel, routerLink: extraUrl };
|
|
129
|
-
if (extra.position === "before") {
|
|
130
|
-
beforeBreadcrumbs.push(extraBreadcrumb);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
afterBreadcrumbs.push(extraBreadcrumb);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
// Merge breadcrumbs
|
|
137
|
-
breadcrumbs.push(...beforeBreadcrumbs, mainBreadcrumb, ...afterBreadcrumbs);
|
|
138
|
-
}
|
|
139
|
-
return this._createBreadcrumbs(child, routerLink, breadcrumbs);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
_checkEmpty() {
|
|
143
|
-
if (!this.items)
|
|
144
|
-
return;
|
|
145
|
-
const lastBreadcrumbVisibility = this.items[this.items.length - 1].isShownBreadcrumb;
|
|
146
|
-
this.items = this.items.filter(b => b.label !== '');
|
|
147
|
-
this.items[this.items.length - 1].isShownBreadcrumb = lastBreadcrumbVisibility;
|
|
148
|
-
}
|
|
149
|
-
_getRecursiveKey(obj, keys) {
|
|
150
|
-
if (keys.length === 0) {
|
|
151
|
-
return undefined;
|
|
152
|
-
}
|
|
153
|
-
const [currentKey, ...remainingKeys] = keys;
|
|
154
|
-
if (currentKey in obj) {
|
|
155
|
-
if (remainingKeys.length > 0) {
|
|
156
|
-
return this._getRecursiveKey(obj[currentKey], remainingKeys);
|
|
157
|
-
}
|
|
158
|
-
return obj[currentKey];
|
|
159
|
-
}
|
|
160
|
-
return undefined;
|
|
161
|
-
}
|
|
162
|
-
;
|
|
163
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppBreadcrumbComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
164
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AppBreadcrumbComponent, isStandalone: true, selector: "app-breadcrumb", ngImport: i0, template: "@if(isShownBreadcrumb) {\r\n <nav class=\"flex gap-x-3 text-[12px] w-full items-center mb-5\">\r\n <div class=\"card flex justify-center\">\r\n <p-breadcrumb [model]=\"items\"></p-breadcrumb>\r\n </div>\r\n </nav>\r\n}\r\n", styles: [".p-breadcrumb-list li:first-child a{color:var(--secondary)}.p-breadcrumb-list .p-breadcrumb-separator{transform:scale(.7)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
165
|
-
}
|
|
166
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppBreadcrumbComponent, decorators: [{
|
|
167
|
-
type: Component,
|
|
168
|
-
args: [{ selector: 'app-breadcrumb', standalone: true, imports: [CommonModule, Breadcrumb, RouterModule], encapsulation: ViewEncapsulation.None, template: "@if(isShownBreadcrumb) {\r\n <nav class=\"flex gap-x-3 text-[12px] w-full items-center mb-5\">\r\n <div class=\"card flex justify-center\">\r\n <p-breadcrumb [model]=\"items\"></p-breadcrumb>\r\n </div>\r\n </nav>\r\n}\r\n", styles: [".p-breadcrumb-list li:first-child a{color:var(--secondary)}.p-breadcrumb-list .p-breadcrumb-separator{transform:scale(.7)}\n"] }]
|
|
169
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }] });
|
|
170
|
-
|
|
171
69
|
const setLocalStorage = (key, value) => localStorage.setItem(key, value);
|
|
172
70
|
const getLocalStorage = (key) => localStorage.getItem(key);
|
|
173
71
|
const clearLocalStorage = () => localStorage.clear();
|
|
@@ -574,7 +472,7 @@ class ToasterService {
|
|
|
574
472
|
clear() {
|
|
575
473
|
this.messageService.clear(this.mainKey);
|
|
576
474
|
}
|
|
577
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ToasterService, deps: [{ token: i1
|
|
475
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ToasterService, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
578
476
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ToasterService, providedIn: "root" }); }
|
|
579
477
|
}
|
|
580
478
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ToasterService, decorators: [{
|
|
@@ -582,7 +480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
582
480
|
args: [{
|
|
583
481
|
providedIn: "root"
|
|
584
482
|
}]
|
|
585
|
-
}], ctorParameters: () => [{ type: i1
|
|
483
|
+
}], ctorParameters: () => [{ type: i1.MessageService }] });
|
|
586
484
|
|
|
587
485
|
class ErrorHandlerService {
|
|
588
486
|
constructor(toasterService, translateService) {
|
|
@@ -712,6 +610,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
712
610
|
}]
|
|
713
611
|
}] });
|
|
714
612
|
|
|
613
|
+
class GlobalLoaderComponent {
|
|
614
|
+
constructor(loaderService) {
|
|
615
|
+
this.loaderService = loaderService;
|
|
616
|
+
}
|
|
617
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GlobalLoaderComponent, deps: [{ token: LoaderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
618
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GlobalLoaderComponent, isStandalone: true, selector: "global-loader", inputs: { color: "color" }, ngImport: i0, template: "@if (loaderService.isLoading$ | async; as data) {\r\n @if (data.show) {\r\n <div\r\n class=\"fixed inset-0 z-[1111] flex justify-center items-center\"\r\n [ngClass]=\"{\r\n 'bg-white/75': data?.isSystemLoader,\r\n 'absolute': !data?.isSystemLoader\r\n }\"\r\n >\r\n <div class=\"text-center flex flex-col gap-5 items-center\">\r\n <div\r\n class=\"animate-spin inline-block w-12 h-12 border-[3px] border-current border-t-transparent text-gray-800 rounded-full\">\r\n </div>\r\n <span>{{ 'loading' | translate }}</span>\r\n </div>\r\n </div>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
619
|
+
}
|
|
620
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GlobalLoaderComponent, decorators: [{
|
|
621
|
+
type: Component,
|
|
622
|
+
args: [{ selector: "global-loader", standalone: true, imports: [AsyncPipe, NgClass, TranslatePipe], template: "@if (loaderService.isLoading$ | async; as data) {\r\n @if (data.show) {\r\n <div\r\n class=\"fixed inset-0 z-[1111] flex justify-center items-center\"\r\n [ngClass]=\"{\r\n 'bg-white/75': data?.isSystemLoader,\r\n 'absolute': !data?.isSystemLoader\r\n }\"\r\n >\r\n <div class=\"text-center flex flex-col gap-5 items-center\">\r\n <div\r\n class=\"animate-spin inline-block w-12 h-12 border-[3px] border-current border-t-transparent text-gray-800 rounded-full\">\r\n </div>\r\n <span>{{ 'loading' | translate }}</span>\r\n </div>\r\n </div>\r\n }\r\n}\r\n" }]
|
|
623
|
+
}], ctorParameters: () => [{ type: LoaderService }], propDecorators: { color: [{
|
|
624
|
+
type: Input
|
|
625
|
+
}] } });
|
|
626
|
+
|
|
627
|
+
const authGuard = () => {
|
|
628
|
+
const appConfig = inject(CORE_CONFIG);
|
|
629
|
+
const authService = inject(AuthService);
|
|
630
|
+
const token = authService.getUserToken();
|
|
631
|
+
if (!token) {
|
|
632
|
+
window.location.href = appConfig.loginUrl;
|
|
633
|
+
return false;
|
|
634
|
+
}
|
|
635
|
+
return true;
|
|
636
|
+
};
|
|
637
|
+
|
|
638
|
+
const permissionsGuard = (route) => {
|
|
639
|
+
const permissionsService = inject(PermissionsService);
|
|
640
|
+
const router = inject(Router);
|
|
641
|
+
const { key, action } = route.data["permissions"];
|
|
642
|
+
if (!route.data["permissions"] || (route.data["permissions"] && permissionsService.routeGuardChecker(key, action))) {
|
|
643
|
+
return true;
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
router.navigate(["no-access"]);
|
|
647
|
+
return false;
|
|
648
|
+
}
|
|
649
|
+
};
|
|
650
|
+
|
|
715
651
|
var UserPermissionsEnum;
|
|
716
652
|
(function (UserPermissionsEnum) {
|
|
717
653
|
UserPermissionsEnum["BOD"] = "BOD";
|
|
@@ -845,180 +781,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
845
781
|
type: Input
|
|
846
782
|
}] } });
|
|
847
783
|
|
|
848
|
-
class AppHeaderComponent {
|
|
849
|
-
constructor(authService) {
|
|
850
|
-
this.authService = authService;
|
|
851
|
-
this.createButtonClicked = new EventEmitter();
|
|
852
|
-
this.toggleMenu = new EventEmitter();
|
|
853
|
-
this.items = [
|
|
854
|
-
{
|
|
855
|
-
items: [
|
|
856
|
-
{
|
|
857
|
-
label: "خــــروج",
|
|
858
|
-
command: () => this.logout()
|
|
859
|
-
}
|
|
860
|
-
]
|
|
861
|
-
}
|
|
862
|
-
];
|
|
863
|
-
this.UserPermissionsEnum = UserPermissionsEnum;
|
|
864
|
-
this.PermissionsActions = PermissionsActions;
|
|
865
|
-
}
|
|
866
|
-
logout() {
|
|
867
|
-
this.authService
|
|
868
|
-
.logoutFromSSO()
|
|
869
|
-
.pipe(finalize(() => {
|
|
870
|
-
this.authService.clearAuth();
|
|
871
|
-
}))
|
|
872
|
-
.subscribe();
|
|
873
|
-
}
|
|
874
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppHeaderComponent, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
875
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AppHeaderComponent, isStandalone: true, selector: "app-header", inputs: { userInfo: "userInfo" }, outputs: { createButtonClicked: "createButtonClicked", toggleMenu: "toggleMenu" }, ngImport: i0, template: "<div class=\"px-10 flex justify-between items-center bg-white shadow-md py-3 h-16\">\r\n <div class=\"d-flex md:hidden w-fit\">\r\n <!-- Burger Icon for Mobile -->\r\n <app-button icon=\"font-icon-burger-icon text-[25px]\" size=\"large\" variant=\"text\"\r\n (clickEmitter)=\"toggleMenu.emit()\"/>\r\n </div>\r\n <div class=\"d-flex items-center justify-content-between gap-1\">\r\n <app-button\r\n *hasPermissions=\"[PermissionsActions.CREATE];key: UserPermissionsEnum.BOD\"\r\n iconPos=\"right\" icon=\"font-icon-plus\" (clickEmitter)=\"createButtonClicked.emit()\"\r\n [title]=\"'actions.create' | translate\"/>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-1\">\r\n @if (userInfo) {\r\n <div class=\"flex flex-col items-end justify-center\">\r\n <p class=\"text-sm\">{{ userInfo.userName }}</p>\r\n <p class=\"text-gray-500 mb-0 text-[10px]\">{{ userInfo.email }}</p>\r\n </div>\r\n\r\n <img src=\"assets/images/user-placeholder.jpg\" class=\"w-9 h-9 object-cover rounded-full\" alt=\"\"/>\r\n }\r\n <p-menu #menu [model]=\"items\" [popup]=\"true\"></p-menu>\r\n <button (click)=\"menu.toggle($event)\" class=\"mb-2\"><i class=\"font-icon-Vector text-[6px]\"></i></button>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["title", "class", "icon", "size", "style", "iconPos", "variant", "disabled", "text", "rounded"], outputs: ["clickEmitter"] }, { kind: "component", type: Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: HasPermissionsDirective, selector: "[hasPermissions]", inputs: ["hasPermissions", "hasPermissionsKey", "hasPermissionsNewPermissions", "hasPermissionsIsDomain"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
876
|
-
}
|
|
877
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppHeaderComponent, decorators: [{
|
|
878
|
-
type: Component,
|
|
879
|
-
args: [{ selector: "app-header", standalone: true, imports: [RouterModule, AppButtonComponent, Menu, TranslatePipe, HasPermissionsDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"px-10 flex justify-between items-center bg-white shadow-md py-3 h-16\">\r\n <div class=\"d-flex md:hidden w-fit\">\r\n <!-- Burger Icon for Mobile -->\r\n <app-button icon=\"font-icon-burger-icon text-[25px]\" size=\"large\" variant=\"text\"\r\n (clickEmitter)=\"toggleMenu.emit()\"/>\r\n </div>\r\n <div class=\"d-flex items-center justify-content-between gap-1\">\r\n <app-button\r\n *hasPermissions=\"[PermissionsActions.CREATE];key: UserPermissionsEnum.BOD\"\r\n iconPos=\"right\" icon=\"font-icon-plus\" (clickEmitter)=\"createButtonClicked.emit()\"\r\n [title]=\"'actions.create' | translate\"/>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-1\">\r\n @if (userInfo) {\r\n <div class=\"flex flex-col items-end justify-center\">\r\n <p class=\"text-sm\">{{ userInfo.userName }}</p>\r\n <p class=\"text-gray-500 mb-0 text-[10px]\">{{ userInfo.email }}</p>\r\n </div>\r\n\r\n <img src=\"assets/images/user-placeholder.jpg\" class=\"w-9 h-9 object-cover rounded-full\" alt=\"\"/>\r\n }\r\n <p-menu #menu [model]=\"items\" [popup]=\"true\"></p-menu>\r\n <button (click)=\"menu.toggle($event)\" class=\"mb-2\"><i class=\"font-icon-Vector text-[6px]\"></i></button>\r\n </div>\r\n</div>\r\n" }]
|
|
880
|
-
}], ctorParameters: () => [{ type: AuthService }], propDecorators: { createButtonClicked: [{
|
|
881
|
-
type: Output
|
|
882
|
-
}], toggleMenu: [{
|
|
883
|
-
type: Output
|
|
884
|
-
}], userInfo: [{
|
|
885
|
-
type: Input
|
|
886
|
-
}] } });
|
|
887
|
-
|
|
888
|
-
const ROUTES_NAME = {
|
|
889
|
-
board: {
|
|
890
|
-
name: '/board-page',
|
|
891
|
-
},
|
|
892
|
-
users: {
|
|
893
|
-
name: '/users',
|
|
894
|
-
},
|
|
895
|
-
// reports: {
|
|
896
|
-
// name: '/reports',
|
|
897
|
-
// },
|
|
898
|
-
meetings: {
|
|
899
|
-
name: '/meeting-page',
|
|
900
|
-
},
|
|
901
|
-
// tasks: {
|
|
902
|
-
// name: '/tasks',
|
|
903
|
-
// },
|
|
904
|
-
// imported: {
|
|
905
|
-
// name: '/imported',
|
|
906
|
-
// },
|
|
907
|
-
// exported: {
|
|
908
|
-
// name: '/exported',
|
|
909
|
-
// },
|
|
910
|
-
// board: {
|
|
911
|
-
// name: '/board',
|
|
912
|
-
// },
|
|
913
|
-
};
|
|
914
|
-
|
|
915
|
-
const BASE_SIDE_MENU_ITEMS = [
|
|
916
|
-
{
|
|
917
|
-
label: 'الإجتماعات',
|
|
918
|
-
icon: 'font-icon-menu-board',
|
|
919
|
-
link: ROUTES_NAME['meetings'].name
|
|
920
|
-
},
|
|
921
|
-
{
|
|
922
|
-
label: 'اللجان و المجالس',
|
|
923
|
-
icon: 'font-icon-people',
|
|
924
|
-
link: ROUTES_NAME['board'].name
|
|
925
|
-
},
|
|
926
|
-
// {
|
|
927
|
-
// label: 'المستخدمين',
|
|
928
|
-
// icon: 'font-icon-profile-2user',
|
|
929
|
-
// link: ROUTES_NAME['users'].name,
|
|
930
|
-
// },
|
|
931
|
-
// {
|
|
932
|
-
// label: 'الإجتماعات',
|
|
933
|
-
// icon: 'font-icon-menu-board',
|
|
934
|
-
// link: ROUTES_NAME['meetings'].name,
|
|
935
|
-
// },
|
|
936
|
-
// {
|
|
937
|
-
// label: 'مهامي',
|
|
938
|
-
// icon: 'font-icon-task-square',
|
|
939
|
-
// link: ROUTES_NAME['tasks'].name,
|
|
940
|
-
// },
|
|
941
|
-
// {
|
|
942
|
-
// label: 'الوارد',
|
|
943
|
-
// icon: 'font-icon-directbox-receive',
|
|
944
|
-
// link: ROUTES_NAME['imported'].name,
|
|
945
|
-
// },
|
|
946
|
-
// {
|
|
947
|
-
// label: 'الصادر',
|
|
948
|
-
// icon: 'font-icon-directbox-send',
|
|
949
|
-
// link: ROUTES_NAME['exported'].name,
|
|
950
|
-
// },
|
|
951
|
-
// {
|
|
952
|
-
// label: 'التقارير',
|
|
953
|
-
// icon: 'font-icon-status-up',
|
|
954
|
-
// link: ROUTES_NAME['reports'].name,
|
|
955
|
-
// },
|
|
956
|
-
];
|
|
957
|
-
|
|
958
|
-
class AppSideMenuComponent {
|
|
959
|
-
constructor() {
|
|
960
|
-
this.menuItems = BASE_SIDE_MENU_ITEMS;
|
|
961
|
-
this.permissionsService = inject(PermissionsService);
|
|
962
|
-
}
|
|
963
|
-
ngOnInit() {
|
|
964
|
-
this.filteredMenu = this.menuItems.filter((item) => {
|
|
965
|
-
if (!item.permissionKey) {
|
|
966
|
-
return true;
|
|
967
|
-
}
|
|
968
|
-
return this.permissionsService.checkKeyHasPermission(item.permissionKey, PermissionsActions.VIEW);
|
|
969
|
-
});
|
|
970
|
-
}
|
|
971
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppSideMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
972
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AppSideMenuComponent, isStandalone: true, selector: "app-side-menu", inputs: { isOpen: "isOpen" }, ngImport: i0, template: "<nav\r\n [ngClass]=\"{ 'max-w-0 md:max-w-[500px]': !isOpen, 'max-w-[500px]': isOpen }\"\r\n class=\"md:flex h-100 bg-primary flex text-white flex-col py-2 text-center gap-y-10 transition-all w-24 hover:md:w-48 duration-500\">\r\n <a [routerLink]=\"'/'\"><i class=\"font-icon-STC-Logo text-[20px] pt-4 block px-4\"></i></a>\r\n <ul class=\"flex flex-col flex-grow\">\r\n @for (item of filteredMenu; track $index) {\r\n <li>\r\n <a\r\n [routerLinkActive]=\"'bg-primary_dark border-secondary'\"\r\n [routerLink]=\"item.link\"\r\n class=\"flex flex-col py-3 px-4 border-r-2 border-primary transition-all hover:bg-primary_dark hover:border-secondary\">\r\n <i [class]=\"item.icon + ' text-[17px] mb-1'\"></i>\r\n <span class=\"text-[10px] truncate\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n\r\n <a href=\"#\"><i class=\"font-icon-setting text-[20px] pb-4 block px-4\"></i></a>\r\n</nav>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
973
|
-
}
|
|
974
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppSideMenuComponent, decorators: [{
|
|
975
|
-
type: Component,
|
|
976
|
-
args: [{ selector: "app-side-menu", standalone: true, imports: [RouterModule, NgClass], encapsulation: ViewEncapsulation.None, template: "<nav\r\n [ngClass]=\"{ 'max-w-0 md:max-w-[500px]': !isOpen, 'max-w-[500px]': isOpen }\"\r\n class=\"md:flex h-100 bg-primary flex text-white flex-col py-2 text-center gap-y-10 transition-all w-24 hover:md:w-48 duration-500\">\r\n <a [routerLink]=\"'/'\"><i class=\"font-icon-STC-Logo text-[20px] pt-4 block px-4\"></i></a>\r\n <ul class=\"flex flex-col flex-grow\">\r\n @for (item of filteredMenu; track $index) {\r\n <li>\r\n <a\r\n [routerLinkActive]=\"'bg-primary_dark border-secondary'\"\r\n [routerLink]=\"item.link\"\r\n class=\"flex flex-col py-3 px-4 border-r-2 border-primary transition-all hover:bg-primary_dark hover:border-secondary\">\r\n <i [class]=\"item.icon + ' text-[17px] mb-1'\"></i>\r\n <span class=\"text-[10px] truncate\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n\r\n <a href=\"#\"><i class=\"font-icon-setting text-[20px] pb-4 block px-4\"></i></a>\r\n</nav>\r\n" }]
|
|
977
|
-
}], propDecorators: { isOpen: [{
|
|
978
|
-
type: Input
|
|
979
|
-
}] } });
|
|
980
|
-
|
|
981
|
-
class GlobalLoaderComponent {
|
|
982
|
-
constructor(loaderService) {
|
|
983
|
-
this.loaderService = loaderService;
|
|
984
|
-
}
|
|
985
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GlobalLoaderComponent, deps: [{ token: LoaderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
986
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GlobalLoaderComponent, isStandalone: true, selector: "global-loader", inputs: { color: "color" }, ngImport: i0, template: "@if (loaderService.isLoading$ | async; as data) {\r\n @if (data.show) {\r\n <div\r\n class=\"fixed inset-0 z-[1111] flex justify-center items-center\"\r\n [ngClass]=\"{\r\n 'bg-white/75': data?.isSystemLoader,\r\n 'absolute': !data?.isSystemLoader\r\n }\"\r\n >\r\n <div class=\"text-center flex flex-col gap-5 items-center\">\r\n <div\r\n class=\"animate-spin inline-block w-12 h-12 border-[3px] border-current border-t-transparent text-gray-800 rounded-full\">\r\n </div>\r\n <span>{{ 'loading' | translate }}</span>\r\n </div>\r\n </div>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
987
|
-
}
|
|
988
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GlobalLoaderComponent, decorators: [{
|
|
989
|
-
type: Component,
|
|
990
|
-
args: [{ selector: "global-loader", standalone: true, imports: [AsyncPipe, NgClass, TranslatePipe], template: "@if (loaderService.isLoading$ | async; as data) {\r\n @if (data.show) {\r\n <div\r\n class=\"fixed inset-0 z-[1111] flex justify-center items-center\"\r\n [ngClass]=\"{\r\n 'bg-white/75': data?.isSystemLoader,\r\n 'absolute': !data?.isSystemLoader\r\n }\"\r\n >\r\n <div class=\"text-center flex flex-col gap-5 items-center\">\r\n <div\r\n class=\"animate-spin inline-block w-12 h-12 border-[3px] border-current border-t-transparent text-gray-800 rounded-full\">\r\n </div>\r\n <span>{{ 'loading' | translate }}</span>\r\n </div>\r\n </div>\r\n }\r\n}\r\n" }]
|
|
991
|
-
}], ctorParameters: () => [{ type: LoaderService }], propDecorators: { color: [{
|
|
992
|
-
type: Input
|
|
993
|
-
}] } });
|
|
994
|
-
|
|
995
|
-
const authGuard = () => {
|
|
996
|
-
const appConfig = inject(CORE_CONFIG);
|
|
997
|
-
const authService = inject(AuthService);
|
|
998
|
-
const token = authService.getUserToken();
|
|
999
|
-
if (!token) {
|
|
1000
|
-
window.location.href = appConfig.loginUrl;
|
|
1001
|
-
return false;
|
|
1002
|
-
}
|
|
1003
|
-
return true;
|
|
1004
|
-
};
|
|
1005
|
-
|
|
1006
|
-
const permissionsGuard = (route) => {
|
|
1007
|
-
const permissionsService = inject(PermissionsService);
|
|
1008
|
-
const router = inject(Router);
|
|
1009
|
-
const { key, action } = route.data["permissions"];
|
|
1010
|
-
if (!route.data["permissions"] || (route.data["permissions"] && permissionsService.routeGuardChecker(key, action))) {
|
|
1011
|
-
return true;
|
|
1012
|
-
}
|
|
1013
|
-
else {
|
|
1014
|
-
router.navigate(["no-access"]);
|
|
1015
|
-
return false;
|
|
1016
|
-
}
|
|
1017
|
-
};
|
|
1018
|
-
|
|
1019
784
|
/**
|
|
1020
785
|
* Generated bundle index. Do not edit.
|
|
1021
786
|
*/
|
|
1022
787
|
|
|
1023
|
-
export { APP_HTTP_CONFIG,
|
|
788
|
+
export { APP_HTTP_CONFIG, AuthService, BaseHttpService, BasePaginationService, COMMON_BASE_URL, CORE_CONFIG, ErrorHandlerService, GlobalHttpErrorInterceptor, GlobalLoaderComponent, HasPermissionsDirective, HttpBaseInterceptor, HttpRequestOptionsKeys, JwtDecoderService, ListOfValues, LoaderService, PAGESIZE, PAGE_SIZE_OPTION, PermissionsActions, PermissionsService, SortDirection, ToasterService, UserPermissionsEnum, authGuard, epmDefaultMapper, extractRequestOptions, mapResponse, permissionsGuard, resolveUrl };
|
|
1024
789
|
//# sourceMappingURL=corp-products-app-core.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corp-products-app-core.mjs","sources":["../../../../libs/core/src/lib/core/services/base-pagination-service/pagination.ts","../../../../libs/core/src/lib/core/services/base-pagination-service/base-pagination.service.ts","../../../../libs/core/src/lib/core/components/app-breadcrumb/app-breadcrumb.component.ts","../../../../libs/core/src/lib/core/components/app-breadcrumb/app-breadcrumb.component.html","../../../../libs/core/src/lib/core/handlers/storage-handler.ts","../../../../libs/core/src/lib/core/handlers/stortage.ts","../../../../libs/core/src/lib/core/services/base-http-service/base-http-types.ts","../../../../libs/core/src/lib/core/services/base-http-service/base-http-utils.ts","../../../../libs/core/src/lib/core/services/base-http-service/base-http.service.ts","../../../../libs/core/src/lib/core/core-config.ts","../../../../libs/core/src/lib/core/services/auth.service.ts","../../../../libs/core/src/lib/core/services/jwt-decoder.service.ts","../../../../libs/core/src/lib/core/interceptors/app-http-config.ts","../../../../libs/core/src/lib/core/handlers/http-context-handler.ts","../../../../libs/core/src/lib/core/services/loader.service.ts","../../../../libs/core/src/lib/core/interceptors/base-http.interceptor.ts","../../../../libs/core/src/lib/core/interceptors/global-http-error.interceptor.ts","../../../../libs/core/src/lib/core/services/lov.service.ts","../../../../libs/core/src/lib/core/services/toaster.service.ts","../../../../libs/core/src/lib/core/services/error-handler.service.ts","../../../../libs/core/src/lib/core/services/permissions.service.ts","../../../../libs/core/src/lib/core/enums/user-permissions.enum.ts","../../../../libs/core/src/lib/core/directives/permissions.directive.ts","../../../../libs/core/src/lib/core/components/app-header/app-header.component.ts","../../../../libs/core/src/lib/core/components/app-header/app-header.component.html","../../../../libs/core/src/lib/core/components/app-side-menu/routes-names.ts","../../../../libs/core/src/lib/core/components/app-side-menu/side-menu-items.ts","../../../../libs/core/src/lib/core/components/app-side-menu/app-side-menu.component.ts","../../../../libs/core/src/lib/core/components/app-side-menu/app-side-menu.component.html","../../../../libs/core/src/lib/core/components/global-loader/global-loader.component.ts","../../../../libs/core/src/lib/core/components/global-loader/global-loader.component.html","../../../../libs/core/src/lib/core/guards/auth.guard.ts","../../../../libs/core/src/lib/core/guards/permissions.guard.ts","../../../../libs/core/src/corp-products-app-core.ts"],"sourcesContent":["export const PAGESIZE = 10;\r\nexport const PAGE_SIZE_OPTION = [5, 10, 15, 20];\r\nexport enum SortDirection {\r\n ASC = 'ASC',\r\n DESC = 'DESC'\r\n}\r\n","import { Observable } from \"rxjs\";\r\nimport { ListOptions } from \"./list-options.interface\";\r\nimport { PAGE_SIZE_OPTION, PAGESIZE, SortDirection } from \"./pagination\";\r\nimport { PaginatorState } from \"primeng/paginator\";\r\nexport abstract class BasePaginationService<T = any> {\r\n\r\n totalRecords = 0;\r\n totalPages = 0;\r\n rowsChange: number = PAGESIZE;\r\n\r\n pageSizes = PAGE_SIZE_OPTION\r\n defaultSortValue = \"createdAt\";\r\n defaultSortDirection = SortDirection.DESC;\r\n first: number | undefined = 0;\r\n\r\n listOptions: ListOptions = {\r\n searchValue: \"\",\r\n paginator: this.rowsChange,\r\n page: 0,\r\n direction: this.defaultSortDirection,\r\n sortBy: this.defaultSortValue\r\n };\r\n\r\n abstract getList(listOptions: ListOptions): void | Observable<T>\r\n\r\n createListFilter(filters: {[key: string] : unknown}): void {\r\n this.listOptions = {\r\n ...this.listOptions,\r\n ...filters\r\n }\r\n }\r\n\r\n resetList(): void {\r\n this.listOptions = {\r\n searchValue: \"\",\r\n paginator: this.rowsChange,\r\n page: 0\r\n };\r\n }\r\n\r\n resetPaginator(): void {\r\n this.listOptions = {\r\n ...this.listOptions ,\r\n paginator: this.rowsChange,\r\n page: 0\r\n };\r\n }\r\n\r\n onPageChange(event: PaginatorState): void {\r\n this.listOptions = {\r\n ...this.listOptions,\r\n page: event.page,\r\n paginator: event.rows,\r\n };\r\n this.first = event.first ?? 0;\r\n this.getList(this.listOptions);\r\n }\r\n\r\n}\r\n","import {CommonModule} from '@angular/common';\r\nimport {Component, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport {ActivatedRoute, NavigationEnd, Router, RouterModule} from '@angular/router';\r\nimport {MenuItem} from 'primeng/api';\r\nimport {Breadcrumb} from 'primeng/breadcrumb';\r\nimport {filter} from 'rxjs';\r\nimport {BreadCrumbExtraData, BreadcrumbItem} from './app-breadcrumb.interface';\r\n\r\n@Component({\r\n selector: 'app-breadcrumb',\r\n templateUrl: './app-breadcrumb.component.html',\r\n styleUrl: './app-breadcrumb.component.scss',\r\n standalone: true,\r\n imports: [CommonModule, Breadcrumb, RouterModule],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppBreadcrumbComponent implements OnInit {\r\n items: BreadcrumbItem[] | undefined;\r\n isShownBreadcrumb: boolean;\r\n\r\n constructor(private activatedRoute: ActivatedRoute, private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.router.events\r\n .pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe((e) => {\r\n // remove duplicates\r\n this.items = (this._createBreadcrumbs(this.activatedRoute.root) as BreadcrumbItem[]).filter(\r\n (item, index, self) =>\r\n index === self.findIndex((t) => t.label === item.label && t.routerLink === item.routerLink)\r\n );\r\n this._checkHiddenBreadcrumb();\r\n this._checkEmpty();\r\n });\r\n }\r\n\r\n private _checkHiddenBreadcrumb() {\r\n const activeBreadcrumb = this.items?.find((item) => {\r\n return item.routerLink === this.router.url\r\n });\r\n this.isShownBreadcrumb = !!activeBreadcrumb?.isShownBreadcrumb\r\n }\r\n\r\n private _createBreadcrumbs(activatedRoute: ActivatedRoute, routerLink = '', breadcrumbs: MenuItem[] = []): any {\r\n const children: ActivatedRoute[] = activatedRoute.children;\r\n\r\n if (children.length === 0) {\r\n return breadcrumbs;\r\n }\r\n\r\n for (const child of children) {\r\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\r\n if (routeURL !== '') {\r\n routerLink += `/${routeURL}`;\r\n }\r\n\r\n let label = child.snapshot.data[\"breadcrumb\"];\r\n const notClickableBreadcrumb = !!child.snapshot.data[\"notClickableBreadcrumb\"];\r\n const isShownBreadcrumb = !!child.snapshot.data[\"isShownBreadcrumb\"];\r\n const extraBreadcrumbs: BreadCrumbExtraData[] = child.snapshot.data[\"extraBreadcrumbs\"] || [];\r\n if (!(typeof label === 'undefined' || label === null)) {\r\n const data = activatedRoute.snapshot.firstChild?.data || {};\r\n // Resolve dynamic breadcrumb label\r\n if (label && label.startsWith(\"[\") && label.endsWith(\"]\")) {\r\n label = this._getRecursiveKey(data, label.slice(1, -1).split(\".\"));\r\n }\r\n\r\n // Resolve dynamic URL parts\r\n const resolveDynamicUrl = (route: string): string => {\r\n return route.replace(/\\[([^\\]]+)]/g, (_, key) => this._getRecursiveKey(data, key.split(\".\")) || '');\r\n };\r\n\r\n const mainBreadcrumb: MenuItem = {label, routerLink, data, notClickableBreadcrumb, isShownBreadcrumb};\r\n\r\n // Process extra breadcrumbs\r\n const beforeBreadcrumbs: MenuItem[] = [];\r\n const afterBreadcrumbs: MenuItem[] = [];\r\n\r\n extraBreadcrumbs.forEach(extra => {\r\n let extraLabel = extra.label || '';\r\n if (extraLabel.startsWith(\"[\") && extraLabel.endsWith(\"]\")) {\r\n extraLabel = this._getRecursiveKey(data, extraLabel.slice(1, -1).split(\".\"));\r\n }\r\n\r\n const extraUrl = resolveDynamicUrl(extra.routerLink || '');\r\n\r\n const extraBreadcrumb: MenuItem = {...extra, label: extraLabel, routerLink: extraUrl};\r\n\r\n if (extra.position === \"before\") {\r\n beforeBreadcrumbs.push(extraBreadcrumb);\r\n } else {\r\n afterBreadcrumbs.push(extraBreadcrumb);\r\n }\r\n });\r\n\r\n // Merge breadcrumbs\r\n breadcrumbs.push(...beforeBreadcrumbs, mainBreadcrumb, ...afterBreadcrumbs);\r\n }\r\n return this._createBreadcrumbs(child, routerLink, breadcrumbs);\r\n }\r\n }\r\n\r\n private _checkEmpty() {\r\n if (!this.items) return\r\n const lastBreadcrumbVisibility = this.items[this.items.length - 1].isShownBreadcrumb;\r\n this.items = this.items.filter(b => b.label !== '');\r\n this.items[this.items.length - 1].isShownBreadcrumb = lastBreadcrumbVisibility;\r\n }\r\n\r\n private _getRecursiveKey(obj: Record<string, any>, keys: string[]): any | undefined {\r\n if (keys.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const [currentKey, ...remainingKeys] = keys;\r\n if (currentKey in obj) {\r\n if (remainingKeys.length > 0) {\r\n return this._getRecursiveKey(obj[currentKey], remainingKeys);\r\n }\r\n return obj[currentKey];\r\n }\r\n return undefined;\r\n };\r\n}\r\n","@if(isShownBreadcrumb) {\r\n <nav class=\"flex gap-x-3 text-[12px] w-full items-center mb-5\">\r\n <div class=\"card flex justify-center\">\r\n <p-breadcrumb [model]=\"items\"></p-breadcrumb>\r\n </div>\r\n </nav>\r\n}\r\n","// Important for global context\r\nimport { LocalStorageKeys, SessionStorageKeys, StorageEnum } from \"./stortage\";\r\n\r\nconst setLocalStorage = (key: string, value: string) => localStorage.setItem(key, value);\r\nconst getLocalStorage = (key: string) => localStorage.getItem(key);\r\nconst clearLocalStorage = () => localStorage.clear();\r\nconst setSessionStorage = (key: string, value: string) => sessionStorage.setItem(key, value);\r\nconst getSessionStorage = (key: string) => sessionStorage.getItem(key);\r\nconst clearSessionStorage = () => sessionStorage.clear();\r\n\r\nexport class StorageHandler {\r\n public static local = {\r\n set: (key: LocalStorageKeys, value: unknown) => this.setItem(key, value, setLocalStorage),\r\n get: <T>(key: LocalStorageKeys) => this.getItem<T>(key, getLocalStorage),\r\n clear: () => this.clearStorage(clearLocalStorage)\r\n };\r\n public static session = {\r\n set: (key: SessionStorageKeys, value: unknown) => this.setItem(key, value, setSessionStorage),\r\n get: <T>(key: SessionStorageKeys) => this.getItem<T>(key, getSessionStorage),\r\n clear: () => this.clearStorage(clearSessionStorage)\r\n };\r\n\r\n private static setItem(key: StorageEnum, value: unknown, set: (key: string, value: string) => void): void {\r\n if (!key) return;\r\n set(key as string, typeof value === \"string\" ? value : JSON.stringify(value));\r\n }\r\n\r\n private static getItem<T>(key: StorageEnum, get: (key: string) => string | null, withParsing = false): T | null {\r\n const data: string | null = get(key as string) ?? null;\r\n if (data) return withParsing ? JSON.parse(data) : data;\r\n return null;\r\n }\r\n\r\n private static clearStorage(clear: () => void): void {\r\n clear();\r\n }\r\n}\r\n","export enum LocalStorageKeys {\r\n LANGUAGE = \"LANGUAGE\",\r\n TOKEN = \"TOKEN\"\r\n}\r\n\r\nexport enum SessionStorageKeys {}\r\nexport type StorageEnum = SessionStorageKeys | LocalStorageKeys;\r\n","import { HttpContext, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Params as RouterParams } from '@angular/router';\r\n\r\nexport interface HttpConfig {\r\n apiUrl?: string;\r\n microServiceUrl:string;\r\n globalMapFn?: (res: any) => any;\r\n methods?: ServiceConfig;\r\n}\r\n\r\nexport type Params =\r\n | HttpParams\r\n | { [param: string]: string | string[] | unknown };\r\nexport type HttpRequestOptions = {\r\n headers?:\r\n | HttpHeaders\r\n | RouterParams\r\n | { [header: string]: string | string[] };\r\n params?: HttpParams | { [param: string]: string | string[] } | Params;\r\n context?: HttpContext;\r\n reportProgress?: boolean;\r\n observe?: 'events';\r\n responseType?: string;\r\n};\r\nexport const HttpRequestOptionsKeys: Array<keyof Required<HttpRequestOptions>> =\r\n ['headers', 'params', 'context', 'reportProgress', 'observe', 'responseType'];\r\n\r\nexport type HttpOptions<T = any> = HttpRequestOptions & {\r\n urlRewrite?: string;\r\n urlPostfix?: string;\r\n mapFn?: (res: any) => T;\r\n};\r\n\r\nexport interface ServiceConfig {\r\n single?: HttpOptions;\r\n getAll?: HttpOptions;\r\n add?: HttpOptions;\r\n update?: HttpOptions;\r\n delete?: HttpOptions;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\r\n","import { map } from 'rxjs/operators';\r\nimport { HttpOptions, HttpRequestOptionsKeys } from './base-http-types';\r\nimport { BaseHttpResponse } from './base-http-response';\r\n\r\nexport const resolveUrl = (\r\n baseUrl: string,\r\n options?: HttpOptions,\r\n ...args: string[]\r\n): string => {\r\n const { urlRewrite, urlPostfix } = options || {};\r\n\r\n if (urlRewrite) {\r\n return urlRewrite;\r\n }\r\n\r\n let result = baseUrl;\r\n\r\n if (args && args.length > 0 && args[0] !== '') {\r\n result += `/${args.join('/')}`;\r\n }\r\n\r\n if (urlPostfix) {\r\n result += `/${urlPostfix}`;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const extractRequestOptions = (options?: any) => {\r\n if (!options || typeof options !== 'object') {\r\n return {};\r\n }\r\n /* eslint-disable */\r\n return HttpRequestOptionsKeys.reduce((requestOptions: any, key) => {\r\n const value = options[key];\r\n\r\n if (value !== undefined) {\r\n requestOptions[key] = value;\r\n }\r\n\r\n return requestOptions;\r\n }, {});\r\n};\r\n\r\nexport const mapResponse = <T>(options?: HttpOptions) =>\r\n map((res: T) => (options?.mapFn ? options.mapFn(res) : res));\r\n\r\nexport const epmDefaultMapper = <T>(res: BaseHttpResponse<T>) => res.payload;\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpConfig, HttpOptions, ServiceConfig } from './base-http-types';\r\nimport { epmDefaultMapper, extractRequestOptions, mapResponse, resolveUrl } from './base-http-utils';\r\n\r\nexport abstract class BaseHttpService {\r\n private readonly http: HttpClient = inject(HttpClient);\r\n\r\n get url(): string {\r\n const { apiUrl,microServiceUrl } = this.setApiConfig();\r\n return `${microServiceUrl}${apiUrl ? `/${apiUrl}` : ''}`;\r\n }\r\n\r\n get methodsConfig(): ServiceConfig | undefined {\r\n const { methods } = this.setApiConfig();\r\n return methods;\r\n }\r\n\r\n get globalMapFn(): (res: any) => any {\r\n const { globalMapFn } = this.setApiConfig();\r\n return globalMapFn || epmDefaultMapper;\r\n }\r\n\r\n abstract setApiConfig(): HttpConfig;\r\n\r\n single<T>(id: string | number, options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('single');\r\n const url = resolveUrl(this.url, activeOptions, id?.toString());\r\n const requestOptions = extractRequestOptions(activeOptions);\r\n\r\n return this.http\r\n .get<T>(url, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n getAll<T>(options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('getAll');\r\n const url = resolveUrl(this.url, activeOptions);\r\n const requestOptions = extractRequestOptions(activeOptions);\r\n\r\n return this.http\r\n .get<T>(url, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n add<T>(body: unknown, options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('add');\r\n const url = resolveUrl(this.url, activeOptions);\r\n const requestOptions = { ...extractRequestOptions(activeOptions) };\r\n\r\n return this.http\r\n .post<T>(url, body, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n update<T>(\r\n id: string | number,\r\n body: unknown,\r\n options?: HttpOptions\r\n ): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('update');\r\n const url = resolveUrl(this.url, activeOptions, id?.toString());\r\n const requestOptions = { ...extractRequestOptions(activeOptions) };\r\n\r\n return this.http\r\n .put<T>(url, body, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n delete<T>(id: string | number, options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('delete');\r\n const url = resolveUrl(this.url, activeOptions, id?.toString());\r\n const requestOptions = extractRequestOptions(activeOptions);\r\n\r\n return this.http\r\n .delete<T>(url, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n protected getMethodConfig(method: keyof ServiceConfig): any {\r\n return this.methodsConfig ? this.methodsConfig[method] : undefined;\r\n }\r\n\r\n protected getMapFun(options?: HttpOptions) {\r\n const getMapFunObj = {\r\n default: { mapFn: epmDefaultMapper },\r\n custom: { mapFn: this.globalMapFn },\r\n };\r\n\r\n if (\r\n options &&\r\n (options?.reportProgress || options?.responseType === 'blob')\r\n ) {\r\n return { mapFn: (res: unknown) => res };\r\n }\r\n\r\n if (options && options?.mapFn) {\r\n return { mapFn: options.mapFn };\r\n }\r\n\r\n const isGlobalMapFnValid =\r\n this.globalMapFn && typeof this.globalMapFn === 'function';\r\n return isGlobalMapFnValid ? getMapFunObj.custom : getMapFunObj.default;\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport interface CoreConfig {\r\n apiUrl: string;\r\n production: boolean;\r\n gatewayUrl: string;\r\n loginUrl: string;\r\n logoutEndpoint: string;\r\n}\r\n\r\nexport const CORE_CONFIG = new InjectionToken<CoreConfig>(\"CoreConfig\");\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { StorageHandler } from \"../handlers/storage-handler\";\r\nimport { LocalStorageKeys } from \"../handlers/stortage\";\r\nimport { BaseHttpService, HttpConfig } from \"./base-http-service\";\r\nimport { CORE_CONFIG, CoreConfig } from \"../core-config\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class AuthService extends BaseHttpService {\r\n public isUserLoggedIn$ = new BehaviorSubject(this.isLoggedIn());\r\n\r\n constructor(@Inject(CORE_CONFIG) protected appConfig: CoreConfig) {\r\n super();\r\n }\r\n\r\n override setApiConfig(): HttpConfig {\r\n return {\r\n apiUrl: \"\",\r\n microServiceUrl: \"\"\r\n };\r\n }\r\n\r\n initAuthentication() {\r\n const token: string | null = new URLSearchParams(window.location.search).get(\"token\");\r\n if (token) {\r\n this.setAuthentication(token);\r\n window.location.search = \"\";\r\n }\r\n }\r\n\r\n setAuthentication(token: string) {\r\n this.isUserLoggedIn$.next(true);\r\n this.setUserToken(token);\r\n }\r\n\r\n isLoggedIn(): boolean {\r\n return !!this.getUserToken();\r\n }\r\n\r\n getUserToken(): string | null {\r\n return StorageHandler.local.get(LocalStorageKeys.TOKEN);\r\n }\r\n\r\n setUserToken(token?: string) {\r\n return StorageHandler.local.set(LocalStorageKeys.TOKEN, token);\r\n }\r\n\r\n logoutFromSSO() {\r\n const logoutUrl = this.appConfig.logoutEndpoint;\r\n return this.single<unknown>(\"\", {\r\n urlRewrite: logoutUrl\r\n });\r\n }\r\n\r\n clearAuth() {\r\n StorageHandler.local.clear();\r\n StorageHandler.session.clear();\r\n this.isUserLoggedIn$.next(false);\r\n window.location.href = this.appConfig.loginUrl;\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { jwtDecode } from \"jwt-decode\";\r\nimport { AuthService } from \"./auth.service\";\r\nimport { JWTDecoded } from \"../interfaces/jwt-token-decoded.interface\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class JwtDecoderService {\r\n authService = inject(AuthService);\r\n public decodedToken: JWTDecoded;\r\n\r\n constructor() {\r\n this.decodeToken();\r\n }\r\n\r\n public decodeToken() {\r\n const token: string = this.authService.getUserToken() as string;\r\n if (token) {\r\n this.decodedToken = jwtDecode(token);\r\n }\r\n }\r\n}\r\n","export const COMMON_BASE_URL = \"common/api/v1\";\r\nexport const APP_HTTP_CONFIG = {\r\n BOARD_BASE_URL: \"board-acl/private/v1\",\r\n MEETING_BASE_URL: \"meeting-acl/private/v1\",\r\n IGATE_BASE_URL: COMMON_BASE_URL + \"/igate-users\",\r\n LOV_BASE_URL: COMMON_BASE_URL + \"/lov\",\r\n ATTACHMENT_BASE_URL: COMMON_BASE_URL + \"/attachment\"\r\n};\r\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\r\n\r\nexport const IS_SYSTEM_LOADER = new HttpContextToken<boolean>(() => true); // set default loader\r\n\r\nexport class HttpContextHandler {\r\n static setLoaderType(isSystemLoader: boolean) {\r\n return new HttpContext().set(IS_SYSTEM_LOADER, isSystemLoader);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nexport interface LoaderState {\r\n show: boolean;\r\n isSystemLoader?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class LoaderService {\r\n isLoading$ = new BehaviorSubject<LoaderState>({ show: false });\r\n private loadingMap: Map<string, boolean> = new Map<string, boolean>();\r\n\r\n setLoading(loading: boolean, isSystemLoader = true, url: string): void {\r\n if (!url) {\r\n throw new Error(\"The request URL must be provided to the LoaderService.setLoading function\");\r\n }\r\n\r\n if (loading) {\r\n this.loadingMap.set(url, loading);\r\n this.isLoading$.next({ show: true, isSystemLoader });\r\n } else if (!loading && this.loadingMap.has(url)) {\r\n this.loadingMap.delete(url);\r\n }\r\n\r\n if (!this.loadingMap.size) {\r\n this.isLoading$.next({ show: false });\r\n }\r\n }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Inject, inject, Injectable } from \"@angular/core\";\r\nimport { finalize, Observable, tap } from \"rxjs\";\r\nimport { IS_SYSTEM_LOADER } from \"../handlers/http-context-handler\";\r\nimport { AuthService } from \"../services/auth.service\";\r\nimport { LoaderService } from \"../services/loader.service\";\r\nimport { CORE_CONFIG, CoreConfig } from \"../core-config\";\r\n\r\n@Injectable()\r\nexport class HttpBaseInterceptor implements HttpInterceptor {\r\n authService = inject(AuthService);\r\n loaderService = inject(LoaderService);\r\n\r\n constructor(@Inject(CORE_CONFIG) protected appConfig: CoreConfig) {}\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n console.log(\"interceptor\", this.appConfig);\r\n const URL = `${this.appConfig.gatewayUrl}${request.url}`;\r\n const token = this.authService.getUserToken();\r\n\r\n // Handler header\r\n request = request.clone({\r\n url: URL,\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n Language: \"en\"\r\n }\r\n });\r\n\r\n // Handle loader\r\n const IS_SYSTEM_LOADER_CHECK = request.context.get(IS_SYSTEM_LOADER);\r\n this.loaderService.setLoading(true, IS_SYSTEM_LOADER_CHECK, request.url);\r\n\r\n return next.handle(request).pipe(\r\n // Handler Token\r\n tap((event) => {\r\n // if (event instanceof HttpResponse && request.url.includes(User_Token)) {\r\n // Set user token ..\r\n // }\r\n }),\r\n finalize(() => this.loaderService.setLoading(false, IS_SYSTEM_LOADER_CHECK, request.url))\r\n );\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Observable, retry, timer } from 'rxjs';\r\n\r\nexport class GlobalHttpErrorInterceptor implements HttpInterceptor {\r\n // check if it is a server error to retry the request\r\n shouldRetry(error: HttpErrorResponse) {\r\n if (error.status >= 500) {\r\n return timer(1000);\r\n }\r\n throw error;\r\n }\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n return next.handle(request).pipe(\r\n retry({\r\n count: 1,\r\n delay: this.shouldRetry\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { APP_HTTP_CONFIG } from '../interceptors';\r\nimport { BaseHttpService, HttpConfig } from './base-http-service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ListOfValues extends BaseHttpService {\r\n override setApiConfig(): HttpConfig {\r\n return {\r\n microServiceUrl: APP_HTTP_CONFIG.LOV_BASE_URL,\r\n apiUrl: \"lookups\"\r\n };\r\n }\r\n\r\n getRolesByGroup<T>(group: string): Observable<T> {\r\n return this.getAll<T>({\r\n urlPostfix: group\r\n });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { MessageService, ToastMessageOptions } from \"primeng/api\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class ToasterService {\r\n mainKey = \"main-toaster\";\r\n\r\n constructor(private messageService: MessageService) {}\r\n\r\n showMessage(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: options?.key ? options?.key : this.mainKey,\r\n severity: options?.severity,\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showSuccess(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"success\",\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showError(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"error\",\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showInfo(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"info\",\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showWarning(key: string, summary: string, detail: string, life = 5000) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"warn\",\r\n summary,\r\n detail,\r\n life\r\n });\r\n }\r\n\r\n clear() {\r\n this.messageService.clear(this.mainKey);\r\n }\r\n}\r\n","import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { ErrorHandler, Injectable } from \"@angular/core\";\r\nimport { ToasterService } from \"./toaster.service\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { from } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class ErrorHandlerService implements ErrorHandler {\r\n constructor(\r\n private toasterService: ToasterService,\r\n private translateService: TranslateService\r\n ) { }\r\n\r\n handleError(error: unknown) {\r\n\r\n // check if there is an error in code\r\n if (error instanceof Error) {\r\n // this is commented because in code error we don't need to show the error to the user\r\n // we can just log it for our reference\r\n console.error(error);\r\n }\r\n\r\n if (error instanceof HttpErrorResponse) {\r\n /**\r\n * error handling here cause the error response is blob file (binary file)\r\n * not JSON, so we can't parse it\r\n * and need to check the content type of the response\r\n **/\r\n if (error?.error?.type === \"application/json\") {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n from((error?.error as any).text()).subscribe((res) => {\r\n const errorObj = JSON.parse(res as string);\r\n const errorMessage = this.translateService.instant(`network_errors.${errorObj.errors.errorCode}`);\r\n this.toasterService.showError({ summary: this.translateService.instant(`error`), detail: errorMessage });\r\n });\r\n return;\r\n }\r\n const errorInfo = error.error;\r\n const errorCode = errorInfo.errors.message;\r\n let errorMessage = errorInfo?.error;\r\n\r\n if (errorInfo.code) {\r\n switch (errorInfo.code) {\r\n case 401:\r\n break;\r\n case 403:\r\n break;\r\n case 400:\r\n errorMessage = this.translateService.instant(`network_errors.${errorCode}`);\r\n\r\n break;\r\n case 404:\r\n if (errorCode) {\r\n errorMessage = this.translateService.instant(`network_errors.${errorCode}`);\r\n break;\r\n }\r\n errorMessage = this.translateService.instant(`validation_error.not_found`);\r\n break;\r\n case 500:\r\n case 503:\r\n errorMessage = this.translateService.instant(`validation_error.server`);\r\n break;\r\n default:\r\n errorMessage = this.translateService.instant(`validation_error.random`);\r\n break;\r\n }\r\n\r\n this.toasterService.showError({ summary: this.translateService.instant(`error`), detail: errorMessage });\r\n }\r\n }\r\n }\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { JwtDecoderService } from \"./jwt-decoder.service\";\r\nimport { PermissionsActions, UserPermissionsEnum } from \"../enums\";\r\nimport {BehaviorSubject} from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class PermissionsService {\r\n private jwtDecoderService = inject(JwtDecoderService);\r\n private decodedToken = this.jwtDecoderService.decodedToken;\r\n private tokenPermissions = this.decodedToken ? this.decodedToken.permissions as [] : [];\r\n private domainPermissionsSubject = new BehaviorSubject<string[]>([]);\r\n domainPermissions$ = this.domainPermissionsSubject.asObservable();\r\n\r\n private getKeyName(action: string) {\r\n const actionsArr = action.split(\"_\");\r\n return actionsArr.splice(1, actionsArr.length - 1).join(\"_\");\r\n }\r\n\r\n getActionName(action: string) {\r\n return action.split(\"_\")[0];\r\n }\r\n\r\n getAllowedActionsByKey(key: UserPermissionsEnum, newPermissions?: string[]) {\r\n const permissionsNeeded = newPermissions || this.tokenPermissions;\r\n if (!permissionsNeeded) {\r\n console.error(\"There are no permissions available\");\r\n return [];\r\n }\r\n return permissionsNeeded\r\n .filter((p) => {\r\n return key === this.getKeyName(p);\r\n })\r\n .map((t) => {\r\n return this.getActionName(t);\r\n });\r\n }\r\n\r\n checkKeyHasPermission(key: UserPermissionsEnum, action: PermissionsActions, newPermissions?: string[]) {\r\n return this.getAllowedActionsByKey(key, newPermissions).some((p) => p === action);\r\n }\r\n\r\n checkDomainHasPermission(key: UserPermissionsEnum, action: PermissionsActions) {\r\n return this.getAllowedActionsByKey(key, this.getDomainPermissions()).some((p) => p === action);\r\n }\r\n\r\n routeGuardChecker(key: UserPermissionsEnum, action: PermissionsActions) {\r\n if(!this.checkKeyHasPermission(key, action)){\r\n return this.checkKeyHasPermission(key, action,this.getDomainPermissions());\r\n }\r\n return true;\r\n }\r\n\r\n clearDomainPermissions() {\r\n this.domainPermissionsSubject.next([]);\r\n }\r\n\r\n setDomainPermissions(permissions: string[]) {\r\n this.domainPermissionsSubject.next(permissions);\r\n }\r\n\r\n getDomainPermissions(): string[] {\r\n return this.domainPermissionsSubject.getValue();\r\n }\r\n}\r\n","export enum UserPermissionsEnum {\r\n BOD = \"BOD\",\r\n BOARD_COMMITTEES = \"BOARD_COMMITTEES\",\r\n BOARD_MEETINGS = \"BOARD_MEETINGS\",\r\n MEETING_INSIDE_THE_BOD = \"MEETING_INSIDE_THE_BOD\",\r\n COMMITTEE = \"COMMITTEE\",\r\n MEETING_INSIDE_THE_COMMITTEE = \"MEETING_INSIDE_THE_COMMITTEE\",\r\n MEETING = \"MEETING\",\r\n DECISION = \"DECISION\",\r\n RECOMMENDATION = \"RECOMMENDATION\",\r\n TASK = \"TASK\",\r\n VOTING = \"VOTING\",\r\n VOTING_SECRETARY_RESULTS = \"VOTING_SECRETARY_RESULTS\",\r\n VOTING_RESULTS = \"VOTING_RESULTS\",\r\n DRAFT_MOM = \"DRAFT_MOM\",\r\n FINAL_MOM = \"FINAL_MOM\",\r\n MOM = \"MOM\",\r\n AGENDA = \"AGENDA\",\r\n ATTENDEES = \"ATTENDEES\",\r\n COMMENT = \"COMMENT\"\r\n}\r\n\r\nexport enum PermissionsActions {\r\n VIEW = \"VIEW\",\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\",\r\n DELETE = \"DELETE\",\r\n REORDER = \"REORDER\",\r\n DOWNLOAD = \"DOWNLOAD\",\r\n MARK = \"MARK\",\r\n GENERATE = \"GENERATE\",\r\n TERMINATE = \"TERMINATE\",\r\n START = \"START\",\r\n END = \"END\",\r\n ACTIVATE = \"ACTIVATE\"\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n TemplateRef,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { PermissionsService } from '../services';\r\nimport { PermissionsActions, UserPermissionsEnum } from '../enums';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[hasPermissions]',\r\n standalone: true\r\n})\r\nexport class HasPermissionsDirective implements OnInit, OnDestroy {\r\n private _actions: string[];\r\n private _key: string;\r\n private _newPermissions: string[];\r\n private _isDomain: boolean;\r\n\r\n private isViewCreated = false;\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private permissionsService: PermissionsService,\r\n private viewContainer: ViewContainerRef,\r\n private templateRef: TemplateRef<unknown>\r\n ) {}\r\n\r\n /**\r\n * make sure that the key value looks like the UserPermissionsEnum enum\r\n * usage: *permissions=\"[PermissionsActions.EDIT]; key: LOOKUPS\r\n */\r\n\r\n @Input({ required: true }) set hasPermissions(actions: string[]) {\r\n if (this.arraysChanged(this._actions, actions)) {\r\n this._actions = actions;\r\n this.updateView();\r\n }\r\n }\r\n\r\n @Input({ required: true }) set hasPermissionsKey(key: string) {\r\n if (this._key !== key) {\r\n this._key = key;\r\n this.updateView();\r\n }\r\n }\r\n\r\n @Input() set hasPermissionsNewPermissions(newPermissions: string[]) {\r\n if (this.arraysChanged(this._newPermissions, newPermissions)) {\r\n this._newPermissions = newPermissions;\r\n this.updateView();\r\n }\r\n }\r\n\r\n @Input() set hasPermissionsIsDomain(isDomain: boolean) {\r\n if (this._isDomain !== isDomain) {\r\n this._isDomain = isDomain;\r\n this.updateView();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscription = this.permissionsService.domainPermissions$.subscribe(() => {\r\n if (this._isDomain) {\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n private updateView() {\r\n const canShow = this._actions.some(action => this.hasPermission(action));\r\n\r\n if (canShow && !this.isViewCreated) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.isViewCreated = true;\r\n } else if (!canShow && this.isViewCreated) {\r\n this.clearView();\r\n }\r\n }\r\n\r\n private hasPermission(action: string): boolean {\r\n if (this._isDomain) {\r\n return this.permissionsService.checkDomainHasPermission(\r\n this._key as UserPermissionsEnum,\r\n action as PermissionsActions\r\n );\r\n }\r\n\r\n return this.permissionsService.checkKeyHasPermission(\r\n this._key as UserPermissionsEnum,\r\n action as PermissionsActions,\r\n this._newPermissions\r\n );\r\n }\r\n\r\n private clearView() {\r\n this.viewContainer.clear();\r\n this.isViewCreated = false;\r\n }\r\n\r\n private arraysChanged(a?: string[], b?: string[]): boolean {\r\n if (a === b) return false;\r\n if (!a || !b) return true;\r\n if (a.length !== b.length) return true;\r\n return a.some((v, i) => v !== b[i]);\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from \"@angular/core\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { AppButtonComponent } from \"@corp-products/ui-components\";\r\nimport { MenuItem } from \"primeng/api\";\r\nimport { Menu } from \"primeng/menu\";\r\nimport { AuthService } from \"../../services\";\r\nimport { finalize } from \"rxjs\";\r\nimport { UserInfo } from \"../../interfaces\";\r\nimport { TranslatePipe } from \"@ngx-translate/core\";\r\nimport { PermissionsActions, UserPermissionsEnum } from \"../../enums\";\r\nimport { HasPermissionsDirective } from \"../../directives\";\r\n@Component({\r\n selector: \"app-header\",\r\n templateUrl: \"./app-header.component.html\",\r\n styleUrl: \"./app-header.component.scss\",\r\n standalone: true,\r\n imports: [RouterModule, AppButtonComponent, Menu, TranslatePipe, HasPermissionsDirective],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class AppHeaderComponent {\r\n @Output() createButtonClicked = new EventEmitter();\r\n @Output() toggleMenu = new EventEmitter<boolean>();\r\n @Input() userInfo: UserInfo;\r\n items: MenuItem[] | undefined = [\r\n {\r\n items: [\r\n {\r\n label: \"خــــروج\",\r\n command: () => this.logout()\r\n }\r\n ]\r\n }\r\n ];\r\n UserPermissionsEnum = UserPermissionsEnum;\r\n PermissionsActions = PermissionsActions;\r\n constructor(private authService: AuthService) {}\r\n\r\n logout(): void {\r\n this.authService\r\n .logoutFromSSO()\r\n .pipe(\r\n finalize(() => {\r\n this.authService.clearAuth();\r\n })\r\n )\r\n .subscribe();\r\n }\r\n}\r\n","<div class=\"px-10 flex justify-between items-center bg-white shadow-md py-3 h-16\">\r\n <div class=\"d-flex md:hidden w-fit\">\r\n <!-- Burger Icon for Mobile -->\r\n <app-button icon=\"font-icon-burger-icon text-[25px]\" size=\"large\" variant=\"text\"\r\n (clickEmitter)=\"toggleMenu.emit()\"/>\r\n </div>\r\n <div class=\"d-flex items-center justify-content-between gap-1\">\r\n <app-button\r\n *hasPermissions=\"[PermissionsActions.CREATE];key: UserPermissionsEnum.BOD\"\r\n iconPos=\"right\" icon=\"font-icon-plus\" (clickEmitter)=\"createButtonClicked.emit()\"\r\n [title]=\"'actions.create' | translate\"/>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-1\">\r\n @if (userInfo) {\r\n <div class=\"flex flex-col items-end justify-center\">\r\n <p class=\"text-sm\">{{ userInfo.userName }}</p>\r\n <p class=\"text-gray-500 mb-0 text-[10px]\">{{ userInfo.email }}</p>\r\n </div>\r\n\r\n <img src=\"assets/images/user-placeholder.jpg\" class=\"w-9 h-9 object-cover rounded-full\" alt=\"\"/>\r\n }\r\n <p-menu #menu [model]=\"items\" [popup]=\"true\"></p-menu>\r\n <button (click)=\"menu.toggle($event)\" class=\"mb-2\"><i class=\"font-icon-Vector text-[6px]\"></i></button>\r\n </div>\r\n</div>\r\n","import { RouteNameItem } from \"./side-menu\";\r\n\r\nexport const ROUTES_NAME: RouteNameItem = {\r\n board: {\r\n name: '/board-page',\r\n },\r\n users: {\r\n name: '/users',\r\n },\r\n // reports: {\r\n // name: '/reports',\r\n // },\r\n meetings: {\r\n name: '/meeting-page',\r\n },\r\n // tasks: {\r\n // name: '/tasks',\r\n // },\r\n // imported: {\r\n // name: '/imported',\r\n // },\r\n // exported: {\r\n // name: '/exported',\r\n // },\r\n // board: {\r\n // name: '/board',\r\n // },\r\n};\r\n","import { ROUTES_NAME } from './routes-names';\r\nimport { SideMenuItem } from './side-menu';\r\n\r\nexport const BASE_SIDE_MENU_ITEMS: SideMenuItem[] = [\r\n {\r\n label: 'الإجتماعات',\r\n icon: 'font-icon-menu-board',\r\n link: ROUTES_NAME['meetings'].name\r\n },\r\n {\r\n label: 'اللجان و المجالس',\r\n icon: 'font-icon-people',\r\n link: ROUTES_NAME['board'].name\r\n },\r\n // {\r\n // label: 'المستخدمين',\r\n // icon: 'font-icon-profile-2user',\r\n // link: ROUTES_NAME['users'].name,\r\n // },\r\n // {\r\n // label: 'الإجتماعات',\r\n // icon: 'font-icon-menu-board',\r\n // link: ROUTES_NAME['meetings'].name,\r\n // },\r\n // {\r\n // label: 'مهامي',\r\n // icon: 'font-icon-task-square',\r\n // link: ROUTES_NAME['tasks'].name,\r\n // },\r\n // {\r\n // label: 'الوارد',\r\n // icon: 'font-icon-directbox-receive',\r\n // link: ROUTES_NAME['imported'].name,\r\n // },\r\n // {\r\n // label: 'الصادر',\r\n // icon: 'font-icon-directbox-send',\r\n // link: ROUTES_NAME['exported'].name,\r\n // },\r\n // {\r\n // label: 'التقارير',\r\n // icon: 'font-icon-status-up',\r\n // link: ROUTES_NAME['reports'].name,\r\n // },\r\n];\r\n","import {Component, inject, Input, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SideMenuItem } from './side-menu';\r\nimport { BASE_SIDE_MENU_ITEMS } from './side-menu-items';\r\nimport {PermissionsService} from \"../../services\";\r\nimport {PermissionsActions, UserPermissionsEnum} from \"../../enums\";\r\nimport {NgClass} from \"@angular/common\";\r\n@Component({\r\n selector: \"app-side-menu\",\r\n standalone: true,\r\n imports: [RouterModule, NgClass],\r\n templateUrl: \"./app-side-menu.component.html\",\r\n styleUrl: \"./app-side-menu.component.scss\",\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class AppSideMenuComponent implements OnInit {\r\n @Input() isOpen!: boolean;\r\n menuItems: SideMenuItem[] = BASE_SIDE_MENU_ITEMS;\r\n permissionsService = inject(PermissionsService);\r\n filteredMenu: SideMenuItem[];\r\n\r\n ngOnInit(): void {\r\n this.filteredMenu = this.menuItems.filter((item) => {\r\n if (!item.permissionKey) {\r\n return true;\r\n }\r\n return this.permissionsService.checkKeyHasPermission(item.permissionKey as UserPermissionsEnum, PermissionsActions.VIEW);\r\n });\r\n }\r\n}\r\n","<nav\r\n [ngClass]=\"{ 'max-w-0 md:max-w-[500px]': !isOpen, 'max-w-[500px]': isOpen }\"\r\n class=\"md:flex h-100 bg-primary flex text-white flex-col py-2 text-center gap-y-10 transition-all w-24 hover:md:w-48 duration-500\">\r\n <a [routerLink]=\"'/'\"><i class=\"font-icon-STC-Logo text-[20px] pt-4 block px-4\"></i></a>\r\n <ul class=\"flex flex-col flex-grow\">\r\n @for (item of filteredMenu; track $index) {\r\n <li>\r\n <a\r\n [routerLinkActive]=\"'bg-primary_dark border-secondary'\"\r\n [routerLink]=\"item.link\"\r\n class=\"flex flex-col py-3 px-4 border-r-2 border-primary transition-all hover:bg-primary_dark hover:border-secondary\">\r\n <i [class]=\"item.icon + ' text-[17px] mb-1'\"></i>\r\n <span class=\"text-[10px] truncate\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n\r\n <a href=\"#\"><i class=\"font-icon-setting text-[20px] pb-4 block px-4\"></i></a>\r\n</nav>\r\n","import { AsyncPipe, NgClass } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport {TranslatePipe} from \"@ngx-translate/core\";\r\nimport {LoaderService} from \"../../services\";\r\n\r\n@Component({\r\n selector: \"global-loader\",\r\n templateUrl: \"./global-loader.component.html\",\r\n styleUrls: [\"./global-loader.component.scss\"],\r\n standalone: true,\r\n imports: [AsyncPipe, NgClass, TranslatePipe]\r\n})\r\nexport class GlobalLoaderComponent {\r\n @Input() color: string;\r\n constructor(public loaderService: LoaderService) {}\r\n}\r\n","@if (loaderService.isLoading$ | async; as data) {\r\n @if (data.show) {\r\n <div\r\n class=\"fixed inset-0 z-[1111] flex justify-center items-center\"\r\n [ngClass]=\"{\r\n 'bg-white/75': data?.isSystemLoader,\r\n 'absolute': !data?.isSystemLoader\r\n }\"\r\n >\r\n <div class=\"text-center flex flex-col gap-5 items-center\">\r\n <div\r\n class=\"animate-spin inline-block w-12 h-12 border-[3px] border-current border-t-transparent text-gray-800 rounded-full\">\r\n </div>\r\n <span>{{ 'loading' | translate }}</span>\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { CanActivateFn } from \"@angular/router\";\r\nimport { AuthService } from \"../services\";\r\nimport { CORE_CONFIG, CoreConfig } from \"../core-config\";\r\n\r\nexport const authGuard: CanActivateFn = () => {\r\n const appConfig = inject<CoreConfig>(CORE_CONFIG);\r\n const authService = inject(AuthService);\r\n const token: string | null = authService.getUserToken();\r\n\r\n if (!token) {\r\n window.location.href = appConfig.loginUrl;\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n","import { inject } from \"@angular/core\";\r\nimport { CanActivateFn, Router } from \"@angular/router\";\r\nimport { PermissionsService } from \"../services\";\r\nimport { RoutePermissionsInfo } from \"../interfaces\";\r\n\r\nexport const permissionsGuard: CanActivateFn = (route) => {\r\n const permissionsService = inject(PermissionsService);\r\n const router = inject(Router);\r\n const { key, action }: RoutePermissionsInfo = route.data[\"permissions\"];\r\n\r\n if (!route.data[\"permissions\"] || (route.data[\"permissions\"] && permissionsService.routeGuardChecker(key, action))) {\r\n return true;\r\n } else {\r\n router.navigate([\"no-access\"]);\r\n return false;\r\n }\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.ToasterService","i1.PermissionsService","i1.AuthService","i1.LoaderService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"corp-products-app-core.mjs","sources":["../../../../libs/core/src/lib/core/services/base-pagination-service/pagination.ts","../../../../libs/core/src/lib/core/services/base-pagination-service/base-pagination.service.ts","../../../../libs/core/src/lib/core/handlers/storage-handler.ts","../../../../libs/core/src/lib/core/handlers/stortage.ts","../../../../libs/core/src/lib/core/services/base-http-service/base-http-types.ts","../../../../libs/core/src/lib/core/services/base-http-service/base-http-utils.ts","../../../../libs/core/src/lib/core/services/base-http-service/base-http.service.ts","../../../../libs/core/src/lib/core/core-config.ts","../../../../libs/core/src/lib/core/services/auth.service.ts","../../../../libs/core/src/lib/core/services/jwt-decoder.service.ts","../../../../libs/core/src/lib/core/interceptors/app-http-config.ts","../../../../libs/core/src/lib/core/handlers/http-context-handler.ts","../../../../libs/core/src/lib/core/services/loader.service.ts","../../../../libs/core/src/lib/core/interceptors/base-http.interceptor.ts","../../../../libs/core/src/lib/core/interceptors/global-http-error.interceptor.ts","../../../../libs/core/src/lib/core/services/lov.service.ts","../../../../libs/core/src/lib/core/services/toaster.service.ts","../../../../libs/core/src/lib/core/services/error-handler.service.ts","../../../../libs/core/src/lib/core/services/permissions.service.ts","../../../../libs/core/src/lib/core/components/global-loader/global-loader.component.ts","../../../../libs/core/src/lib/core/components/global-loader/global-loader.component.html","../../../../libs/core/src/lib/core/guards/auth.guard.ts","../../../../libs/core/src/lib/core/guards/permissions.guard.ts","../../../../libs/core/src/lib/core/enums/user-permissions.enum.ts","../../../../libs/core/src/lib/core/directives/permissions.directive.ts","../../../../libs/core/src/corp-products-app-core.ts"],"sourcesContent":["export const PAGESIZE = 10;\r\nexport const PAGE_SIZE_OPTION = [5, 10, 15, 20];\r\nexport enum SortDirection {\r\n ASC = 'ASC',\r\n DESC = 'DESC'\r\n}\r\n","import { Observable } from \"rxjs\";\r\nimport { ListOptions } from \"./list-options.interface\";\r\nimport { PAGE_SIZE_OPTION, PAGESIZE, SortDirection } from \"./pagination\";\r\nimport { PaginatorState } from \"primeng/paginator\";\r\nexport abstract class BasePaginationService<T = any> {\r\n\r\n totalRecords = 0;\r\n totalPages = 0;\r\n rowsChange: number = PAGESIZE;\r\n\r\n pageSizes = PAGE_SIZE_OPTION\r\n defaultSortValue = \"createdAt\";\r\n defaultSortDirection = SortDirection.DESC;\r\n first: number | undefined = 0;\r\n\r\n listOptions: ListOptions = {\r\n searchValue: \"\",\r\n paginator: this.rowsChange,\r\n page: 0,\r\n direction: this.defaultSortDirection,\r\n sortBy: this.defaultSortValue\r\n };\r\n\r\n abstract getList(listOptions: ListOptions): void | Observable<T>\r\n\r\n createListFilter(filters: {[key: string] : unknown}): void {\r\n this.listOptions = {\r\n ...this.listOptions,\r\n ...filters\r\n }\r\n }\r\n\r\n resetList(): void {\r\n this.listOptions = {\r\n searchValue: \"\",\r\n paginator: this.rowsChange,\r\n page: 0\r\n };\r\n }\r\n\r\n resetPaginator(): void {\r\n this.listOptions = {\r\n ...this.listOptions ,\r\n paginator: this.rowsChange,\r\n page: 0\r\n };\r\n }\r\n\r\n onPageChange(event: PaginatorState): void {\r\n this.listOptions = {\r\n ...this.listOptions,\r\n page: event.page,\r\n paginator: event.rows,\r\n };\r\n this.first = event.first ?? 0;\r\n this.getList(this.listOptions);\r\n }\r\n\r\n}\r\n","// Important for global context\r\nimport { LocalStorageKeys, SessionStorageKeys, StorageEnum } from \"./stortage\";\r\n\r\nconst setLocalStorage = (key: string, value: string) => localStorage.setItem(key, value);\r\nconst getLocalStorage = (key: string) => localStorage.getItem(key);\r\nconst clearLocalStorage = () => localStorage.clear();\r\nconst setSessionStorage = (key: string, value: string) => sessionStorage.setItem(key, value);\r\nconst getSessionStorage = (key: string) => sessionStorage.getItem(key);\r\nconst clearSessionStorage = () => sessionStorage.clear();\r\n\r\nexport class StorageHandler {\r\n public static local = {\r\n set: (key: LocalStorageKeys, value: unknown) => this.setItem(key, value, setLocalStorage),\r\n get: <T>(key: LocalStorageKeys) => this.getItem<T>(key, getLocalStorage),\r\n clear: () => this.clearStorage(clearLocalStorage)\r\n };\r\n public static session = {\r\n set: (key: SessionStorageKeys, value: unknown) => this.setItem(key, value, setSessionStorage),\r\n get: <T>(key: SessionStorageKeys) => this.getItem<T>(key, getSessionStorage),\r\n clear: () => this.clearStorage(clearSessionStorage)\r\n };\r\n\r\n private static setItem(key: StorageEnum, value: unknown, set: (key: string, value: string) => void): void {\r\n if (!key) return;\r\n set(key as string, typeof value === \"string\" ? value : JSON.stringify(value));\r\n }\r\n\r\n private static getItem<T>(key: StorageEnum, get: (key: string) => string | null, withParsing = false): T | null {\r\n const data: string | null = get(key as string) ?? null;\r\n if (data) return withParsing ? JSON.parse(data) : data;\r\n return null;\r\n }\r\n\r\n private static clearStorage(clear: () => void): void {\r\n clear();\r\n }\r\n}\r\n","export enum LocalStorageKeys {\r\n LANGUAGE = \"LANGUAGE\",\r\n TOKEN = \"TOKEN\"\r\n}\r\n\r\nexport enum SessionStorageKeys {}\r\nexport type StorageEnum = SessionStorageKeys | LocalStorageKeys;\r\n","import { HttpContext, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Params as RouterParams } from '@angular/router';\r\n\r\nexport interface HttpConfig {\r\n apiUrl?: string;\r\n microServiceUrl:string;\r\n globalMapFn?: (res: any) => any;\r\n methods?: ServiceConfig;\r\n}\r\n\r\nexport type Params =\r\n | HttpParams\r\n | { [param: string]: string | string[] | unknown };\r\nexport type HttpRequestOptions = {\r\n headers?:\r\n | HttpHeaders\r\n | RouterParams\r\n | { [header: string]: string | string[] };\r\n params?: HttpParams | { [param: string]: string | string[] } | Params;\r\n context?: HttpContext;\r\n reportProgress?: boolean;\r\n observe?: 'events';\r\n responseType?: string;\r\n};\r\nexport const HttpRequestOptionsKeys: Array<keyof Required<HttpRequestOptions>> =\r\n ['headers', 'params', 'context', 'reportProgress', 'observe', 'responseType'];\r\n\r\nexport type HttpOptions<T = any> = HttpRequestOptions & {\r\n urlRewrite?: string;\r\n urlPostfix?: string;\r\n mapFn?: (res: any) => T;\r\n};\r\n\r\nexport interface ServiceConfig {\r\n single?: HttpOptions;\r\n getAll?: HttpOptions;\r\n add?: HttpOptions;\r\n update?: HttpOptions;\r\n delete?: HttpOptions;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\r\n","import { map } from 'rxjs/operators';\r\nimport { HttpOptions, HttpRequestOptionsKeys } from './base-http-types';\r\nimport { BaseHttpResponse } from './base-http-response';\r\n\r\nexport const resolveUrl = (\r\n baseUrl: string,\r\n options?: HttpOptions,\r\n ...args: string[]\r\n): string => {\r\n const { urlRewrite, urlPostfix } = options || {};\r\n\r\n if (urlRewrite) {\r\n return urlRewrite;\r\n }\r\n\r\n let result = baseUrl;\r\n\r\n if (args && args.length > 0 && args[0] !== '') {\r\n result += `/${args.join('/')}`;\r\n }\r\n\r\n if (urlPostfix) {\r\n result += `/${urlPostfix}`;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const extractRequestOptions = (options?: any) => {\r\n if (!options || typeof options !== 'object') {\r\n return {};\r\n }\r\n /* eslint-disable */\r\n return HttpRequestOptionsKeys.reduce((requestOptions: any, key) => {\r\n const value = options[key];\r\n\r\n if (value !== undefined) {\r\n requestOptions[key] = value;\r\n }\r\n\r\n return requestOptions;\r\n }, {});\r\n};\r\n\r\nexport const mapResponse = <T>(options?: HttpOptions) =>\r\n map((res: T) => (options?.mapFn ? options.mapFn(res) : res));\r\n\r\nexport const epmDefaultMapper = <T>(res: BaseHttpResponse<T>) => res.payload;\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpConfig, HttpOptions, ServiceConfig } from './base-http-types';\r\nimport { epmDefaultMapper, extractRequestOptions, mapResponse, resolveUrl } from './base-http-utils';\r\n\r\nexport abstract class BaseHttpService {\r\n private readonly http: HttpClient = inject(HttpClient);\r\n\r\n get url(): string {\r\n const { apiUrl,microServiceUrl } = this.setApiConfig();\r\n return `${microServiceUrl}${apiUrl ? `/${apiUrl}` : ''}`;\r\n }\r\n\r\n get methodsConfig(): ServiceConfig | undefined {\r\n const { methods } = this.setApiConfig();\r\n return methods;\r\n }\r\n\r\n get globalMapFn(): (res: any) => any {\r\n const { globalMapFn } = this.setApiConfig();\r\n return globalMapFn || epmDefaultMapper;\r\n }\r\n\r\n abstract setApiConfig(): HttpConfig;\r\n\r\n single<T>(id: string | number, options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('single');\r\n const url = resolveUrl(this.url, activeOptions, id?.toString());\r\n const requestOptions = extractRequestOptions(activeOptions);\r\n\r\n return this.http\r\n .get<T>(url, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n getAll<T>(options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('getAll');\r\n const url = resolveUrl(this.url, activeOptions);\r\n const requestOptions = extractRequestOptions(activeOptions);\r\n\r\n return this.http\r\n .get<T>(url, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n add<T>(body: unknown, options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('add');\r\n const url = resolveUrl(this.url, activeOptions);\r\n const requestOptions = { ...extractRequestOptions(activeOptions) };\r\n\r\n return this.http\r\n .post<T>(url, body, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n update<T>(\r\n id: string | number,\r\n body: unknown,\r\n options?: HttpOptions\r\n ): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('update');\r\n const url = resolveUrl(this.url, activeOptions, id?.toString());\r\n const requestOptions = { ...extractRequestOptions(activeOptions) };\r\n\r\n return this.http\r\n .put<T>(url, body, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n delete<T>(id: string | number, options?: HttpOptions): Observable<T> {\r\n const activeOptions = options || this.getMethodConfig('delete');\r\n const url = resolveUrl(this.url, activeOptions, id?.toString());\r\n const requestOptions = extractRequestOptions(activeOptions);\r\n\r\n return this.http\r\n .delete<T>(url, requestOptions)\r\n .pipe(mapResponse(this.getMapFun(activeOptions)));\r\n }\r\n\r\n protected getMethodConfig(method: keyof ServiceConfig): any {\r\n return this.methodsConfig ? this.methodsConfig[method] : undefined;\r\n }\r\n\r\n protected getMapFun(options?: HttpOptions) {\r\n const getMapFunObj = {\r\n default: { mapFn: epmDefaultMapper },\r\n custom: { mapFn: this.globalMapFn },\r\n };\r\n\r\n if (\r\n options &&\r\n (options?.reportProgress || options?.responseType === 'blob')\r\n ) {\r\n return { mapFn: (res: unknown) => res };\r\n }\r\n\r\n if (options && options?.mapFn) {\r\n return { mapFn: options.mapFn };\r\n }\r\n\r\n const isGlobalMapFnValid =\r\n this.globalMapFn && typeof this.globalMapFn === 'function';\r\n return isGlobalMapFnValid ? getMapFunObj.custom : getMapFunObj.default;\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport interface CoreConfig {\r\n apiUrl: string;\r\n production: boolean;\r\n gatewayUrl: string;\r\n loginUrl: string;\r\n logoutEndpoint: string;\r\n}\r\n\r\nexport const CORE_CONFIG = new InjectionToken<CoreConfig>(\"CoreConfig\");\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { StorageHandler } from \"../handlers/storage-handler\";\r\nimport { LocalStorageKeys } from \"../handlers/stortage\";\r\nimport { BaseHttpService, HttpConfig } from \"./base-http-service\";\r\nimport { CORE_CONFIG, CoreConfig } from \"../core-config\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class AuthService extends BaseHttpService {\r\n public isUserLoggedIn$ = new BehaviorSubject(this.isLoggedIn());\r\n\r\n constructor(@Inject(CORE_CONFIG) protected appConfig: CoreConfig) {\r\n super();\r\n }\r\n\r\n override setApiConfig(): HttpConfig {\r\n return {\r\n apiUrl: \"\",\r\n microServiceUrl: \"\"\r\n };\r\n }\r\n\r\n initAuthentication() {\r\n const token: string | null = new URLSearchParams(window.location.search).get(\"token\");\r\n if (token) {\r\n this.setAuthentication(token);\r\n window.location.search = \"\";\r\n }\r\n }\r\n\r\n setAuthentication(token: string) {\r\n this.isUserLoggedIn$.next(true);\r\n this.setUserToken(token);\r\n }\r\n\r\n isLoggedIn(): boolean {\r\n return !!this.getUserToken();\r\n }\r\n\r\n getUserToken(): string | null {\r\n return StorageHandler.local.get(LocalStorageKeys.TOKEN);\r\n }\r\n\r\n setUserToken(token?: string) {\r\n return StorageHandler.local.set(LocalStorageKeys.TOKEN, token);\r\n }\r\n\r\n logoutFromSSO() {\r\n const logoutUrl = this.appConfig.logoutEndpoint;\r\n return this.single<unknown>(\"\", {\r\n urlRewrite: logoutUrl\r\n });\r\n }\r\n\r\n clearAuth() {\r\n StorageHandler.local.clear();\r\n StorageHandler.session.clear();\r\n this.isUserLoggedIn$.next(false);\r\n window.location.href = this.appConfig.loginUrl;\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { jwtDecode } from \"jwt-decode\";\r\nimport { AuthService } from \"./auth.service\";\r\nimport { JWTDecoded } from \"../interfaces/jwt-token-decoded.interface\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class JwtDecoderService {\r\n authService = inject(AuthService);\r\n public decodedToken: JWTDecoded;\r\n\r\n constructor() {\r\n this.decodeToken();\r\n }\r\n\r\n public decodeToken() {\r\n const token: string = this.authService.getUserToken() as string;\r\n if (token) {\r\n this.decodedToken = jwtDecode(token);\r\n }\r\n }\r\n}\r\n","export const COMMON_BASE_URL = \"common/api/v1\";\r\nexport const APP_HTTP_CONFIG = {\r\n BOARD_BASE_URL: \"board-acl/private/v1\",\r\n MEETING_BASE_URL: \"meeting-acl/private/v1\",\r\n IGATE_BASE_URL: COMMON_BASE_URL + \"/igate-users\",\r\n LOV_BASE_URL: COMMON_BASE_URL + \"/lov\",\r\n ATTACHMENT_BASE_URL: COMMON_BASE_URL + \"/attachment\"\r\n};\r\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\r\n\r\nexport const IS_SYSTEM_LOADER = new HttpContextToken<boolean>(() => true); // set default loader\r\n\r\nexport class HttpContextHandler {\r\n static setLoaderType(isSystemLoader: boolean) {\r\n return new HttpContext().set(IS_SYSTEM_LOADER, isSystemLoader);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nexport interface LoaderState {\r\n show: boolean;\r\n isSystemLoader?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class LoaderService {\r\n isLoading$ = new BehaviorSubject<LoaderState>({ show: false });\r\n private loadingMap: Map<string, boolean> = new Map<string, boolean>();\r\n\r\n setLoading(loading: boolean, isSystemLoader = true, url: string): void {\r\n if (!url) {\r\n throw new Error(\"The request URL must be provided to the LoaderService.setLoading function\");\r\n }\r\n\r\n if (loading) {\r\n this.loadingMap.set(url, loading);\r\n this.isLoading$.next({ show: true, isSystemLoader });\r\n } else if (!loading && this.loadingMap.has(url)) {\r\n this.loadingMap.delete(url);\r\n }\r\n\r\n if (!this.loadingMap.size) {\r\n this.isLoading$.next({ show: false });\r\n }\r\n }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Inject, inject, Injectable } from \"@angular/core\";\r\nimport { finalize, Observable, tap } from \"rxjs\";\r\nimport { IS_SYSTEM_LOADER } from \"../handlers/http-context-handler\";\r\nimport { AuthService } from \"../services/auth.service\";\r\nimport { LoaderService } from \"../services/loader.service\";\r\nimport { CORE_CONFIG, CoreConfig } from \"../core-config\";\r\n\r\n@Injectable()\r\nexport class HttpBaseInterceptor implements HttpInterceptor {\r\n authService = inject(AuthService);\r\n loaderService = inject(LoaderService);\r\n\r\n constructor(@Inject(CORE_CONFIG) protected appConfig: CoreConfig) {}\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n console.log(\"interceptor\", this.appConfig);\r\n const URL = `${this.appConfig.gatewayUrl}${request.url}`;\r\n const token = this.authService.getUserToken();\r\n\r\n // Handler header\r\n request = request.clone({\r\n url: URL,\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n Language: \"en\"\r\n }\r\n });\r\n\r\n // Handle loader\r\n const IS_SYSTEM_LOADER_CHECK = request.context.get(IS_SYSTEM_LOADER);\r\n this.loaderService.setLoading(true, IS_SYSTEM_LOADER_CHECK, request.url);\r\n\r\n return next.handle(request).pipe(\r\n // Handler Token\r\n tap((event) => {\r\n // if (event instanceof HttpResponse && request.url.includes(User_Token)) {\r\n // Set user token ..\r\n // }\r\n }),\r\n finalize(() => this.loaderService.setLoading(false, IS_SYSTEM_LOADER_CHECK, request.url))\r\n );\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Observable, retry, timer } from 'rxjs';\r\n\r\nexport class GlobalHttpErrorInterceptor implements HttpInterceptor {\r\n // check if it is a server error to retry the request\r\n shouldRetry(error: HttpErrorResponse) {\r\n if (error.status >= 500) {\r\n return timer(1000);\r\n }\r\n throw error;\r\n }\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n return next.handle(request).pipe(\r\n retry({\r\n count: 1,\r\n delay: this.shouldRetry\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { APP_HTTP_CONFIG } from '../interceptors';\r\nimport { BaseHttpService, HttpConfig } from './base-http-service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ListOfValues extends BaseHttpService {\r\n override setApiConfig(): HttpConfig {\r\n return {\r\n microServiceUrl: APP_HTTP_CONFIG.LOV_BASE_URL,\r\n apiUrl: \"lookups\"\r\n };\r\n }\r\n\r\n getRolesByGroup<T>(group: string): Observable<T> {\r\n return this.getAll<T>({\r\n urlPostfix: group\r\n });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { MessageService, ToastMessageOptions } from \"primeng/api\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class ToasterService {\r\n mainKey = \"main-toaster\";\r\n\r\n constructor(private messageService: MessageService) {}\r\n\r\n showMessage(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: options?.key ? options?.key : this.mainKey,\r\n severity: options?.severity,\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showSuccess(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"success\",\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showError(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"error\",\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showInfo(options: ToastMessageOptions) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"info\",\r\n summary: options?.summary,\r\n detail: options?.detail,\r\n life: options?.life ?? 5000\r\n });\r\n }\r\n\r\n showWarning(key: string, summary: string, detail: string, life = 5000) {\r\n this.messageService.add({\r\n key: this.mainKey,\r\n severity: \"warn\",\r\n summary,\r\n detail,\r\n life\r\n });\r\n }\r\n\r\n clear() {\r\n this.messageService.clear(this.mainKey);\r\n }\r\n}\r\n","import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { ErrorHandler, Injectable } from \"@angular/core\";\r\nimport { ToasterService } from \"./toaster.service\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { from } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class ErrorHandlerService implements ErrorHandler {\r\n constructor(\r\n private toasterService: ToasterService,\r\n private translateService: TranslateService\r\n ) { }\r\n\r\n handleError(error: unknown) {\r\n\r\n // check if there is an error in code\r\n if (error instanceof Error) {\r\n // this is commented because in code error we don't need to show the error to the user\r\n // we can just log it for our reference\r\n console.error(error);\r\n }\r\n\r\n if (error instanceof HttpErrorResponse) {\r\n /**\r\n * error handling here cause the error response is blob file (binary file)\r\n * not JSON, so we can't parse it\r\n * and need to check the content type of the response\r\n **/\r\n if (error?.error?.type === \"application/json\") {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n from((error?.error as any).text()).subscribe((res) => {\r\n const errorObj = JSON.parse(res as string);\r\n const errorMessage = this.translateService.instant(`network_errors.${errorObj.errors.errorCode}`);\r\n this.toasterService.showError({ summary: this.translateService.instant(`error`), detail: errorMessage });\r\n });\r\n return;\r\n }\r\n const errorInfo = error.error;\r\n const errorCode = errorInfo.errors.message;\r\n let errorMessage = errorInfo?.error;\r\n\r\n if (errorInfo.code) {\r\n switch (errorInfo.code) {\r\n case 401:\r\n break;\r\n case 403:\r\n break;\r\n case 400:\r\n errorMessage = this.translateService.instant(`network_errors.${errorCode}`);\r\n\r\n break;\r\n case 404:\r\n if (errorCode) {\r\n errorMessage = this.translateService.instant(`network_errors.${errorCode}`);\r\n break;\r\n }\r\n errorMessage = this.translateService.instant(`validation_error.not_found`);\r\n break;\r\n case 500:\r\n case 503:\r\n errorMessage = this.translateService.instant(`validation_error.server`);\r\n break;\r\n default:\r\n errorMessage = this.translateService.instant(`validation_error.random`);\r\n break;\r\n }\r\n\r\n this.toasterService.showError({ summary: this.translateService.instant(`error`), detail: errorMessage });\r\n }\r\n }\r\n }\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport { JwtDecoderService } from \"./jwt-decoder.service\";\r\nimport { PermissionsActions, UserPermissionsEnum } from \"../enums\";\r\nimport {BehaviorSubject} from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class PermissionsService {\r\n private jwtDecoderService = inject(JwtDecoderService);\r\n private decodedToken = this.jwtDecoderService.decodedToken;\r\n private tokenPermissions = this.decodedToken ? this.decodedToken.permissions as [] : [];\r\n private domainPermissionsSubject = new BehaviorSubject<string[]>([]);\r\n domainPermissions$ = this.domainPermissionsSubject.asObservable();\r\n\r\n private getKeyName(action: string) {\r\n const actionsArr = action.split(\"_\");\r\n return actionsArr.splice(1, actionsArr.length - 1).join(\"_\");\r\n }\r\n\r\n getActionName(action: string) {\r\n return action.split(\"_\")[0];\r\n }\r\n\r\n getAllowedActionsByKey(key: UserPermissionsEnum, newPermissions?: string[]) {\r\n const permissionsNeeded = newPermissions || this.tokenPermissions;\r\n if (!permissionsNeeded) {\r\n console.error(\"There are no permissions available\");\r\n return [];\r\n }\r\n return permissionsNeeded\r\n .filter((p) => {\r\n return key === this.getKeyName(p);\r\n })\r\n .map((t) => {\r\n return this.getActionName(t);\r\n });\r\n }\r\n\r\n checkKeyHasPermission(key: UserPermissionsEnum, action: PermissionsActions, newPermissions?: string[]) {\r\n return this.getAllowedActionsByKey(key, newPermissions).some((p) => p === action);\r\n }\r\n\r\n checkDomainHasPermission(key: UserPermissionsEnum, action: PermissionsActions) {\r\n return this.getAllowedActionsByKey(key, this.getDomainPermissions()).some((p) => p === action);\r\n }\r\n\r\n routeGuardChecker(key: UserPermissionsEnum, action: PermissionsActions) {\r\n if(!this.checkKeyHasPermission(key, action)){\r\n return this.checkKeyHasPermission(key, action,this.getDomainPermissions());\r\n }\r\n return true;\r\n }\r\n\r\n clearDomainPermissions() {\r\n this.domainPermissionsSubject.next([]);\r\n }\r\n\r\n setDomainPermissions(permissions: string[]) {\r\n this.domainPermissionsSubject.next(permissions);\r\n }\r\n\r\n getDomainPermissions(): string[] {\r\n return this.domainPermissionsSubject.getValue();\r\n }\r\n}\r\n","import { AsyncPipe, NgClass } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport {TranslatePipe} from \"@ngx-translate/core\";\r\nimport {LoaderService} from \"../../services\";\r\n\r\n@Component({\r\n selector: \"global-loader\",\r\n templateUrl: \"./global-loader.component.html\",\r\n styleUrls: [\"./global-loader.component.scss\"],\r\n standalone: true,\r\n imports: [AsyncPipe, NgClass, TranslatePipe]\r\n})\r\nexport class GlobalLoaderComponent {\r\n @Input() color: string;\r\n constructor(public loaderService: LoaderService) {}\r\n}\r\n","@if (loaderService.isLoading$ | async; as data) {\r\n @if (data.show) {\r\n <div\r\n class=\"fixed inset-0 z-[1111] flex justify-center items-center\"\r\n [ngClass]=\"{\r\n 'bg-white/75': data?.isSystemLoader,\r\n 'absolute': !data?.isSystemLoader\r\n }\"\r\n >\r\n <div class=\"text-center flex flex-col gap-5 items-center\">\r\n <div\r\n class=\"animate-spin inline-block w-12 h-12 border-[3px] border-current border-t-transparent text-gray-800 rounded-full\">\r\n </div>\r\n <span>{{ 'loading' | translate }}</span>\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { CanActivateFn } from \"@angular/router\";\r\nimport { AuthService } from \"../services\";\r\nimport { CORE_CONFIG, CoreConfig } from \"../core-config\";\r\n\r\nexport const authGuard: CanActivateFn = () => {\r\n const appConfig = inject<CoreConfig>(CORE_CONFIG);\r\n const authService = inject(AuthService);\r\n const token: string | null = authService.getUserToken();\r\n\r\n if (!token) {\r\n window.location.href = appConfig.loginUrl;\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n","import { inject } from \"@angular/core\";\r\nimport { CanActivateFn, Router } from \"@angular/router\";\r\nimport { PermissionsService } from \"../services\";\r\nimport { RoutePermissionsInfo } from \"../interfaces\";\r\n\r\nexport const permissionsGuard: CanActivateFn = (route) => {\r\n const permissionsService = inject(PermissionsService);\r\n const router = inject(Router);\r\n const { key, action }: RoutePermissionsInfo = route.data[\"permissions\"];\r\n\r\n if (!route.data[\"permissions\"] || (route.data[\"permissions\"] && permissionsService.routeGuardChecker(key, action))) {\r\n return true;\r\n } else {\r\n router.navigate([\"no-access\"]);\r\n return false;\r\n }\r\n};\r\n","export enum UserPermissionsEnum {\r\n BOD = \"BOD\",\r\n BOARD_COMMITTEES = \"BOARD_COMMITTEES\",\r\n BOARD_MEETINGS = \"BOARD_MEETINGS\",\r\n MEETING_INSIDE_THE_BOD = \"MEETING_INSIDE_THE_BOD\",\r\n COMMITTEE = \"COMMITTEE\",\r\n MEETING_INSIDE_THE_COMMITTEE = \"MEETING_INSIDE_THE_COMMITTEE\",\r\n MEETING = \"MEETING\",\r\n DECISION = \"DECISION\",\r\n RECOMMENDATION = \"RECOMMENDATION\",\r\n TASK = \"TASK\",\r\n VOTING = \"VOTING\",\r\n VOTING_SECRETARY_RESULTS = \"VOTING_SECRETARY_RESULTS\",\r\n VOTING_RESULTS = \"VOTING_RESULTS\",\r\n DRAFT_MOM = \"DRAFT_MOM\",\r\n FINAL_MOM = \"FINAL_MOM\",\r\n MOM = \"MOM\",\r\n AGENDA = \"AGENDA\",\r\n ATTENDEES = \"ATTENDEES\",\r\n COMMENT = \"COMMENT\"\r\n}\r\n\r\nexport enum PermissionsActions {\r\n VIEW = \"VIEW\",\r\n CREATE = \"CREATE\",\r\n EDIT = \"EDIT\",\r\n DELETE = \"DELETE\",\r\n REORDER = \"REORDER\",\r\n DOWNLOAD = \"DOWNLOAD\",\r\n MARK = \"MARK\",\r\n GENERATE = \"GENERATE\",\r\n TERMINATE = \"TERMINATE\",\r\n START = \"START\",\r\n END = \"END\",\r\n ACTIVATE = \"ACTIVATE\"\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n TemplateRef,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { PermissionsService } from '../services';\r\nimport { PermissionsActions, UserPermissionsEnum } from '../enums';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[hasPermissions]',\r\n standalone: true\r\n})\r\nexport class HasPermissionsDirective implements OnInit, OnDestroy {\r\n private _actions: string[];\r\n private _key: string;\r\n private _newPermissions: string[];\r\n private _isDomain: boolean;\r\n\r\n private isViewCreated = false;\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private permissionsService: PermissionsService,\r\n private viewContainer: ViewContainerRef,\r\n private templateRef: TemplateRef<unknown>\r\n ) {}\r\n\r\n /**\r\n * make sure that the key value looks like the UserPermissionsEnum enum\r\n * usage: *permissions=\"[PermissionsActions.EDIT]; key: LOOKUPS\r\n */\r\n\r\n @Input({ required: true }) set hasPermissions(actions: string[]) {\r\n if (this.arraysChanged(this._actions, actions)) {\r\n this._actions = actions;\r\n this.updateView();\r\n }\r\n }\r\n\r\n @Input({ required: true }) set hasPermissionsKey(key: string) {\r\n if (this._key !== key) {\r\n this._key = key;\r\n this.updateView();\r\n }\r\n }\r\n\r\n @Input() set hasPermissionsNewPermissions(newPermissions: string[]) {\r\n if (this.arraysChanged(this._newPermissions, newPermissions)) {\r\n this._newPermissions = newPermissions;\r\n this.updateView();\r\n }\r\n }\r\n\r\n @Input() set hasPermissionsIsDomain(isDomain: boolean) {\r\n if (this._isDomain !== isDomain) {\r\n this._isDomain = isDomain;\r\n this.updateView();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscription = this.permissionsService.domainPermissions$.subscribe(() => {\r\n if (this._isDomain) {\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n private updateView() {\r\n const canShow = this._actions.some(action => this.hasPermission(action));\r\n\r\n if (canShow && !this.isViewCreated) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.isViewCreated = true;\r\n } else if (!canShow && this.isViewCreated) {\r\n this.clearView();\r\n }\r\n }\r\n\r\n private hasPermission(action: string): boolean {\r\n if (this._isDomain) {\r\n return this.permissionsService.checkDomainHasPermission(\r\n this._key as UserPermissionsEnum,\r\n action as PermissionsActions\r\n );\r\n }\r\n\r\n return this.permissionsService.checkKeyHasPermission(\r\n this._key as UserPermissionsEnum,\r\n action as PermissionsActions,\r\n this._newPermissions\r\n );\r\n }\r\n\r\n private clearView() {\r\n this.viewContainer.clear();\r\n this.isViewCreated = false;\r\n }\r\n\r\n private arraysChanged(a?: string[], b?: string[]): boolean {\r\n if (a === b) return false;\r\n if (!a || !b) return true;\r\n if (a.length !== b.length) return true;\r\n return a.some((v, i) => v !== b[i]);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ToasterService","i1.LoaderService","i1.PermissionsService"],"mappings":"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"}
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from './app-header/app-header.component';
|
|
3
|
-
export * from './app-side-menu/app-side-menu.component';
|
|
4
|
-
export * from './global-loader/global-loader.component';
|
|
1
|
+
export * from "./global-loader/global-loader.component";
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corp-products/app-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"author": "shireen Omar",
|
|
5
5
|
"description": "shared core services across our apps",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/common": "^18.2.0",
|
|
8
|
-
"@angular/core": "^18.2.0"
|
|
9
|
-
"@corp-products/ui-components": "^1.0.0"
|
|
8
|
+
"@angular/core": "^18.2.0"
|
|
10
9
|
},
|
|
11
10
|
"keywords": [
|
|
12
11
|
"angular",
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';
|
|
4
|
-
import { Breadcrumb } from 'primeng/breadcrumb';
|
|
5
|
-
import { filter } from 'rxjs';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/router";
|
|
8
|
-
export class AppBreadcrumbComponent {
|
|
9
|
-
constructor(activatedRoute, router) {
|
|
10
|
-
this.activatedRoute = activatedRoute;
|
|
11
|
-
this.router = router;
|
|
12
|
-
}
|
|
13
|
-
ngOnInit() {
|
|
14
|
-
this.router.events
|
|
15
|
-
.pipe(filter(event => event instanceof NavigationEnd))
|
|
16
|
-
.subscribe((e) => {
|
|
17
|
-
// remove duplicates
|
|
18
|
-
this.items = this._createBreadcrumbs(this.activatedRoute.root).filter((item, index, self) => index === self.findIndex((t) => t.label === item.label && t.routerLink === item.routerLink));
|
|
19
|
-
this._checkHiddenBreadcrumb();
|
|
20
|
-
this._checkEmpty();
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
_checkHiddenBreadcrumb() {
|
|
24
|
-
const activeBreadcrumb = this.items?.find((item) => {
|
|
25
|
-
return item.routerLink === this.router.url;
|
|
26
|
-
});
|
|
27
|
-
this.isShownBreadcrumb = !!activeBreadcrumb?.isShownBreadcrumb;
|
|
28
|
-
}
|
|
29
|
-
_createBreadcrumbs(activatedRoute, routerLink = '', breadcrumbs = []) {
|
|
30
|
-
const children = activatedRoute.children;
|
|
31
|
-
if (children.length === 0) {
|
|
32
|
-
return breadcrumbs;
|
|
33
|
-
}
|
|
34
|
-
for (const child of children) {
|
|
35
|
-
const routeURL = child.snapshot.url.map(segment => segment.path).join('/');
|
|
36
|
-
if (routeURL !== '') {
|
|
37
|
-
routerLink += `/${routeURL}`;
|
|
38
|
-
}
|
|
39
|
-
let label = child.snapshot.data["breadcrumb"];
|
|
40
|
-
const notClickableBreadcrumb = !!child.snapshot.data["notClickableBreadcrumb"];
|
|
41
|
-
const isShownBreadcrumb = !!child.snapshot.data["isShownBreadcrumb"];
|
|
42
|
-
const extraBreadcrumbs = child.snapshot.data["extraBreadcrumbs"] || [];
|
|
43
|
-
if (!(typeof label === 'undefined' || label === null)) {
|
|
44
|
-
const data = activatedRoute.snapshot.firstChild?.data || {};
|
|
45
|
-
// Resolve dynamic breadcrumb label
|
|
46
|
-
if (label && label.startsWith("[") && label.endsWith("]")) {
|
|
47
|
-
label = this._getRecursiveKey(data, label.slice(1, -1).split("."));
|
|
48
|
-
}
|
|
49
|
-
// Resolve dynamic URL parts
|
|
50
|
-
const resolveDynamicUrl = (route) => {
|
|
51
|
-
return route.replace(/\[([^\]]+)]/g, (_, key) => this._getRecursiveKey(data, key.split(".")) || '');
|
|
52
|
-
};
|
|
53
|
-
const mainBreadcrumb = { label, routerLink, data, notClickableBreadcrumb, isShownBreadcrumb };
|
|
54
|
-
// Process extra breadcrumbs
|
|
55
|
-
const beforeBreadcrumbs = [];
|
|
56
|
-
const afterBreadcrumbs = [];
|
|
57
|
-
extraBreadcrumbs.forEach(extra => {
|
|
58
|
-
let extraLabel = extra.label || '';
|
|
59
|
-
if (extraLabel.startsWith("[") && extraLabel.endsWith("]")) {
|
|
60
|
-
extraLabel = this._getRecursiveKey(data, extraLabel.slice(1, -1).split("."));
|
|
61
|
-
}
|
|
62
|
-
const extraUrl = resolveDynamicUrl(extra.routerLink || '');
|
|
63
|
-
const extraBreadcrumb = { ...extra, label: extraLabel, routerLink: extraUrl };
|
|
64
|
-
if (extra.position === "before") {
|
|
65
|
-
beforeBreadcrumbs.push(extraBreadcrumb);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
afterBreadcrumbs.push(extraBreadcrumb);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
// Merge breadcrumbs
|
|
72
|
-
breadcrumbs.push(...beforeBreadcrumbs, mainBreadcrumb, ...afterBreadcrumbs);
|
|
73
|
-
}
|
|
74
|
-
return this._createBreadcrumbs(child, routerLink, breadcrumbs);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
_checkEmpty() {
|
|
78
|
-
if (!this.items)
|
|
79
|
-
return;
|
|
80
|
-
const lastBreadcrumbVisibility = this.items[this.items.length - 1].isShownBreadcrumb;
|
|
81
|
-
this.items = this.items.filter(b => b.label !== '');
|
|
82
|
-
this.items[this.items.length - 1].isShownBreadcrumb = lastBreadcrumbVisibility;
|
|
83
|
-
}
|
|
84
|
-
_getRecursiveKey(obj, keys) {
|
|
85
|
-
if (keys.length === 0) {
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
const [currentKey, ...remainingKeys] = keys;
|
|
89
|
-
if (currentKey in obj) {
|
|
90
|
-
if (remainingKeys.length > 0) {
|
|
91
|
-
return this._getRecursiveKey(obj[currentKey], remainingKeys);
|
|
92
|
-
}
|
|
93
|
-
return obj[currentKey];
|
|
94
|
-
}
|
|
95
|
-
return undefined;
|
|
96
|
-
}
|
|
97
|
-
;
|
|
98
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppBreadcrumbComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AppBreadcrumbComponent, isStandalone: true, selector: "app-breadcrumb", ngImport: i0, template: "@if(isShownBreadcrumb) {\r\n <nav class=\"flex gap-x-3 text-[12px] w-full items-center mb-5\">\r\n <div class=\"card flex justify-center\">\r\n <p-breadcrumb [model]=\"items\"></p-breadcrumb>\r\n </div>\r\n </nav>\r\n}\r\n", styles: [".p-breadcrumb-list li:first-child a{color:var(--secondary)}.p-breadcrumb-list .p-breadcrumb-separator{transform:scale(.7)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
100
|
-
}
|
|
101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppBreadcrumbComponent, decorators: [{
|
|
102
|
-
type: Component,
|
|
103
|
-
args: [{ selector: 'app-breadcrumb', standalone: true, imports: [CommonModule, Breadcrumb, RouterModule], encapsulation: ViewEncapsulation.None, template: "@if(isShownBreadcrumb) {\r\n <nav class=\"flex gap-x-3 text-[12px] w-full items-center mb-5\">\r\n <div class=\"card flex justify-center\">\r\n <p-breadcrumb [model]=\"items\"></p-breadcrumb>\r\n </div>\r\n </nav>\r\n}\r\n", styles: [".p-breadcrumb-list li:first-child a{color:var(--secondary)}.p-breadcrumb-list .p-breadcrumb-separator{transform:scale(.7)}\n"] }]
|
|
104
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }] });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJyZWFkY3J1bWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY29yZS9jb21wb25lbnRzL2FwcC1icmVhZGNydW1iL2FwcC1icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NvcmUvY29tcG9uZW50cy9hcHAtYnJlYWRjcnVtYi9hcHAtYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBVSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFcEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7OztBQVc1QixNQUFNLE9BQU8sc0JBQXNCO0lBSWpDLFlBQW9CLGNBQThCLEVBQVUsTUFBYztRQUF0RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQzFFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsQ0FBQzthQUNyRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNmLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxD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Z0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQUEsQ0FBQzs4R0EzR1Msc0JBQXNCO2tHQUF0QixzQkFBc0IsMEVDaEJuQyw4T0FPQSxxTERNWSxZQUFZLCtCQUFFLFVBQVUscUpBQUUsWUFBWTs7MkZBR3JDLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRSxnQkFBZ0IsY0FHZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxpQkFDbEMsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge01lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7QnJlYWRjcnVtYn0gZnJvbSAncHJpbWVuZy9icmVhZGNydW1iJztcclxuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0JyZWFkQ3J1bWJFeHRyYURhdGEsIEJyZWFkY3J1bWJJdGVtfSBmcm9tICcuL2FwcC1icmVhZGNydW1iLmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1icmVhZGNydW1iJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWJyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hcHAtYnJlYWRjcnVtYi5jb21wb25lbnQuc2NzcycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCcmVhZGNydW1iLCBSb3V0ZXJNb2R1bGVdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBCcmVhZGNydW1iQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpdGVtczogQnJlYWRjcnVtYkl0ZW1bXSB8IHVuZGVmaW5lZDtcclxuICBpc1Nob3duQnJlYWRjcnVtYjogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcclxuICAgICAgICB0aGlzLml0ZW1zID0gKHRoaXMuX2NyZWF0ZUJyZWFkY3J1bWJzKHRoaXMuYWN0aXZhdGVkUm91dGUucm9vdCkgYXMgQnJlYWRjcnVtYkl0ZW1bXSkuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0sIGluZGV4LCBzZWxmKSA9PlxyXG4gICAgICAgICAgICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKHQpID0+IHQubGFiZWwgPT09IGl0ZW0ubGFiZWwgJiYgdC5yb3V0ZXJMaW5rID09PSBpdGVtLnJvdXRlckxpbmspXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9jaGVja0hpZGRlbkJyZWFkY3J1bWIoKTtcclxuICAgICAgICB0aGlzLl9jaGVja0VtcHR5KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hlY2tIaWRkZW5CcmVhZGNydW1iKCkge1xyXG4gICAgY29uc3QgYWN0aXZlQnJlYWRjcnVtYiA9IHRoaXMuaXRlbXM/LmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0ucm91dGVyTGluayA9PT0gdGhpcy5yb3V0ZXIudXJsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuaXNTaG93bkJyZWFkY3J1bWIgPSAhIWFjdGl2ZUJyZWFkY3J1bWI/LmlzU2hvd25CcmVhZGNydW1iXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVCcmVhZGNydW1icyhhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHJvdXRlckxpbmsgPSAnJywgYnJlYWRjcnVtYnM6IE1lbnVJdGVtW10gPSBbXSk6IGFueSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbjogQWN0aXZhdGVkUm91dGVbXSA9IGFjdGl2YXRlZFJvdXRlLmNoaWxkcmVuO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgY29uc3Qgcm91dGVVUkw6IHN0cmluZyA9IGNoaWxkLnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcclxuICAgICAgaWYgKHJvdXRlVVJMICE9PSAnJykge1xyXG4gICAgICAgIHJvdXRlckxpbmsgKz0gYC8ke3JvdXRlVVJMfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBsYWJlbCA9IGNoaWxkLnNuYXBzaG90LmRhdGFbXCJicmVhZGNydW1iXCJdO1xyXG4gICAgICBjb25zdCBub3RDbGlja2FibGVCcmVhZGNydW1iID0gISFjaGlsZC5zbmFwc2hvdC5kYXRhW1wibm90Q2xpY2thYmxlQnJlYWRjcnVtYlwiXTtcclxuICAgICAgY29uc3QgaXNTaG93bkJyZWFkY3J1bWIgPSAhIWNoaWxkLnNuYXBzaG90LmRhdGFbXCJpc1Nob3duQnJlYWRjcnVtYlwiXTtcclxuICAgICAgY29uc3QgZXh0cmFCcmVhZGNydW1iczogQnJlYWRDcnVtYkV4dHJhRGF0YVtdID0gY2hpbGQuc25hcHNob3QuZGF0YVtcImV4dHJhQnJlYWRjcnVtYnNcIl0gfHwgW107XHJcbiAgICAgIGlmICghKHR5cGVvZiBsYWJlbCA9PT0gJ3VuZGVmaW5lZCcgfHwgbGFiZWwgPT09IG51bGwpKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmZpcnN0Q2hpbGQ/LmRhdGEgfHwge307XHJcbiAgICAgICAgLy8gUmVzb2x2ZSBkeW5hbWljIGJyZWFkY3J1bWIgbGFiZWxcclxuICAgICAgICBpZiAobGFiZWwgJiYgbGFiZWwuc3RhcnRzV2l0aChcIltcIikgJiYgbGFiZWwuZW5kc1dpdGgoXCJdXCIpKSB7XHJcbiAgICAgICAgICBsYWJlbCA9IHRoaXMuX2dldFJlY3Vyc2l2ZUtleShkYXRhLCBsYWJlbC5zbGljZSgxLCAtMSkuc3BsaXQoXCIuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc29sdmUgZHluYW1pYyBVUkwgcGFydHNcclxuICAgICAgICBjb25zdCByZXNvbHZlRHluYW1pY1VybCA9IChyb3V0ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICAgIHJldHVybiByb3V0ZS5yZXBsYWNlKC9cXFsoW15cXF1dKyldL2csIChfLCBrZXkpID0+IHRoaXMuX2dldFJlY3Vyc2l2ZUtleShkYXRhLCBrZXkuc3BsaXQoXCIuXCIpKSB8fCAnJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkJyZWFkY3J1bWI6IE1lbnVJdGVtID0ge2xhYmVsLCByb3V0ZXJMaW5rLCBkYXRhLCBub3RDbGlja2FibGVCcmVhZGNydW1iLCBpc1Nob3duQnJlYWRjcnVtYn07XHJcblxyXG4gICAgICAgIC8vIFByb2Nlc3MgZXh0cmEgYnJlYWRjcnVtYnNcclxuICAgICAgICBjb25zdCBiZWZvcmVCcmVhZGNydW1iczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFmdGVyQnJlYWRjcnVtYnM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgZXh0cmFCcmVhZGNydW1icy5mb3JFYWNoKGV4dHJhID0+IHtcclxuICAgICAgICAgIGxldCBleHRyYUxhYmVsID0gZXh0cmEubGFiZWwgfHwgJyc7XHJcbiAgICAgICAgICBpZiAoZXh0cmFMYWJlbC5zdGFydHNXaXRoKFwiW1wiKSAmJiBleHRyYUxhYmVsLmVuZHNXaXRoKFwiXVwiKSkge1xyXG4gICAgICAgICAgICBleHRyYUxhYmVsID0gdGhpcy5fZ2V0UmVjdXJzaXZlS2V5KGRhdGEsIGV4dHJhTGFiZWwuc2xpY2UoMSwgLTEpLnNwbGl0KFwiLlwiKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgZXh0cmFVcmwgPSByZXNvbHZlRHluYW1pY1VybChleHRyYS5yb3V0ZXJMaW5rIHx8ICcnKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBleHRyYUJyZWFkY3J1bWI6IE1lbnVJdGVtID0gey4uLmV4dHJhLCBsYWJlbDogZXh0cmFMYWJlbCwgcm91dGVyTGluazogZXh0cmFVcmx9O1xyXG5cclxuICAgICAgICAgIGlmIChleHRyYS5wb3NpdGlvbiA9PT0gXCJiZWZvcmVcIikge1xyXG4gICAgICAgICAgICBiZWZvcmVCcmVhZGNydW1icy5wdXNoKGV4dHJhQnJlYWRjcnVtYik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhZnRlckJyZWFkY3J1bWJzLnB1c2goZXh0cmFCcmVhZGNydW1iKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTWVyZ2UgYnJlYWRjcnVtYnNcclxuICAgICAgICBicmVhZGNydW1icy5wdXNoKC4uLmJlZm9yZUJyZWFkY3J1bWJzLCBtYWluQnJlYWRjcnVtYiwgLi4uYWZ0ZXJCcmVhZGNydW1icyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUJyZWFkY3J1bWJzKGNoaWxkLCByb3V0ZXJMaW5rLCBicmVhZGNydW1icyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja0VtcHR5KCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW1zKSByZXR1cm5cclxuICAgIGNvbnN0IGxhc3RCcmVhZGNydW1iVmlzaWJpbGl0eSA9IHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXS5pc1Nob3duQnJlYWRjcnVtYjtcclxuICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihiID0+IGIubGFiZWwgIT09ICcnKTtcclxuICAgIHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXS5pc1Nob3duQnJlYWRjcnVtYiA9IGxhc3RCcmVhZGNydW1iVmlzaWJpbGl0eTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlY3Vyc2l2ZUtleShvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sIGtleXM6IHN0cmluZ1tdKTogYW55IHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtjdXJyZW50S2V5LCAuLi5yZW1haW5pbmdLZXlzXSA9IGtleXM7XHJcbiAgICBpZiAoY3VycmVudEtleSBpbiBvYmopIHtcclxuICAgICAgaWYgKHJlbWFpbmluZ0tleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRSZWN1cnNpdmVLZXkob2JqW2N1cnJlbnRLZXldLCByZW1haW5pbmdLZXlzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqW2N1cnJlbnRLZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9O1xyXG59XHJcbiIsIkBpZihpc1Nob3duQnJlYWRjcnVtYikge1xyXG4gIDxuYXYgY2xhc3M9XCJmbGV4IGdhcC14LTMgdGV4dC1bMTJweF0gIHctZnVsbCBpdGVtcy1jZW50ZXIgbWItNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICA8cC1icmVhZGNydW1iIFttb2RlbF09XCJpdGVtc1wiPjwvcC1icmVhZGNydW1iPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uYXY+XHJcbn1cclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJyZWFkY3J1bWIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY29yZS9jb21wb25lbnRzL2FwcC1icmVhZGNydW1iL2FwcC1icmVhZGNydW1iLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNZW51SXRlbX0gZnJvbSBcInByaW1lbmcvYXBpXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWJJdGVtIHtcclxuICBub3RDbGlja2FibGVCcmVhZGNydW1iOiBib29sZWFuO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgcm91dGVyTGluazogc3RyaW5nO1xyXG4gIGlzU2hvd25CcmVhZGNydW1iOiBib29sZWFuO1xyXG4gIGV4dHJhQnJlYWRjcnVtYnM/OiBCcmVhZENydW1iRXh0cmFEYXRhW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRDcnVtYlBvc2l0aW9uIHtcclxuICBwb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEJyZWFkQ3J1bWJFeHRyYURhdGEgPSBNZW51SXRlbSAmIEJyZWFkQ3J1bWJQb3NpdGlvbjtcclxuIl19
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from "@angular/core";
|
|
2
|
-
import { RouterModule } from "@angular/router";
|
|
3
|
-
import { AppButtonComponent } from "@corp-products/ui-components";
|
|
4
|
-
import { Menu } from "primeng/menu";
|
|
5
|
-
import { AuthService } from "../../services";
|
|
6
|
-
import { finalize } from "rxjs";
|
|
7
|
-
import { TranslatePipe } from "@ngx-translate/core";
|
|
8
|
-
import { PermissionsActions, UserPermissionsEnum } from "../../enums";
|
|
9
|
-
import { HasPermissionsDirective } from "../../directives";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../../services";
|
|
12
|
-
export class AppHeaderComponent {
|
|
13
|
-
constructor(authService) {
|
|
14
|
-
this.authService = authService;
|
|
15
|
-
this.createButtonClicked = new EventEmitter();
|
|
16
|
-
this.toggleMenu = new EventEmitter();
|
|
17
|
-
this.items = [
|
|
18
|
-
{
|
|
19
|
-
items: [
|
|
20
|
-
{
|
|
21
|
-
label: "خــــروج",
|
|
22
|
-
command: () => this.logout()
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
];
|
|
27
|
-
this.UserPermissionsEnum = UserPermissionsEnum;
|
|
28
|
-
this.PermissionsActions = PermissionsActions;
|
|
29
|
-
}
|
|
30
|
-
logout() {
|
|
31
|
-
this.authService
|
|
32
|
-
.logoutFromSSO()
|
|
33
|
-
.pipe(finalize(() => {
|
|
34
|
-
this.authService.clearAuth();
|
|
35
|
-
}))
|
|
36
|
-
.subscribe();
|
|
37
|
-
}
|
|
38
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppHeaderComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AppHeaderComponent, isStandalone: true, selector: "app-header", inputs: { userInfo: "userInfo" }, outputs: { createButtonClicked: "createButtonClicked", toggleMenu: "toggleMenu" }, ngImport: i0, template: "<div class=\"px-10 flex justify-between items-center bg-white shadow-md py-3 h-16\">\r\n <div class=\"d-flex md:hidden w-fit\">\r\n <!-- Burger Icon for Mobile -->\r\n <app-button icon=\"font-icon-burger-icon text-[25px]\" size=\"large\" variant=\"text\"\r\n (clickEmitter)=\"toggleMenu.emit()\"/>\r\n </div>\r\n <div class=\"d-flex items-center justify-content-between gap-1\">\r\n <app-button\r\n *hasPermissions=\"[PermissionsActions.CREATE];key: UserPermissionsEnum.BOD\"\r\n iconPos=\"right\" icon=\"font-icon-plus\" (clickEmitter)=\"createButtonClicked.emit()\"\r\n [title]=\"'actions.create' | translate\"/>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-1\">\r\n @if (userInfo) {\r\n <div class=\"flex flex-col items-end justify-center\">\r\n <p class=\"text-sm\">{{ userInfo.userName }}</p>\r\n <p class=\"text-gray-500 mb-0 text-[10px]\">{{ userInfo.email }}</p>\r\n </div>\r\n\r\n <img src=\"assets/images/user-placeholder.jpg\" class=\"w-9 h-9 object-cover rounded-full\" alt=\"\"/>\r\n }\r\n <p-menu #menu [model]=\"items\" [popup]=\"true\"></p-menu>\r\n <button (click)=\"menu.toggle($event)\" class=\"mb-2\"><i class=\"font-icon-Vector text-[6px]\"></i></button>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["title", "class", "icon", "size", "style", "iconPos", "variant", "disabled", "text", "rounded"], outputs: ["clickEmitter"] }, { kind: "component", type: Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: HasPermissionsDirective, selector: "[hasPermissions]", inputs: ["hasPermissions", "hasPermissionsKey", "hasPermissionsNewPermissions", "hasPermissionsIsDomain"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
40
|
-
}
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppHeaderComponent, decorators: [{
|
|
42
|
-
type: Component,
|
|
43
|
-
args: [{ selector: "app-header", standalone: true, imports: [RouterModule, AppButtonComponent, Menu, TranslatePipe, HasPermissionsDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"px-10 flex justify-between items-center bg-white shadow-md py-3 h-16\">\r\n <div class=\"d-flex md:hidden w-fit\">\r\n <!-- Burger Icon for Mobile -->\r\n <app-button icon=\"font-icon-burger-icon text-[25px]\" size=\"large\" variant=\"text\"\r\n (clickEmitter)=\"toggleMenu.emit()\"/>\r\n </div>\r\n <div class=\"d-flex items-center justify-content-between gap-1\">\r\n <app-button\r\n *hasPermissions=\"[PermissionsActions.CREATE];key: UserPermissionsEnum.BOD\"\r\n iconPos=\"right\" icon=\"font-icon-plus\" (clickEmitter)=\"createButtonClicked.emit()\"\r\n [title]=\"'actions.create' | translate\"/>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-1\">\r\n @if (userInfo) {\r\n <div class=\"flex flex-col items-end justify-center\">\r\n <p class=\"text-sm\">{{ userInfo.userName }}</p>\r\n <p class=\"text-gray-500 mb-0 text-[10px]\">{{ userInfo.email }}</p>\r\n </div>\r\n\r\n <img src=\"assets/images/user-placeholder.jpg\" class=\"w-9 h-9 object-cover rounded-full\" alt=\"\"/>\r\n }\r\n <p-menu #menu [model]=\"items\" [popup]=\"true\"></p-menu>\r\n <button (click)=\"menu.toggle($event)\" class=\"mb-2\"><i class=\"font-icon-Vector text-[6px]\"></i></button>\r\n </div>\r\n</div>\r\n" }]
|
|
44
|
-
}], ctorParameters: () => [{ type: i1.AuthService }], propDecorators: { createButtonClicked: [{
|
|
45
|
-
type: Output
|
|
46
|
-
}], toggleMenu: [{
|
|
47
|
-
type: Output
|
|
48
|
-
}], userInfo: [{
|
|
49
|
-
type: Input
|
|
50
|
-
}] } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb3JlL2NvbXBvbmVudHMvYXBwLWhlYWRlci9hcHAtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NvcmUvY29tcG9uZW50cy9hcHAtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFTM0QsTUFBTSxPQUFPLGtCQUFrQjtJQWdCN0IsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFmbEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVuRCxVQUFLLEdBQTJCO1lBQzlCO2dCQUNFLEtBQUssRUFBRTtvQkFDTDt3QkFDRSxLQUFLLEVBQUUsVUFBVTt3QkFDakIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7cUJBQzdCO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO1FBQ0Ysd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDMUMsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFDTyxDQUFDO0lBRWhELE1BQU07UUFDSixJQUFJLENBQUMsV0FBVzthQUNiLGFBQWEsRUFBRTthQUNmLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7OEdBM0JVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLDJMQ25CL0IsMnhDQTBCQSx5RERWWSxZQUFZLCtCQUFFLGtCQUFrQiw0TEFBRSxJQUFJLGdTQUFFLGFBQWEsa0RBQUUsdUJBQXVCOzsyRkFHN0Usa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLFlBQVksY0FHVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxpQkFDMUUsaUJBQWlCLENBQUMsSUFBSTtnRkFHM0IsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQXBwQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBjb3JwLXByb2R1Y3RzL3VpLWNvbXBvbmVudHNcIjtcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcclxuaW1wb3J0IHsgTWVudSB9IGZyb20gXCJwcmltZW5nL21lbnVcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXNcIjtcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uc0FjdGlvbnMsIFVzZXJQZXJtaXNzaW9uc0VudW0gfSBmcm9tIFwiLi4vLi4vZW51bXNcIjtcclxuaW1wb3J0IHsgSGFzUGVybWlzc2lvbnNEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlc1wiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtaGVhZGVyXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hcHAtaGVhZGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9hcHAtaGVhZGVyLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLCBBcHBCdXR0b25Db21wb25lbnQsIE1lbnUsIFRyYW5zbGF0ZVBpcGUsIEhhc1Blcm1pc3Npb25zRGlyZWN0aXZlXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBIZWFkZXJDb21wb25lbnQge1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVCdXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBJbnB1dCgpIHVzZXJJbmZvOiBVc2VySW5mbztcclxuICBpdGVtczogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZCA9IFtcclxuICAgIHtcclxuICAgICAgaXRlbXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogXCLYrtmA2YDZgNmA2LHZiNisXCIsXHJcbiAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmxvZ291dCgpXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9XHJcbiAgXTtcclxuICBVc2VyUGVybWlzc2lvbnNFbnVtID0gVXNlclBlcm1pc3Npb25zRW51bTtcclxuICBQZXJtaXNzaW9uc0FjdGlvbnMgPSBQZXJtaXNzaW9uc0FjdGlvbnM7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHt9XHJcblxyXG4gIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmxvZ291dEZyb21TU08oKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmNsZWFyQXV0aCgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicHgtMTAgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGJnLXdoaXRlIHNoYWRvdy1tZCBweS0zIGgtMTZcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1kOmhpZGRlbiB3LWZpdFwiPlxyXG4gICAgPCEtLSBCdXJnZXIgSWNvbiBmb3IgTW9iaWxlIC0tPlxyXG4gICAgPGFwcC1idXR0b24gaWNvbj1cImZvbnQtaWNvbi1idXJnZXItaWNvbiB0ZXh0LVsyNXB4XVwiIHNpemU9XCJsYXJnZVwiIHZhcmlhbnQ9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIChjbGlja0VtaXR0ZXIpPVwidG9nZ2xlTWVudS5lbWl0KClcIi8+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTFcIj5cclxuICAgIDxhcHAtYnV0dG9uXHJcbiAgICAgICpoYXNQZXJtaXNzaW9ucz1cIltQZXJtaXNzaW9uc0FjdGlvbnMuQ1JFQVRFXTtrZXk6IFVzZXJQZXJtaXNzaW9uc0VudW0uQk9EXCJcclxuICAgICAgaWNvblBvcz1cInJpZ2h0XCIgaWNvbj1cImZvbnQtaWNvbi1wbHVzXCIgKGNsaWNrRW1pdHRlcik9XCJjcmVhdGVCdXR0b25DbGlja2VkLmVtaXQoKVwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2FjdGlvbnMuY3JlYXRlJyB8IHRyYW5zbGF0ZVwiLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICBAaWYgKHVzZXJJbmZvKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiPnt7IHVzZXJJbmZvLnVzZXJOYW1lIH19PC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBtYi0wIHRleHQtWzEwcHhdXCI+e3sgdXNlckluZm8uZW1haWwgfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL3VzZXItcGxhY2Vob2xkZXIuanBnXCIgY2xhc3M9XCJ3LTkgaC05IG9iamVjdC1jb3ZlciByb3VuZGVkLWZ1bGxcIiBhbHQ9XCJcIi8+XHJcbiAgICB9XHJcbiAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtc1wiIFtwb3B1cF09XCJ0cnVlXCI+PC9wLW1lbnU+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpXCIgY2xhc3M9XCJtYi0yXCI+PGkgY2xhc3M9XCJmb250LWljb24tVmVjdG9yIHRleHQtWzZweF1cIj48L2k+PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Component, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { RouterModule } from '@angular/router';
|
|
3
|
-
import { BASE_SIDE_MENU_ITEMS } from './side-menu-items';
|
|
4
|
-
import { PermissionsService } from "../../services";
|
|
5
|
-
import { PermissionsActions } from "../../enums";
|
|
6
|
-
import { NgClass } from "@angular/common";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/router";
|
|
9
|
-
export class AppSideMenuComponent {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.menuItems = BASE_SIDE_MENU_ITEMS;
|
|
12
|
-
this.permissionsService = inject(PermissionsService);
|
|
13
|
-
}
|
|
14
|
-
ngOnInit() {
|
|
15
|
-
this.filteredMenu = this.menuItems.filter((item) => {
|
|
16
|
-
if (!item.permissionKey) {
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
return this.permissionsService.checkKeyHasPermission(item.permissionKey, PermissionsActions.VIEW);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppSideMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AppSideMenuComponent, isStandalone: true, selector: "app-side-menu", inputs: { isOpen: "isOpen" }, ngImport: i0, template: "<nav\r\n [ngClass]=\"{ 'max-w-0 md:max-w-[500px]': !isOpen, 'max-w-[500px]': isOpen }\"\r\n class=\"md:flex h-100 bg-primary flex text-white flex-col py-2 text-center gap-y-10 transition-all w-24 hover:md:w-48 duration-500\">\r\n <a [routerLink]=\"'/'\"><i class=\"font-icon-STC-Logo text-[20px] pt-4 block px-4\"></i></a>\r\n <ul class=\"flex flex-col flex-grow\">\r\n @for (item of filteredMenu; track $index) {\r\n <li>\r\n <a\r\n [routerLinkActive]=\"'bg-primary_dark border-secondary'\"\r\n [routerLink]=\"item.link\"\r\n class=\"flex flex-col py-3 px-4 border-r-2 border-primary transition-all hover:bg-primary_dark hover:border-secondary\">\r\n <i [class]=\"item.icon + ' text-[17px] mb-1'\"></i>\r\n <span class=\"text-[10px] truncate\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n\r\n <a href=\"#\"><i class=\"font-icon-setting text-[20px] pb-4 block px-4\"></i></a>\r\n</nav>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
24
|
-
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AppSideMenuComponent, decorators: [{
|
|
26
|
-
type: Component,
|
|
27
|
-
args: [{ selector: "app-side-menu", standalone: true, imports: [RouterModule, NgClass], encapsulation: ViewEncapsulation.None, template: "<nav\r\n [ngClass]=\"{ 'max-w-0 md:max-w-[500px]': !isOpen, 'max-w-[500px]': isOpen }\"\r\n class=\"md:flex h-100 bg-primary flex text-white flex-col py-2 text-center gap-y-10 transition-all w-24 hover:md:w-48 duration-500\">\r\n <a [routerLink]=\"'/'\"><i class=\"font-icon-STC-Logo text-[20px] pt-4 block px-4\"></i></a>\r\n <ul class=\"flex flex-col flex-grow\">\r\n @for (item of filteredMenu; track $index) {\r\n <li>\r\n <a\r\n [routerLinkActive]=\"'bg-primary_dark border-secondary'\"\r\n [routerLink]=\"item.link\"\r\n class=\"flex flex-col py-3 px-4 border-r-2 border-primary transition-all hover:bg-primary_dark hover:border-secondary\">\r\n <i [class]=\"item.icon + ' text-[17px] mb-1'\"></i>\r\n <span class=\"text-[10px] truncate\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n\r\n <a href=\"#\"><i class=\"font-icon-setting text-[20px] pb-4 block px-4\"></i></a>\r\n</nav>\r\n" }]
|
|
28
|
-
}], propDecorators: { isOpen: [{
|
|
29
|
-
type: Input
|
|
30
|
-
}] } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNpZGUtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb3JlL2NvbXBvbmVudHMvYXBwLXNpZGUtbWVudS9hcHAtc2lkZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NvcmUvY29tcG9uZW50cy9hcHAtc2lkZS1tZW51L2FwcC1zaWRlLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsa0JBQWtCLEVBQXNCLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBU3hDLE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFVRSxjQUFTLEdBQW1CLG9CQUFvQixDQUFDO1FBQ2pELHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBV2pEO0lBUkMsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBb0MsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBYlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsdUdDZmpDLCs5QkFvQkEseUREVlksWUFBWSxpZkFBRSxPQUFPOzsyRkFLcEIsb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLGlCQUdqQixpQkFBaUIsQ0FBQyxJQUFJOzhCQUc1QixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNpZGVNZW51SXRlbSB9IGZyb20gJy4vc2lkZS1tZW51JztcclxuaW1wb3J0IHsgQkFTRV9TSURFX01FTlVfSVRFTVMgfSBmcm9tICcuL3NpZGUtbWVudS1pdGVtcyc7XHJcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXNcIjtcclxuaW1wb3J0IHtQZXJtaXNzaW9uc0FjdGlvbnMsIFVzZXJQZXJtaXNzaW9uc0VudW19IGZyb20gXCIuLi8uLi9lbnVtc1wiO1xyXG5pbXBvcnQge05nQ2xhc3N9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXNpZGUtbWVudVwiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZSwgTmdDbGFzc10sXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hcHAtc2lkZS1tZW51LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9hcHAtc2lkZS1tZW51LmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwU2lkZU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGlzT3BlbiE6IGJvb2xlYW47XHJcbiAgbWVudUl0ZW1zOiBTaWRlTWVudUl0ZW1bXSA9IEJBU0VfU0lERV9NRU5VX0lURU1TO1xyXG4gIHBlcm1pc3Npb25zU2VydmljZSA9IGluamVjdChQZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG4gIGZpbHRlcmVkTWVudTogU2lkZU1lbnVJdGVtW107XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZE1lbnUgPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKCFpdGVtLnBlcm1pc3Npb25LZXkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuY2hlY2tLZXlIYXNQZXJtaXNzaW9uKGl0ZW0ucGVybWlzc2lvbktleSBhcyBVc2VyUGVybWlzc2lvbnNFbnVtLCBQZXJtaXNzaW9uc0FjdGlvbnMuVklFVyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG5hdlxyXG4gIFtuZ0NsYXNzXT1cInsgJ21heC13LTAgbWQ6bWF4LXctWzUwMHB4XSc6ICFpc09wZW4sICdtYXgtdy1bNTAwcHhdJzogaXNPcGVuICB9XCJcclxuICBjbGFzcz1cIm1kOmZsZXggaC0xMDAgYmctcHJpbWFyeSBmbGV4IHRleHQtd2hpdGUgZmxleC1jb2wgcHktMiB0ZXh0LWNlbnRlciBnYXAteS0xMCB0cmFuc2l0aW9uLWFsbCB3LTI0IGhvdmVyOm1kOnctNDggZHVyYXRpb24tNTAwXCI+XHJcbiAgPGEgW3JvdXRlckxpbmtdPVwiJy8nXCI+PGkgY2xhc3M9XCJmb250LWljb24tU1RDLUxvZ28gdGV4dC1bMjBweF0gcHQtNCBibG9jayBweC00XCI+PC9pPjwvYT5cclxuICA8dWwgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtZ3Jvd1wiPlxyXG4gICAgQGZvciAoaXRlbSBvZiBmaWx0ZXJlZE1lbnU7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICA8bGk+XHJcbiAgICAgICAgPGFcclxuICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIidiZy1wcmltYXJ5X2RhcmsgYm9yZGVyLXNlY29uZGFyeSdcIlxyXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5saW5rXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBweS0zIHB4LTQgYm9yZGVyLXItMiBib3JkZXItcHJpbWFyeSB0cmFuc2l0aW9uLWFsbCBob3ZlcjpiZy1wcmltYXJ5X2RhcmsgaG92ZXI6Ym9yZGVyLXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW0uaWNvbiArICcgdGV4dC1bMTdweF0gbWItMSdcIj48L2k+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtWzEwcHhdIHRydW5jYXRlXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvbGk+XHJcbiAgICB9XHJcbiAgPC91bD5cclxuXHJcbiAgPGEgaHJlZj1cIiNcIj48aSBjbGFzcz1cImZvbnQtaWNvbi1zZXR0aW5nIHRleHQtWzIwcHhdIHBiLTQgYmxvY2sgcHgtNFwiPjwvaT48L2E+XHJcbjwvbmF2PlxyXG4iXX0=
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export const ROUTES_NAME = {
|
|
2
|
-
board: {
|
|
3
|
-
name: '/board-page',
|
|
4
|
-
},
|
|
5
|
-
users: {
|
|
6
|
-
name: '/users',
|
|
7
|
-
},
|
|
8
|
-
// reports: {
|
|
9
|
-
// name: '/reports',
|
|
10
|
-
// },
|
|
11
|
-
meetings: {
|
|
12
|
-
name: '/meeting-page',
|
|
13
|
-
},
|
|
14
|
-
// tasks: {
|
|
15
|
-
// name: '/tasks',
|
|
16
|
-
// },
|
|
17
|
-
// imported: {
|
|
18
|
-
// name: '/imported',
|
|
19
|
-
// },
|
|
20
|
-
// exported: {
|
|
21
|
-
// name: '/exported',
|
|
22
|
-
// },
|
|
23
|
-
// board: {
|
|
24
|
-
// name: '/board',
|
|
25
|
-
// },
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLW5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY29yZS9jb21wb25lbnRzL2FwcC1zaWRlLW1lbnUvcm91dGVzLW5hbWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBa0I7SUFDeEMsS0FBSyxFQUFFO1FBQ0wsSUFBSSxFQUFFLGFBQWE7S0FDcEI7SUFDRCxLQUFLLEVBQUU7UUFDTCxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixLQUFLO0lBQ0wsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLGVBQWU7S0FDdEI7SUFDRCxXQUFXO0lBQ1gsb0JBQW9CO0lBQ3BCLEtBQUs7SUFDTCxjQUFjO0lBQ2QsdUJBQXVCO0lBQ3ZCLEtBQUs7SUFDTCxjQUFjO0lBQ2QsdUJBQXVCO0lBQ3ZCLEtBQUs7SUFDTCxXQUFXO0lBQ1gsb0JBQW9CO0lBQ3BCLEtBQUs7Q0FDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVOYW1lSXRlbSB9IGZyb20gXCIuL3NpZGUtbWVudVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJPVVRFU19OQU1FOiBSb3V0ZU5hbWVJdGVtID0ge1xyXG4gIGJvYXJkOiB7XHJcbiAgICBuYW1lOiAnL2JvYXJkLXBhZ2UnLFxyXG4gIH0sXHJcbiAgdXNlcnM6IHtcclxuICAgIG5hbWU6ICcvdXNlcnMnLFxyXG4gIH0sXHJcbiAgLy8gcmVwb3J0czoge1xyXG4gIC8vICAgbmFtZTogJy9yZXBvcnRzJyxcclxuICAvLyB9LFxyXG4gIG1lZXRpbmdzOiB7XHJcbiAgICBuYW1lOiAnL21lZXRpbmctcGFnZScsXHJcbiAgfSxcclxuICAvLyB0YXNrczoge1xyXG4gIC8vICAgbmFtZTogJy90YXNrcycsXHJcbiAgLy8gfSxcclxuICAvLyBpbXBvcnRlZDoge1xyXG4gIC8vICAgbmFtZTogJy9pbXBvcnRlZCcsXHJcbiAgLy8gfSxcclxuICAvLyBleHBvcnRlZDoge1xyXG4gIC8vICAgbmFtZTogJy9leHBvcnRlZCcsXHJcbiAgLy8gfSxcclxuICAvLyBib2FyZDoge1xyXG4gIC8vICAgbmFtZTogJy9ib2FyZCcsXHJcbiAgLy8gfSxcclxufTtcclxuIl19
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ROUTES_NAME } from './routes-names';
|
|
2
|
-
export const BASE_SIDE_MENU_ITEMS = [
|
|
3
|
-
{
|
|
4
|
-
label: 'الإجتماعات',
|
|
5
|
-
icon: 'font-icon-menu-board',
|
|
6
|
-
link: ROUTES_NAME['meetings'].name
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
label: 'اللجان و المجالس',
|
|
10
|
-
icon: 'font-icon-people',
|
|
11
|
-
link: ROUTES_NAME['board'].name
|
|
12
|
-
},
|
|
13
|
-
// {
|
|
14
|
-
// label: 'المستخدمين',
|
|
15
|
-
// icon: 'font-icon-profile-2user',
|
|
16
|
-
// link: ROUTES_NAME['users'].name,
|
|
17
|
-
// },
|
|
18
|
-
// {
|
|
19
|
-
// label: 'الإجتماعات',
|
|
20
|
-
// icon: 'font-icon-menu-board',
|
|
21
|
-
// link: ROUTES_NAME['meetings'].name,
|
|
22
|
-
// },
|
|
23
|
-
// {
|
|
24
|
-
// label: 'مهامي',
|
|
25
|
-
// icon: 'font-icon-task-square',
|
|
26
|
-
// link: ROUTES_NAME['tasks'].name,
|
|
27
|
-
// },
|
|
28
|
-
// {
|
|
29
|
-
// label: 'الوارد',
|
|
30
|
-
// icon: 'font-icon-directbox-receive',
|
|
31
|
-
// link: ROUTES_NAME['imported'].name,
|
|
32
|
-
// },
|
|
33
|
-
// {
|
|
34
|
-
// label: 'الصادر',
|
|
35
|
-
// icon: 'font-icon-directbox-send',
|
|
36
|
-
// link: ROUTES_NAME['exported'].name,
|
|
37
|
-
// },
|
|
38
|
-
// {
|
|
39
|
-
// label: 'التقارير',
|
|
40
|
-
// icon: 'font-icon-status-up',
|
|
41
|
-
// link: ROUTES_NAME['reports'].name,
|
|
42
|
-
// },
|
|
43
|
-
];
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1tZW51LWl0ZW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY29yZS9jb21wb25lbnRzL2FwcC1zaWRlLW1lbnUvc2lkZS1tZW51LWl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBbUI7SUFDbEQ7UUFDRSxLQUFLLEVBQUUsWUFBWTtRQUNuQixJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSTtLQUNuQztJQUNEO1FBQ0UsS0FBSyxFQUFFLGtCQUFrQjtRQUN6QixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTtLQUNoQztJQUNELElBQUk7SUFDSix5QkFBeUI7SUFDekIscUNBQXFDO0lBQ3JDLHFDQUFxQztJQUNyQyxLQUFLO0lBQ0wsSUFBSTtJQUNKLHlCQUF5QjtJQUN6QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0lBQ3hDLEtBQUs7SUFDTCxJQUFJO0lBQ0osb0JBQW9CO0lBQ3BCLG1DQUFtQztJQUNuQyxxQ0FBcUM7SUFDckMsS0FBSztJQUNMLElBQUk7SUFDSixxQkFBcUI7SUFDckIseUNBQXlDO0lBQ3pDLHdDQUF3QztJQUN4QyxLQUFLO0lBQ0wsSUFBSTtJQUNKLHFCQUFxQjtJQUNyQixzQ0FBc0M7SUFDdEMsd0NBQXdDO0lBQ3hDLEtBQUs7SUFDTCxJQUFJO0lBQ0osdUJBQXVCO0lBQ3ZCLGlDQUFpQztJQUNqQyx1Q0FBdUM7SUFDdkMsS0FBSztDQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBST1VURVNfTkFNRSB9IGZyb20gJy4vcm91dGVzLW5hbWVzJztcclxuaW1wb3J0IHsgU2lkZU1lbnVJdGVtIH0gZnJvbSAnLi9zaWRlLW1lbnUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEJBU0VfU0lERV9NRU5VX0lURU1TOiBTaWRlTWVudUl0ZW1bXSA9IFtcclxuICB7XHJcbiAgICBsYWJlbDogJ9in2YTYpdis2KrZhdin2LnYp9iqJyxcclxuICAgIGljb246ICdmb250LWljb24tbWVudS1ib2FyZCcsXHJcbiAgICBsaW5rOiBST1VURVNfTkFNRVsnbWVldGluZ3MnXS5uYW1lXHJcbiAgfSxcclxuICB7XHJcbiAgICBsYWJlbDogJ9in2YTZhNis2KfZhiDZiCDYp9mE2YXYrNin2YTYsycsXHJcbiAgICBpY29uOiAnZm9udC1pY29uLXBlb3BsZScsXHJcbiAgICBsaW5rOiBST1VURVNfTkFNRVsnYm9hcmQnXS5uYW1lXHJcbiAgfSxcclxuICAvLyB7XHJcbiAgLy8gICBsYWJlbDogJ9in2YTZhdiz2KrYrtiv2YXZitmGJyxcclxuICAvLyAgIGljb246ICdmb250LWljb24tcHJvZmlsZS0ydXNlcicsXHJcbiAgLy8gICBsaW5rOiBST1VURVNfTkFNRVsndXNlcnMnXS5uYW1lLFxyXG4gIC8vIH0sXHJcbiAgLy8ge1xyXG4gIC8vICAgbGFiZWw6ICfYp9mE2KXYrNiq2YXYp9i52KfYqicsXHJcbiAgLy8gICBpY29uOiAnZm9udC1pY29uLW1lbnUtYm9hcmQnLFxyXG4gIC8vICAgbGluazogUk9VVEVTX05BTUVbJ21lZXRpbmdzJ10ubmFtZSxcclxuICAvLyB9LFxyXG4gIC8vIHtcclxuICAvLyAgIGxhYmVsOiAn2YXZh9in2YXZiicsXHJcbiAgLy8gICBpY29uOiAnZm9udC1pY29uLXRhc2stc3F1YXJlJyxcclxuICAvLyAgIGxpbms6IFJPVVRFU19OQU1FWyd0YXNrcyddLm5hbWUsXHJcbiAgLy8gfSxcclxuICAvLyB7XHJcbiAgLy8gICBsYWJlbDogJ9in2YTZiNin2LHYrycsXHJcbiAgLy8gICBpY29uOiAnZm9udC1pY29uLWRpcmVjdGJveC1yZWNlaXZlJyxcclxuICAvLyAgIGxpbms6IFJPVVRFU19OQU1FWydpbXBvcnRlZCddLm5hbWUsXHJcbiAgLy8gfSxcclxuICAvLyB7XHJcbiAgLy8gICBsYWJlbDogJ9in2YTYtdin2K/YsScsXHJcbiAgLy8gICBpY29uOiAnZm9udC1pY29uLWRpcmVjdGJveC1zZW5kJyxcclxuICAvLyAgIGxpbms6IFJPVVRFU19OQU1FWydleHBvcnRlZCddLm5hbWUsXHJcbiAgLy8gfSxcclxuICAvLyB7XHJcbiAgLy8gICBsYWJlbDogJ9in2YTYqtmC2KfYsdmK2LEnLFxyXG4gIC8vICAgaWNvbjogJ2ZvbnQtaWNvbi1zdGF0dXMtdXAnLFxyXG4gIC8vICAgbGluazogUk9VVEVTX05BTUVbJ3JlcG9ydHMnXS5uYW1lLFxyXG4gIC8vIH0sXHJcbl07XHJcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1tZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY29yZS9jb21wb25lbnRzL2FwcC1zaWRlLW1lbnUvc2lkZS1tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNpZGVNZW51SXRlbSB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBpY29uOiBzdHJpbmc7XHJcbiAgbGluazogc3RyaW5nO1xyXG4gIHBlcm1pc3Npb25LZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVOYW1lSXRlbSB7XHJcbiAgW2tleTogc3RyaW5nXToge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
3
|
-
import { BreadcrumbItem } from './app-breadcrumb.interface';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class AppBreadcrumbComponent implements OnInit {
|
|
6
|
-
private activatedRoute;
|
|
7
|
-
private router;
|
|
8
|
-
items: BreadcrumbItem[] | undefined;
|
|
9
|
-
isShownBreadcrumb: boolean;
|
|
10
|
-
constructor(activatedRoute: ActivatedRoute, router: Router);
|
|
11
|
-
ngOnInit(): void;
|
|
12
|
-
private _checkHiddenBreadcrumb;
|
|
13
|
-
private _createBreadcrumbs;
|
|
14
|
-
private _checkEmpty;
|
|
15
|
-
private _getRecursiveKey;
|
|
16
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AppBreadcrumbComponent, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppBreadcrumbComponent, "app-breadcrumb", never, {}, {}, never, never, true, never>;
|
|
18
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { MenuItem } from "primeng/api";
|
|
2
|
-
export interface BreadcrumbItem {
|
|
3
|
-
notClickableBreadcrumb: boolean;
|
|
4
|
-
label: string;
|
|
5
|
-
routerLink: string;
|
|
6
|
-
isShownBreadcrumb: boolean;
|
|
7
|
-
extraBreadcrumbs?: BreadCrumbExtraData[];
|
|
8
|
-
}
|
|
9
|
-
export interface BreadCrumbPosition {
|
|
10
|
-
position: 'before' | 'after';
|
|
11
|
-
}
|
|
12
|
-
export type BreadCrumbExtraData = MenuItem & BreadCrumbPosition;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from "@angular/core";
|
|
2
|
-
import { MenuItem } from "primeng/api";
|
|
3
|
-
import { AuthService } from "../../services";
|
|
4
|
-
import { UserInfo } from "../../interfaces";
|
|
5
|
-
import { PermissionsActions, UserPermissionsEnum } from "../../enums";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class AppHeaderComponent {
|
|
8
|
-
private authService;
|
|
9
|
-
createButtonClicked: EventEmitter<any>;
|
|
10
|
-
toggleMenu: EventEmitter<boolean>;
|
|
11
|
-
userInfo: UserInfo;
|
|
12
|
-
items: MenuItem[] | undefined;
|
|
13
|
-
UserPermissionsEnum: typeof UserPermissionsEnum;
|
|
14
|
-
PermissionsActions: typeof PermissionsActions;
|
|
15
|
-
constructor(authService: AuthService);
|
|
16
|
-
logout(): void;
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AppHeaderComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppHeaderComponent, "app-header", never, { "userInfo": { "alias": "userInfo"; "required": false; }; }, { "createButtonClicked": "createButtonClicked"; "toggleMenu": "toggleMenu"; }, never, never, true, never>;
|
|
19
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { SideMenuItem } from './side-menu';
|
|
3
|
-
import { PermissionsService } from "../../services";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class AppSideMenuComponent implements OnInit {
|
|
6
|
-
isOpen: boolean;
|
|
7
|
-
menuItems: SideMenuItem[];
|
|
8
|
-
permissionsService: PermissionsService;
|
|
9
|
-
filteredMenu: SideMenuItem[];
|
|
10
|
-
ngOnInit(): void;
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AppSideMenuComponent, never>;
|
|
12
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppSideMenuComponent, "app-side-menu", never, { "isOpen": { "alias": "isOpen"; "required": false; }; }, {}, never, never, true, never>;
|
|
13
|
-
}
|