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.
Files changed (31) hide show
  1. package/esm2022/lib/app-admin/tenant/tenant-list-widget/tenant-list-widget.component.mjs +6 -4
  2. package/esm2022/lib/company-information/company-info-display/company-info-display.component.mjs +18 -4
  3. package/esm2022/lib/company-information/company-information/company-information.component.mjs +42 -15
  4. package/esm2022/lib/company-information/tenant-form-button/tenant-form-button.component.mjs +36 -0
  5. package/esm2022/lib/user/app-admin-user-view/app-admin-user-view.component.mjs +1 -1
  6. package/esm2022/lib/user/app-admin-user-view/app-admin-user-view.module.mjs +9 -5
  7. package/esm2022/lib/user/current-user.service.mjs +5 -4
  8. package/esm2022/lib/user/index.mjs +4 -1
  9. package/esm2022/lib/user/user-form.component.mjs +2 -2
  10. package/esm2022/lib/user/user-sessions/user-sessions/user-sessions.module.mjs +28 -0
  11. package/esm2022/lib/user/user.module.mjs +21 -24
  12. package/esm2022/lib/user-client-enable-disable-button/user-client-enable-disable-button.module.mjs +28 -0
  13. package/esm2022/lib/user-clients-list/user-clients-list.module.mjs +32 -0
  14. package/esm2022/lib/user-config/user-config.service.mjs +3 -3
  15. package/esm2022/public-api.mjs +2 -1
  16. package/fesm2022/ngx-techlify-core.mjs +551 -410
  17. package/fesm2022/ngx-techlify-core.mjs.map +1 -1
  18. package/lib/company-information/company-info-display/company-info-display.component.d.ts +5 -1
  19. package/lib/company-information/company-information/company-information.component.d.ts +6 -2
  20. package/lib/company-information/tenant-form-button/tenant-form-button.component.d.ts +14 -0
  21. package/lib/user/app-admin-user-view/app-admin-user-view.module.d.ts +3 -2
  22. package/lib/user/current-user.service.d.ts +2 -1
  23. package/lib/user/index.d.ts +3 -0
  24. package/lib/user/user-form.component.d.ts +2 -2
  25. package/lib/user/user-sessions/user-sessions/user-sessions.module.d.ts +10 -0
  26. package/lib/user/user.module.d.ts +20 -21
  27. package/lib/user-client-enable-disable-button/user-client-enable-disable-button.module.d.ts +10 -0
  28. package/lib/user-clients-list/user-clients-list.module.d.ts +11 -0
  29. package/lib/user-config/user-config.service.d.ts +2 -2
  30. package/package.json +1 -1
  31. 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, of, BehaviorSubject, map as map$1, Subscription, from, finalize as finalize$1, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, startWith as startWith$1 } from 'rxjs';
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
- * Service that manages information about the current user
2434
+ * Controller used to explore a User
2289
2435
  *
2290
- * @author Joshua Kissoon
2291
- * @since 20170817
2436
+ * @author Saravana Kumar
2437
+ * @since 20190813
2292
2438
  */
2293
- class CurrentUserService {
2294
- constructor(http, storage) {
2439
+ class UserExploreComponent {
2440
+ constructor(http, dialogRef, data) {
2295
2441
  this.http = http;
2296
- this.storage = storage;
2297
- /**Deprecated stop using for new projects */
2298
- this.userSub = new Subject();
2299
- // Track the auth status of the user.
2300
- this.isLoggedIn = new BehaviorSubject(false);
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
- * Update the login status of the user.
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 &nbsp;\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 &nbsp;\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
- * 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 &nbsp;\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: 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 &nbsp;\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 }] });
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
- 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] }); }
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: UserRoutingProvider, decorators: [{
4615
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSessionsModule, decorators: [{
4457
4616
  type: NgModule,
4458
4617
  args: [{
4459
- imports: [RouterModule.forChild(routes$A)],
4460
- exports: [RouterModule]
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], exports: [UserViewComponent,
11055
+ UserEnableButtonModule,
11056
+ UserClientsListModule,
11057
+ UserSessionsModule], exports: [UserViewComponent,
10990
11058
  UsersViewAllComponent,
10991
- UserClientsListComponent,
10992
- UserClientEnableDisableButtonComponent,
10993
- UserSessionsComponent,
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, 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
- UserClientsListComponent,
11051
- UserClientEnableDisableButtonComponent,
11052
- UserSessionsComponent,
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
- this.user = this.currentUserService.getUser();
13018
- const client = this.user?.client;
13019
- if (client) {
13020
- this.form.patchValue({ ...client });
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.update(data).subscribe({
13032
- next: () => {
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.location.back();
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 <form\n [formGroup]=\"form\"\n class=\"d-flex flex-wrap justify-content-start align-items-center gap-2\"\n (submit)=\"save()\"\n >\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 </mat-card-content>\n </mat-card>\n</div>\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"] }] }); }
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
- ], 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 <form\n [formGroup]=\"form\"\n class=\"d-flex flex-wrap justify-content-start align-items-center gap-2\"\n (submit)=\"save()\"\n >\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 </mat-card-content>\n </mat-card>\n</div>\n" }]
13068
- }], ctorParameters: () => [{ type: FormValidatorService }, { type: i1$4.FormBuilder }, { type: CurrentUserService }, { type: ClientService }, { type: AlertService }, { type: i2$1.Location }] });
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
- ], 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" }]
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
- ], 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" }]
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
- UserModule], exports: [AppAdminUserViewComponent] }); }
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
- UserModule] }); }
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
- UserModule,
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