ngx-techlify-core 18.18.0 → 18.19.0
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/app-admin/tenant/tenant-list-widget/tenant-list-widget.component.mjs +6 -4
- package/esm2022/lib/company-information/company-info-display/company-info-display.component.mjs +18 -4
- package/esm2022/lib/company-information/company-information/company-information.component.mjs +42 -15
- package/esm2022/lib/company-information/tenant-form-button/tenant-form-button.component.mjs +36 -0
- package/esm2022/lib/document-viewer/document-viewer.component.mjs +3 -3
- package/esm2022/lib/user/app-admin-user-view/app-admin-user-view.component.mjs +1 -1
- package/esm2022/lib/user/app-admin-user-view/app-admin-user-view.module.mjs +9 -5
- package/esm2022/lib/user/current-user.service.mjs +5 -4
- package/esm2022/lib/user/index.mjs +4 -1
- package/esm2022/lib/user/user-enable-button-component/user-enable-button.module.mjs +28 -0
- package/esm2022/lib/user/user-form.component.mjs +2 -2
- package/esm2022/lib/user/user-sessions/user-sessions/user-sessions.module.mjs +28 -0
- package/esm2022/lib/user/user.module.mjs +24 -26
- package/esm2022/lib/user-client-enable-disable-button/user-client-enable-disable-button.module.mjs +28 -0
- package/esm2022/lib/user-clients-list/user-clients-list.module.mjs +32 -0
- package/esm2022/lib/user-config/user-config.service.mjs +3 -3
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/ngx-techlify-core.mjs +577 -413
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/company-information/company-info-display/company-info-display.component.d.ts +5 -1
- package/lib/company-information/company-information/company-information.component.d.ts +6 -2
- package/lib/company-information/tenant-form-button/tenant-form-button.component.d.ts +14 -0
- package/lib/user/app-admin-user-view/app-admin-user-view.module.d.ts +3 -2
- package/lib/user/current-user.service.d.ts +2 -1
- package/lib/user/index.d.ts +3 -0
- package/lib/user/user-enable-button-component/user-enable-button.module.d.ts +10 -0
- package/lib/user/user-form.component.d.ts +2 -2
- package/lib/user/user-sessions/user-sessions/user-sessions.module.d.ts +10 -0
- package/lib/user/user.module.d.ts +20 -21
- package/lib/user-client-enable-disable-button/user-client-enable-disable-button.module.d.ts +10 -0
- package/lib/user-clients-list/user-clients-list.module.d.ts +11 -0
- package/lib/user-config/user-config.service.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -6,13 +6,13 @@ import * as i7 from '@angular/flex-layout/flex';
|
|
|
6
6
|
import * as i6 from '@angular/material/button';
|
|
7
7
|
import { MatButtonModule, MatButton } from '@angular/material/button';
|
|
8
8
|
import { __decorate } from 'tslib';
|
|
9
|
-
import { debounceTime, catchError, switchMap, map, distinctUntilChanged, startWith, finalize, filter } from 'rxjs/operators';
|
|
9
|
+
import { debounceTime, catchError, switchMap, map as map$1, distinctUntilChanged, startWith, finalize, filter } from 'rxjs/operators';
|
|
10
10
|
import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
|
|
11
11
|
import * as i9 from '@angular/material/sort';
|
|
12
12
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
13
13
|
import * as i2 from '@angular/flex-layout/extended';
|
|
14
14
|
import * as i2$1 from '@angular/common';
|
|
15
|
-
import { CommonModule, DatePipe, NgIf } from '@angular/common';
|
|
15
|
+
import { CommonModule, DatePipe, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
16
16
|
import * as i14 from 'ngx-infinite-scroll';
|
|
17
17
|
import { InfiniteScrollModule } from 'ngx-infinite-scroll';
|
|
18
18
|
import * as i8 from '@angular/material/checkbox';
|
|
@@ -31,7 +31,7 @@ import * as i1$4 from '@angular/forms';
|
|
|
31
31
|
import { UntypedFormControl, Validators, ReactiveFormsModule, FormsModule, NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';
|
|
32
32
|
import * as i1$2 from '@angular/common/http';
|
|
33
33
|
import { HttpErrorResponse, HttpResponse, HttpClient, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
|
34
|
-
import { throwError, Observable, Subject,
|
|
34
|
+
import { throwError, Observable, Subject, BehaviorSubject, of, map, Subscription, from, finalize as finalize$1, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, startWith as startWith$1 } from 'rxjs';
|
|
35
35
|
import * as i1$1 from '@angular/material/snack-bar';
|
|
36
36
|
import { MAT_SNACK_BAR_DATA, MatSnackBarModule } from '@angular/material/snack-bar';
|
|
37
37
|
import * as i9$1 from '@angular/material/form-field';
|
|
@@ -65,6 +65,7 @@ import * as i11 from '@angular/material/datepicker';
|
|
|
65
65
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
66
66
|
import * as i2$2 from '@angular/platform-browser';
|
|
67
67
|
import * as XLSX from 'xlsx';
|
|
68
|
+
import { FlexLayoutModule, FlexModule } from '@angular/flex-layout';
|
|
68
69
|
import * as i12 from '@angular/material/progress-spinner';
|
|
69
70
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
70
71
|
import * as i5$2 from '@angular/material/divider';
|
|
@@ -74,7 +75,6 @@ import { MatListModule, MatSelectionList, MatListOption } from '@angular/materia
|
|
|
74
75
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
75
76
|
import * as i8$6 from '@angular/material/slide-toggle';
|
|
76
77
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
77
|
-
import { FlexLayoutModule, FlexModule } from '@angular/flex-layout';
|
|
78
78
|
import * as i14$1 from 'ngx-editor';
|
|
79
79
|
import { Editor, NgxEditorModule } from 'ngx-editor';
|
|
80
80
|
import * as jsondiffpatch from 'jsondiffpatch';
|
|
@@ -586,11 +586,11 @@ class DocumentViewerComponent {
|
|
|
586
586
|
return file.split('.').pop();
|
|
587
587
|
}
|
|
588
588
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
589
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentViewerComponent, selector: "app-document-viewer", inputs: { config: "config", file: "file", fileUrl: "fileUrl", disableEdit: "disableEdit" }, outputs: { remove: "remove" }, ngImport: i0, template: "<mat-card *ngIf=\"viewerType === 'image'\">\n <img [ngStyle]=\"config.imageStyle\" mat-card-image [src]=\"fileUrl\" />\n <mat-card-actions>\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit && !config.hideRemove\">\n Remove\n </button>\n </mat-card-actions>\n</mat-card>\n\n<div class=\"mat-elevation-z1 p-4\" *ngIf=\"viewerType !== 'image'\">\n <a [href]=\"fileUrl\" target=\"_blank\">{{fileName}}</a>\n <ngx-doc-viewer [ngStyle]=\"config.viewerStyle\" *ngIf=\"viewerType !== null\" [url]=\"fileUrl\" [viewer]=\"viewerType\">\n </ngx-doc-viewer>\n <div class=\"mt-2\" *ngIf=\"!config.hideRemove\">\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit\">\n Remove\n </button>\n </div>\n</div>", styles: [".image-fit{height:100%;width:100%;object-fit:cover}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i3.NgxDocViewerComponent, selector: "ngx-doc-viewer", inputs: ["url", "queryParams", "viewerUrl", "googleCheckInterval", "googleMaxChecks", "disableContent", "googleCheckContentLoaded", "viewer", "overrideLocalhost"], outputs: ["loaded"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardImage, selector: "[mat-card-image], [matCardImage]" }] }); }
|
|
589
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentViewerComponent, selector: "app-document-viewer", inputs: { config: "config", file: "file", fileUrl: "fileUrl", disableEdit: "disableEdit" }, outputs: { remove: "remove" }, ngImport: i0, template: "<mat-card *ngIf=\"viewerType === 'image'\">\n <img [ngStyle]=\"config.imageStyle\" mat-card-image [src]=\"fileUrl\" style=\"object-fit: contain;\" />\n <mat-card-actions>\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit && !config.hideRemove\">\n Remove\n </button>\n </mat-card-actions>\n</mat-card>\n\n<div class=\"mat-elevation-z1 p-4\" *ngIf=\"viewerType !== 'image'\">\n <a [href]=\"fileUrl\" target=\"_blank\">{{fileName}}</a>\n <ngx-doc-viewer [ngStyle]=\"config.viewerStyle\" *ngIf=\"viewerType !== null\" [url]=\"fileUrl\" [viewer]=\"viewerType\">\n </ngx-doc-viewer>\n <div class=\"mt-2\" *ngIf=\"!config.hideRemove\">\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit\">\n Remove\n </button>\n </div>\n</div>", styles: [".image-fit{height:100%;width:100%;object-fit:cover}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i3.NgxDocViewerComponent, selector: "ngx-doc-viewer", inputs: ["url", "queryParams", "viewerUrl", "googleCheckInterval", "googleMaxChecks", "disableContent", "googleCheckContentLoaded", "viewer", "overrideLocalhost"], outputs: ["loaded"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardImage, selector: "[mat-card-image], [matCardImage]" }] }); }
|
|
590
590
|
}
|
|
591
591
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentViewerComponent, decorators: [{
|
|
592
592
|
type: Component,
|
|
593
|
-
args: [{ selector: 'app-document-viewer', template: "<mat-card *ngIf=\"viewerType === 'image'\">\n <img [ngStyle]=\"config.imageStyle\" mat-card-image [src]=\"fileUrl\" />\n <mat-card-actions>\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit && !config.hideRemove\">\n Remove\n </button>\n </mat-card-actions>\n</mat-card>\n\n<div class=\"mat-elevation-z1 p-4\" *ngIf=\"viewerType !== 'image'\">\n <a [href]=\"fileUrl\" target=\"_blank\">{{fileName}}</a>\n <ngx-doc-viewer [ngStyle]=\"config.viewerStyle\" *ngIf=\"viewerType !== null\" [url]=\"fileUrl\" [viewer]=\"viewerType\">\n </ngx-doc-viewer>\n <div class=\"mt-2\" *ngIf=\"!config.hideRemove\">\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit\">\n Remove\n </button>\n </div>\n</div>", styles: [".image-fit{height:100%;width:100%;object-fit:cover}\n"] }]
|
|
593
|
+
args: [{ selector: 'app-document-viewer', template: "<mat-card *ngIf=\"viewerType === 'image'\">\n <img [ngStyle]=\"config.imageStyle\" mat-card-image [src]=\"fileUrl\" style=\"object-fit: contain;\" />\n <mat-card-actions>\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit && !config.hideRemove\">\n Remove\n </button>\n </mat-card-actions>\n</mat-card>\n\n<div class=\"mat-elevation-z1 p-4\" *ngIf=\"viewerType !== 'image'\">\n <a [href]=\"fileUrl\" target=\"_blank\">{{fileName}}</a>\n <ngx-doc-viewer [ngStyle]=\"config.viewerStyle\" *ngIf=\"viewerType !== null\" [url]=\"fileUrl\" [viewer]=\"viewerType\">\n </ngx-doc-viewer>\n <div class=\"mt-2\" *ngIf=\"!config.hideRemove\">\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit\">\n Remove\n </button>\n </div>\n</div>", styles: [".image-fit{height:100%;width:100%;object-fit:cover}\n"] }]
|
|
594
594
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
595
595
|
type: Input
|
|
596
596
|
}], file: [{
|
|
@@ -1943,6 +1943,187 @@ class User {
|
|
|
1943
1943
|
}
|
|
1944
1944
|
}
|
|
1945
1945
|
|
|
1946
|
+
/**
|
|
1947
|
+
* Service used to manage Local Storage
|
|
1948
|
+
*
|
|
1949
|
+
* @author Joshua Kissoon
|
|
1950
|
+
* @since 20190623
|
|
1951
|
+
*/
|
|
1952
|
+
class StorageService {
|
|
1953
|
+
constructor() {
|
|
1954
|
+
this.storageSub = new Subject();
|
|
1955
|
+
}
|
|
1956
|
+
watch() {
|
|
1957
|
+
return this.storageSub.asObservable();
|
|
1958
|
+
}
|
|
1959
|
+
setItem(key, data) {
|
|
1960
|
+
localStorage.setItem(key, data);
|
|
1961
|
+
this.storageSub.next({ key: key, value: data });
|
|
1962
|
+
}
|
|
1963
|
+
getItem(key) {
|
|
1964
|
+
return localStorage.getItem(key);
|
|
1965
|
+
}
|
|
1966
|
+
removeItem(key) {
|
|
1967
|
+
const data = this.getItem(key);
|
|
1968
|
+
localStorage.removeItem(key);
|
|
1969
|
+
this.storageSub.next({ key: key, value: data });
|
|
1970
|
+
}
|
|
1971
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1972
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageService, providedIn: 'root' }); }
|
|
1973
|
+
}
|
|
1974
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageService, decorators: [{
|
|
1975
|
+
type: Injectable,
|
|
1976
|
+
args: [{
|
|
1977
|
+
providedIn: 'root'
|
|
1978
|
+
}]
|
|
1979
|
+
}], ctorParameters: () => [] });
|
|
1980
|
+
|
|
1981
|
+
/**
|
|
1982
|
+
* Service that manages information about the current user
|
|
1983
|
+
*
|
|
1984
|
+
* @author Joshua Kissoon
|
|
1985
|
+
* @since 20170817
|
|
1986
|
+
*/
|
|
1987
|
+
class CurrentUserService {
|
|
1988
|
+
constructor(http, storage) {
|
|
1989
|
+
this.http = http;
|
|
1990
|
+
this.storage = storage;
|
|
1991
|
+
/**Deprecated stop using for new projects */
|
|
1992
|
+
this.userSub = new Subject();
|
|
1993
|
+
// Track the auth status of the user.
|
|
1994
|
+
this.isLoggedIn = new BehaviorSubject(false);
|
|
1995
|
+
}
|
|
1996
|
+
/**
|
|
1997
|
+
* Get the login status of the user.
|
|
1998
|
+
*/
|
|
1999
|
+
getAuthStatus() {
|
|
2000
|
+
return this.isLoggedIn.asObservable();
|
|
2001
|
+
}
|
|
2002
|
+
/**
|
|
2003
|
+
* Update the login status of the user.
|
|
2004
|
+
*
|
|
2005
|
+
* @param val The next value of the isLoggedIn.
|
|
2006
|
+
*/
|
|
2007
|
+
updateAuthStatus(val) {
|
|
2008
|
+
this.isLoggedIn.next(val);
|
|
2009
|
+
}
|
|
2010
|
+
/**
|
|
2011
|
+
* Returns an user if present, otherwise a empty user
|
|
2012
|
+
* @returns {User} user
|
|
2013
|
+
*/
|
|
2014
|
+
getUser() {
|
|
2015
|
+
if (this.user) {
|
|
2016
|
+
return this.user;
|
|
2017
|
+
}
|
|
2018
|
+
this.user = new User();
|
|
2019
|
+
const userFromStorage = JSON.parse(this.storage.getItem('currentUser'));
|
|
2020
|
+
if (userFromStorage) {
|
|
2021
|
+
this.user.loadFromMap(userFromStorage);
|
|
2022
|
+
}
|
|
2023
|
+
return this.user;
|
|
2024
|
+
}
|
|
2025
|
+
/**
|
|
2026
|
+
* @deprecated Don't use for new projects, use getUserObservable() instead
|
|
2027
|
+
* @returns {Observable<User>} Observable of user once changed.
|
|
2028
|
+
*/
|
|
2029
|
+
watch() {
|
|
2030
|
+
return this.userSub.asObservable();
|
|
2031
|
+
}
|
|
2032
|
+
/**
|
|
2033
|
+
* Loads the current logged in user
|
|
2034
|
+
* @deprecated use getUserObservable() instead
|
|
2035
|
+
* @param reload whether to fetch new data from server
|
|
2036
|
+
* @returns {Promise<User>} promise of user
|
|
2037
|
+
*/
|
|
2038
|
+
getCurrentUser(reload = false) {
|
|
2039
|
+
let promise;
|
|
2040
|
+
if (undefined !== this.data && !reload) {
|
|
2041
|
+
promise = new Promise((resolve, reject) => {
|
|
2042
|
+
resolve(this.data);
|
|
2043
|
+
});
|
|
2044
|
+
return promise;
|
|
2045
|
+
}
|
|
2046
|
+
promise = this.http.get('api/user/current').toPromise();
|
|
2047
|
+
promise.then(res => {
|
|
2048
|
+
this.user = new User();
|
|
2049
|
+
this.data = res;
|
|
2050
|
+
this.user.loadFromMap(res.user);
|
|
2051
|
+
this.storage.setItem('currentUser', JSON.stringify(res.user));
|
|
2052
|
+
this.userSub.next(this.user);
|
|
2053
|
+
});
|
|
2054
|
+
return promise;
|
|
2055
|
+
}
|
|
2056
|
+
/**
|
|
2057
|
+
* Used to update the current user data
|
|
2058
|
+
* @param {any} userData data that needs to be updated to current user
|
|
2059
|
+
*/
|
|
2060
|
+
updateCurrentUser(userData) {
|
|
2061
|
+
this.user = new User();
|
|
2062
|
+
this.data = userData;
|
|
2063
|
+
this.user.loadFromMap(userData);
|
|
2064
|
+
this.storage.setItem('currentUser', JSON.stringify(userData));
|
|
2065
|
+
this.userSub.next(this.user);
|
|
2066
|
+
}
|
|
2067
|
+
/**
|
|
2068
|
+
* @param {number} id Id of role
|
|
2069
|
+
* @returns {boolean} true if role is present
|
|
2070
|
+
*/
|
|
2071
|
+
hasRole(id) {
|
|
2072
|
+
if (this.user.roles == null) {
|
|
2073
|
+
return false;
|
|
2074
|
+
}
|
|
2075
|
+
return (this.user.roles || []).some(role => role.id == id);
|
|
2076
|
+
}
|
|
2077
|
+
/**
|
|
2078
|
+
* @param {number} id Id of permission
|
|
2079
|
+
* @returns {boolean} true if permission is present
|
|
2080
|
+
*/
|
|
2081
|
+
hasPermission(slug) {
|
|
2082
|
+
if (!this.user) {
|
|
2083
|
+
return false;
|
|
2084
|
+
}
|
|
2085
|
+
if (this.user.user_type_id == 1) {
|
|
2086
|
+
return true;
|
|
2087
|
+
}
|
|
2088
|
+
else {
|
|
2089
|
+
if (this.user.permissions == null) {
|
|
2090
|
+
return false;
|
|
2091
|
+
}
|
|
2092
|
+
return (this.user.permissions || []).some(permission => permission.slug == slug);
|
|
2093
|
+
}
|
|
2094
|
+
}
|
|
2095
|
+
/**
|
|
2096
|
+
* Returns the observable of user
|
|
2097
|
+
* @param {boolean} reload - whether to reload the entire user again
|
|
2098
|
+
* @returns {Observable<User>} Observable of user.
|
|
2099
|
+
*/
|
|
2100
|
+
getUserObservable(reload = false) {
|
|
2101
|
+
if (this.user && !reload) {
|
|
2102
|
+
return of(this.user);
|
|
2103
|
+
}
|
|
2104
|
+
return this.http.get('api/user/current')
|
|
2105
|
+
.pipe(map((res) => {
|
|
2106
|
+
this.user = new User();
|
|
2107
|
+
this.data = res;
|
|
2108
|
+
this.user.loadFromMap(res.user);
|
|
2109
|
+
this.storage.setItem('currentUser', JSON.stringify(res.user));
|
|
2110
|
+
return this.user;
|
|
2111
|
+
}));
|
|
2112
|
+
}
|
|
2113
|
+
/**
|
|
2114
|
+
* @returns {any} Returns the raw user data
|
|
2115
|
+
*/
|
|
2116
|
+
getUserData() {
|
|
2117
|
+
return this.data;
|
|
2118
|
+
}
|
|
2119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CurrentUserService, deps: [{ token: HttpService }, { token: StorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2120
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CurrentUserService, providedIn: 'root' }); }
|
|
2121
|
+
}
|
|
2122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CurrentUserService, decorators: [{
|
|
2123
|
+
type: Injectable,
|
|
2124
|
+
args: [{ providedIn: 'root' }]
|
|
2125
|
+
}], ctorParameters: () => [{ type: HttpService }, { type: StorageService }] });
|
|
2126
|
+
|
|
1946
2127
|
class SnackModule {
|
|
1947
2128
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SnackModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1948
2129
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SnackModule, declarations: [SuccessSnackComponent,
|
|
@@ -2031,7 +2212,7 @@ class AuthenticationService {
|
|
|
2031
2212
|
// Update the auth status of the user.
|
|
2032
2213
|
this.currentUserService.updateAuthStatus(true);
|
|
2033
2214
|
return this.http.get('api/user/current')
|
|
2034
|
-
.pipe(map((res) => {
|
|
2215
|
+
.pipe(map$1((res) => {
|
|
2035
2216
|
data.user = res?.user;
|
|
2036
2217
|
this.credentialsService.setCredentials(data, context.remember);
|
|
2037
2218
|
return data;
|
|
@@ -2043,7 +2224,7 @@ class AuthenticationService {
|
|
|
2043
2224
|
* @return True if the user was logged out successfully.
|
|
2044
2225
|
*/
|
|
2045
2226
|
logout() {
|
|
2046
|
-
return this.http.post('api/user/logout', {}).pipe(map(() => {
|
|
2227
|
+
return this.http.post('api/user/logout', {}).pipe(map$1(() => {
|
|
2047
2228
|
// On successful logout, update auth status and clear credentials
|
|
2048
2229
|
this.currentUserService.updateAuthStatus(false);
|
|
2049
2230
|
this.credentialsService.setCredentials();
|
|
@@ -2096,41 +2277,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2096
2277
|
}]
|
|
2097
2278
|
}] });
|
|
2098
2279
|
|
|
2099
|
-
/**
|
|
2100
|
-
* Service used to manage Local Storage
|
|
2101
|
-
*
|
|
2102
|
-
* @author Joshua Kissoon
|
|
2103
|
-
* @since 20190623
|
|
2104
|
-
*/
|
|
2105
|
-
class StorageService {
|
|
2106
|
-
constructor() {
|
|
2107
|
-
this.storageSub = new Subject();
|
|
2108
|
-
}
|
|
2109
|
-
watch() {
|
|
2110
|
-
return this.storageSub.asObservable();
|
|
2111
|
-
}
|
|
2112
|
-
setItem(key, data) {
|
|
2113
|
-
localStorage.setItem(key, data);
|
|
2114
|
-
this.storageSub.next({ key: key, value: data });
|
|
2115
|
-
}
|
|
2116
|
-
getItem(key) {
|
|
2117
|
-
return localStorage.getItem(key);
|
|
2118
|
-
}
|
|
2119
|
-
removeItem(key) {
|
|
2120
|
-
const data = this.getItem(key);
|
|
2121
|
-
localStorage.removeItem(key);
|
|
2122
|
-
this.storageSub.next({ key: key, value: data });
|
|
2123
|
-
}
|
|
2124
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2125
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageService, providedIn: 'root' }); }
|
|
2126
|
-
}
|
|
2127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageService, decorators: [{
|
|
2128
|
-
type: Injectable,
|
|
2129
|
-
args: [{
|
|
2130
|
-
providedIn: 'root'
|
|
2131
|
-
}]
|
|
2132
|
-
}], ctorParameters: () => [] });
|
|
2133
|
-
|
|
2134
2280
|
/**
|
|
2135
2281
|
* Service that provides a wrapper for retrieving data from the server
|
|
2136
2282
|
* @deprecated use HttpService Instead
|
|
@@ -2285,168 +2431,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2285
2431
|
}], ctorParameters: () => [{ type: i1$5.Router }] });
|
|
2286
2432
|
|
|
2287
2433
|
/**
|
|
2288
|
-
*
|
|
2434
|
+
* Controller used to explore a User
|
|
2289
2435
|
*
|
|
2290
|
-
* @author
|
|
2291
|
-
* @since
|
|
2436
|
+
* @author Saravana Kumar
|
|
2437
|
+
* @since 20190813
|
|
2292
2438
|
*/
|
|
2293
|
-
class
|
|
2294
|
-
constructor(http,
|
|
2439
|
+
class UserExploreComponent {
|
|
2440
|
+
constructor(http, dialogRef, data) {
|
|
2295
2441
|
this.http = http;
|
|
2296
|
-
this.
|
|
2297
|
-
|
|
2298
|
-
this.
|
|
2299
|
-
|
|
2300
|
-
this.
|
|
2301
|
-
}
|
|
2302
|
-
/**
|
|
2303
|
-
* Get the login status of the user.
|
|
2304
|
-
*/
|
|
2305
|
-
getAuthStatus() {
|
|
2306
|
-
return this.isLoggedIn.asObservable();
|
|
2442
|
+
this.dialogRef = dialogRef;
|
|
2443
|
+
this.data = data;
|
|
2444
|
+
this.isWorking = false;
|
|
2445
|
+
this.modules = [];
|
|
2446
|
+
this.user = this.data;
|
|
2307
2447
|
}
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
*
|
|
2311
|
-
* @param val The next value of the isLoggedIn.
|
|
2312
|
-
*/
|
|
2313
|
-
updateAuthStatus(val) {
|
|
2314
|
-
this.isLoggedIn.next(val);
|
|
2315
|
-
}
|
|
2316
|
-
/**
|
|
2317
|
-
* Returns an user if present, otherwise a empty user
|
|
2318
|
-
* @returns {User} user
|
|
2319
|
-
*/
|
|
2320
|
-
getUser() {
|
|
2321
|
-
if (this.user) {
|
|
2322
|
-
return this.user;
|
|
2323
|
-
}
|
|
2324
|
-
this.user = new User();
|
|
2325
|
-
const userFromStorage = JSON.parse(this.storage.getItem('currentUser'));
|
|
2326
|
-
if (userFromStorage) {
|
|
2327
|
-
this.user.loadFromMap(userFromStorage);
|
|
2328
|
-
}
|
|
2329
|
-
return this.user;
|
|
2330
|
-
}
|
|
2331
|
-
/**
|
|
2332
|
-
* @deprecated Don't use for new projects, use getUserObservable() instead
|
|
2333
|
-
* @returns {Observable<User>} Observable of user once changed.
|
|
2334
|
-
*/
|
|
2335
|
-
watch() {
|
|
2336
|
-
return this.userSub.asObservable();
|
|
2337
|
-
}
|
|
2338
|
-
/**
|
|
2339
|
-
* Loads the current logged in user
|
|
2340
|
-
* @deprecated use getUserObservable() instead
|
|
2341
|
-
* @param reload whether to fetch new data from server
|
|
2342
|
-
* @returns {Promise<User>} promise of user
|
|
2343
|
-
*/
|
|
2344
|
-
getCurrentUser(reload = false) {
|
|
2345
|
-
let promise;
|
|
2346
|
-
if (undefined !== this.data && !reload) {
|
|
2347
|
-
promise = new Promise((resolve, reject) => {
|
|
2348
|
-
resolve(this.data);
|
|
2349
|
-
});
|
|
2350
|
-
return promise;
|
|
2351
|
-
}
|
|
2352
|
-
promise = this.http.get('api/user/current').toPromise();
|
|
2353
|
-
promise.then(res => {
|
|
2354
|
-
this.user = new User();
|
|
2355
|
-
this.data = res;
|
|
2356
|
-
this.user.loadFromMap(res.user);
|
|
2357
|
-
this.storage.setItem('currentUser', JSON.stringify(res.user));
|
|
2358
|
-
this.userSub.next(this.user);
|
|
2359
|
-
});
|
|
2360
|
-
return promise;
|
|
2361
|
-
}
|
|
2362
|
-
/**
|
|
2363
|
-
* Used to update the current user data
|
|
2364
|
-
* @param {any} userData data that needs to be updated to current user
|
|
2365
|
-
*/
|
|
2366
|
-
updateCurrentUser(userData) {
|
|
2367
|
-
this.user = new User();
|
|
2368
|
-
this.data = userData;
|
|
2369
|
-
this.user.loadFromMap(userData);
|
|
2370
|
-
this.storage.setItem('currentUser', JSON.stringify(userData));
|
|
2371
|
-
this.userSub.next(this.user);
|
|
2372
|
-
}
|
|
2373
|
-
/**
|
|
2374
|
-
* @param {number} id Id of role
|
|
2375
|
-
* @returns {boolean} true if role is present
|
|
2376
|
-
*/
|
|
2377
|
-
hasRole(id) {
|
|
2378
|
-
if (this.user.roles == null) {
|
|
2379
|
-
return false;
|
|
2380
|
-
}
|
|
2381
|
-
return (this.user.roles || []).some(role => role.id == id);
|
|
2382
|
-
}
|
|
2383
|
-
/**
|
|
2384
|
-
* @param {number} id Id of permission
|
|
2385
|
-
* @returns {boolean} true if permission is present
|
|
2386
|
-
*/
|
|
2387
|
-
hasPermission(slug) {
|
|
2388
|
-
if (!this.user) {
|
|
2389
|
-
return false;
|
|
2390
|
-
}
|
|
2391
|
-
if (this.user.user_type_id == 1) {
|
|
2392
|
-
return true;
|
|
2393
|
-
}
|
|
2394
|
-
else {
|
|
2395
|
-
if (this.user.permissions == null) {
|
|
2396
|
-
return false;
|
|
2397
|
-
}
|
|
2398
|
-
return (this.user.permissions || []).some(permission => permission.slug == slug);
|
|
2399
|
-
}
|
|
2400
|
-
}
|
|
2401
|
-
/**
|
|
2402
|
-
* Returns the observable of user
|
|
2403
|
-
* @param {boolean} reload - whether to reload the entire user again
|
|
2404
|
-
* @returns {Observable<User>} Observable of user.
|
|
2405
|
-
*/
|
|
2406
|
-
getUserObservable(reload = false) {
|
|
2407
|
-
if (this.user && !reload) {
|
|
2408
|
-
return of(this.user);
|
|
2409
|
-
}
|
|
2410
|
-
return this.http.get('api/user/current')
|
|
2411
|
-
.pipe(map$1((res) => {
|
|
2412
|
-
this.user = new User();
|
|
2413
|
-
this.data = res;
|
|
2414
|
-
this.user.loadFromMap(res.user);
|
|
2415
|
-
this.storage.setItem('currentUser', JSON.stringify(res.user));
|
|
2416
|
-
return this.user;
|
|
2417
|
-
}));
|
|
2418
|
-
}
|
|
2419
|
-
/**
|
|
2420
|
-
* @returns {any} Returns the raw user data
|
|
2421
|
-
*/
|
|
2422
|
-
getUserData() {
|
|
2423
|
-
return this.data;
|
|
2424
|
-
}
|
|
2425
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CurrentUserService, deps: [{ token: HttpService }, { token: StorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2426
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CurrentUserService, providedIn: 'root' }); }
|
|
2427
|
-
}
|
|
2428
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CurrentUserService, decorators: [{
|
|
2429
|
-
type: Injectable,
|
|
2430
|
-
args: [{ providedIn: 'root' }]
|
|
2431
|
-
}], ctorParameters: () => [{ type: HttpService }, { type: StorageService }] });
|
|
2432
|
-
|
|
2433
|
-
/**
|
|
2434
|
-
* Controller used to explore a User
|
|
2435
|
-
*
|
|
2436
|
-
* @author Saravana Kumar
|
|
2437
|
-
* @since 20190813
|
|
2438
|
-
*/
|
|
2439
|
-
class UserExploreComponent {
|
|
2440
|
-
constructor(http, dialogRef, data) {
|
|
2441
|
-
this.http = http;
|
|
2442
|
-
this.dialogRef = dialogRef;
|
|
2443
|
-
this.data = data;
|
|
2444
|
-
this.isWorking = false;
|
|
2445
|
-
this.modules = [];
|
|
2446
|
-
this.user = this.data;
|
|
2447
|
-
}
|
|
2448
|
-
ngOnInit() {
|
|
2449
|
-
this.loadData();
|
|
2448
|
+
ngOnInit() {
|
|
2449
|
+
this.loadData();
|
|
2450
2450
|
}
|
|
2451
2451
|
loadData() {
|
|
2452
2452
|
this.isWorking = true;
|
|
@@ -4378,86 +4378,250 @@ class UserSessionsComponent extends TechlifyListingControllerInterface {
|
|
|
4378
4378
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsComponent, deps: [{ token: UserSessionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4379
4379
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserSessionsComponent, selector: "app-user-sessions", inputs: { user: "user" }, usesInheritance: true, ngImport: i0, template: "<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i13.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i13.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i13.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i13.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i13.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i13.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i13.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i13.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i13.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i13.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }] }); }
|
|
4380
4380
|
}
|
|
4381
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsComponent, decorators: [{
|
|
4382
|
-
type: Component,
|
|
4383
|
-
args: [{ selector: 'app-user-sessions', template: "<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n" }]
|
|
4384
|
-
}], ctorParameters: () => [{ type: UserSessionService }], propDecorators: { user: [{
|
|
4385
|
-
type: Input
|
|
4386
|
-
}] } });
|
|
4381
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsComponent, decorators: [{
|
|
4382
|
+
type: Component,
|
|
4383
|
+
args: [{ selector: 'app-user-sessions', template: "<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n" }]
|
|
4384
|
+
}], ctorParameters: () => [{ type: UserSessionService }], propDecorators: { user: [{
|
|
4385
|
+
type: Input
|
|
4386
|
+
}] } });
|
|
4387
|
+
|
|
4388
|
+
/**
|
|
4389
|
+
* Controller used to view a single user
|
|
4390
|
+
*
|
|
4391
|
+
* @author Floyd Kissoon
|
|
4392
|
+
* @since 20210701
|
|
4393
|
+
*/
|
|
4394
|
+
class UserViewComponent {
|
|
4395
|
+
constructor(userService, route, config, http, dialog, currentUserService) {
|
|
4396
|
+
this.userService = userService;
|
|
4397
|
+
this.route = route;
|
|
4398
|
+
this.config = config;
|
|
4399
|
+
this.http = http;
|
|
4400
|
+
this.dialog = dialog;
|
|
4401
|
+
this.currentUserService = currentUserService;
|
|
4402
|
+
this.UserTypeEnum = UserTypeEnum;
|
|
4403
|
+
this.currentUser = this.currentUserService.getUser();
|
|
4404
|
+
}
|
|
4405
|
+
ngOnInit() {
|
|
4406
|
+
this.route.params.subscribe(params => {
|
|
4407
|
+
if (params.id !== undefined) {
|
|
4408
|
+
this.loadUser(params.id);
|
|
4409
|
+
}
|
|
4410
|
+
});
|
|
4411
|
+
}
|
|
4412
|
+
loadUser(userId) {
|
|
4413
|
+
this.userService.getUser(userId).then((result) => {
|
|
4414
|
+
this.user = result.item;
|
|
4415
|
+
});
|
|
4416
|
+
}
|
|
4417
|
+
enableOrDisableUser(action) {
|
|
4418
|
+
this.http.patch('api/users/' + this.user.id + '/' + action, this.user).toPromise().then((res) => {
|
|
4419
|
+
this.user.user_client = res.item.user_client;
|
|
4420
|
+
});
|
|
4421
|
+
}
|
|
4422
|
+
editUser(user) {
|
|
4423
|
+
const dialogRef = this.dialog.open(UserFormComponent, {
|
|
4424
|
+
width: '700px',
|
|
4425
|
+
data: user,
|
|
4426
|
+
autoFocus: false,
|
|
4427
|
+
restoreFocus: false
|
|
4428
|
+
});
|
|
4429
|
+
dialogRef.afterClosed().subscribe(async (result) => {
|
|
4430
|
+
if (result) {
|
|
4431
|
+
this.loadUser(this.user.id);
|
|
4432
|
+
}
|
|
4433
|
+
});
|
|
4434
|
+
}
|
|
4435
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserViewComponent, deps: [{ token: UserService }, { token: i1$5.ActivatedRoute }, { token: ConfigService }, { token: HttpService }, { token: i1.MatDialog }, { token: CurrentUserService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4436
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserViewComponent, selector: "user-view", ngImport: i0, template: "<div class=\"mat-typography m-4\" *ngIf=\"user\">\n <h1 class=\"text-center\">{{user.name}}</h1>\n\n <div class=\"border\">\n <mat-tab-group>\n <mat-tab label=\"Basic Information\">\n <ng-template matTabContent>\n <div class=\"row m-4\">\n <div class=\"col-4\">\n <div class=\"bordered-section\">\n <div class=\"row\" *ngIf=\"currentUser?.user_type_id != 3\">\n <button type=\"button\" mat-icon-button (click)=\"editUser(user)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-stroked-button color=\"warn\" *ngIf=\"!user.user_client?.is_enabled\"\n (click)=\"enableOrDisableUser('enable')\">\n Enable\n </button>\n <button mat-stroked-button color=\"primary\" *ngIf=\"user.user_client?.is_enabled\"\n (click)=\"enableOrDisableUser('disable')\">Disable</button>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Name:</label>\n <div class=\"col-sm-8\">{{user?.name}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Email:</label>\n <div class=\"col-sm-8\">{{user?.email}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Type:</label>\n <div class=\"col-sm-8\">{{user?.type?.title}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Status:</label>\n <div class=\"col-sm-8\">{{user?.user_client?.is_enabled ? 'Enabled' : 'Disabled' }}\n </div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Role:</label>\n <div class=\"col-sm-8\">\n <span *ngFor=\"let role of user?.roles\">\n <button class=\"btn btn-outline-dark btn-xs mb-2\">{{role?.label}}</button>\n \n </span>\n </div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Signature:</label>\n <div class=\"col-sm-8\">\n <span *ngIf=\"user?.signature\">\n <img src=\"{{user?.signature_url}}\" alt=\"\" width=\"250px\" />\n </span>\n <span *ngIf=\"!user?.signature\">\n No Signature Added\n </span>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Login History\">\n <ng-template matTabContent>\n <app-login-history-for-user [userId]=\"user?.id\"></app-login-history-for-user>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Activity Logs\">\n <ng-template matTabContent>\n <app-audit-log-list objectType=\"User\" [objectId]=\"user?.id\" [showExportButtons]=\"false\">\n </app-audit-log-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Tenants\" *ngIf=\"currentUser?.user_type_id === UserTypeEnum.ADMIN\">\n <ng-template matTabContent>\n <app-user-clients-list [user]=\"user\"></app-user-clients-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Sessions\">\n <ng-template matTabContent>\n <app-user-sessions [user]=\"user\"></app-user-sessions>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n\n</div>", styles: [".user-node .page-title{margin:20px 0 0}.user-node #information-tabs-wrapper .nav-pills .nav-link{border-radius:0;border:1px solid #007bff;border-right:none;width:190px}.user-node #information-tabs-wrapper .tab-content{padding:20px;border:1px solid #007bff;width:calc(100vw - 200px)}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9$5.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i9$5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: LoginHistoryForUserComponent, selector: "app-login-history-for-user", inputs: ["userId"] }, { kind: "component", type: AuditLogListComponent, selector: "app-audit-log-list", inputs: ["objectId", "objectType", "showFilter", "showExportButtons", "userId", "disableFilterPatchingFromUrl", "scrollContainer"] }, { kind: "component", type: UserClientsListComponent, selector: "app-user-clients-list", inputs: ["user"] }, { kind: "component", type: UserSessionsComponent, selector: "app-user-sessions", inputs: ["user"] }] }); }
|
|
4437
|
+
}
|
|
4438
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserViewComponent, decorators: [{
|
|
4439
|
+
type: Component,
|
|
4440
|
+
args: [{ selector: 'user-view', template: "<div class=\"mat-typography m-4\" *ngIf=\"user\">\n <h1 class=\"text-center\">{{user.name}}</h1>\n\n <div class=\"border\">\n <mat-tab-group>\n <mat-tab label=\"Basic Information\">\n <ng-template matTabContent>\n <div class=\"row m-4\">\n <div class=\"col-4\">\n <div class=\"bordered-section\">\n <div class=\"row\" *ngIf=\"currentUser?.user_type_id != 3\">\n <button type=\"button\" mat-icon-button (click)=\"editUser(user)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-stroked-button color=\"warn\" *ngIf=\"!user.user_client?.is_enabled\"\n (click)=\"enableOrDisableUser('enable')\">\n Enable\n </button>\n <button mat-stroked-button color=\"primary\" *ngIf=\"user.user_client?.is_enabled\"\n (click)=\"enableOrDisableUser('disable')\">Disable</button>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Name:</label>\n <div class=\"col-sm-8\">{{user?.name}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Email:</label>\n <div class=\"col-sm-8\">{{user?.email}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Type:</label>\n <div class=\"col-sm-8\">{{user?.type?.title}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Status:</label>\n <div class=\"col-sm-8\">{{user?.user_client?.is_enabled ? 'Enabled' : 'Disabled' }}\n </div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Role:</label>\n <div class=\"col-sm-8\">\n <span *ngFor=\"let role of user?.roles\">\n <button class=\"btn btn-outline-dark btn-xs mb-2\">{{role?.label}}</button>\n \n </span>\n </div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Signature:</label>\n <div class=\"col-sm-8\">\n <span *ngIf=\"user?.signature\">\n <img src=\"{{user?.signature_url}}\" alt=\"\" width=\"250px\" />\n </span>\n <span *ngIf=\"!user?.signature\">\n No Signature Added\n </span>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Login History\">\n <ng-template matTabContent>\n <app-login-history-for-user [userId]=\"user?.id\"></app-login-history-for-user>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Activity Logs\">\n <ng-template matTabContent>\n <app-audit-log-list objectType=\"User\" [objectId]=\"user?.id\" [showExportButtons]=\"false\">\n </app-audit-log-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Tenants\" *ngIf=\"currentUser?.user_type_id === UserTypeEnum.ADMIN\">\n <ng-template matTabContent>\n <app-user-clients-list [user]=\"user\"></app-user-clients-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Sessions\">\n <ng-template matTabContent>\n <app-user-sessions [user]=\"user\"></app-user-sessions>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n\n</div>", styles: [".user-node .page-title{margin:20px 0 0}.user-node #information-tabs-wrapper .nav-pills .nav-link{border-radius:0;border:1px solid #007bff;border-right:none;width:190px}.user-node #information-tabs-wrapper .tab-content{padding:20px;border:1px solid #007bff;width:calc(100vw - 200px)}\n"] }]
|
|
4441
|
+
}], ctorParameters: () => [{ type: UserService }, { type: i1$5.ActivatedRoute }, { type: ConfigService }, { type: HttpService }, { type: i1.MatDialog }, { type: CurrentUserService }] });
|
|
4442
|
+
|
|
4443
|
+
const routes$A = [
|
|
4444
|
+
{ path: '', component: UsersViewAllComponent, canActivate: [AuthenticationGuard] },
|
|
4445
|
+
{ path: ':id', component: UserViewComponent, canActivate: [AuthenticationGuard] },
|
|
4446
|
+
{ path: ':id/app-admin-view', loadChildren: () => Promise.resolve().then(function () { return appAdminUserView_module; }).then(mod => mod.AppAdminUserViewModule), canActivate: [AuthenticationGuard] },
|
|
4447
|
+
// fallback when no prior route found
|
|
4448
|
+
{ path: '**', redirectTo: '', pathMatch: 'full' },
|
|
4449
|
+
];
|
|
4450
|
+
// @dynamic
|
|
4451
|
+
class UserRoutingProvider {
|
|
4452
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4453
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, imports: [i1$5.RouterModule], exports: [RouterModule] }); }
|
|
4454
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, imports: [RouterModule.forChild(routes$A), RouterModule] }); }
|
|
4455
|
+
}
|
|
4456
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, decorators: [{
|
|
4457
|
+
type: NgModule,
|
|
4458
|
+
args: [{
|
|
4459
|
+
imports: [RouterModule.forChild(routes$A)],
|
|
4460
|
+
exports: [RouterModule]
|
|
4461
|
+
}]
|
|
4462
|
+
}] });
|
|
4463
|
+
|
|
4464
|
+
class MaterialModule {
|
|
4465
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4466
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, exports: [MatButtonModule,
|
|
4467
|
+
MatCheckboxModule,
|
|
4468
|
+
MatCommonModule,
|
|
4469
|
+
MatDialogModule,
|
|
4470
|
+
MatFormFieldModule,
|
|
4471
|
+
MatIconModule,
|
|
4472
|
+
MatInputModule,
|
|
4473
|
+
MatLineModule,
|
|
4474
|
+
MatMenuModule,
|
|
4475
|
+
MatNativeDateModule,
|
|
4476
|
+
MatOptionModule,
|
|
4477
|
+
MatProgressSpinnerModule,
|
|
4478
|
+
MatPseudoCheckboxModule,
|
|
4479
|
+
MatRippleModule,
|
|
4480
|
+
MatSelectModule,
|
|
4481
|
+
MatSortModule,
|
|
4482
|
+
MatTableModule,
|
|
4483
|
+
MatCardModule,
|
|
4484
|
+
MatDividerModule,
|
|
4485
|
+
MatChipsModule,
|
|
4486
|
+
MatDatepickerModule,
|
|
4487
|
+
MatListModule,
|
|
4488
|
+
MatTooltipModule,
|
|
4489
|
+
MatButtonToggleModule,
|
|
4490
|
+
MatSidenavModule,
|
|
4491
|
+
MatProgressBarModule,
|
|
4492
|
+
MatSlideToggleModule,
|
|
4493
|
+
MatTabsModule] }); }
|
|
4494
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
|
|
4495
|
+
MatCheckboxModule,
|
|
4496
|
+
MatCommonModule,
|
|
4497
|
+
MatDialogModule,
|
|
4498
|
+
MatFormFieldModule,
|
|
4499
|
+
MatIconModule,
|
|
4500
|
+
MatInputModule,
|
|
4501
|
+
MatLineModule,
|
|
4502
|
+
MatMenuModule,
|
|
4503
|
+
MatNativeDateModule,
|
|
4504
|
+
MatOptionModule,
|
|
4505
|
+
MatProgressSpinnerModule,
|
|
4506
|
+
MatPseudoCheckboxModule,
|
|
4507
|
+
MatRippleModule,
|
|
4508
|
+
MatSelectModule,
|
|
4509
|
+
MatSortModule,
|
|
4510
|
+
MatTableModule,
|
|
4511
|
+
MatCardModule,
|
|
4512
|
+
MatDividerModule,
|
|
4513
|
+
MatChipsModule,
|
|
4514
|
+
MatDatepickerModule,
|
|
4515
|
+
MatListModule,
|
|
4516
|
+
MatTooltipModule,
|
|
4517
|
+
MatButtonToggleModule,
|
|
4518
|
+
MatSidenavModule,
|
|
4519
|
+
MatProgressBarModule,
|
|
4520
|
+
MatSlideToggleModule,
|
|
4521
|
+
MatTabsModule] }); }
|
|
4522
|
+
}
|
|
4523
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, decorators: [{
|
|
4524
|
+
type: NgModule,
|
|
4525
|
+
args: [{
|
|
4526
|
+
exports: [
|
|
4527
|
+
MatButtonModule,
|
|
4528
|
+
MatCheckboxModule,
|
|
4529
|
+
MatCommonModule,
|
|
4530
|
+
MatDialogModule,
|
|
4531
|
+
MatFormFieldModule,
|
|
4532
|
+
MatIconModule,
|
|
4533
|
+
MatInputModule,
|
|
4534
|
+
MatLineModule,
|
|
4535
|
+
MatMenuModule,
|
|
4536
|
+
MatNativeDateModule,
|
|
4537
|
+
MatOptionModule,
|
|
4538
|
+
MatProgressSpinnerModule,
|
|
4539
|
+
MatPseudoCheckboxModule,
|
|
4540
|
+
MatRippleModule,
|
|
4541
|
+
MatSelectModule,
|
|
4542
|
+
MatSortModule,
|
|
4543
|
+
MatTableModule,
|
|
4544
|
+
MatCardModule,
|
|
4545
|
+
MatDividerModule,
|
|
4546
|
+
MatChipsModule,
|
|
4547
|
+
MatDatepickerModule,
|
|
4548
|
+
MatListModule,
|
|
4549
|
+
MatTooltipModule,
|
|
4550
|
+
MatButtonToggleModule,
|
|
4551
|
+
MatSidenavModule,
|
|
4552
|
+
MatProgressBarModule,
|
|
4553
|
+
MatSlideToggleModule,
|
|
4554
|
+
MatTabsModule
|
|
4555
|
+
]
|
|
4556
|
+
}]
|
|
4557
|
+
}] });
|
|
4558
|
+
|
|
4559
|
+
class UserClientEnableDisableButtonModule {
|
|
4560
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserClientEnableDisableButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4561
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserClientEnableDisableButtonModule, declarations: [UserClientEnableDisableButtonComponent], imports: [CommonModule,
|
|
4562
|
+
MaterialModule,
|
|
4563
|
+
FlexLayoutModule], exports: [UserClientEnableDisableButtonComponent] }); }
|
|
4564
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserClientEnableDisableButtonModule, imports: [CommonModule,
|
|
4565
|
+
MaterialModule,
|
|
4566
|
+
FlexLayoutModule] }); }
|
|
4567
|
+
}
|
|
4568
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserClientEnableDisableButtonModule, decorators: [{
|
|
4569
|
+
type: NgModule,
|
|
4570
|
+
args: [{
|
|
4571
|
+
declarations: [UserClientEnableDisableButtonComponent],
|
|
4572
|
+
imports: [
|
|
4573
|
+
CommonModule,
|
|
4574
|
+
MaterialModule,
|
|
4575
|
+
FlexLayoutModule,
|
|
4576
|
+
],
|
|
4577
|
+
exports: [UserClientEnableDisableButtonComponent]
|
|
4578
|
+
}]
|
|
4579
|
+
}] });
|
|
4387
4580
|
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
this.config = config;
|
|
4399
|
-
this.http = http;
|
|
4400
|
-
this.dialog = dialog;
|
|
4401
|
-
this.currentUserService = currentUserService;
|
|
4402
|
-
this.UserTypeEnum = UserTypeEnum;
|
|
4403
|
-
this.currentUser = this.currentUserService.getUser();
|
|
4404
|
-
}
|
|
4405
|
-
ngOnInit() {
|
|
4406
|
-
this.route.params.subscribe(params => {
|
|
4407
|
-
if (params.id !== undefined) {
|
|
4408
|
-
this.loadUser(params.id);
|
|
4409
|
-
}
|
|
4410
|
-
});
|
|
4411
|
-
}
|
|
4412
|
-
loadUser(userId) {
|
|
4413
|
-
this.userService.getUser(userId).then((result) => {
|
|
4414
|
-
this.user = result.item;
|
|
4415
|
-
});
|
|
4416
|
-
}
|
|
4417
|
-
enableOrDisableUser(action) {
|
|
4418
|
-
this.http.patch('api/users/' + this.user.id + '/' + action, this.user).toPromise().then((res) => {
|
|
4419
|
-
this.user.user_client = res.item.user_client;
|
|
4420
|
-
});
|
|
4421
|
-
}
|
|
4422
|
-
editUser(user) {
|
|
4423
|
-
const dialogRef = this.dialog.open(UserFormComponent, {
|
|
4424
|
-
width: '700px',
|
|
4425
|
-
data: user,
|
|
4426
|
-
autoFocus: false,
|
|
4427
|
-
restoreFocus: false
|
|
4428
|
-
});
|
|
4429
|
-
dialogRef.afterClosed().subscribe(async (result) => {
|
|
4430
|
-
if (result) {
|
|
4431
|
-
this.loadUser(this.user.id);
|
|
4432
|
-
}
|
|
4433
|
-
});
|
|
4434
|
-
}
|
|
4435
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserViewComponent, deps: [{ token: UserService }, { token: i1$5.ActivatedRoute }, { token: ConfigService }, { token: HttpService }, { token: i1.MatDialog }, { token: CurrentUserService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4436
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserViewComponent, selector: "user-view", ngImport: i0, template: "<div class=\"mat-typography m-4\" *ngIf=\"user\">\n <h1 class=\"text-center\">{{user.name}}</h1>\n\n <div class=\"border\">\n <mat-tab-group>\n <mat-tab label=\"Basic Information\">\n <ng-template matTabContent>\n <div class=\"row m-4\">\n <div class=\"col-4\">\n <div class=\"bordered-section\">\n <div class=\"row\" *ngIf=\"currentUser?.user_type_id != 3\">\n <button type=\"button\" mat-icon-button (click)=\"editUser(user)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-stroked-button color=\"warn\" *ngIf=\"!user.user_client?.is_enabled\"\n (click)=\"enableOrDisableUser('enable')\">\n Enable\n </button>\n <button mat-stroked-button color=\"primary\" *ngIf=\"user.user_client?.is_enabled\"\n (click)=\"enableOrDisableUser('disable')\">Disable</button>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Name:</label>\n <div class=\"col-sm-8\">{{user?.name}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Email:</label>\n <div class=\"col-sm-8\">{{user?.email}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Type:</label>\n <div class=\"col-sm-8\">{{user?.type?.title}}</div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Status:</label>\n <div class=\"col-sm-8\">{{user?.user_client?.is_enabled ? 'Enabled' : 'Disabled' }}\n </div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Role:</label>\n <div class=\"col-sm-8\">\n <span *ngFor=\"let role of user?.roles\">\n <button class=\"btn btn-outline-dark btn-xs mb-2\">{{role?.label}}</button>\n \n </span>\n </div>\n </div>\n <div class=\"row\">\n <label class=\"col-sm-4 control-label\">Signature:</label>\n <div class=\"col-sm-8\">\n <span *ngIf=\"user?.signature\">\n <img src=\"{{user?.signature_url}}\" alt=\"\" width=\"250px\" />\n </span>\n <span *ngIf=\"!user?.signature\">\n No Signature Added\n </span>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Login History\">\n <ng-template matTabContent>\n <app-login-history-for-user [userId]=\"user?.id\"></app-login-history-for-user>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Activity Logs\">\n <ng-template matTabContent>\n <app-audit-log-list objectType=\"User\" [objectId]=\"user?.id\" [showExportButtons]=\"false\">\n </app-audit-log-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Tenants\" *ngIf=\"currentUser?.user_type_id === UserTypeEnum.ADMIN\">\n <ng-template matTabContent>\n <app-user-clients-list [user]=\"user\"></app-user-clients-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Sessions\">\n <ng-template matTabContent>\n <app-user-sessions [user]=\"user\"></app-user-sessions>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n\n</div>", styles: [".user-node .page-title{margin:20px 0 0}.user-node #information-tabs-wrapper .nav-pills .nav-link{border-radius:0;border:1px solid #007bff;border-right:none;width:190px}.user-node #information-tabs-wrapper .tab-content{padding:20px;border:1px solid #007bff;width:calc(100vw - 200px)}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9$5.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i9$5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: LoginHistoryForUserComponent, selector: "app-login-history-for-user", inputs: ["userId"] }, { kind: "component", type: AuditLogListComponent, selector: "app-audit-log-list", inputs: ["objectId", "objectType", "showFilter", "showExportButtons", "userId", "disableFilterPatchingFromUrl", "scrollContainer"] }, { kind: "component", type: UserClientsListComponent, selector: "app-user-clients-list", inputs: ["user"] }, { kind: "component", type: UserSessionsComponent, selector: "app-user-sessions", inputs: ["user"] }] }); }
|
|
4581
|
+
class UserClientsListModule {
|
|
4582
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserClientsListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4583
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserClientsListModule, declarations: [UserClientsListComponent], imports: [CommonModule,
|
|
4584
|
+
MaterialModule,
|
|
4585
|
+
FlexLayoutModule,
|
|
4586
|
+
UserClientEnableDisableButtonModule], exports: [UserClientsListComponent] }); }
|
|
4587
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserClientsListModule, imports: [CommonModule,
|
|
4588
|
+
MaterialModule,
|
|
4589
|
+
FlexLayoutModule,
|
|
4590
|
+
UserClientEnableDisableButtonModule] }); }
|
|
4437
4591
|
}
|
|
4438
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type:
|
|
4439
|
-
type:
|
|
4440
|
-
args: [{
|
|
4441
|
-
|
|
4592
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserClientsListModule, decorators: [{
|
|
4593
|
+
type: NgModule,
|
|
4594
|
+
args: [{
|
|
4595
|
+
declarations: [UserClientsListComponent],
|
|
4596
|
+
imports: [
|
|
4597
|
+
CommonModule,
|
|
4598
|
+
MaterialModule,
|
|
4599
|
+
FlexLayoutModule,
|
|
4600
|
+
UserClientEnableDisableButtonModule
|
|
4601
|
+
],
|
|
4602
|
+
exports: [UserClientsListComponent]
|
|
4603
|
+
}]
|
|
4604
|
+
}] });
|
|
4442
4605
|
|
|
4443
|
-
|
|
4444
|
-
{
|
|
4445
|
-
{
|
|
4446
|
-
|
|
4447
|
-
|
|
4448
|
-
{
|
|
4449
|
-
|
|
4450
|
-
|
|
4451
|
-
class UserRoutingProvider {
|
|
4452
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4453
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, imports: [i1$5.RouterModule], exports: [RouterModule] }); }
|
|
4454
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRoutingProvider, imports: [RouterModule.forChild(routes$A), RouterModule] }); }
|
|
4606
|
+
class UserSessionsModule {
|
|
4607
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4608
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsModule, declarations: [UserSessionsComponent], imports: [CommonModule,
|
|
4609
|
+
MaterialModule,
|
|
4610
|
+
FlexLayoutModule], exports: [UserSessionsComponent] }); }
|
|
4611
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsModule, imports: [CommonModule,
|
|
4612
|
+
MaterialModule,
|
|
4613
|
+
FlexLayoutModule] }); }
|
|
4455
4614
|
}
|
|
4456
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type:
|
|
4615
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsModule, decorators: [{
|
|
4457
4616
|
type: NgModule,
|
|
4458
4617
|
args: [{
|
|
4459
|
-
|
|
4460
|
-
|
|
4618
|
+
declarations: [UserSessionsComponent],
|
|
4619
|
+
imports: [
|
|
4620
|
+
CommonModule,
|
|
4621
|
+
MaterialModule,
|
|
4622
|
+
FlexLayoutModule,
|
|
4623
|
+
],
|
|
4624
|
+
exports: [UserSessionsComponent]
|
|
4461
4625
|
}]
|
|
4462
4626
|
}] });
|
|
4463
4627
|
|
|
@@ -5286,101 +5450,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5286
5450
|
type: Input
|
|
5287
5451
|
}] } });
|
|
5288
5452
|
|
|
5289
|
-
class MaterialModule {
|
|
5290
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
5291
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, exports: [MatButtonModule,
|
|
5292
|
-
MatCheckboxModule,
|
|
5293
|
-
MatCommonModule,
|
|
5294
|
-
MatDialogModule,
|
|
5295
|
-
MatFormFieldModule,
|
|
5296
|
-
MatIconModule,
|
|
5297
|
-
MatInputModule,
|
|
5298
|
-
MatLineModule,
|
|
5299
|
-
MatMenuModule,
|
|
5300
|
-
MatNativeDateModule,
|
|
5301
|
-
MatOptionModule,
|
|
5302
|
-
MatProgressSpinnerModule,
|
|
5303
|
-
MatPseudoCheckboxModule,
|
|
5304
|
-
MatRippleModule,
|
|
5305
|
-
MatSelectModule,
|
|
5306
|
-
MatSortModule,
|
|
5307
|
-
MatTableModule,
|
|
5308
|
-
MatCardModule,
|
|
5309
|
-
MatDividerModule,
|
|
5310
|
-
MatChipsModule,
|
|
5311
|
-
MatDatepickerModule,
|
|
5312
|
-
MatListModule,
|
|
5313
|
-
MatTooltipModule,
|
|
5314
|
-
MatButtonToggleModule,
|
|
5315
|
-
MatSidenavModule,
|
|
5316
|
-
MatProgressBarModule,
|
|
5317
|
-
MatSlideToggleModule,
|
|
5318
|
-
MatTabsModule] }); }
|
|
5319
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
|
|
5320
|
-
MatCheckboxModule,
|
|
5321
|
-
MatCommonModule,
|
|
5322
|
-
MatDialogModule,
|
|
5323
|
-
MatFormFieldModule,
|
|
5324
|
-
MatIconModule,
|
|
5325
|
-
MatInputModule,
|
|
5326
|
-
MatLineModule,
|
|
5327
|
-
MatMenuModule,
|
|
5328
|
-
MatNativeDateModule,
|
|
5329
|
-
MatOptionModule,
|
|
5330
|
-
MatProgressSpinnerModule,
|
|
5331
|
-
MatPseudoCheckboxModule,
|
|
5332
|
-
MatRippleModule,
|
|
5333
|
-
MatSelectModule,
|
|
5334
|
-
MatSortModule,
|
|
5335
|
-
MatTableModule,
|
|
5336
|
-
MatCardModule,
|
|
5337
|
-
MatDividerModule,
|
|
5338
|
-
MatChipsModule,
|
|
5339
|
-
MatDatepickerModule,
|
|
5340
|
-
MatListModule,
|
|
5341
|
-
MatTooltipModule,
|
|
5342
|
-
MatButtonToggleModule,
|
|
5343
|
-
MatSidenavModule,
|
|
5344
|
-
MatProgressBarModule,
|
|
5345
|
-
MatSlideToggleModule,
|
|
5346
|
-
MatTabsModule] }); }
|
|
5347
|
-
}
|
|
5348
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialModule, decorators: [{
|
|
5349
|
-
type: NgModule,
|
|
5350
|
-
args: [{
|
|
5351
|
-
exports: [
|
|
5352
|
-
MatButtonModule,
|
|
5353
|
-
MatCheckboxModule,
|
|
5354
|
-
MatCommonModule,
|
|
5355
|
-
MatDialogModule,
|
|
5356
|
-
MatFormFieldModule,
|
|
5357
|
-
MatIconModule,
|
|
5358
|
-
MatInputModule,
|
|
5359
|
-
MatLineModule,
|
|
5360
|
-
MatMenuModule,
|
|
5361
|
-
MatNativeDateModule,
|
|
5362
|
-
MatOptionModule,
|
|
5363
|
-
MatProgressSpinnerModule,
|
|
5364
|
-
MatPseudoCheckboxModule,
|
|
5365
|
-
MatRippleModule,
|
|
5366
|
-
MatSelectModule,
|
|
5367
|
-
MatSortModule,
|
|
5368
|
-
MatTableModule,
|
|
5369
|
-
MatCardModule,
|
|
5370
|
-
MatDividerModule,
|
|
5371
|
-
MatChipsModule,
|
|
5372
|
-
MatDatepickerModule,
|
|
5373
|
-
MatListModule,
|
|
5374
|
-
MatTooltipModule,
|
|
5375
|
-
MatButtonToggleModule,
|
|
5376
|
-
MatSidenavModule,
|
|
5377
|
-
MatProgressBarModule,
|
|
5378
|
-
MatSlideToggleModule,
|
|
5379
|
-
MatTabsModule
|
|
5380
|
-
]
|
|
5381
|
-
}]
|
|
5382
|
-
}] });
|
|
5383
|
-
|
|
5384
5453
|
class CoreModule {
|
|
5385
5454
|
constructor(parentModule) {
|
|
5386
5455
|
// Import guard
|
|
@@ -10939,16 +11008,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
10939
11008
|
}]
|
|
10940
11009
|
}] });
|
|
10941
11010
|
|
|
11011
|
+
class UserEnableButtonModule {
|
|
11012
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEnableButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11013
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserEnableButtonModule, declarations: [UserEnableButtonComponent], imports: [CommonModule,
|
|
11014
|
+
MaterialModule,
|
|
11015
|
+
FlexLayoutModule], exports: [UserEnableButtonComponent] }); }
|
|
11016
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEnableButtonModule, imports: [CommonModule,
|
|
11017
|
+
MaterialModule,
|
|
11018
|
+
FlexLayoutModule] }); }
|
|
11019
|
+
}
|
|
11020
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEnableButtonModule, decorators: [{
|
|
11021
|
+
type: NgModule,
|
|
11022
|
+
args: [{
|
|
11023
|
+
declarations: [UserEnableButtonComponent],
|
|
11024
|
+
imports: [
|
|
11025
|
+
CommonModule,
|
|
11026
|
+
MaterialModule,
|
|
11027
|
+
FlexLayoutModule,
|
|
11028
|
+
],
|
|
11029
|
+
exports: [UserEnableButtonComponent]
|
|
11030
|
+
}]
|
|
11031
|
+
}] });
|
|
11032
|
+
|
|
10942
11033
|
class UserModule {
|
|
10943
11034
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10944
11035
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserModule, declarations: [UsersViewAllComponent,
|
|
10945
11036
|
UserFormComponent,
|
|
10946
11037
|
UserExploreComponent,
|
|
10947
|
-
UserViewComponent,
|
|
10948
|
-
UserEnableButtonComponent,
|
|
10949
|
-
UserClientsListComponent,
|
|
10950
|
-
UserClientEnableDisableButtonComponent,
|
|
10951
|
-
UserSessionsComponent], imports: [CommonModule,
|
|
11038
|
+
UserViewComponent], imports: [CommonModule,
|
|
10952
11039
|
UserRoutingProvider,
|
|
10953
11040
|
MaterialModule,
|
|
10954
11041
|
FlexLayoutModule,
|
|
@@ -10964,13 +11051,14 @@ class UserModule {
|
|
|
10964
11051
|
MatProgressBarModule,
|
|
10965
11052
|
MatTableModule,
|
|
10966
11053
|
MatSortModule,
|
|
10967
|
-
DataTableModule
|
|
11054
|
+
DataTableModule,
|
|
11055
|
+
UserEnableButtonModule,
|
|
11056
|
+
UserClientsListModule,
|
|
11057
|
+
UserSessionsModule], exports: [UserViewComponent,
|
|
10968
11058
|
UsersViewAllComponent,
|
|
10969
|
-
|
|
10970
|
-
|
|
10971
|
-
|
|
10972
|
-
UserSessionsComponent,
|
|
10973
|
-
UserClientsListComponent] }); }
|
|
11059
|
+
UserEnableButtonModule,
|
|
11060
|
+
UserClientsListModule,
|
|
11061
|
+
UserSessionsModule] }); }
|
|
10974
11062
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserModule, imports: [CommonModule,
|
|
10975
11063
|
UserRoutingProvider,
|
|
10976
11064
|
MaterialModule,
|
|
@@ -10987,7 +11075,12 @@ class UserModule {
|
|
|
10987
11075
|
MatProgressBarModule,
|
|
10988
11076
|
MatTableModule,
|
|
10989
11077
|
MatSortModule,
|
|
10990
|
-
DataTableModule
|
|
11078
|
+
DataTableModule,
|
|
11079
|
+
UserEnableButtonModule,
|
|
11080
|
+
UserClientsListModule,
|
|
11081
|
+
UserSessionsModule, UserEnableButtonModule,
|
|
11082
|
+
UserClientsListModule,
|
|
11083
|
+
UserSessionsModule] }); }
|
|
10991
11084
|
}
|
|
10992
11085
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserModule, decorators: [{
|
|
10993
11086
|
type: NgModule,
|
|
@@ -11010,25 +11103,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
11010
11103
|
MatTableModule,
|
|
11011
11104
|
MatSortModule,
|
|
11012
11105
|
DataTableModule,
|
|
11106
|
+
UserEnableButtonModule,
|
|
11107
|
+
UserClientsListModule,
|
|
11108
|
+
UserSessionsModule
|
|
11013
11109
|
],
|
|
11014
11110
|
declarations: [
|
|
11015
11111
|
UsersViewAllComponent,
|
|
11016
11112
|
UserFormComponent,
|
|
11017
11113
|
UserExploreComponent,
|
|
11018
11114
|
UserViewComponent,
|
|
11019
|
-
UserEnableButtonComponent,
|
|
11020
|
-
UserClientsListComponent,
|
|
11021
|
-
UserClientEnableDisableButtonComponent,
|
|
11022
|
-
UserSessionsComponent
|
|
11023
11115
|
],
|
|
11024
11116
|
exports: [
|
|
11025
11117
|
UserViewComponent,
|
|
11026
11118
|
UsersViewAllComponent,
|
|
11027
|
-
|
|
11028
|
-
|
|
11029
|
-
|
|
11030
|
-
UserSessionsComponent,
|
|
11031
|
-
UserClientsListComponent
|
|
11119
|
+
UserEnableButtonModule,
|
|
11120
|
+
UserClientsListModule,
|
|
11121
|
+
UserSessionsModule
|
|
11032
11122
|
]
|
|
11033
11123
|
}]
|
|
11034
11124
|
}] });
|
|
@@ -12974,6 +13064,10 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
12974
13064
|
this.clientService = clientService;
|
|
12975
13065
|
this.alertService = alertService;
|
|
12976
13066
|
this.location = location;
|
|
13067
|
+
// If we are updating as a client admin, we need to pass a client object
|
|
13068
|
+
this.isAppAdmin = false;
|
|
13069
|
+
this.saved = new EventEmitter();
|
|
13070
|
+
this.cancelled = new EventEmitter();
|
|
12977
13071
|
this.errorMessages = {
|
|
12978
13072
|
name: {
|
|
12979
13073
|
required: 'The name field is required.'
|
|
@@ -12991,10 +13085,12 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
12991
13085
|
});
|
|
12992
13086
|
}
|
|
12993
13087
|
ngOnInit() {
|
|
12994
|
-
|
|
12995
|
-
|
|
12996
|
-
|
|
12997
|
-
|
|
13088
|
+
if (!this.isAppAdmin) {
|
|
13089
|
+
this.user = this.currentUserService.getUser();
|
|
13090
|
+
this.client = this.user?.client;
|
|
13091
|
+
}
|
|
13092
|
+
if (this.client) {
|
|
13093
|
+
this.form.patchValue({ ...this.client });
|
|
12998
13094
|
}
|
|
12999
13095
|
}
|
|
13000
13096
|
save() {
|
|
@@ -13005,12 +13101,19 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
13005
13101
|
}
|
|
13006
13102
|
const data = { ...this.form.value };
|
|
13007
13103
|
this.isWorking = true;
|
|
13008
|
-
this.clientService.
|
|
13009
|
-
|
|
13104
|
+
let request = this.clientService.store(data);
|
|
13105
|
+
if (data?.id) {
|
|
13106
|
+
request = this.clientService.update(data);
|
|
13107
|
+
}
|
|
13108
|
+
request.subscribe({
|
|
13109
|
+
next: (response) => {
|
|
13010
13110
|
this.isWorking = false;
|
|
13011
|
-
// update user
|
|
13012
|
-
this.currentUserService.getUserObservable(true).subscribe();
|
|
13013
13111
|
this.alertService.addAlert('The company information saved successfully!', 'success');
|
|
13112
|
+
this.saved.emit(response?.item);
|
|
13113
|
+
if (this.isAppAdmin) {
|
|
13114
|
+
// update user
|
|
13115
|
+
this.currentUserService.getUserObservable(true).subscribe();
|
|
13116
|
+
}
|
|
13014
13117
|
},
|
|
13015
13118
|
error: () => (this.isWorking = false)
|
|
13016
13119
|
});
|
|
@@ -13021,10 +13124,15 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
13021
13124
|
}
|
|
13022
13125
|
}
|
|
13023
13126
|
redirectBack() {
|
|
13024
|
-
this.
|
|
13127
|
+
if (this.isAppAdmin) {
|
|
13128
|
+
this.cancelled.emit();
|
|
13129
|
+
}
|
|
13130
|
+
else {
|
|
13131
|
+
this.location.back();
|
|
13132
|
+
}
|
|
13025
13133
|
}
|
|
13026
13134
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CompanyInformationComponent, deps: [{ token: FormValidatorService }, { token: i1$4.FormBuilder }, { token: CurrentUserService }, { token: ClientService }, { token: AlertService }, { token: i2$1.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13027
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CompanyInformationComponent, isStandalone: true, selector: "app-company-information", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex justify-content-center align-items-center\">\n <mat-card style=\"width: 50%\">\n <mat-card-content>\n <mat-card-title>Company Information</mat-card-title>\n </mat-card-content>\n <mat-card-content class=\"mt-3\">\n <
|
|
13135
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CompanyInformationComponent, isStandalone: true, selector: "app-company-information", inputs: { client: "client", isAppAdmin: "isAppAdmin" }, outputs: { saved: "saved", cancelled: "cancelled" }, usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"!isAppAdmin\">\n <mat-card style=\"width: 50%\">\n <mat-card-content>\n <mat-card-title>Company Information</mat-card-title>\n </mat-card-content>\n <mat-card-content class=\"mt-3\">\n <ng-container >\n <ng-container *ngTemplateOutlet=\"tenantForm\"></ng-container>\n </ng-container>\n </mat-card-content>\n </mat-card>\n</div>\n\n<ng-container *ngIf=\"isAppAdmin\">\n <ng-container *ngTemplateOutlet=\"tenantForm\"></ng-container>\n</ng-container>\n\n<ng-template #tenantForm>\n <h4 class=\"fw-bold\">{{ client?.id ? 'Edit' : 'Create' }} Tenant</h4>\n <form [formGroup]=\"form\" class=\"d-flex flex-wrap justify-content-start align-items-center gap-2\" (submit)=\"save()\">\n <mat-form-field style=\"width: calc(100%)\">\n <mat-label>Name</mat-label>\n <input matInput formControlName=\"name\">\n <mat-error *ngIf=\"isFieldValid('name')\">\n {{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(50% - 0.5rem)\">\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\">\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(50%)\">\n <mat-label>Phone</mat-label>\n <input matInput formControlName=\"phone\">\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(100%)\">\n <mat-label>Address</mat-label>\n <textarea matInput formControlName=\"address\" rows=\"3\"></textarea>\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(100%)\">\n <mat-label>TIN</mat-label>\n <input matInput formControlName=\"tin\">\n </mat-form-field>\n\n <div style=\"width: calc(50% - 0.5rem)\">\n <p>Logo</p>\n <app-file-upload-button\n *ngIf=\"!form?.value?.logo\"\n [config]=\"{ fileId: 'client-logo-' + this.form.value?.id, accept: 'image/*'}\"\n (uploaded)=\"onFileUploaded($event, 'logo')\"\n ></app-file-upload-button>\n <app-image-preview\n *ngIf=\"form.value?.logo\"\n [path]=\"form.value?.logo\"\n (removed)=\"form.get('logo')?.setValue('')\"\n ></app-image-preview>\n </div>\n\n <div style=\"width: calc(50% - 0.5rem)\">\n <p>Letterhead Image</p>\n <app-file-upload-button\n *ngIf=\"!form.value?.letterhead_image\"\n [config]=\"{ fileId: 'client-letterhead-' + this.form.value?.id, accept: 'image/*'}\"\n (uploaded)=\"onFileUploaded($event, 'letterhead_image')\"\n ></app-file-upload-button>\n <app-image-preview\n *ngIf=\"form.value?.letterhead_image\"\n [path]=\"form.value?.letterhead_image\"\n (removed)=\"form.get('letterhead_image')?.setValue('')\"\n ></app-image-preview>\n </div>\n\n <div style=\"width: calc(100%)\" class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" type=\"submit\">\n Save\n </button>\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"redirectBack()\">\n Cancel\n </button>\n </div>\n </form>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FileUploadButtonComponent, selector: "app-file-upload-button", inputs: ["config"], outputs: ["uploaded"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: ImagePreviewComponent, selector: "app-image-preview", inputs: ["path", "height"], outputs: ["removed"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
13028
13136
|
}
|
|
13029
13137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CompanyInformationComponent, decorators: [{
|
|
13030
13138
|
type: Component,
|
|
@@ -13041,33 +13149,85 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
13041
13149
|
NgIf,
|
|
13042
13150
|
MatError,
|
|
13043
13151
|
ImagePreviewComponent,
|
|
13044
|
-
|
|
13045
|
-
}]
|
|
13152
|
+
NgTemplateOutlet,
|
|
13153
|
+
], template: "<div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"!isAppAdmin\">\n <mat-card style=\"width: 50%\">\n <mat-card-content>\n <mat-card-title>Company Information</mat-card-title>\n </mat-card-content>\n <mat-card-content class=\"mt-3\">\n <ng-container >\n <ng-container *ngTemplateOutlet=\"tenantForm\"></ng-container>\n </ng-container>\n </mat-card-content>\n </mat-card>\n</div>\n\n<ng-container *ngIf=\"isAppAdmin\">\n <ng-container *ngTemplateOutlet=\"tenantForm\"></ng-container>\n</ng-container>\n\n<ng-template #tenantForm>\n <h4 class=\"fw-bold\">{{ client?.id ? 'Edit' : 'Create' }} Tenant</h4>\n <form [formGroup]=\"form\" class=\"d-flex flex-wrap justify-content-start align-items-center gap-2\" (submit)=\"save()\">\n <mat-form-field style=\"width: calc(100%)\">\n <mat-label>Name</mat-label>\n <input matInput formControlName=\"name\">\n <mat-error *ngIf=\"isFieldValid('name')\">\n {{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(50% - 0.5rem)\">\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\">\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(50%)\">\n <mat-label>Phone</mat-label>\n <input matInput formControlName=\"phone\">\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(100%)\">\n <mat-label>Address</mat-label>\n <textarea matInput formControlName=\"address\" rows=\"3\"></textarea>\n </mat-form-field>\n\n <mat-form-field style=\"width: calc(100%)\">\n <mat-label>TIN</mat-label>\n <input matInput formControlName=\"tin\">\n </mat-form-field>\n\n <div style=\"width: calc(50% - 0.5rem)\">\n <p>Logo</p>\n <app-file-upload-button\n *ngIf=\"!form?.value?.logo\"\n [config]=\"{ fileId: 'client-logo-' + this.form.value?.id, accept: 'image/*'}\"\n (uploaded)=\"onFileUploaded($event, 'logo')\"\n ></app-file-upload-button>\n <app-image-preview\n *ngIf=\"form.value?.logo\"\n [path]=\"form.value?.logo\"\n (removed)=\"form.get('logo')?.setValue('')\"\n ></app-image-preview>\n </div>\n\n <div style=\"width: calc(50% - 0.5rem)\">\n <p>Letterhead Image</p>\n <app-file-upload-button\n *ngIf=\"!form.value?.letterhead_image\"\n [config]=\"{ fileId: 'client-letterhead-' + this.form.value?.id, accept: 'image/*'}\"\n (uploaded)=\"onFileUploaded($event, 'letterhead_image')\"\n ></app-file-upload-button>\n <app-image-preview\n *ngIf=\"form.value?.letterhead_image\"\n [path]=\"form.value?.letterhead_image\"\n (removed)=\"form.get('letterhead_image')?.setValue('')\"\n ></app-image-preview>\n </div>\n\n <div style=\"width: calc(100%)\" class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" type=\"submit\">\n Save\n </button>\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"redirectBack()\">\n Cancel\n </button>\n </div>\n </form>\n</ng-template>\n" }]
|
|
13154
|
+
}], ctorParameters: () => [{ type: FormValidatorService }, { type: i1$4.FormBuilder }, { type: CurrentUserService }, { type: ClientService }, { type: AlertService }, { type: i2$1.Location }], propDecorators: { client: [{
|
|
13155
|
+
type: Input
|
|
13156
|
+
}], isAppAdmin: [{
|
|
13157
|
+
type: Input
|
|
13158
|
+
}], saved: [{
|
|
13159
|
+
type: Output
|
|
13160
|
+
}], cancelled: [{
|
|
13161
|
+
type: Output
|
|
13162
|
+
}] } });
|
|
13163
|
+
|
|
13164
|
+
class TenantFormButtonComponent {
|
|
13165
|
+
constructor(matDialog) {
|
|
13166
|
+
this.matDialog = matDialog;
|
|
13167
|
+
this.saved = new EventEmitter();
|
|
13168
|
+
this.isAppAdmin = false;
|
|
13169
|
+
}
|
|
13170
|
+
showForm(templateRef) {
|
|
13171
|
+
this.matDialog.open(templateRef, { width: '600px' });
|
|
13172
|
+
}
|
|
13173
|
+
onSaved(client) {
|
|
13174
|
+
this.saved.emit(client);
|
|
13175
|
+
this.matDialog.closeAll();
|
|
13176
|
+
}
|
|
13177
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantFormButtonComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13178
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TenantFormButtonComponent, isStandalone: true, selector: "app-tenant-form-button", inputs: { client: "client", isAppAdmin: "isAppAdmin" }, outputs: { saved: "saved" }, ngImport: i0, template: "<mat-icon class=\"cursor-pointer\" (click)=\"showForm(formTemplate)\">{{ client ? 'edit' : 'add' }}</mat-icon>\n\n<ng-template #formTemplate>\n <div mat-dialog-content>\n <app-company-information [client]=\"client\" [isAppAdmin]=\"isAppAdmin\" (saved)=\"onSaved($event)\"\n (cancelled)=\"matDialog.closeAll()\"></app-company-information>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MaterialModule }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CompanyInformationComponent, selector: "app-company-information", inputs: ["client", "isAppAdmin"], outputs: ["saved", "cancelled"] }] }); }
|
|
13179
|
+
}
|
|
13180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantFormButtonComponent, decorators: [{
|
|
13181
|
+
type: Component,
|
|
13182
|
+
args: [{ selector: 'app-tenant-form-button', standalone: true, imports: [
|
|
13183
|
+
MaterialModule,
|
|
13184
|
+
CompanyInformationComponent
|
|
13185
|
+
], template: "<mat-icon class=\"cursor-pointer\" (click)=\"showForm(formTemplate)\">{{ client ? 'edit' : 'add' }}</mat-icon>\n\n<ng-template #formTemplate>\n <div mat-dialog-content>\n <app-company-information [client]=\"client\" [isAppAdmin]=\"isAppAdmin\" (saved)=\"onSaved($event)\"\n (cancelled)=\"matDialog.closeAll()\"></app-company-information>\n </div>\n</ng-template>\n" }]
|
|
13186
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { client: [{
|
|
13187
|
+
type: Input
|
|
13188
|
+
}], saved: [{
|
|
13189
|
+
type: Output
|
|
13190
|
+
}], isAppAdmin: [{
|
|
13191
|
+
type: Input
|
|
13192
|
+
}] } });
|
|
13046
13193
|
|
|
13047
13194
|
class CompanyInfoDisplayComponent {
|
|
13048
13195
|
constructor(currentUserService) {
|
|
13049
13196
|
this.currentUserService = currentUserService;
|
|
13050
13197
|
this.forceReload = true;
|
|
13198
|
+
this.isEditAllowed = false;
|
|
13199
|
+
this.isAppAdmin = false;
|
|
13051
13200
|
}
|
|
13052
13201
|
ngOnInit() {
|
|
13202
|
+
this.loadData();
|
|
13203
|
+
}
|
|
13204
|
+
loadData() {
|
|
13053
13205
|
if (this.forceReload) {
|
|
13054
13206
|
this.currentUserService.getUserObservable(true).subscribe((user) => {
|
|
13055
13207
|
this.client = user?.client;
|
|
13056
13208
|
});
|
|
13057
13209
|
}
|
|
13058
13210
|
}
|
|
13211
|
+
onSaved(client) {
|
|
13212
|
+
this.client = client;
|
|
13213
|
+
}
|
|
13059
13214
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CompanyInfoDisplayComponent, deps: [{ token: CurrentUserService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13060
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CompanyInfoDisplayComponent, isStandalone: true, selector: "app-company-info-display", inputs: { client: "client", forceReload: "forceReload" }, ngImport: i0, template: "<div *ngIf=\"client\" class=\"d-flex justify-content-start align-items-start gap-2\">\n <img *ngIf=\"client?.logo\" [src]=\"client?.logo\" class=\"img img-thumbnail\" style=\"max-height: 75px\" alt=\"\">\n <div>\n <h3 class=\"text-dark mb-1\">{{ client?.name }}</h3>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.address\">\n {{ client?.address }}\n </p>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.phone\">\n {{ client?.phone }}\n </p>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.email\">\n {{ client?.email }}\n </p>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
13215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CompanyInfoDisplayComponent, isStandalone: true, selector: "app-company-info-display", inputs: { client: "client", forceReload: "forceReload", isEditAllowed: "isEditAllowed", isAppAdmin: "isAppAdmin" }, ngImport: i0, template: "<div *ngIf=\"client\" class=\"d-flex justify-content-start align-items-start gap-2\">\n <img *ngIf=\"client?.logo\" [src]=\"client?.logo\" class=\"img img-thumbnail\" style=\"max-height: 75px\" alt=\"\">\n <div class=\"w-100\">\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <h3 class=\"text-dark mb-1\">{{ client?.name }}</h3>\n <app-tenant-form-button (saved)=\"onSaved($event)\" *ngIf=\"isEditAllowed\" [client]=\"client\" [isAppAdmin]=\"isAppAdmin\">\n </app-tenant-form-button>\n </div>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.address\">\n {{ client?.address }}\n </p>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.phone\">\n {{ client?.phone }}\n </p>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.email\">\n {{ client?.email }}\n </p>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TenantFormButtonComponent, selector: "app-tenant-form-button", inputs: ["client", "isAppAdmin"], outputs: ["saved"] }] }); }
|
|
13061
13216
|
}
|
|
13062
13217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CompanyInfoDisplayComponent, decorators: [{
|
|
13063
13218
|
type: Component,
|
|
13064
13219
|
args: [{ selector: 'app-company-info-display', standalone: true, imports: [
|
|
13065
|
-
NgIf
|
|
13066
|
-
|
|
13220
|
+
NgIf,
|
|
13221
|
+
TenantFormButtonComponent
|
|
13222
|
+
], template: "<div *ngIf=\"client\" class=\"d-flex justify-content-start align-items-start gap-2\">\n <img *ngIf=\"client?.logo\" [src]=\"client?.logo\" class=\"img img-thumbnail\" style=\"max-height: 75px\" alt=\"\">\n <div class=\"w-100\">\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <h3 class=\"text-dark mb-1\">{{ client?.name }}</h3>\n <app-tenant-form-button (saved)=\"onSaved($event)\" *ngIf=\"isEditAllowed\" [client]=\"client\" [isAppAdmin]=\"isAppAdmin\">\n </app-tenant-form-button>\n </div>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.address\">\n {{ client?.address }}\n </p>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.phone\">\n {{ client?.phone }}\n </p>\n <p class=\"mb-1 text-secondary\" *ngIf=\"client?.email\">\n {{ client?.email }}\n </p>\n </div>\n</div>\n" }]
|
|
13067
13223
|
}], ctorParameters: () => [{ type: CurrentUserService }], propDecorators: { client: [{
|
|
13068
13224
|
type: Input
|
|
13069
13225
|
}], forceReload: [{
|
|
13070
13226
|
type: Input
|
|
13227
|
+
}], isEditAllowed: [{
|
|
13228
|
+
type: Input
|
|
13229
|
+
}], isAppAdmin: [{
|
|
13230
|
+
type: Input
|
|
13071
13231
|
}] } });
|
|
13072
13232
|
|
|
13073
13233
|
class TechlifyAppService extends TechlifyServiceBaseClass {
|
|
@@ -13158,15 +13318,16 @@ class TenantListWidgetComponent extends TechlifyListingControllerInterface {
|
|
|
13158
13318
|
});
|
|
13159
13319
|
}
|
|
13160
13320
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantListWidgetComponent, deps: [{ token: ClientService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13161
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TenantListWidgetComponent, isStandalone: true, selector: "app-tenant-list-widget", usesInheritance: true, ngImport: i0, template: "<mat-card>\n <mat-card-content>\n <mat-card-title>Tenants</mat-card-title>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"Name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.name }}</td>\n </ng-container>\n\n <!-- Users Column -->\n <ng-container matColumnDef=\"Users\">\n <th mat-header-cell *matHeaderCellDef> Users </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.users_count }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"['/app-admin/tenants', element?.id, 'view']\">\n visibility\n </mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i13.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i13.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i13.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i13.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i13.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i13.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i13.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i13.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i13.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
13321
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TenantListWidgetComponent, isStandalone: true, selector: "app-tenant-list-widget", usesInheritance: true, ngImport: i0, template: "<mat-card>\n <mat-card-content>\n <mat-card-title class=\"d-flex justify-content-start align-items-center gap-2\">\n <h4 class=\"mb-0\">Tenants</h4>\n <app-tenant-form-button [isAppAdmin]=\"true\" class=\"mt-2\" (saved)=\"reload()\">\n </app-tenant-form-button>\n </mat-card-title>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"Name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.name }}</td>\n </ng-container>\n\n <!-- Users Column -->\n <ng-container matColumnDef=\"Users\">\n <th mat-header-cell *matHeaderCellDef> Users </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.users_count }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"['/app-admin/tenants', element?.id, 'view']\">\n visibility\n </mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i13.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i13.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i13.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i13.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i13.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i13.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i13.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i13.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i13.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: TenantFormButtonComponent, selector: "app-tenant-form-button", inputs: ["client", "isAppAdmin"], outputs: ["saved"] }] }); }
|
|
13162
13322
|
}
|
|
13163
13323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantListWidgetComponent, decorators: [{
|
|
13164
13324
|
type: Component,
|
|
13165
13325
|
args: [{ selector: 'app-tenant-list-widget', standalone: true, imports: [
|
|
13166
13326
|
MaterialModule,
|
|
13167
13327
|
NgIf,
|
|
13168
|
-
RouterLink
|
|
13169
|
-
|
|
13328
|
+
RouterLink,
|
|
13329
|
+
TenantFormButtonComponent
|
|
13330
|
+
], template: "<mat-card>\n <mat-card-content>\n <mat-card-title class=\"d-flex justify-content-start align-items-center gap-2\">\n <h4 class=\"mb-0\">Tenants</h4>\n <app-tenant-form-button [isAppAdmin]=\"true\" class=\"mt-2\" (saved)=\"reload()\">\n </app-tenant-form-button>\n </mat-card-title>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"Name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.name }}</td>\n </ng-container>\n\n <!-- Users Column -->\n <ng-container matColumnDef=\"Users\">\n <th mat-header-cell *matHeaderCellDef> Users </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.users_count }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"['/app-admin/tenants', element?.id, 'view']\">\n visibility\n </mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n" }]
|
|
13170
13331
|
}], ctorParameters: () => [{ type: ClientService }] });
|
|
13171
13332
|
|
|
13172
13333
|
class AppAdminHomeComponent {
|
|
@@ -13348,7 +13509,8 @@ class AppAdminUserViewModule {
|
|
|
13348
13509
|
LoginHistoryForUserModule,
|
|
13349
13510
|
AuditLogListModule,
|
|
13350
13511
|
AppAdminUserViewRoutingProvider,
|
|
13351
|
-
|
|
13512
|
+
UserClientsListModule,
|
|
13513
|
+
UserSessionsModule], exports: [AppAdminUserViewComponent] }); }
|
|
13352
13514
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppAdminUserViewModule, imports: [CommonModule,
|
|
13353
13515
|
MaterialModule,
|
|
13354
13516
|
FlexLayoutModule,
|
|
@@ -13357,7 +13519,8 @@ class AppAdminUserViewModule {
|
|
|
13357
13519
|
LoginHistoryForUserModule,
|
|
13358
13520
|
AuditLogListModule,
|
|
13359
13521
|
AppAdminUserViewRoutingProvider,
|
|
13360
|
-
|
|
13522
|
+
UserClientsListModule,
|
|
13523
|
+
UserSessionsModule] }); }
|
|
13361
13524
|
}
|
|
13362
13525
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppAdminUserViewModule, decorators: [{
|
|
13363
13526
|
type: NgModule,
|
|
@@ -13371,7 +13534,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
13371
13534
|
LoginHistoryForUserModule,
|
|
13372
13535
|
AuditLogListModule,
|
|
13373
13536
|
AppAdminUserViewRoutingProvider,
|
|
13374
|
-
|
|
13537
|
+
UserClientsListModule,
|
|
13538
|
+
UserSessionsModule
|
|
13375
13539
|
],
|
|
13376
13540
|
declarations: [
|
|
13377
13541
|
AppAdminUserViewComponent
|
|
@@ -13395,5 +13559,5 @@ var appAdminUserView_module = /*#__PURE__*/Object.freeze({
|
|
|
13395
13559
|
* Generated bundle index. Do not edit.
|
|
13396
13560
|
*/
|
|
13397
13561
|
|
|
13398
|
-
export { AccessControlConfigModule, ActionPopup, ActionPopupComponent, ActionPopupModule, AlertService, ApiPrefixInterceptor, AppAdminHomeComponent, AppAdminModule, AppAdminUserViewComponent, AppAdminUserViewModule, AppSwitcherComponent, AuditLogForModelComponent, AuditLogForModelModule, AuditLogForModelRoutingModule, AuditLogListComponent, AuditLogListFilterComponent, AuditLogListFilterModule, AuditLogListFilterRoutingModule, AuditLogListModule, AuditLogListRoutingModule, AuditLogModule, AuditLogRoutingModule, AuditLogViewComponent, AuditLogViewModelComponent, AuditLogViewModelModule, AuditLogViewModelRoutingModule, AuditLogViewModule, AuditLogViewRoutingModule, AuditLogsViewModelComponent, AuditLogsViewModelModule, AuditLogsViewModelRoutingModule, AuthenticationGuard, AuthenticationService, CacheInterceptor, ChangePasswordModule, ClientService, ColumnConfig, ColumnSelectorComponent, ColumnSelectorModule, CommentFormComponent, CompanyInfoDisplayComponent, CompanyInformationComponent, ConfigService, CoreModule, CredentialsService, CurrentUserService, DEFAULT_SELECTED_VALUE, DataManager, DataTable, DataTableComponent, DataTableModule, DateUtils, DateValidator, DocumentViewerComponent, DocumentViewerModule, EmailSubscriptionForUserComponent, EmailSubscriptionForUserModule, EmailSubscriptionForUserRoutingModule, EmailSubscriptionModule, EmailSubscriptionRoutingModule, EmailSubscriptionTypeFormComponent, EmailSubscriptionTypeFormModule, EmailSubscriptionTypeFormRoutingModule, EmailSubscriptionTypeListComponent, EmailSubscriptionTypeListModule, EmailSubscriptionTypeListRoutingModule, EmailSubscriptionTypeModule, EmailSubscriptionTypeRoutingModule, EmailSubscriptionUserFormComponent, EmailSubscriptionUserFormModule, EmailSubscriptionUserFormRoutingModule, EmailSubscriptionUserListComponent, EmailSubscriptionUserListFilterComponent, EmailSubscriptionUserListFilterModule, EmailSubscriptionUserListFilterRoutingModule, EmailSubscriptionUserListModule, EmailSubscriptionUserListRoutingModule, EmailSubscriptionUserModule, EmailSubscriptionUserRoutingModule, EntityFileFormComponent, EntityFileService, EntityFilesViewAllComponent, EntityFilesViewAllModule, ErrorHandlerInterceptor, ErrorHandlerService, ErrorSnackComponent, ExportExcelButtonComponent, ExportExcelModule, FileDragdropUploaderComponent, FileDragdropUploaderModule, FileDropperComponent, FileDropperConfig, FileDropperModule, FilterService, ForgotPasswordComponent, ForgotPasswordModule, ForgotPasswordRoutingModule, FormValidatorService, HTTP_DYNAMIC_INTERCEPTORS, HttpCacheService, HttpService, ImportCsvComponent, ImportCsvModule, LoaderComponent, LoaderModule, LogLevel, Logger, LoginComponent, LoginFormFieldsComponent, LoginHistoryForUserComponent, LoginHistoryForUserModule, LoginHistoryForUserRoutingModule, LoginModule, LoginRoutingModule, MaterialModule, MultiUserConfig, NgxTechlifyUsersModule, NoteFormComponent, NoteListComponent, NoteModule, NumItemsSelector, NumberInputButtonComponent, NumberInputButtonModule, NumberSelector, PageEvent, Permission, PermissionModule, PermissionRoutingProvider, PermissionsManagementComponent, ProfileEditComponent, ProfileModule, ProfileRoutingModule, ReadMoreComponent, ReadMoreModule, RequestHelperService, ResetPasswordComponent, ResetPasswordModule, ResetPasswordRoutingModule, ResetPasswordService, RestrictorTypeSelectorComponent, RestrictorTypeSelectorModule, RestrictorsModule, Role, RoleFormButtonComponent, RoleFormComponent, RoleModule, RoleRoutingProvider, RoleService, RolesViewAllComponent, RouteReusableStrategy, SearchableSelectorComponent, SearchableSelectorModule, SignUpComponent, SignupModule, SignupRoutingModule, SnackModule, StorageService, SuccessSnackComponent, TechlifyCompanySwitcherComponent, TechlifyCompanySwitcherModule, TechlifyConfig, TechlifyFeatureEnabledDirective, TechlifyFeatureListingComponent, TechlifyFeatureModule, TechlifyFeatureRoutes, TechlifyFormComponentInterface, TechlifyListingControllerInterface, TechlifyNotificationForUserComponent, TechlifyNotificationForUserModule, TechlifyNotificationForUserRoutingModule, TechlifyNotificationModule, TechlifyNotificationRoutingModule, TechlifyServiceBaseClass, TechlifyTaggerTagFormConfigModel, TechlifyTaggerTagFormFieldComponent, TechlifyTaggerTagFormFieldModule, TechlifyTaggerTagSelectorComponent, TechlifyTaggerTagSelectorModule, TechlifyUpdateHistoryModule, TechlifyUpdateModule, TechlifyUpdateService, TechlifyUpdatesTeaserComponent, TechlifyUpdatesTeaserModule, TenantListWidgetComponent, Timeline, TimelineFilterComponent, TimelineFilterModule, TokenInterceptor, UpdateNotifierComponent, UpdateNotifierModule, User, UserClientEnableDisableButtonComponent, UserClientsListComponent, UserConfig, UserConfigService, UserDataService, UserEnableButtonComponent, UserExploreComponent, UserFormComponent, UserListPageConfig, UserMenuComponent, UserMenuModule, UserModule, UserRoutingProvider, UserSelectorComponent, UserSelectorModule, UserService, UserSessionsComponent, UserViewComponent, UsersViewAllComponent, UtilityModule, ViewerConfig, WrapPipe, calculateTimeline, esfur, estlr, esulr };
|
|
13562
|
+
export { AccessControlConfigModule, ActionPopup, ActionPopupComponent, ActionPopupModule, AlertService, ApiPrefixInterceptor, AppAdminHomeComponent, AppAdminModule, AppAdminUserViewComponent, AppAdminUserViewModule, AppSwitcherComponent, AuditLogForModelComponent, AuditLogForModelModule, AuditLogForModelRoutingModule, AuditLogListComponent, AuditLogListFilterComponent, AuditLogListFilterModule, AuditLogListFilterRoutingModule, AuditLogListModule, AuditLogListRoutingModule, AuditLogModule, AuditLogRoutingModule, AuditLogViewComponent, AuditLogViewModelComponent, AuditLogViewModelModule, AuditLogViewModelRoutingModule, AuditLogViewModule, AuditLogViewRoutingModule, AuditLogsViewModelComponent, AuditLogsViewModelModule, AuditLogsViewModelRoutingModule, AuthenticationGuard, AuthenticationService, CacheInterceptor, ChangePasswordModule, ClientService, ColumnConfig, ColumnSelectorComponent, ColumnSelectorModule, CommentFormComponent, CompanyInfoDisplayComponent, CompanyInformationComponent, ConfigService, CoreModule, CredentialsService, CurrentUserService, DEFAULT_SELECTED_VALUE, DataManager, DataTable, DataTableComponent, DataTableModule, DateUtils, DateValidator, DocumentViewerComponent, DocumentViewerModule, EmailSubscriptionForUserComponent, EmailSubscriptionForUserModule, EmailSubscriptionForUserRoutingModule, EmailSubscriptionModule, EmailSubscriptionRoutingModule, EmailSubscriptionTypeFormComponent, EmailSubscriptionTypeFormModule, EmailSubscriptionTypeFormRoutingModule, EmailSubscriptionTypeListComponent, EmailSubscriptionTypeListModule, EmailSubscriptionTypeListRoutingModule, EmailSubscriptionTypeModule, EmailSubscriptionTypeRoutingModule, EmailSubscriptionUserFormComponent, EmailSubscriptionUserFormModule, EmailSubscriptionUserFormRoutingModule, EmailSubscriptionUserListComponent, EmailSubscriptionUserListFilterComponent, EmailSubscriptionUserListFilterModule, EmailSubscriptionUserListFilterRoutingModule, EmailSubscriptionUserListModule, EmailSubscriptionUserListRoutingModule, EmailSubscriptionUserModule, EmailSubscriptionUserRoutingModule, EntityFileFormComponent, EntityFileService, EntityFilesViewAllComponent, EntityFilesViewAllModule, ErrorHandlerInterceptor, ErrorHandlerService, ErrorSnackComponent, ExportExcelButtonComponent, ExportExcelModule, FileDragdropUploaderComponent, FileDragdropUploaderModule, FileDropperComponent, FileDropperConfig, FileDropperModule, FilterService, ForgotPasswordComponent, ForgotPasswordModule, ForgotPasswordRoutingModule, FormValidatorService, HTTP_DYNAMIC_INTERCEPTORS, HttpCacheService, HttpService, ImportCsvComponent, ImportCsvModule, LoaderComponent, LoaderModule, LogLevel, Logger, LoginComponent, LoginFormFieldsComponent, LoginHistoryForUserComponent, LoginHistoryForUserModule, LoginHistoryForUserRoutingModule, LoginModule, LoginRoutingModule, MaterialModule, MultiUserConfig, NgxTechlifyUsersModule, NoteFormComponent, NoteListComponent, NoteModule, NumItemsSelector, NumberInputButtonComponent, NumberInputButtonModule, NumberSelector, PageEvent, Permission, PermissionModule, PermissionRoutingProvider, PermissionsManagementComponent, ProfileEditComponent, ProfileModule, ProfileRoutingModule, ReadMoreComponent, ReadMoreModule, RequestHelperService, ResetPasswordComponent, ResetPasswordModule, ResetPasswordRoutingModule, ResetPasswordService, RestrictorTypeSelectorComponent, RestrictorTypeSelectorModule, RestrictorsModule, Role, RoleFormButtonComponent, RoleFormComponent, RoleModule, RoleRoutingProvider, RoleService, RolesViewAllComponent, RouteReusableStrategy, SearchableSelectorComponent, SearchableSelectorModule, SignUpComponent, SignupModule, SignupRoutingModule, SnackModule, StorageService, SuccessSnackComponent, TechlifyCompanySwitcherComponent, TechlifyCompanySwitcherModule, TechlifyConfig, TechlifyFeatureEnabledDirective, TechlifyFeatureListingComponent, TechlifyFeatureModule, TechlifyFeatureRoutes, TechlifyFormComponentInterface, TechlifyListingControllerInterface, TechlifyNotificationForUserComponent, TechlifyNotificationForUserModule, TechlifyNotificationForUserRoutingModule, TechlifyNotificationModule, TechlifyNotificationRoutingModule, TechlifyServiceBaseClass, TechlifyTaggerTagFormConfigModel, TechlifyTaggerTagFormFieldComponent, TechlifyTaggerTagFormFieldModule, TechlifyTaggerTagSelectorComponent, TechlifyTaggerTagSelectorModule, TechlifyUpdateHistoryModule, TechlifyUpdateModule, TechlifyUpdateService, TechlifyUpdatesTeaserComponent, TechlifyUpdatesTeaserModule, TenantFormButtonComponent, TenantListWidgetComponent, Timeline, TimelineFilterComponent, TimelineFilterModule, TokenInterceptor, UpdateNotifierComponent, UpdateNotifierModule, User, UserClientEnableDisableButtonComponent, UserClientEnableDisableButtonModule, UserClientsListComponent, UserClientsListModule, UserConfig, UserConfigService, UserDataService, UserEnableButtonComponent, UserEnableButtonModule, UserExploreComponent, UserFormComponent, UserListPageConfig, UserMenuComponent, UserMenuModule, UserModule, UserRoutingProvider, UserSelectorComponent, UserSelectorModule, UserService, UserSessionsComponent, UserSessionsModule, UserViewComponent, UsersViewAllComponent, UtilityModule, ViewerConfig, WrapPipe, calculateTimeline, esfur, estlr, esulr };
|
|
13399
13563
|
//# sourceMappingURL=ngx-techlify-core.mjs.map
|