@flusys/ng-auth 1.1.0 → 1.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -1093
- package/fesm2022/flusys-ng-auth.mjs +5649 -2955
- package/fesm2022/flusys-ng-auth.mjs.map +1 -1
- package/package.json +11 -11
- package/types/flusys-ng-auth.d.ts +394 -284
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { IMessageResponse, ApiResourceService,
|
|
1
|
+
import { ISingleResponse, IMessageResponse, ApiResourceService, ICompanyApiProvider, IListResponse, ICompanyBasicInfo, IAuthStateProvider, IUserPermissionProvider, IUserBranchPermission as IUserBranchPermission$1, IUserProvider, IUserBasicInfo, ILogicNode, RouterTabItem, BaseFormComponent, IFormField, ITableAction, ITableColumn, IProfileRoleInfo, IProfileActionInfo } from '@flusys/ng-shared';
|
|
2
2
|
import * as rxjs from 'rxjs';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import * as _angular_core from '@angular/core';
|
|
5
|
-
import { Signal, Provider } from '@angular/core';
|
|
5
|
+
import { Signal, Provider, InjectionToken, Type, TemplateRef, Injector } from '@angular/core';
|
|
6
6
|
import { CanActivateFn, Routes } from '@angular/router';
|
|
7
7
|
import { HttpRequest, HttpHandlerFn, HttpEvent } from '@angular/common/http';
|
|
8
8
|
import { ILayoutAuthApi, ICompanyInfo as ICompanyInfo$1, IBranchInfo as IBranchInfo$1, ILayoutAuthState, IUserInfo as IUserInfo$1 } from '@flusys/ng-layout';
|
|
@@ -24,6 +24,7 @@ interface IRegistrationRequest {
|
|
|
24
24
|
newCompanyName?: string;
|
|
25
25
|
newCompanyPhone?: string;
|
|
26
26
|
newCompanyAddress?: string;
|
|
27
|
+
additionalFields?: Record<string, unknown>;
|
|
27
28
|
}
|
|
28
29
|
interface ISelectRequest {
|
|
29
30
|
sessionId: string;
|
|
@@ -74,19 +75,19 @@ interface ICompanyWithBranches {
|
|
|
74
75
|
logoId?: string | null;
|
|
75
76
|
branches: IBranchSelectionInfo[];
|
|
76
77
|
}
|
|
77
|
-
interface
|
|
78
|
+
interface ILoginData {
|
|
78
79
|
accessToken: string;
|
|
79
|
-
refreshToken
|
|
80
|
+
refreshToken?: string;
|
|
80
81
|
user: IUserInfo;
|
|
81
82
|
company?: ICompanyInfo;
|
|
82
83
|
branch?: IBranchInfo;
|
|
83
84
|
}
|
|
84
|
-
interface
|
|
85
|
+
interface IMeData {
|
|
85
86
|
user: IUserInfo;
|
|
86
87
|
company?: ICompanyInfo;
|
|
87
88
|
branch?: IBranchInfo;
|
|
88
89
|
}
|
|
89
|
-
interface
|
|
90
|
+
interface IRegistrationData {
|
|
90
91
|
accessToken?: string;
|
|
91
92
|
refreshToken?: string;
|
|
92
93
|
user: IUserInfo;
|
|
@@ -94,23 +95,27 @@ interface IRegistrationResponse {
|
|
|
94
95
|
branch?: IBranchInfo;
|
|
95
96
|
requiresEmailVerification?: boolean;
|
|
96
97
|
}
|
|
97
|
-
interface
|
|
98
|
+
interface ICompanySelectionData {
|
|
98
99
|
requiresSelection: true;
|
|
99
100
|
sessionId: string;
|
|
100
101
|
expiresAt: Date | string;
|
|
101
102
|
user: IUserInfo;
|
|
102
103
|
companies: ICompanyWithBranches[];
|
|
103
104
|
}
|
|
104
|
-
interface
|
|
105
|
-
accessToken: string;
|
|
106
|
-
refreshToken?: string;
|
|
107
|
-
}
|
|
108
|
-
interface ILoginRequiresEmailVerification {
|
|
105
|
+
interface IEmailVerificationData {
|
|
109
106
|
requiresEmailVerification: true;
|
|
110
107
|
email: string;
|
|
111
|
-
message: string;
|
|
112
108
|
}
|
|
113
|
-
type
|
|
109
|
+
type ILoginResponse = ISingleResponse<ILoginData>;
|
|
110
|
+
type IMeResponse = ISingleResponse<IMeData>;
|
|
111
|
+
type IRegistrationResponse = ISingleResponse<IRegistrationData>;
|
|
112
|
+
type ICompanySelectionResponse = ISingleResponse<ICompanySelectionData>;
|
|
113
|
+
type ILoginRequiresEmailVerification = ISingleResponse<IEmailVerificationData>;
|
|
114
|
+
type IRefreshTokenResponse = ISingleResponse<{
|
|
115
|
+
accessToken: string;
|
|
116
|
+
refreshToken?: string;
|
|
117
|
+
}>;
|
|
118
|
+
type AuthResponse = ISingleResponse<ILoginData | ICompanySelectionData | IEmailVerificationData>;
|
|
114
119
|
declare function isEmailVerificationRequired(response: AuthResponse): response is ILoginRequiresEmailVerification;
|
|
115
120
|
declare function isCompanySelectionResponse(response: AuthResponse): response is ICompanySelectionResponse;
|
|
116
121
|
declare function isLoginResponse(response: AuthResponse): response is ILoginResponse;
|
|
@@ -210,20 +215,6 @@ interface IUserBranchPermission {
|
|
|
210
215
|
branchSlug: string;
|
|
211
216
|
companyId: string;
|
|
212
217
|
}
|
|
213
|
-
interface IUserCompaniesResponse {
|
|
214
|
-
success: boolean;
|
|
215
|
-
message: string;
|
|
216
|
-
data: IUserCompanyPermission[];
|
|
217
|
-
}
|
|
218
|
-
interface IUserBranchesResponse {
|
|
219
|
-
success: boolean;
|
|
220
|
-
message: string;
|
|
221
|
-
data: IUserBranchPermission[];
|
|
222
|
-
}
|
|
223
|
-
interface IBatchOperationResponse {
|
|
224
|
-
success: boolean;
|
|
225
|
-
message: string;
|
|
226
|
-
}
|
|
227
218
|
|
|
228
219
|
interface ICreateUserRequest {
|
|
229
220
|
name: string;
|
|
@@ -265,113 +256,34 @@ interface IUser {
|
|
|
265
256
|
deletedAt?: Date | string | null;
|
|
266
257
|
}
|
|
267
258
|
|
|
268
|
-
/**
|
|
269
|
-
* Auth API Service
|
|
270
|
-
* Handles all authentication-related API calls matching NestJS auth endpoints
|
|
271
|
-
*/
|
|
272
259
|
declare class AuthApiService {
|
|
273
260
|
private readonly appConfig;
|
|
274
261
|
private readonly http;
|
|
275
262
|
private readonly baseUrl;
|
|
276
263
|
constructor();
|
|
277
|
-
/**
|
|
278
|
-
* Login with email and password
|
|
279
|
-
* Returns either:
|
|
280
|
-
* - ILoginResponse (direct login success)
|
|
281
|
-
* - ICompanySelectionResponse (requires company/branch selection)
|
|
282
|
-
*/
|
|
283
264
|
login(data: ILoginRequest): Observable<AuthResponse>;
|
|
284
|
-
/**
|
|
285
|
-
* Register new user
|
|
286
|
-
* Supports simple registration and company-based registration
|
|
287
|
-
* Returns RegistrationResponse directly (not wrapped in SingleResponse)
|
|
288
|
-
*/
|
|
289
265
|
register(data: IRegistrationRequest): Observable<IRegistrationResponse>;
|
|
290
|
-
/**
|
|
291
|
-
* Select company and branch after login
|
|
292
|
-
* Used when login returns requiresSelection: true
|
|
293
|
-
* Returns LoginResponse directly (not wrapped)
|
|
294
|
-
*/
|
|
295
266
|
select(data: ISelectRequest): Observable<ILoginResponse>;
|
|
296
|
-
/**
|
|
297
|
-
* Switch company/branch for logged-in user
|
|
298
|
-
* Returns LoginResponse directly (not wrapped)
|
|
299
|
-
*/
|
|
300
267
|
switchCompany(data: ISwitchCompanyRequest): Observable<ILoginResponse>;
|
|
301
|
-
/**
|
|
302
|
-
* Refresh access token
|
|
303
|
-
* Refresh token is sent via HTTP-only cookie
|
|
304
|
-
* Returns RefreshTokenResponse directly (not wrapped)
|
|
305
|
-
*/
|
|
306
268
|
refresh(): Observable<IRefreshTokenResponse>;
|
|
307
|
-
/**
|
|
308
|
-
* Get current user info
|
|
309
|
-
* Returns only user data (no tokens) - IMeResponse
|
|
310
|
-
*/
|
|
311
269
|
me(): Observable<IMeResponse>;
|
|
312
|
-
/**
|
|
313
|
-
* Logout current user
|
|
314
|
-
*/
|
|
315
270
|
logout(): Observable<IMessageResponse>;
|
|
316
|
-
/**
|
|
317
|
-
* Change password for logged-in user
|
|
318
|
-
*/
|
|
319
271
|
changePassword(data: IChangePasswordRequest): Observable<IMessageResponse>;
|
|
320
|
-
/**
|
|
321
|
-
* Send forgot password email
|
|
322
|
-
*/
|
|
323
272
|
forgotPassword(email: string): Observable<IMessageResponse>;
|
|
324
|
-
/**
|
|
325
|
-
* Reset password with token
|
|
326
|
-
*/
|
|
327
273
|
resetPassword(token: string, newPassword: string): Observable<IMessageResponse>;
|
|
328
|
-
/**
|
|
329
|
-
* Resend verification email (unauthenticated)
|
|
330
|
-
*/
|
|
331
274
|
resendVerification(email: string): Observable<IMessageResponse>;
|
|
332
|
-
/**
|
|
333
|
-
* Verify email with token
|
|
334
|
-
* Returns IMessageResponse for existing user verification
|
|
335
|
-
* Returns IRegistrationResponse for pending registration completion
|
|
336
|
-
*/
|
|
337
275
|
verifyEmail(token: string): Observable<IMessageResponse | IRegistrationResponse>;
|
|
338
276
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthApiService, never>;
|
|
339
277
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthApiService>;
|
|
340
278
|
}
|
|
341
279
|
|
|
342
|
-
/**
|
|
343
|
-
* Auth Initialization Service
|
|
344
|
-
* Handles app startup authentication flow:
|
|
345
|
-
* 1. Check if user has valid session (via refresh token cookie)
|
|
346
|
-
* 2. Restore user state from /auth/me
|
|
347
|
-
* 3. Handle company selection if needed
|
|
348
|
-
*
|
|
349
|
-
* IMPORTANT: Skips initialization during SSR to avoid cookie/localStorage issues
|
|
350
|
-
*/
|
|
351
280
|
declare class AuthInitService {
|
|
352
281
|
private readonly authState;
|
|
353
282
|
private readonly authApi;
|
|
354
|
-
private readonly router;
|
|
355
283
|
private readonly appConfig;
|
|
356
|
-
|
|
357
|
-
readonly initialized: _angular_core.
|
|
358
|
-
/** Whether auth check is in progress */
|
|
359
|
-
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
360
|
-
/** Error from auth check */
|
|
361
|
-
readonly error: _angular_core.WritableSignal<string | null>;
|
|
362
|
-
/** Cached initialization observable to prevent duplicate calls */
|
|
284
|
+
private readonly _initialized;
|
|
285
|
+
readonly initialized: _angular_core.Signal<boolean>;
|
|
363
286
|
private initializationCache$;
|
|
364
|
-
/**
|
|
365
|
-
* Initialize authentication state on app startup.
|
|
366
|
-
*
|
|
367
|
-
* Flow:
|
|
368
|
-
* 1. If already authenticated with user data -> done
|
|
369
|
-
* 2. Try refresh token (via cookie) -> get new access token
|
|
370
|
-
* 3. Call /auth/me to get user info
|
|
371
|
-
* 4. Update state accordingly
|
|
372
|
-
*
|
|
373
|
-
* Uses shareReplay to prevent duplicate initialization calls.
|
|
374
|
-
*/
|
|
375
287
|
initialize(): Observable<boolean>;
|
|
376
288
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthInitService, never>;
|
|
377
289
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthInitService>;
|
|
@@ -385,6 +297,7 @@ declare class AuthStateService {
|
|
|
385
297
|
private readonly appConfig;
|
|
386
298
|
private readonly router;
|
|
387
299
|
private readonly platform;
|
|
300
|
+
private readonly translateAdapter;
|
|
388
301
|
private readonly _user;
|
|
389
302
|
private readonly _accessToken;
|
|
390
303
|
private readonly _tokenExpiresAt;
|
|
@@ -397,7 +310,6 @@ declare class AuthStateService {
|
|
|
397
310
|
readonly branch: _angular_core.Signal<IBranchInfo | null>;
|
|
398
311
|
private readonly _selectionSessionId;
|
|
399
312
|
private readonly _availableCompanies;
|
|
400
|
-
private readonly _selectionExpiresAt;
|
|
401
313
|
readonly selectionSessionId: _angular_core.Signal<string | null>;
|
|
402
314
|
readonly availableCompanies: _angular_core.Signal<ICompanyWithBranches[]>;
|
|
403
315
|
readonly isAuthenticated: _angular_core.Signal<boolean>;
|
|
@@ -412,8 +324,8 @@ declare class AuthStateService {
|
|
|
412
324
|
readonly isTokenExpired: _angular_core.Signal<boolean>;
|
|
413
325
|
readonly tenantId: _angular_core.Signal<string | null>;
|
|
414
326
|
constructor();
|
|
415
|
-
setLoginState(
|
|
416
|
-
setSelectionState(
|
|
327
|
+
setLoginState(data: ILoginData): void;
|
|
328
|
+
setSelectionState(data: ICompanySelectionData): void;
|
|
417
329
|
clearSelectionState(): void;
|
|
418
330
|
resetState(): void;
|
|
419
331
|
setUser(user: IUserInfo | null): void;
|
|
@@ -444,9 +356,7 @@ declare class AuthStateService {
|
|
|
444
356
|
* Signal-based service for branch CRUD operations
|
|
445
357
|
*/
|
|
446
358
|
declare class BranchApiService extends ApiResourceService<ICreateBranchRequest | IUpdateBranchRequest, IBranch> {
|
|
447
|
-
private readonly _currentCompanyId;
|
|
448
359
|
constructor();
|
|
449
|
-
setCurrentCompanyId(companyId: string | null): void;
|
|
450
360
|
fetchByCompany(companyId: string, search?: string): void;
|
|
451
361
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BranchApiService, never>;
|
|
452
362
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BranchApiService>;
|
|
@@ -499,14 +409,14 @@ declare class UserPermissionApiService {
|
|
|
499
409
|
private readonly appConfig;
|
|
500
410
|
private readonly http;
|
|
501
411
|
private readonly baseUrl;
|
|
502
|
-
assignUserCompanies(data: IAssignUserCompanyRequest): Observable<
|
|
503
|
-
assignUserToCompany(userId: string, companyId: string): Observable<
|
|
504
|
-
revokeUserFromCompany(userId: string, companyId: string): Observable<
|
|
505
|
-
getUserCompanies(userId: string): Observable<
|
|
506
|
-
assignUserBranches(data: IAssignUserBranchRequest): Observable<
|
|
507
|
-
assignUserToBranch(userId: string, branchId: string): Observable<
|
|
508
|
-
revokeUserFromBranch(userId: string, branchId: string): Observable<
|
|
509
|
-
getUserBranches(userId: string, companyId?: string): Observable<
|
|
412
|
+
assignUserCompanies(data: IAssignUserCompanyRequest): Observable<IMessageResponse>;
|
|
413
|
+
assignUserToCompany(userId: string, companyId: string): Observable<IMessageResponse>;
|
|
414
|
+
revokeUserFromCompany(userId: string, companyId: string): Observable<IMessageResponse>;
|
|
415
|
+
getUserCompanies(userId: string): Observable<ISingleResponse<IUserCompanyPermission[]>>;
|
|
416
|
+
assignUserBranches(data: IAssignUserBranchRequest): Observable<IMessageResponse>;
|
|
417
|
+
assignUserToBranch(userId: string, branchId: string): Observable<IMessageResponse>;
|
|
418
|
+
revokeUserFromBranch(userId: string, branchId: string): Observable<IMessageResponse>;
|
|
419
|
+
getUserBranches(userId: string, companyId?: string): Observable<ISingleResponse<IUserBranchPermission[]>>;
|
|
510
420
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserPermissionApiService, never>;
|
|
511
421
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<UserPermissionApiService>;
|
|
512
422
|
}
|
|
@@ -600,8 +510,6 @@ declare class AuthUserProviderAdapter implements IUserProvider {
|
|
|
600
510
|
page?: number;
|
|
601
511
|
pageSize?: number;
|
|
602
512
|
search?: string;
|
|
603
|
-
companyId?: string;
|
|
604
|
-
branchId?: string;
|
|
605
513
|
isActive?: boolean;
|
|
606
514
|
[key: string]: any;
|
|
607
515
|
}): Observable<IListResponse<IUserBasicInfo>>;
|
|
@@ -620,7 +528,7 @@ declare class AuthCompanyApiProviderAdapter implements ICompanyApiProvider {
|
|
|
620
528
|
}
|
|
621
529
|
declare class AuthUserPermissionProviderAdapter implements IUserPermissionProvider {
|
|
622
530
|
private readonly userPermissionApi;
|
|
623
|
-
getUserBranchPermissions(userId: string, companyId?: string): Observable<ISingleResponse<
|
|
531
|
+
getUserBranchPermissions(userId: string, companyId?: string): Observable<ISingleResponse<IUserBranchPermission$1[]>>;
|
|
624
532
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthUserPermissionProviderAdapter, never>;
|
|
625
533
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthUserPermissionProviderAdapter>;
|
|
626
534
|
}
|
|
@@ -639,6 +547,204 @@ declare function provideAuthLayoutIntegration(): Provider[];
|
|
|
639
547
|
/** Provides auth implementations for ng-shared provider interfaces */
|
|
640
548
|
declare function provideAuthProviders(): Provider[];
|
|
641
549
|
|
|
550
|
+
interface IEmailValidationConfig {
|
|
551
|
+
pattern?: RegExp;
|
|
552
|
+
message?: string;
|
|
553
|
+
messageKey?: string;
|
|
554
|
+
messageParam?: Record<string, string | number>;
|
|
555
|
+
}
|
|
556
|
+
interface IPasswordValidationConfig {
|
|
557
|
+
minLength?: number;
|
|
558
|
+
maxLength?: number;
|
|
559
|
+
requireUppercase?: boolean;
|
|
560
|
+
requireLowercase?: boolean;
|
|
561
|
+
requireNumbers?: boolean;
|
|
562
|
+
requireSpecialChars?: boolean;
|
|
563
|
+
pattern?: RegExp;
|
|
564
|
+
message?: string;
|
|
565
|
+
messageKey?: string;
|
|
566
|
+
messageParam?: Record<string, string | number>;
|
|
567
|
+
}
|
|
568
|
+
interface IAuthValidationConfig {
|
|
569
|
+
email?: IEmailValidationConfig;
|
|
570
|
+
password?: IPasswordValidationConfig;
|
|
571
|
+
}
|
|
572
|
+
declare const AUTH_VALIDATION_CONFIG: InjectionToken<IAuthValidationConfig>;
|
|
573
|
+
interface IRegistrationFieldTemplateContext {
|
|
574
|
+
field: IRegistrationExtraField;
|
|
575
|
+
value: unknown;
|
|
576
|
+
updateValue: (value: unknown) => void;
|
|
577
|
+
}
|
|
578
|
+
declare const REGISTRATION_FIELD_CONTEXT: InjectionToken<IRegistrationFieldTemplateContext>;
|
|
579
|
+
interface IRegistrationExtraField {
|
|
580
|
+
key: string;
|
|
581
|
+
label: string;
|
|
582
|
+
labelKey?: string;
|
|
583
|
+
type: 'text' | 'number' | 'select' | 'checkbox' | 'textarea' | 'date' | 'template';
|
|
584
|
+
placeholder?: string;
|
|
585
|
+
placeholderKey?: string;
|
|
586
|
+
required?: boolean;
|
|
587
|
+
defaultValue?: unknown;
|
|
588
|
+
options?: Array<{
|
|
589
|
+
label: string;
|
|
590
|
+
labelKey?: string;
|
|
591
|
+
value: unknown;
|
|
592
|
+
}>;
|
|
593
|
+
pattern?: RegExp;
|
|
594
|
+
validationMessage?: string;
|
|
595
|
+
validationMessageKey?: string;
|
|
596
|
+
validationMessageParam?: Record<string, string | number>;
|
|
597
|
+
order?: number;
|
|
598
|
+
containerClass?: string;
|
|
599
|
+
template?: TemplateRef<IRegistrationFieldTemplateContext>;
|
|
600
|
+
component?: Type<unknown>;
|
|
601
|
+
injector?: Injector;
|
|
602
|
+
}
|
|
603
|
+
interface IRegistrationExtensionProvider {
|
|
604
|
+
getExtraFields(): IRegistrationExtraField[];
|
|
605
|
+
transformRegistrationData?(data: Record<string, unknown>): Record<string, unknown>;
|
|
606
|
+
validateExtraFields?(data: Record<string, unknown>): string | null;
|
|
607
|
+
}
|
|
608
|
+
declare const AUTH_REGISTRATION_EXTENSION: InjectionToken<IRegistrationExtensionProvider>;
|
|
609
|
+
interface IUserListExtraColumn {
|
|
610
|
+
key: string;
|
|
611
|
+
header: string;
|
|
612
|
+
headerKey?: string;
|
|
613
|
+
field?: string;
|
|
614
|
+
template?: TemplateRef<{
|
|
615
|
+
$implicit: IUser;
|
|
616
|
+
}>;
|
|
617
|
+
styleClass?: string;
|
|
618
|
+
width?: string;
|
|
619
|
+
sortable?: boolean;
|
|
620
|
+
order?: number;
|
|
621
|
+
}
|
|
622
|
+
interface IUserListExtraAction {
|
|
623
|
+
key: string;
|
|
624
|
+
label: string;
|
|
625
|
+
labelKey?: string;
|
|
626
|
+
icon: string;
|
|
627
|
+
severity?: 'info' | 'success' | 'warn' | 'danger' | 'secondary' | 'contrast';
|
|
628
|
+
permission?: string;
|
|
629
|
+
onClick: (user: IUser) => void;
|
|
630
|
+
isVisible?: (user: IUser) => boolean;
|
|
631
|
+
isDisabled?: (user: IUser) => boolean;
|
|
632
|
+
order?: number;
|
|
633
|
+
}
|
|
634
|
+
interface IUserListExtensionProvider {
|
|
635
|
+
getExtraColumns(): IUserListExtraColumn[];
|
|
636
|
+
getExtraActions(): IUserListExtraAction[];
|
|
637
|
+
enrichUserData?(users: IUser[]): Observable<IUser[]>;
|
|
638
|
+
}
|
|
639
|
+
declare const AUTH_USER_LIST_EXTENSION: InjectionToken<IUserListExtensionProvider>;
|
|
640
|
+
interface IProfileExtraSection {
|
|
641
|
+
key: string;
|
|
642
|
+
title: string;
|
|
643
|
+
titleKey?: string;
|
|
644
|
+
icon?: string;
|
|
645
|
+
order?: number;
|
|
646
|
+
component?: Type<unknown>;
|
|
647
|
+
template?: TemplateRef<{
|
|
648
|
+
user: IUser;
|
|
649
|
+
}>;
|
|
650
|
+
collapsible?: boolean;
|
|
651
|
+
collapsed?: boolean;
|
|
652
|
+
editPermission?: string | ILogicNode;
|
|
653
|
+
}
|
|
654
|
+
interface IProfileFieldTemplateContext {
|
|
655
|
+
field: IProfileExtraField;
|
|
656
|
+
value: unknown;
|
|
657
|
+
updateValue: (value: unknown) => void;
|
|
658
|
+
}
|
|
659
|
+
declare const PROFILE_FIELD_CONTEXT: InjectionToken<IProfileFieldTemplateContext>;
|
|
660
|
+
interface IProfileExtraField {
|
|
661
|
+
key: string;
|
|
662
|
+
label: string;
|
|
663
|
+
labelKey?: string;
|
|
664
|
+
type: 'text' | 'number' | 'select' | 'checkbox' | 'textarea' | 'date' | 'template';
|
|
665
|
+
placeholder?: string;
|
|
666
|
+
placeholderKey?: string;
|
|
667
|
+
editable?: boolean;
|
|
668
|
+
required?: boolean;
|
|
669
|
+
options?: Array<{
|
|
670
|
+
label: string;
|
|
671
|
+
labelKey?: string;
|
|
672
|
+
value: unknown;
|
|
673
|
+
}>;
|
|
674
|
+
pattern?: RegExp;
|
|
675
|
+
validationMessage?: string;
|
|
676
|
+
validationMessageKey?: string;
|
|
677
|
+
validationMessageParam?: Record<string, string | number>;
|
|
678
|
+
order?: number;
|
|
679
|
+
sectionKey?: string;
|
|
680
|
+
template?: TemplateRef<IProfileFieldTemplateContext>;
|
|
681
|
+
component?: Type<unknown>;
|
|
682
|
+
injector?: Injector;
|
|
683
|
+
}
|
|
684
|
+
interface IProfileExtensionProvider {
|
|
685
|
+
getExtraSections?(): IProfileExtraSection[];
|
|
686
|
+
getExtraFields?(): IProfileExtraField[];
|
|
687
|
+
getExtraFieldValues?(userId: string): Observable<Record<string, unknown>>;
|
|
688
|
+
saveExtraFieldValues?(userId: string, data: Record<string, unknown>): Observable<void>;
|
|
689
|
+
validateExtraFields?(data: Record<string, unknown>): string | null;
|
|
690
|
+
}
|
|
691
|
+
declare const AUTH_PROFILE_EXTENSION: InjectionToken<IProfileExtensionProvider>;
|
|
692
|
+
interface IUserFormFieldTemplateContext {
|
|
693
|
+
field: IUserFormExtraField;
|
|
694
|
+
value: unknown;
|
|
695
|
+
updateValue: (value: unknown) => void;
|
|
696
|
+
}
|
|
697
|
+
declare const USER_FORM_FIELD_CONTEXT: InjectionToken<IUserFormFieldTemplateContext>;
|
|
698
|
+
interface IUserFormExtraField {
|
|
699
|
+
key: string;
|
|
700
|
+
label: string;
|
|
701
|
+
labelKey?: string;
|
|
702
|
+
type: 'text' | 'number' | 'select' | 'checkbox' | 'textarea' | 'date' | 'template';
|
|
703
|
+
placeholder?: string;
|
|
704
|
+
placeholderKey?: string;
|
|
705
|
+
required?: boolean;
|
|
706
|
+
options?: Array<{
|
|
707
|
+
label: string;
|
|
708
|
+
labelKey?: string;
|
|
709
|
+
value: unknown;
|
|
710
|
+
}>;
|
|
711
|
+
pattern?: RegExp;
|
|
712
|
+
validationMessage?: string;
|
|
713
|
+
validationMessageKey?: string;
|
|
714
|
+
validationMessageParam?: Record<string, string | number>;
|
|
715
|
+
order?: number;
|
|
716
|
+
template?: TemplateRef<IUserFormFieldTemplateContext>;
|
|
717
|
+
component?: Type<unknown>;
|
|
718
|
+
injector?: Injector;
|
|
719
|
+
}
|
|
720
|
+
interface IUserFormExtensionProvider {
|
|
721
|
+
getExtraFields?(): IUserFormExtraField[];
|
|
722
|
+
getExtraFieldValues?(userId: string): Observable<Record<string, unknown>>;
|
|
723
|
+
saveExtraFieldValues?(userId: string, data: Record<string, unknown>): Observable<void>;
|
|
724
|
+
validateExtraFields?(data: Record<string, unknown>): string | null;
|
|
725
|
+
}
|
|
726
|
+
declare const AUTH_USER_FORM_EXTENSION: InjectionToken<IUserFormExtensionProvider>;
|
|
727
|
+
type UserDetailViewMode = 'dialog' | 'sidebar' | 'page';
|
|
728
|
+
interface IUserDetailViewConfig {
|
|
729
|
+
viewMode: UserDetailViewMode;
|
|
730
|
+
allowEdit?: boolean;
|
|
731
|
+
width?: string;
|
|
732
|
+
component?: Type<unknown>;
|
|
733
|
+
tabs?: Array<{
|
|
734
|
+
key: string;
|
|
735
|
+
label: string;
|
|
736
|
+
labelKey?: string;
|
|
737
|
+
icon?: string;
|
|
738
|
+
component?: Type<unknown>;
|
|
739
|
+
template?: TemplateRef<{
|
|
740
|
+
user: IUser;
|
|
741
|
+
}>;
|
|
742
|
+
}>;
|
|
743
|
+
}
|
|
744
|
+
declare const AUTH_USER_DETAIL_CONFIG: InjectionToken<IUserDetailViewConfig>;
|
|
745
|
+
declare function validatePassword(password: string, config: IPasswordValidationConfig): string | null;
|
|
746
|
+
declare function validateEmail(email: string, config?: IEmailValidationConfig): string | null;
|
|
747
|
+
|
|
642
748
|
/**
|
|
643
749
|
* Authentication API Endpoints
|
|
644
750
|
*
|
|
@@ -662,14 +768,8 @@ declare const AUTH_ENDPOINTS: {
|
|
|
662
768
|
/** Check if a URL matches a specific endpoint */
|
|
663
769
|
declare function isEndpoint(url: string, endpoint: string): boolean;
|
|
664
770
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
label: string;
|
|
668
|
-
icon: string;
|
|
669
|
-
route: string;
|
|
670
|
-
permission: string;
|
|
671
|
-
requiresCompanyFeature?: boolean;
|
|
672
|
-
}
|
|
771
|
+
declare const AUTH_MESSAGES: Record<string, string>;
|
|
772
|
+
|
|
673
773
|
/**
|
|
674
774
|
* Administration Page Component
|
|
675
775
|
* Unified administration page with tabs for:
|
|
@@ -680,14 +780,13 @@ interface ITab {
|
|
|
680
780
|
declare class AdministrationPageComponent {
|
|
681
781
|
private readonly appConfig;
|
|
682
782
|
private readonly permissionValidator;
|
|
783
|
+
private readonly translateService;
|
|
683
784
|
/** All available tabs */
|
|
684
785
|
private readonly allTabs;
|
|
685
786
|
/** Check if company feature is enabled */
|
|
686
787
|
readonly companyFeatureEnabled: _angular_core.Signal<boolean>;
|
|
687
788
|
/** Visible tabs based on config and permissions */
|
|
688
|
-
readonly visibleTabs: _angular_core.Signal<
|
|
689
|
-
/** Dynamic subtitle based on visible tabs */
|
|
690
|
-
readonly subtitle: _angular_core.Signal<string>;
|
|
789
|
+
readonly visibleTabs: _angular_core.Signal<RouterTabItem[]>;
|
|
691
790
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdministrationPageComponent, never>;
|
|
692
791
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AdministrationPageComponent, "lib-administration-page", never, {}, {}, never, never, true, never>;
|
|
693
792
|
}
|
|
@@ -714,6 +813,8 @@ declare class BranchFormComponent {
|
|
|
714
813
|
private readonly branchService;
|
|
715
814
|
private readonly companyService;
|
|
716
815
|
private readonly authState;
|
|
816
|
+
private readonly translateAdapter;
|
|
817
|
+
private translate;
|
|
717
818
|
private readonly routeParams;
|
|
718
819
|
private readonly queryParams;
|
|
719
820
|
/** Loading state */
|
|
@@ -727,7 +828,7 @@ declare class BranchFormComponent {
|
|
|
727
828
|
/** Form model */
|
|
728
829
|
readonly formModel: _angular_core.WritableSignal<IBranchFormModel>;
|
|
729
830
|
/** Form with validation schema */
|
|
730
|
-
readonly branchForm: _angular_forms_signals.FieldTree<IBranchFormModel, string | number>;
|
|
831
|
+
readonly branchForm: _angular_forms_signals.FieldTree<IBranchFormModel, string | number, "writable">;
|
|
731
832
|
/** Check if form is valid */
|
|
732
833
|
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
733
834
|
constructor();
|
|
@@ -746,11 +847,6 @@ declare class BranchFormComponent {
|
|
|
746
847
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BranchFormComponent, "lib-branch-form", never, {}, {}, never, never, true, never>;
|
|
747
848
|
}
|
|
748
849
|
|
|
749
|
-
/**
|
|
750
|
-
* Branch List Component
|
|
751
|
-
* Displays a list of branches for a company with CRUD operations.
|
|
752
|
-
* Defaults to current company context.
|
|
753
|
-
*/
|
|
754
850
|
declare class BranchListComponent {
|
|
755
851
|
readonly BRANCH_PERMISSIONS: {
|
|
756
852
|
readonly CREATE: "branch.create";
|
|
@@ -765,6 +861,8 @@ declare class BranchListComponent {
|
|
|
765
861
|
private readonly branchService;
|
|
766
862
|
private readonly companyService;
|
|
767
863
|
private readonly authState;
|
|
864
|
+
private readonly translateAdapter;
|
|
865
|
+
private translate;
|
|
768
866
|
private readonly queryParamMap;
|
|
769
867
|
private initialized;
|
|
770
868
|
/** Selected company ID (signal for zoneless change detection) */
|
|
@@ -778,7 +876,7 @@ declare class BranchListComponent {
|
|
|
778
876
|
/** Total count from service */
|
|
779
877
|
readonly total: _angular_core.Signal<number>;
|
|
780
878
|
constructor();
|
|
781
|
-
loadBranches(): void;
|
|
879
|
+
loadBranches(page?: number, pageSize?: number): void;
|
|
782
880
|
onCompanyChange(): void;
|
|
783
881
|
onLazyLoad(event: {
|
|
784
882
|
first?: number | null;
|
|
@@ -791,85 +889,34 @@ declare class BranchListComponent {
|
|
|
791
889
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BranchListComponent, "lib-branch-list", never, {}, {}, never, never, true, never>;
|
|
792
890
|
}
|
|
793
891
|
|
|
794
|
-
/** Company form model interface */
|
|
795
|
-
interface ICompanyFormModel$1 {
|
|
796
|
-
name: string;
|
|
797
|
-
slug: string;
|
|
798
|
-
email: string;
|
|
799
|
-
phone: string;
|
|
800
|
-
website: string;
|
|
801
|
-
address: string;
|
|
802
|
-
isActive: boolean;
|
|
803
|
-
}
|
|
804
|
-
/**
|
|
805
|
-
* Company Form Component
|
|
806
|
-
* Handles creating and editing companies.
|
|
807
|
-
*/
|
|
808
892
|
declare class CompanyFormComponent {
|
|
809
|
-
private readonly router;
|
|
810
893
|
private readonly route;
|
|
811
|
-
private readonly
|
|
812
|
-
|
|
894
|
+
private readonly translateAdapter;
|
|
895
|
+
readonly companyService: CompanyApiService;
|
|
896
|
+
readonly formRef: _angular_core.Signal<BaseFormComponent | undefined>;
|
|
813
897
|
private readonly routeParams;
|
|
814
|
-
|
|
815
|
-
readonly
|
|
816
|
-
|
|
817
|
-
readonly
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
/** Form model */
|
|
821
|
-
readonly formModel: _angular_core.WritableSignal<ICompanyFormModel$1>;
|
|
822
|
-
/** Form with validation schema */
|
|
823
|
-
readonly companyForm: _angular_forms_signals.FieldTree<ICompanyFormModel$1, string | number>;
|
|
824
|
-
/** Check if form is valid */
|
|
825
|
-
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
826
|
-
constructor();
|
|
827
|
-
private loadCompany;
|
|
828
|
-
generateSlug(): void;
|
|
829
|
-
onSubmit(): Promise<void>;
|
|
830
|
-
onCancel(): void;
|
|
831
|
-
/** Build company data from form model */
|
|
832
|
-
private buildCompanyData;
|
|
898
|
+
readonly editId: _angular_core.Signal<string | null>;
|
|
899
|
+
readonly fields: IFormField[];
|
|
900
|
+
readonly buildRequest: (data: Record<string, unknown>, editId: string | null) => unknown;
|
|
901
|
+
readonly toFormModel: (entity: unknown) => Record<string, unknown>;
|
|
902
|
+
onFormValueChange(data: Record<string, unknown>): void;
|
|
903
|
+
private t;
|
|
833
904
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CompanyFormComponent, never>;
|
|
834
905
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CompanyFormComponent, "lib-company-form", never, {}, {}, never, never, true, never>;
|
|
835
906
|
}
|
|
836
907
|
|
|
837
|
-
/**
|
|
838
|
-
* Company List Component
|
|
839
|
-
* Displays a list of companies with CRUD operations.
|
|
840
|
-
* Only visible when company feature is enabled.
|
|
841
|
-
*/
|
|
842
908
|
declare class CompanyListComponent {
|
|
843
|
-
readonly
|
|
844
|
-
|
|
845
|
-
readonly READ: "company.read";
|
|
846
|
-
readonly UPDATE: "company.update";
|
|
847
|
-
readonly DELETE: "company.delete";
|
|
848
|
-
};
|
|
849
|
-
readonly BRANCH_PERMISSIONS: {
|
|
850
|
-
readonly CREATE: "branch.create";
|
|
851
|
-
readonly READ: "branch.read";
|
|
852
|
-
readonly UPDATE: "branch.update";
|
|
853
|
-
readonly DELETE: "branch.delete";
|
|
854
|
-
};
|
|
909
|
+
private readonly permissionValidator;
|
|
910
|
+
private readonly translateAdapter;
|
|
855
911
|
private readonly router;
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
readonly
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
readonly total: _angular_core.Signal<number>;
|
|
865
|
-
onLazyLoad(event: {
|
|
866
|
-
first?: number | null;
|
|
867
|
-
rows?: number | null;
|
|
868
|
-
}): void;
|
|
869
|
-
onCreate(): void;
|
|
870
|
-
onEdit(company: ICompany): void;
|
|
871
|
-
onViewBranches(company: ICompany): void;
|
|
872
|
-
onDelete(company: ICompany): void;
|
|
912
|
+
readonly companyService: CompanyApiService;
|
|
913
|
+
readonly canCreate: _angular_core.Signal<boolean>;
|
|
914
|
+
readonly canEditFn: (_item: unknown) => boolean;
|
|
915
|
+
readonly canDeleteFn: (item: unknown) => boolean;
|
|
916
|
+
readonly viewBranchesAction: ITableAction[];
|
|
917
|
+
readonly columns: ITableColumn[];
|
|
918
|
+
asCompany(item: unknown): ICompany;
|
|
919
|
+
private t;
|
|
873
920
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CompanyListComponent, never>;
|
|
874
921
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CompanyListComponent, "lib-company-list", never, {}, {}, never, never, true, never>;
|
|
875
922
|
}
|
|
@@ -881,11 +928,13 @@ declare class ForgotPasswordPageComponent {
|
|
|
881
928
|
private readonly destroyRef;
|
|
882
929
|
private readonly messageService;
|
|
883
930
|
private readonly authApi;
|
|
931
|
+
private readonly translateAdapter;
|
|
932
|
+
private translate;
|
|
884
933
|
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
885
934
|
readonly emailSent: _angular_core.WritableSignal<boolean>;
|
|
886
935
|
readonly submittedEmail: _angular_core.WritableSignal<string>;
|
|
887
936
|
readonly formModel: _angular_core.WritableSignal<IForgotPasswordFormModel>;
|
|
888
|
-
readonly forgotForm: _angular_forms_signals.FieldTree<IForgotPasswordFormModel, string | number>;
|
|
937
|
+
readonly forgotForm: _angular_forms_signals.FieldTree<IForgotPasswordFormModel, string | number, "writable">;
|
|
889
938
|
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
890
939
|
onSubmit(): void;
|
|
891
940
|
private showEmailSent;
|
|
@@ -911,15 +960,23 @@ declare class LoginPageComponent {
|
|
|
911
960
|
private readonly messageService;
|
|
912
961
|
private readonly authApi;
|
|
913
962
|
private readonly authState;
|
|
963
|
+
private readonly translateAdapter;
|
|
964
|
+
private readonly validationConfig;
|
|
965
|
+
private translate;
|
|
914
966
|
readonly returnUrl: _angular_core.InputSignal<string>;
|
|
915
967
|
readonly currentStep: _angular_core.WritableSignal<LoginStep>;
|
|
916
968
|
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
917
969
|
readonly unverifiedEmail: _angular_core.WritableSignal<string>;
|
|
918
970
|
readonly loginFormModel: _angular_core.WritableSignal<ILoginFormModel>;
|
|
919
|
-
readonly
|
|
971
|
+
private readonly emailErrorMessage;
|
|
972
|
+
private readonly passwordMinLength;
|
|
973
|
+
private readonly passwordErrorMessage;
|
|
974
|
+
readonly loginForm: _angular_forms_signals.FieldTree<ILoginFormModel, string | number, "writable">;
|
|
975
|
+
readonly emailValidationError: _angular_core.Signal<string | null>;
|
|
976
|
+
readonly passwordValidationError: _angular_core.Signal<string | null>;
|
|
920
977
|
readonly isLoginFormValid: _angular_core.Signal<boolean>;
|
|
921
978
|
readonly selectionFormModel: _angular_core.WritableSignal<ISelectionFormModel>;
|
|
922
|
-
readonly selectionForm: _angular_forms_signals.FieldTree<ISelectionFormModel, string | number>;
|
|
979
|
+
readonly selectionForm: _angular_forms_signals.FieldTree<ISelectionFormModel, string | number, "writable">;
|
|
923
980
|
readonly isSelectionFormValid: _angular_core.Signal<boolean>;
|
|
924
981
|
readonly companyFeatureEnabled: _angular_core.Signal<boolean>;
|
|
925
982
|
readonly emailFeatureEnabled: _angular_core.Signal<boolean>;
|
|
@@ -940,31 +997,15 @@ declare class LoginPageComponent {
|
|
|
940
997
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LoginPageComponent, "lib-login-page", never, { "returnUrl": { "alias": "returnUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
941
998
|
}
|
|
942
999
|
|
|
943
|
-
/** Profile form model */
|
|
944
1000
|
interface IProfileFormModel {
|
|
945
1001
|
name: string;
|
|
946
1002
|
phone: string;
|
|
947
1003
|
}
|
|
948
|
-
/** Password form model */
|
|
949
1004
|
interface IPasswordFormModel {
|
|
950
1005
|
currentPassword: string;
|
|
951
1006
|
newPassword: string;
|
|
952
1007
|
confirmPassword: string;
|
|
953
1008
|
}
|
|
954
|
-
/**
|
|
955
|
-
* Profile Page Component
|
|
956
|
-
*
|
|
957
|
-
* Allows users to view and update their profile information.
|
|
958
|
-
* Features:
|
|
959
|
-
* - Update name, phone, profile picture (if storage enabled)
|
|
960
|
-
* - View company/branch info (read-only, if company feature enabled)
|
|
961
|
-
* - View roles/actions (read-only, if IAM enabled via optional injection)
|
|
962
|
-
*
|
|
963
|
-
* Package Independence:
|
|
964
|
-
* - Uses PROFILE_UPLOAD_PROVIDER (optional) for storage functionality
|
|
965
|
-
* - Uses PROFILE_PERMISSION_PROVIDER (optional) for IAM functionality
|
|
966
|
-
* - No direct imports from ng-storage or ng-iam
|
|
967
|
-
*/
|
|
968
1009
|
declare class ProfilePageComponent {
|
|
969
1010
|
private readonly destroyRef;
|
|
970
1011
|
private readonly appConfig;
|
|
@@ -973,16 +1014,30 @@ declare class ProfilePageComponent {
|
|
|
973
1014
|
private readonly userService;
|
|
974
1015
|
private readonly authApiService;
|
|
975
1016
|
private readonly fileUrlService;
|
|
976
|
-
private readonly
|
|
1017
|
+
private readonly fileProvider;
|
|
977
1018
|
private readonly permissionProvider;
|
|
1019
|
+
private readonly profileExtension;
|
|
1020
|
+
private readonly userFormExtension;
|
|
1021
|
+
private readonly translateAdapter;
|
|
1022
|
+
private translate;
|
|
978
1023
|
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
979
1024
|
readonly isLoadingPermissions: _angular_core.WritableSignal<boolean>;
|
|
1025
|
+
readonly isLoadingExtraFields: _angular_core.WritableSignal<boolean>;
|
|
980
1026
|
private readonly _profilePictureUrl;
|
|
981
1027
|
readonly profilePictureUrl: _angular_core.Signal<string | null>;
|
|
982
1028
|
private readonly _userRoles;
|
|
983
1029
|
readonly userRoles: _angular_core.Signal<IProfileRoleInfo[]>;
|
|
984
1030
|
private readonly _userActions;
|
|
985
1031
|
readonly userActions: _angular_core.Signal<IProfileActionInfo[]>;
|
|
1032
|
+
readonly extraSections: _angular_core.Signal<IProfileExtraSection[]>;
|
|
1033
|
+
readonly editableFields: _angular_core.Signal<IProfileExtraField[]>;
|
|
1034
|
+
readonly viewOnlyFields: _angular_core.Signal<IUserFormExtraField[]>;
|
|
1035
|
+
readonly hasExtraContent: _angular_core.Signal<boolean>;
|
|
1036
|
+
readonly extraFieldsModel: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1037
|
+
readonly originalExtraFieldsModel: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1038
|
+
readonly adminFieldsModel: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1039
|
+
readonly isExtraFieldsDirty: _angular_core.Signal<boolean>;
|
|
1040
|
+
readonly extraFieldsValidationError: _angular_core.Signal<string | null>;
|
|
986
1041
|
readonly userEmail: _angular_core.Signal<string>;
|
|
987
1042
|
readonly userName: _angular_core.Signal<string>;
|
|
988
1043
|
readonly userInitials: _angular_core.Signal<string>;
|
|
@@ -997,19 +1052,32 @@ declare class ProfilePageComponent {
|
|
|
997
1052
|
readonly showBottomRow: _angular_core.Signal<boolean>;
|
|
998
1053
|
private readonly originalFormModel;
|
|
999
1054
|
readonly formModel: _angular_core.WritableSignal<IProfileFormModel>;
|
|
1000
|
-
readonly formTree: _angular_forms_signals.FieldTree<IProfileFormModel, string | number>;
|
|
1055
|
+
readonly formTree: _angular_forms_signals.FieldTree<IProfileFormModel, string | number, "writable">;
|
|
1001
1056
|
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
1002
1057
|
readonly isFormDirty: _angular_core.Signal<boolean>;
|
|
1058
|
+
updateExtraField(key: string, value: unknown): void;
|
|
1059
|
+
getExtraFieldValue(key: string): unknown;
|
|
1060
|
+
getAdminFieldValue(key: string): unknown;
|
|
1061
|
+
getSelectLabel(field: IProfileExtraField | IUserFormExtraField, value: unknown): string;
|
|
1062
|
+
getFieldTemplateContext(field: IProfileExtraField): IProfileFieldTemplateContext;
|
|
1063
|
+
private readonly parentInjector;
|
|
1064
|
+
getFieldInjector(field: IProfileExtraField): Injector;
|
|
1003
1065
|
readonly passwordModel: _angular_core.WritableSignal<IPasswordFormModel>;
|
|
1066
|
+
readonly visiblePasswords: _angular_core.WritableSignal<Record<keyof IPasswordFormModel, boolean>>;
|
|
1004
1067
|
readonly isPasswordLoading: _angular_core.WritableSignal<boolean>;
|
|
1005
1068
|
readonly isPasswordFormValid: _angular_core.Signal<boolean>;
|
|
1006
1069
|
readonly passwordsMatch: _angular_core.Signal<boolean>;
|
|
1007
|
-
readonly
|
|
1008
|
-
|
|
1009
|
-
|
|
1070
|
+
readonly profileUploadOptions: {
|
|
1071
|
+
folderPath: string;
|
|
1072
|
+
compress: boolean;
|
|
1073
|
+
maxWidth: number;
|
|
1074
|
+
maxHeight: number;
|
|
1075
|
+
isPrivate: boolean;
|
|
1076
|
+
};
|
|
1010
1077
|
constructor();
|
|
1011
1078
|
private loadUserData;
|
|
1012
1079
|
private loadPermissions;
|
|
1080
|
+
private loadExtraFields;
|
|
1013
1081
|
onProfilePictureUploaded(file: {
|
|
1014
1082
|
id?: string;
|
|
1015
1083
|
name: string;
|
|
@@ -1018,6 +1086,7 @@ declare class ProfilePageComponent {
|
|
|
1018
1086
|
contentType: string;
|
|
1019
1087
|
}): void;
|
|
1020
1088
|
onSubmit(): void;
|
|
1089
|
+
togglePasswordVisibility(field: keyof IPasswordFormModel): void;
|
|
1021
1090
|
updatePasswordField(field: keyof IPasswordFormModel, value: string): void;
|
|
1022
1091
|
onChangePassword(): void;
|
|
1023
1092
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProfilePageComponent, never>;
|
|
@@ -1047,6 +1116,10 @@ declare class RegisterPageComponent {
|
|
|
1047
1116
|
private readonly authState;
|
|
1048
1117
|
private readonly route;
|
|
1049
1118
|
private readonly router;
|
|
1119
|
+
private readonly validationConfig;
|
|
1120
|
+
private readonly registrationExtension;
|
|
1121
|
+
private readonly translateAdapter;
|
|
1122
|
+
private translate;
|
|
1050
1123
|
private readonly queryParamMap;
|
|
1051
1124
|
private companySlugInitialized;
|
|
1052
1125
|
readonly returnUrl: _angular_core.InputSignal<string>;
|
|
@@ -1056,12 +1129,25 @@ declare class RegisterPageComponent {
|
|
|
1056
1129
|
readonly defaultBranchSlug: _angular_core.Signal<string | undefined>;
|
|
1057
1130
|
readonly hasDefaultCompany: _angular_core.Signal<boolean>;
|
|
1058
1131
|
readonly hasDefaultBranch: _angular_core.Signal<boolean>;
|
|
1132
|
+
readonly extraFields: _angular_core.Signal<IRegistrationExtraField[]>;
|
|
1133
|
+
readonly extraFieldsModel: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1134
|
+
private readonly emailErrorMessage;
|
|
1135
|
+
readonly passwordMinLength: _angular_core.Signal<number>;
|
|
1136
|
+
private readonly passwordErrorMessage;
|
|
1059
1137
|
readonly userFormModel: _angular_core.WritableSignal<IUserFormModel$1>;
|
|
1060
|
-
readonly userForm: _angular_forms_signals.FieldTree<IUserFormModel$1, string | number>;
|
|
1138
|
+
readonly userForm: _angular_forms_signals.FieldTree<IUserFormModel$1, string | number, "writable">;
|
|
1061
1139
|
readonly companyFormModel: _angular_core.WritableSignal<ICompanyFormModel>;
|
|
1062
|
-
readonly companyForm: _angular_forms_signals.FieldTree<ICompanyFormModel, string | number>;
|
|
1140
|
+
readonly companyForm: _angular_forms_signals.FieldTree<ICompanyFormModel, string | number, "writable">;
|
|
1141
|
+
readonly emailValidationError: _angular_core.Signal<string | null>;
|
|
1142
|
+
readonly passwordValidationError: _angular_core.Signal<string | null>;
|
|
1143
|
+
readonly extraFieldsValidationError: _angular_core.Signal<string | null>;
|
|
1063
1144
|
readonly passwordsMatch: _angular_core.Signal<boolean>;
|
|
1064
1145
|
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
1146
|
+
private validateRequiredExtraFields;
|
|
1147
|
+
updateExtraField(key: string, value: unknown): void;
|
|
1148
|
+
getFieldTemplateContext(field: IRegistrationExtraField): IRegistrationFieldTemplateContext;
|
|
1149
|
+
private readonly parentInjector;
|
|
1150
|
+
getFieldInjector(field: IRegistrationExtraField): Injector;
|
|
1065
1151
|
constructor();
|
|
1066
1152
|
onCreateCompanyToggle(): void;
|
|
1067
1153
|
onSubmit(): void;
|
|
@@ -1079,13 +1165,15 @@ declare class ResetPasswordPageComponent {
|
|
|
1079
1165
|
private readonly route;
|
|
1080
1166
|
private readonly messageService;
|
|
1081
1167
|
private readonly authApi;
|
|
1168
|
+
private readonly translateAdapter;
|
|
1169
|
+
private translate;
|
|
1082
1170
|
private readonly queryParams;
|
|
1083
1171
|
private tokenInitialized;
|
|
1084
1172
|
private token;
|
|
1085
1173
|
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
1086
1174
|
readonly pageState: _angular_core.WritableSignal<PageState$1>;
|
|
1087
1175
|
readonly formModel: _angular_core.WritableSignal<IResetPasswordFormModel>;
|
|
1088
|
-
readonly resetForm: _angular_forms_signals.FieldTree<IResetPasswordFormModel, string | number>;
|
|
1176
|
+
readonly resetForm: _angular_forms_signals.FieldTree<IResetPasswordFormModel, string | number, "writable">;
|
|
1089
1177
|
readonly passwordMismatch: _angular_core.Signal<boolean>;
|
|
1090
1178
|
readonly canSubmit: _angular_core.Signal<boolean>;
|
|
1091
1179
|
constructor();
|
|
@@ -1094,7 +1182,6 @@ declare class ResetPasswordPageComponent {
|
|
|
1094
1182
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResetPasswordPageComponent, "lib-reset-password-page", never, {}, {}, never, never, true, never>;
|
|
1095
1183
|
}
|
|
1096
1184
|
|
|
1097
|
-
/** User form model interface */
|
|
1098
1185
|
interface IUserFormModel {
|
|
1099
1186
|
name: string;
|
|
1100
1187
|
email: string;
|
|
@@ -1103,11 +1190,6 @@ interface IUserFormModel {
|
|
|
1103
1190
|
isActive: boolean;
|
|
1104
1191
|
emailVerified: boolean;
|
|
1105
1192
|
}
|
|
1106
|
-
/**
|
|
1107
|
-
* User Form Component
|
|
1108
|
-
* Handles creating and editing users.
|
|
1109
|
-
* When company feature is enabled, automatically assigns new users to current company/branch.
|
|
1110
|
-
*/
|
|
1111
1193
|
declare class UserFormComponent {
|
|
1112
1194
|
private readonly destroyRef;
|
|
1113
1195
|
private readonly router;
|
|
@@ -1117,46 +1199,47 @@ declare class UserFormComponent {
|
|
|
1117
1199
|
private readonly userService;
|
|
1118
1200
|
private readonly permissionService;
|
|
1119
1201
|
private readonly authState;
|
|
1202
|
+
private readonly translateAdapter;
|
|
1203
|
+
private readonly userFormExtension;
|
|
1204
|
+
private readonly parentInjector;
|
|
1205
|
+
private translate;
|
|
1120
1206
|
private readonly routeParams;
|
|
1121
1207
|
private userLoadTriggered;
|
|
1122
|
-
/** Loading state */
|
|
1123
1208
|
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
1124
|
-
/** Existing user data when editing */
|
|
1125
1209
|
readonly existingUser: _angular_core.WritableSignal<IUser | null>;
|
|
1126
|
-
/** Whether in edit mode */
|
|
1127
1210
|
readonly isEditMode: _angular_core.Signal<boolean>;
|
|
1128
|
-
/** Whether company feature is enabled */
|
|
1129
1211
|
readonly companyFeatureEnabled: _angular_core.Signal<boolean>;
|
|
1130
|
-
/** Current company name */
|
|
1131
1212
|
readonly currentCompanyName: _angular_core.Signal<string>;
|
|
1132
|
-
/** Current branch name */
|
|
1133
1213
|
readonly currentBranchName: _angular_core.Signal<string>;
|
|
1134
|
-
/** Form model */
|
|
1135
1214
|
readonly formModel: _angular_core.WritableSignal<IUserFormModel>;
|
|
1136
|
-
|
|
1137
|
-
readonly
|
|
1138
|
-
|
|
1215
|
+
readonly formTree: _angular_forms_signals.FieldTree<IUserFormModel, string | number, "writable">;
|
|
1216
|
+
readonly isLoadingExtraFields: _angular_core.WritableSignal<boolean>;
|
|
1217
|
+
readonly extraFieldsModel: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1218
|
+
readonly originalExtraFieldsModel: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1219
|
+
readonly extraFields: _angular_core.Signal<IUserFormExtraField[]>;
|
|
1220
|
+
readonly hasExtraFields: _angular_core.Signal<boolean>;
|
|
1221
|
+
readonly extraFieldsValidationError: _angular_core.Signal<string | null>;
|
|
1222
|
+
readonly isExtraFieldsDirty: _angular_core.Signal<boolean>;
|
|
1223
|
+
updateExtraField(key: string, value: unknown): void;
|
|
1224
|
+
getExtraFieldValue(key: string): unknown;
|
|
1225
|
+
getFieldTemplateContext(field: IUserFormExtraField): IUserFormFieldTemplateContext;
|
|
1226
|
+
getFieldInjector(field: IUserFormExtraField): Injector;
|
|
1139
1227
|
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
1140
1228
|
constructor();
|
|
1141
|
-
loadUser(id: string): void
|
|
1229
|
+
loadUser(id: string): Promise<void>;
|
|
1230
|
+
private loadExtraFields;
|
|
1142
1231
|
private toFormModel;
|
|
1143
1232
|
onSubmit(): void;
|
|
1144
1233
|
private updateUser;
|
|
1145
1234
|
private createUser;
|
|
1235
|
+
private saveExtraFieldsForNewUser;
|
|
1146
1236
|
private onSaveSuccess;
|
|
1147
|
-
/**
|
|
1148
|
-
* Assign user to current company and branch
|
|
1149
|
-
*/
|
|
1150
1237
|
private assignUserToCompanyAndBranch;
|
|
1151
1238
|
onCancel(): void;
|
|
1152
1239
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserFormComponent, never>;
|
|
1153
1240
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserFormComponent, "lib-user-form", never, {}, {}, never, never, true, never>;
|
|
1154
1241
|
}
|
|
1155
1242
|
|
|
1156
|
-
/**
|
|
1157
|
-
* User List Component
|
|
1158
|
-
* Displays a list of users with CRUD operations.
|
|
1159
|
-
*/
|
|
1160
1243
|
declare class UserListComponent {
|
|
1161
1244
|
readonly USER_PERMISSIONS: {
|
|
1162
1245
|
readonly CREATE: "user.create";
|
|
@@ -1169,19 +1252,28 @@ declare class UserListComponent {
|
|
|
1169
1252
|
private readonly messageService;
|
|
1170
1253
|
private readonly confirmationService;
|
|
1171
1254
|
private readonly userService;
|
|
1172
|
-
|
|
1255
|
+
private readonly userListExtension;
|
|
1256
|
+
readonly userDetailConfig: _flusys_ng_auth.IUserDetailViewConfig | null;
|
|
1257
|
+
private readonly translateAdapter;
|
|
1258
|
+
private translate;
|
|
1173
1259
|
readonly users: _angular_core.Signal<IUser[]>;
|
|
1174
|
-
/** Loading state from service */
|
|
1175
1260
|
readonly isLoading: _angular_core.Signal<boolean>;
|
|
1176
|
-
/** Total count from service */
|
|
1177
1261
|
readonly total: _angular_core.Signal<number>;
|
|
1178
|
-
/** Whether company feature is enabled */
|
|
1179
1262
|
readonly companyFeatureEnabled: _angular_core.Signal<boolean>;
|
|
1180
|
-
|
|
1263
|
+
readonly extraColumns: _angular_core.Signal<IUserListExtraColumn[]>;
|
|
1264
|
+
readonly extraActions: _angular_core.Signal<IUserListExtraAction[]>;
|
|
1265
|
+
readonly hasUserDetailView: _angular_core.Signal<boolean>;
|
|
1266
|
+
readonly tableColspan: _angular_core.Signal<number>;
|
|
1181
1267
|
readonly showCompanyDialog: _angular_core.WritableSignal<boolean>;
|
|
1182
1268
|
readonly showBranchDialog: _angular_core.WritableSignal<boolean>;
|
|
1183
|
-
|
|
1269
|
+
readonly showUserDetailDialog: _angular_core.WritableSignal<boolean>;
|
|
1184
1270
|
readonly selectedUser: _angular_core.WritableSignal<IUser | null>;
|
|
1271
|
+
getFieldValue(user: IUser, field: string): unknown;
|
|
1272
|
+
isActionVisible(action: IUserListExtraAction, user: IUser): boolean;
|
|
1273
|
+
isActionDisabled(action: IUserListExtraAction, user: IUser): boolean;
|
|
1274
|
+
onExtraAction(action: IUserListExtraAction, user: IUser): void;
|
|
1275
|
+
onViewDetails(user: IUser): void;
|
|
1276
|
+
closeUserDetailDialog(): void;
|
|
1185
1277
|
loadUsers(): void;
|
|
1186
1278
|
onLazyLoad(event: {
|
|
1187
1279
|
first?: number | null;
|
|
@@ -1208,6 +1300,8 @@ declare class VerifyEmailPageComponent {
|
|
|
1208
1300
|
private readonly route;
|
|
1209
1301
|
private readonly messageService;
|
|
1210
1302
|
private readonly authApi;
|
|
1303
|
+
private readonly translateAdapter;
|
|
1304
|
+
private translate;
|
|
1211
1305
|
private readonly queryParams;
|
|
1212
1306
|
private verificationTriggered;
|
|
1213
1307
|
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
@@ -1215,7 +1309,7 @@ declare class VerifyEmailPageComponent {
|
|
|
1215
1309
|
readonly resendSuccess: _angular_core.WritableSignal<boolean>;
|
|
1216
1310
|
readonly submittedEmail: _angular_core.WritableSignal<string>;
|
|
1217
1311
|
readonly resendFormModel: _angular_core.WritableSignal<IResendFormModel>;
|
|
1218
|
-
readonly resendForm: _angular_forms_signals.FieldTree<IResendFormModel, string | number>;
|
|
1312
|
+
readonly resendForm: _angular_forms_signals.FieldTree<IResendFormModel, string | number, "writable">;
|
|
1219
1313
|
readonly isResendFormValid: _angular_core.Signal<boolean>;
|
|
1220
1314
|
constructor();
|
|
1221
1315
|
private verifyEmail;
|
|
@@ -1234,24 +1328,38 @@ declare class UserBranchPermissionDialogComponent {
|
|
|
1234
1328
|
private readonly branchApi;
|
|
1235
1329
|
private readonly permissionApi;
|
|
1236
1330
|
private readonly messageService;
|
|
1331
|
+
private readonly translateAdapter;
|
|
1332
|
+
private t;
|
|
1237
1333
|
readonly visible: _angular_core.InputSignal<boolean>;
|
|
1238
1334
|
readonly user: _angular_core.InputSignal<IUser | null>;
|
|
1239
1335
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
1240
1336
|
readonly permissionsChanged: _angular_core.OutputEmitterRef<void>;
|
|
1241
|
-
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
1242
1337
|
readonly isSaving: _angular_core.WritableSignal<boolean>;
|
|
1243
|
-
readonly
|
|
1244
|
-
readonly
|
|
1338
|
+
readonly selectedCompanyId: _angular_core.WritableSignal<string | null>;
|
|
1339
|
+
readonly companiesResource: _angular_core.ResourceRef<{
|
|
1245
1340
|
id: string;
|
|
1246
1341
|
name: string;
|
|
1247
|
-
}[]>;
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1342
|
+
}[] | undefined>;
|
|
1343
|
+
readonly branchesResource: _angular_core.ResourceRef<{
|
|
1344
|
+
isAssigned: boolean;
|
|
1345
|
+
id: string;
|
|
1346
|
+
name: string;
|
|
1347
|
+
slug: string;
|
|
1348
|
+
companyId: string;
|
|
1349
|
+
parentId?: string | null;
|
|
1350
|
+
logoId?: string | null;
|
|
1351
|
+
address?: string | null;
|
|
1352
|
+
phone?: string | null;
|
|
1353
|
+
email?: string | null;
|
|
1354
|
+
serial?: number;
|
|
1355
|
+
isActive: boolean;
|
|
1356
|
+
readOnly: boolean;
|
|
1357
|
+
additionalFields?: Record<string, unknown> | null;
|
|
1358
|
+
createdAt: Date | string;
|
|
1359
|
+
updatedAt: Date | string;
|
|
1360
|
+
}[] | undefined>;
|
|
1361
|
+
readonly isInitialLoading: _angular_core.Signal<boolean>;
|
|
1362
|
+
onBranchToggle(branch: BranchWithAssignment, isAssigned: boolean): Promise<void>;
|
|
1255
1363
|
onClose(): void;
|
|
1256
1364
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserBranchPermissionDialogComponent, never>;
|
|
1257
1365
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserBranchPermissionDialogComponent, "lib-user-branch-permission-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "user": { "alias": "user"; "required": true; "isSignal": true; }; }, { "closed": "closed"; "permissionsChanged": "permissionsChanged"; }, never, never, true, never>;
|
|
@@ -1264,6 +1372,8 @@ declare class UserCompanyPermissionDialogComponent {
|
|
|
1264
1372
|
private readonly companyApi;
|
|
1265
1373
|
private readonly permissionApi;
|
|
1266
1374
|
private readonly messageService;
|
|
1375
|
+
private readonly translateAdapter;
|
|
1376
|
+
private t;
|
|
1267
1377
|
readonly visible: _angular_core.InputSignal<boolean>;
|
|
1268
1378
|
readonly user: _angular_core.InputSignal<IUser | null>;
|
|
1269
1379
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
@@ -1280,5 +1390,5 @@ declare class UserCompanyPermissionDialogComponent {
|
|
|
1280
1390
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserCompanyPermissionDialogComponent, "lib-user-company-permission-dialog", never, { "visible": { "alias": "visible"; "required": true; "isSignal": true; }; "user": { "alias": "user"; "required": true; "isSignal": true; }; }, { "closed": "closed"; "permissionsChanged": "permissionsChanged"; }, never, never, true, never>;
|
|
1281
1391
|
}
|
|
1282
1392
|
|
|
1283
|
-
export { ADMINISTRATION_ROUTES, AUTH_ENDPOINTS, AUTH_ROUTES, AdministrationPageComponent, AuthApiService, AuthCompanyApiProviderAdapter, AuthInitService, AuthLayoutApiAdapter, AuthLayoutStateAdapter, AuthStateProviderAdapter, AuthStateService, AuthUserPermissionProviderAdapter, AuthUserProviderAdapter, BranchApiService, BranchFormComponent, BranchListComponent, CompanyApiService, CompanyFormComponent, CompanyListComponent, ForgotPasswordPageComponent, LoginPageComponent, PROFILE_ROUTES, ProfilePageComponent, RegisterPageComponent, ResetPasswordPageComponent, TokenRefreshStateService, UserApiService, UserBranchPermissionDialogComponent, UserCompanyPermissionDialogComponent, UserFormComponent, UserListComponent, UserPermissionApiService, VerifyEmailPageComponent, authGuard, authInterceptor, companyFeatureGuard, emailFeatureGuard, guestGuard, isCompanySelectionResponse, isEmailVerificationRequired, isEndpoint, isLoginResponse, provideAuthLayoutIntegration, provideAuthProviders, signUpFeatureGuard, tokenRefreshInterceptor };
|
|
1284
|
-
export type { AuthResponse, IAssignUserBranchRequest, IAssignUserCompanyRequest,
|
|
1393
|
+
export { ADMINISTRATION_ROUTES, AUTH_ENDPOINTS, AUTH_MESSAGES, AUTH_PROFILE_EXTENSION, AUTH_REGISTRATION_EXTENSION, AUTH_ROUTES, AUTH_USER_DETAIL_CONFIG, AUTH_USER_FORM_EXTENSION, AUTH_USER_LIST_EXTENSION, AUTH_VALIDATION_CONFIG, AdministrationPageComponent, AuthApiService, AuthCompanyApiProviderAdapter, AuthInitService, AuthLayoutApiAdapter, AuthLayoutStateAdapter, AuthStateProviderAdapter, AuthStateService, AuthUserPermissionProviderAdapter, AuthUserProviderAdapter, BranchApiService, BranchFormComponent, BranchListComponent, CompanyApiService, CompanyFormComponent, CompanyListComponent, ForgotPasswordPageComponent, LoginPageComponent, PROFILE_FIELD_CONTEXT, PROFILE_ROUTES, ProfilePageComponent, REGISTRATION_FIELD_CONTEXT, RegisterPageComponent, ResetPasswordPageComponent, TokenRefreshStateService, USER_FORM_FIELD_CONTEXT, UserApiService, UserBranchPermissionDialogComponent, UserCompanyPermissionDialogComponent, UserFormComponent, UserListComponent, UserPermissionApiService, VerifyEmailPageComponent, authGuard, authInterceptor, companyFeatureGuard, emailFeatureGuard, guestGuard, isCompanySelectionResponse, isEmailVerificationRequired, isEndpoint, isLoginResponse, provideAuthLayoutIntegration, provideAuthProviders, signUpFeatureGuard, tokenRefreshInterceptor, validateEmail, validatePassword };
|
|
1394
|
+
export type { AuthResponse, IAssignUserBranchRequest, IAssignUserCompanyRequest, IAuthValidationConfig, IBranch, IBranchInfo, IBranchSelectionInfo, IChangePasswordRequest, ICompany, ICompanyInfo, ICompanySelectionData, ICompanySelectionResponse, ICompanyWithBranches, ICreateBranchRequest, ICreateCompanyRequest, ICreateUserRequest, IEmailValidationConfig, IEmailVerificationData, ILoginData, ILoginRequest, ILoginRequiresEmailVerification, ILoginResponse, IMeData, IMeResponse, IPasswordValidationConfig, IPermissionItem, IProfileExtensionProvider, IProfileExtraField, IProfileExtraSection, IProfileFieldTemplateContext, IRefreshTokenResponse, IRegistrationData, IRegistrationExtensionProvider, IRegistrationExtraField, IRegistrationFieldTemplateContext, IRegistrationRequest, IRegistrationResponse, ISelectRequest, ISwitchCompanyRequest, IUpdateBranchRequest, IUpdateCompanyRequest, IUpdateUserRequest, IUser, IUserBranchPermission, IUserCompanyPermission, IUserDetailViewConfig, IUserFormExtensionProvider, IUserFormExtraField, IUserFormFieldTemplateContext, IUserInfo, IUserListExtensionProvider, IUserListExtraAction, IUserListExtraColumn, UserDetailViewMode };
|