ngx-techlify-core 18.18.1 → 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/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-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 +21 -24
- 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 +2 -1
- package/fesm2022/ngx-techlify-core.mjs +551 -410
- 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-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 +1 -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';
|
|
@@ -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
|
|
@@ -10966,10 +11035,7 @@ class UserModule {
|
|
|
10966
11035
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserModule, declarations: [UsersViewAllComponent,
|
|
10967
11036
|
UserFormComponent,
|
|
10968
11037
|
UserExploreComponent,
|
|
10969
|
-
UserViewComponent,
|
|
10970
|
-
UserClientsListComponent,
|
|
10971
|
-
UserClientEnableDisableButtonComponent,
|
|
10972
|
-
UserSessionsComponent], imports: [CommonModule,
|
|
11038
|
+
UserViewComponent], imports: [CommonModule,
|
|
10973
11039
|
UserRoutingProvider,
|
|
10974
11040
|
MaterialModule,
|
|
10975
11041
|
FlexLayoutModule,
|
|
@@ -10986,13 +11052,13 @@ class UserModule {
|
|
|
10986
11052
|
MatTableModule,
|
|
10987
11053
|
MatSortModule,
|
|
10988
11054
|
DataTableModule,
|
|
10989
|
-
UserEnableButtonModule
|
|
11055
|
+
UserEnableButtonModule,
|
|
11056
|
+
UserClientsListModule,
|
|
11057
|
+
UserSessionsModule], exports: [UserViewComponent,
|
|
10990
11058
|
UsersViewAllComponent,
|
|
10991
|
-
|
|
10992
|
-
|
|
10993
|
-
|
|
10994
|
-
UserClientsListComponent,
|
|
10995
|
-
UserEnableButtonModule] }); }
|
|
11059
|
+
UserEnableButtonModule,
|
|
11060
|
+
UserClientsListModule,
|
|
11061
|
+
UserSessionsModule] }); }
|
|
10996
11062
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserModule, imports: [CommonModule,
|
|
10997
11063
|
UserRoutingProvider,
|
|
10998
11064
|
MaterialModule,
|
|
@@ -11010,7 +11076,11 @@ class UserModule {
|
|
|
11010
11076
|
MatTableModule,
|
|
11011
11077
|
MatSortModule,
|
|
11012
11078
|
DataTableModule,
|
|
11013
|
-
UserEnableButtonModule,
|
|
11079
|
+
UserEnableButtonModule,
|
|
11080
|
+
UserClientsListModule,
|
|
11081
|
+
UserSessionsModule, UserEnableButtonModule,
|
|
11082
|
+
UserClientsListModule,
|
|
11083
|
+
UserSessionsModule] }); }
|
|
11014
11084
|
}
|
|
11015
11085
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserModule, decorators: [{
|
|
11016
11086
|
type: NgModule,
|
|
@@ -11033,25 +11103,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
11033
11103
|
MatTableModule,
|
|
11034
11104
|
MatSortModule,
|
|
11035
11105
|
DataTableModule,
|
|
11036
|
-
UserEnableButtonModule
|
|
11106
|
+
UserEnableButtonModule,
|
|
11107
|
+
UserClientsListModule,
|
|
11108
|
+
UserSessionsModule
|
|
11037
11109
|
],
|
|
11038
11110
|
declarations: [
|
|
11039
11111
|
UsersViewAllComponent,
|
|
11040
11112
|
UserFormComponent,
|
|
11041
11113
|
UserExploreComponent,
|
|
11042
11114
|
UserViewComponent,
|
|
11043
|
-
UserClientsListComponent,
|
|
11044
|
-
UserClientEnableDisableButtonComponent,
|
|
11045
|
-
UserSessionsComponent
|
|
11046
11115
|
],
|
|
11047
11116
|
exports: [
|
|
11048
11117
|
UserViewComponent,
|
|
11049
11118
|
UsersViewAllComponent,
|
|
11050
|
-
|
|
11051
|
-
|
|
11052
|
-
|
|
11053
|
-
UserClientsListComponent,
|
|
11054
|
-
UserEnableButtonModule
|
|
11119
|
+
UserEnableButtonModule,
|
|
11120
|
+
UserClientsListModule,
|
|
11121
|
+
UserSessionsModule
|
|
11055
11122
|
]
|
|
11056
11123
|
}]
|
|
11057
11124
|
}] });
|
|
@@ -12997,6 +13064,10 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
12997
13064
|
this.clientService = clientService;
|
|
12998
13065
|
this.alertService = alertService;
|
|
12999
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();
|
|
13000
13071
|
this.errorMessages = {
|
|
13001
13072
|
name: {
|
|
13002
13073
|
required: 'The name field is required.'
|
|
@@ -13014,10 +13085,12 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
13014
13085
|
});
|
|
13015
13086
|
}
|
|
13016
13087
|
ngOnInit() {
|
|
13017
|
-
|
|
13018
|
-
|
|
13019
|
-
|
|
13020
|
-
|
|
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 });
|
|
13021
13094
|
}
|
|
13022
13095
|
}
|
|
13023
13096
|
save() {
|
|
@@ -13028,12 +13101,19 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
13028
13101
|
}
|
|
13029
13102
|
const data = { ...this.form.value };
|
|
13030
13103
|
this.isWorking = true;
|
|
13031
|
-
this.clientService.
|
|
13032
|
-
|
|
13104
|
+
let request = this.clientService.store(data);
|
|
13105
|
+
if (data?.id) {
|
|
13106
|
+
request = this.clientService.update(data);
|
|
13107
|
+
}
|
|
13108
|
+
request.subscribe({
|
|
13109
|
+
next: (response) => {
|
|
13033
13110
|
this.isWorking = false;
|
|
13034
|
-
// update user
|
|
13035
|
-
this.currentUserService.getUserObservable(true).subscribe();
|
|
13036
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
|
+
}
|
|
13037
13117
|
},
|
|
13038
13118
|
error: () => (this.isWorking = false)
|
|
13039
13119
|
});
|
|
@@ -13044,10 +13124,15 @@ class CompanyInformationComponent extends TechlifyFormComponentInterface {
|
|
|
13044
13124
|
}
|
|
13045
13125
|
}
|
|
13046
13126
|
redirectBack() {
|
|
13047
|
-
this.
|
|
13127
|
+
if (this.isAppAdmin) {
|
|
13128
|
+
this.cancelled.emit();
|
|
13129
|
+
}
|
|
13130
|
+
else {
|
|
13131
|
+
this.location.back();
|
|
13132
|
+
}
|
|
13048
13133
|
}
|
|
13049
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 }); }
|
|
13050
|
-
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"] }] }); }
|
|
13051
13136
|
}
|
|
13052
13137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CompanyInformationComponent, decorators: [{
|
|
13053
13138
|
type: Component,
|
|
@@ -13064,33 +13149,85 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
13064
13149
|
NgIf,
|
|
13065
13150
|
MatError,
|
|
13066
13151
|
ImagePreviewComponent,
|
|
13067
|
-
|
|
13068
|
-
}]
|
|
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
|
+
}] } });
|
|
13069
13193
|
|
|
13070
13194
|
class CompanyInfoDisplayComponent {
|
|
13071
13195
|
constructor(currentUserService) {
|
|
13072
13196
|
this.currentUserService = currentUserService;
|
|
13073
13197
|
this.forceReload = true;
|
|
13198
|
+
this.isEditAllowed = false;
|
|
13199
|
+
this.isAppAdmin = false;
|
|
13074
13200
|
}
|
|
13075
13201
|
ngOnInit() {
|
|
13202
|
+
this.loadData();
|
|
13203
|
+
}
|
|
13204
|
+
loadData() {
|
|
13076
13205
|
if (this.forceReload) {
|
|
13077
13206
|
this.currentUserService.getUserObservable(true).subscribe((user) => {
|
|
13078
13207
|
this.client = user?.client;
|
|
13079
13208
|
});
|
|
13080
13209
|
}
|
|
13081
13210
|
}
|
|
13211
|
+
onSaved(client) {
|
|
13212
|
+
this.client = client;
|
|
13213
|
+
}
|
|
13082
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 }); }
|
|
13083
|
-
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"] }] }); }
|
|
13084
13216
|
}
|
|
13085
13217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CompanyInfoDisplayComponent, decorators: [{
|
|
13086
13218
|
type: Component,
|
|
13087
13219
|
args: [{ selector: 'app-company-info-display', standalone: true, imports: [
|
|
13088
|
-
NgIf
|
|
13089
|
-
|
|
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" }]
|
|
13090
13223
|
}], ctorParameters: () => [{ type: CurrentUserService }], propDecorators: { client: [{
|
|
13091
13224
|
type: Input
|
|
13092
13225
|
}], forceReload: [{
|
|
13093
13226
|
type: Input
|
|
13227
|
+
}], isEditAllowed: [{
|
|
13228
|
+
type: Input
|
|
13229
|
+
}], isAppAdmin: [{
|
|
13230
|
+
type: Input
|
|
13094
13231
|
}] } });
|
|
13095
13232
|
|
|
13096
13233
|
class TechlifyAppService extends TechlifyServiceBaseClass {
|
|
@@ -13181,15 +13318,16 @@ class TenantListWidgetComponent extends TechlifyListingControllerInterface {
|
|
|
13181
13318
|
});
|
|
13182
13319
|
}
|
|
13183
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 }); }
|
|
13184
|
-
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"] }] }); }
|
|
13185
13322
|
}
|
|
13186
13323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantListWidgetComponent, decorators: [{
|
|
13187
13324
|
type: Component,
|
|
13188
13325
|
args: [{ selector: 'app-tenant-list-widget', standalone: true, imports: [
|
|
13189
13326
|
MaterialModule,
|
|
13190
13327
|
NgIf,
|
|
13191
|
-
RouterLink
|
|
13192
|
-
|
|
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" }]
|
|
13193
13331
|
}], ctorParameters: () => [{ type: ClientService }] });
|
|
13194
13332
|
|
|
13195
13333
|
class AppAdminHomeComponent {
|
|
@@ -13371,7 +13509,8 @@ class AppAdminUserViewModule {
|
|
|
13371
13509
|
LoginHistoryForUserModule,
|
|
13372
13510
|
AuditLogListModule,
|
|
13373
13511
|
AppAdminUserViewRoutingProvider,
|
|
13374
|
-
|
|
13512
|
+
UserClientsListModule,
|
|
13513
|
+
UserSessionsModule], exports: [AppAdminUserViewComponent] }); }
|
|
13375
13514
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppAdminUserViewModule, imports: [CommonModule,
|
|
13376
13515
|
MaterialModule,
|
|
13377
13516
|
FlexLayoutModule,
|
|
@@ -13380,7 +13519,8 @@ class AppAdminUserViewModule {
|
|
|
13380
13519
|
LoginHistoryForUserModule,
|
|
13381
13520
|
AuditLogListModule,
|
|
13382
13521
|
AppAdminUserViewRoutingProvider,
|
|
13383
|
-
|
|
13522
|
+
UserClientsListModule,
|
|
13523
|
+
UserSessionsModule] }); }
|
|
13384
13524
|
}
|
|
13385
13525
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppAdminUserViewModule, decorators: [{
|
|
13386
13526
|
type: NgModule,
|
|
@@ -13394,7 +13534,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
13394
13534
|
LoginHistoryForUserModule,
|
|
13395
13535
|
AuditLogListModule,
|
|
13396
13536
|
AppAdminUserViewRoutingProvider,
|
|
13397
|
-
|
|
13537
|
+
UserClientsListModule,
|
|
13538
|
+
UserSessionsModule
|
|
13398
13539
|
],
|
|
13399
13540
|
declarations: [
|
|
13400
13541
|
AppAdminUserViewComponent
|
|
@@ -13418,5 +13559,5 @@ var appAdminUserView_module = /*#__PURE__*/Object.freeze({
|
|
|
13418
13559
|
* Generated bundle index. Do not edit.
|
|
13419
13560
|
*/
|
|
13420
13561
|
|
|
13421
|
-
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, UserEnableButtonModule, 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 };
|
|
13422
13563
|
//# sourceMappingURL=ngx-techlify-core.mjs.map
|