verben-authentication-ui 1.1.0 → 1.1.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.
Files changed (159) hide show
  1. package/README.md +23 -1
  2. package/esm2022/src/lib/base/core/base-data-page.facade.mjs +215 -0
  3. package/esm2022/src/lib/base/core/base-data-page.service.mjs +103 -0
  4. package/esm2022/src/lib/base/core/base-data-page.state.mjs +203 -0
  5. package/esm2022/src/lib/base/handlers/filter-handler.service.mjs +53 -0
  6. package/esm2022/src/lib/base/handlers/search-handler.service.mjs +31 -0
  7. package/esm2022/src/lib/base/handlers/sort-handler.service.mjs +49 -0
  8. package/esm2022/src/lib/base/models/api-payload.mjs +4 -0
  9. package/esm2022/src/lib/base/models/page-config.interface.mjs +2 -0
  10. package/esm2022/src/lib/base/public-api.mjs +14 -6
  11. package/esm2022/src/lib/base/utils/column-helpers.mjs +45 -0
  12. package/esm2022/src/lib/components/button/button.component.mjs +3 -3
  13. package/esm2022/src/lib/components/forgot-password/forgot-password.component.mjs +2 -2
  14. package/esm2022/src/lib/components/mail/mail.component.mjs +3 -3
  15. package/esm2022/src/lib/components/mail-validation/mail-validation.component.mjs +5 -5
  16. package/esm2022/src/lib/components/o-auth/o-auth.component.mjs +3 -3
  17. package/esm2022/src/lib/components/otp-input/otp-input.component.mjs +2 -2
  18. package/esm2022/src/lib/components/reset-password/reset-password.component.mjs +2 -2
  19. package/esm2022/src/lib/components/role-control/base-table-style.mjs +6 -6
  20. package/esm2022/src/lib/components/role-control/role-control.component.mjs +3 -3
  21. package/esm2022/src/lib/components/sign-in/sign-in.component.mjs +4 -4
  22. package/esm2022/src/lib/components/sign-up/sign-up.component.mjs +6 -6
  23. package/esm2022/src/lib/components/sso/base-table-style.mjs +6 -6
  24. package/esm2022/src/lib/components/sso/sso-form/sso-form.component.mjs +3 -3
  25. package/esm2022/src/lib/components/sso/sso.component.mjs +3 -3
  26. package/esm2022/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.mjs +4 -4
  27. package/esm2022/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.mjs +5 -5
  28. package/esm2022/src/lib/components/user-management/public-api.mjs +2 -1
  29. package/esm2022/src/lib/components/user-management/user-management-card/user-management-card.component.mjs +23 -0
  30. package/esm2022/src/lib/components/user-management/user-management-form/user-management-form.component.mjs +53 -91
  31. package/esm2022/src/lib/components/user-management/user-management-table/user-management-table.component.mjs +68 -0
  32. package/esm2022/src/lib/components/user-management/user-management.component.mjs +98 -509
  33. package/esm2022/src/lib/components/user-management/user-management.module.mjs +11 -80
  34. package/esm2022/src/lib/components/user-management/user-status-badge/user-status-badge.component.mjs +8 -6
  35. package/esm2022/src/lib/components/user-management/user.config.mjs +94 -0
  36. package/esm2022/src/lib/components/user-management/user.facade.mjs +118 -0
  37. package/esm2022/src/lib/components/user-management/user.service.mjs +60 -0
  38. package/esm2022/src/lib/components/user-management/user.state.mjs +33 -0
  39. package/esm2022/src/lib/components/user-request/user-request.component.mjs +8 -8
  40. package/esm2022/src/lib/components/user-request-approval/public-api.mjs +2 -2
  41. package/esm2022/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +8 -6
  42. package/esm2022/src/lib/components/user-request-approval/user-access-request.config.mjs +79 -0
  43. package/esm2022/src/lib/components/user-request-approval/user-access-request.facade.mjs +123 -0
  44. package/esm2022/src/lib/components/user-request-approval/user-access-request.service.mjs +74 -0
  45. package/esm2022/src/lib/components/user-request-approval/user-access-request.state.mjs +26 -0
  46. package/esm2022/src/lib/components/user-request-approval/user-request-approval-card/user-request-approval-card.component.mjs +23 -0
  47. package/esm2022/src/lib/components/user-request-approval/user-request-approval-form/user-request-approval-form.component.mjs +124 -0
  48. package/esm2022/src/lib/components/user-request-approval/user-request-approval-table/user-request-approval-table.component.mjs +44 -0
  49. package/esm2022/src/lib/components/user-request-approval/user-request-approval.component.mjs +101 -273
  50. package/esm2022/src/lib/components/user-request-approval/user-request-approval.module.mjs +10 -74
  51. package/fesm2022/verben-authentication-ui-src-lib-base.mjs +596 -214
  52. package/fesm2022/verben-authentication-ui-src-lib-base.mjs.map +1 -1
  53. package/fesm2022/verben-authentication-ui-src-lib-components-button.mjs +2 -2
  54. package/fesm2022/verben-authentication-ui-src-lib-components-button.mjs.map +1 -1
  55. package/fesm2022/verben-authentication-ui-src-lib-components-forgot-password.mjs +2 -2
  56. package/fesm2022/verben-authentication-ui-src-lib-components-forgot-password.mjs.map +1 -1
  57. package/fesm2022/verben-authentication-ui-src-lib-components-mail-validation.mjs +4 -4
  58. package/fesm2022/verben-authentication-ui-src-lib-components-mail-validation.mjs.map +1 -1
  59. package/fesm2022/verben-authentication-ui-src-lib-components-mail.mjs +2 -2
  60. package/fesm2022/verben-authentication-ui-src-lib-components-mail.mjs.map +1 -1
  61. package/fesm2022/verben-authentication-ui-src-lib-components-o-auth.mjs +2 -2
  62. package/fesm2022/verben-authentication-ui-src-lib-components-o-auth.mjs.map +1 -1
  63. package/fesm2022/verben-authentication-ui-src-lib-components-otp-input.mjs +2 -2
  64. package/fesm2022/verben-authentication-ui-src-lib-components-otp-input.mjs.map +1 -1
  65. package/fesm2022/verben-authentication-ui-src-lib-components-reset-password.mjs +2 -2
  66. package/fesm2022/verben-authentication-ui-src-lib-components-reset-password.mjs.map +1 -1
  67. package/fesm2022/verben-authentication-ui-src-lib-components-role-control.mjs +7 -7
  68. package/fesm2022/verben-authentication-ui-src-lib-components-role-control.mjs.map +1 -1
  69. package/fesm2022/verben-authentication-ui-src-lib-components-sign-in.mjs +3 -3
  70. package/fesm2022/verben-authentication-ui-src-lib-components-sign-in.mjs.map +1 -1
  71. package/fesm2022/verben-authentication-ui-src-lib-components-sign-up.mjs +5 -5
  72. package/fesm2022/verben-authentication-ui-src-lib-components-sign-up.mjs.map +1 -1
  73. package/fesm2022/verben-authentication-ui-src-lib-components-sso.mjs +9 -9
  74. package/fesm2022/verben-authentication-ui-src-lib-components-sso.mjs.map +1 -1
  75. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-otp.mjs +3 -3
  76. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-otp.mjs.map +1 -1
  77. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-setup.mjs +4 -4
  78. package/fesm2022/verben-authentication-ui-src-lib-components-two-factor-auth-setup.mjs.map +1 -1
  79. package/fesm2022/verben-authentication-ui-src-lib-components-user-management.mjs +468 -831
  80. package/fesm2022/verben-authentication-ui-src-lib-components-user-management.mjs.map +1 -1
  81. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-approval.mjs +509 -952
  82. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-approval.mjs.map +1 -1
  83. package/fesm2022/verben-authentication-ui-src-lib-components-user-request.mjs +7 -7
  84. package/fesm2022/verben-authentication-ui-src-lib-components-user-request.mjs.map +1 -1
  85. package/package.json +42 -48
  86. package/src/lib/base/README.md +99 -0
  87. package/src/lib/base/core/base-data-page.facade.d.ts +65 -0
  88. package/src/lib/base/core/base-data-page.service.d.ts +43 -0
  89. package/src/lib/base/core/base-data-page.state.d.ts +68 -0
  90. package/src/lib/base/handlers/filter-handler.service.d.ts +13 -0
  91. package/src/lib/base/handlers/search-handler.service.d.ts +20 -0
  92. package/src/lib/base/handlers/sort-handler.service.d.ts +13 -0
  93. package/src/lib/base/models/api-payload.d.ts +2 -0
  94. package/src/lib/base/models/page-config.interface.d.ts +21 -0
  95. package/src/lib/base/public-api.d.ts +9 -5
  96. package/src/lib/base/utils/column-helpers.d.ts +16 -0
  97. package/src/lib/components/user-management/public-api.d.ts +1 -0
  98. package/src/lib/components/user-management/user-management-card/user-management-card.component.d.ts +11 -0
  99. package/src/lib/components/user-management/user-management-form/user-management-form.component.d.ts +12 -14
  100. package/src/lib/components/user-management/user-management-table/user-management-table.component.d.ts +30 -0
  101. package/src/lib/components/user-management/user-management.component.d.ts +28 -124
  102. package/src/lib/components/user-management/user-management.module.d.ts +8 -8
  103. package/src/lib/components/user-management/user-status-badge/user-status-badge.component.d.ts +1 -1
  104. package/src/lib/components/user-management/user.config.d.ts +13 -0
  105. package/src/lib/components/user-management/user.facade.d.ts +42 -0
  106. package/src/lib/components/user-management/user.service.d.ts +26 -0
  107. package/src/lib/components/user-management/user.state.d.ts +19 -0
  108. package/src/lib/components/user-request-approval/public-api.d.ts +1 -1
  109. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.d.ts +1 -1
  110. package/src/lib/components/user-request-approval/user-access-request.config.d.ts +13 -0
  111. package/src/lib/components/user-request-approval/user-access-request.facade.d.ts +36 -0
  112. package/src/lib/components/user-request-approval/user-access-request.service.d.ts +30 -0
  113. package/src/lib/components/user-request-approval/user-access-request.state.d.ts +16 -0
  114. package/src/lib/components/user-request-approval/user-request-approval-card/user-request-approval-card.component.d.ts +11 -0
  115. package/src/lib/components/user-request-approval/user-request-approval-form/user-request-approval-form.component.d.ts +47 -0
  116. package/src/lib/components/user-request-approval/user-request-approval-table/user-request-approval-table.component.d.ts +20 -0
  117. package/src/lib/components/user-request-approval/user-request-approval.component.d.ts +29 -68
  118. package/src/lib/components/user-request-approval/user-request-approval.module.d.ts +7 -6
  119. package/esm2022/src/lib/base/base-data.component.mjs +0 -80
  120. package/esm2022/src/lib/base/base-data.facade.mjs +0 -130
  121. package/esm2022/src/lib/base/base-data.service.mjs +0 -21
  122. package/esm2022/src/lib/base/base-data.state.mjs +0 -74
  123. package/esm2022/src/lib/base/models.mjs +0 -2
  124. package/esm2022/src/lib/components/user-management/base-table-style.mjs +0 -53
  125. package/esm2022/src/lib/components/user-management/services/user-management.service.mjs +0 -110
  126. package/esm2022/src/lib/components/user-management/user-management.columns.mjs +0 -53
  127. package/esm2022/src/lib/components/user-request-approval/access-request.columns.mjs +0 -29
  128. package/esm2022/src/lib/components/user-request-approval/base-table-style.mjs +0 -53
  129. package/esm2022/src/lib/components/user-request-approval/facades/user-access-request.facade.mjs +0 -260
  130. package/esm2022/src/lib/components/user-request-approval/helper.mjs +0 -56
  131. package/esm2022/src/lib/components/user-request-approval/services/user-access-request.service.mjs +0 -92
  132. package/esm2022/src/lib/components/user-request-approval/states/user-access-request.state.mjs +0 -92
  133. package/esm2022/src/lib/components/user-request-approval/user-request-form/user-request-form.component.mjs +0 -105
  134. package/esm2022/src/lib/components/user-request-process/index.mjs +0 -2
  135. package/esm2022/src/lib/components/user-request-process/public-api.mjs +0 -3
  136. package/esm2022/src/lib/components/user-request-process/user-request-process.component.mjs +0 -11
  137. package/esm2022/src/lib/components/user-request-process/user-request-process.module.mjs +0 -18
  138. package/esm2022/src/lib/components/user-request-process/verben-authentication-ui-src-lib-components-user-request-process.mjs +0 -5
  139. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-process.mjs +0 -34
  140. package/fesm2022/verben-authentication-ui-src-lib-components-user-request-process.mjs.map +0 -1
  141. package/src/lib/base/base-data.component.d.ts +0 -32
  142. package/src/lib/base/base-data.facade.d.ts +0 -27
  143. package/src/lib/base/base-data.service.d.ts +0 -14
  144. package/src/lib/base/base-data.state.d.ts +0 -28
  145. package/src/lib/base/models.d.ts +0 -11
  146. package/src/lib/components/user-management/base-table-style.d.ts +0 -1
  147. package/src/lib/components/user-management/services/user-management.service.d.ts +0 -44
  148. package/src/lib/components/user-management/user-management.columns.d.ts +0 -3
  149. package/src/lib/components/user-request-approval/access-request.columns.d.ts +0 -3
  150. package/src/lib/components/user-request-approval/base-table-style.d.ts +0 -1
  151. package/src/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +0 -39
  152. package/src/lib/components/user-request-approval/helper.d.ts +0 -7
  153. package/src/lib/components/user-request-approval/services/user-access-request.service.d.ts +0 -64
  154. package/src/lib/components/user-request-approval/states/user-access-request.state.d.ts +0 -35
  155. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.d.ts +0 -34
  156. package/src/lib/components/user-request-process/index.d.ts +0 -1
  157. package/src/lib/components/user-request-process/public-api.d.ts +0 -2
  158. package/src/lib/components/user-request-process/user-request-process.component.d.ts +0 -5
  159. package/src/lib/components/user-request-process/user-request-process.module.d.ts +0 -7
@@ -0,0 +1,20 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Debounces search terms. Emits the term after the user stops typing.
5
+ * Provided per page so each page owns its own debounce stream.
6
+ *
7
+ * `search$` is a stable observable whose debounce interval is read live from
8
+ * `debounceMs`, so `setDebounceTime()` can be called after subscribers have
9
+ * attached (e.g. from a runtime `@Input`) and still take effect.
10
+ */
11
+ export declare class SearchHandlerService implements OnDestroy {
12
+ private searchSubject;
13
+ private debounceMs;
14
+ search$: import("rxjs").Observable<string>;
15
+ search(term: string): void;
16
+ setDebounceTime(ms: number): void;
17
+ ngOnDestroy(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchHandlerService, never>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<SearchHandlerService>;
20
+ }
@@ -0,0 +1,13 @@
1
+ import { ColumnDefinition, SortCondition } from 'verben-ng-ui';
2
+ import { SearchPropertyValue } from '../models/api-payload';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Converts SortCondition[] emitted by lib-data-sort into the
6
+ * SearchPropertyValue[] payload the search API expects.
7
+ */
8
+ export declare class SortHandlerService {
9
+ buildSortPayload<T>(sorts: SortCondition[], columns: ColumnDefinition<T>[]): SearchPropertyValue[];
10
+ private mapSortDirection;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<SortHandlerService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<SortHandlerService>;
13
+ }
@@ -0,0 +1,2 @@
1
+ export { SearchOperator, SearchPropertySign, SearchPropertyValueType, SortDirection, } from 'verben-authentication-ui/src/lib/models';
2
+ export type { SearchPropertyValue } from 'verben-authentication-ui/src/lib/models';
@@ -0,0 +1,21 @@
1
+ import { CardData, ColumnDefinition, FormGroupConfig } from 'verben-ng-ui';
2
+ /**
3
+ * Configuration for a base data page component.
4
+ * Collects all page-specific settings in one place.
5
+ */
6
+ export interface BasePageConfig<T> {
7
+ columns: ColumnDefinition<T>[];
8
+ cardDataMapper: (item: T) => CardData;
9
+ endpoint: string;
10
+ pageSize: number;
11
+ searchDebounceTime?: number;
12
+ formGroupConfig?: FormGroupConfig<any>;
13
+ enableCreate?: boolean;
14
+ enableImport?: boolean;
15
+ enableExport?: boolean;
16
+ enableFilter?: boolean;
17
+ enableSort?: boolean;
18
+ enableSearch?: boolean;
19
+ enableCardView?: boolean;
20
+ enableTableRowEdit?: boolean;
21
+ }
@@ -1,5 +1,9 @@
1
- export * from './base-data.component';
2
- export * from './base-data.facade';
3
- export * from './base-data.service';
4
- export * from './base-data.state';
5
- export * from './models';
1
+ export * from './models/api-payload';
2
+ export * from './models/page-config.interface';
3
+ export * from './utils/column-helpers';
4
+ export * from './core/base-data-page.facade';
5
+ export * from './core/base-data-page.service';
6
+ export * from './core/base-data-page.state';
7
+ export * from './handlers/filter-handler.service';
8
+ export * from './handlers/search-handler.service';
9
+ export * from './handlers/sort-handler.service';
@@ -0,0 +1,16 @@
1
+ import { ColumnDefinition } from 'verben-ng-ui';
2
+ import { SearchPropertyValueType } from '../models/api-payload';
3
+ /**
4
+ * Extract property name from column definition.
5
+ * Only columns with accessorKey can be used for filter/sort.
6
+ */
7
+ export declare function getPropertyName<T>(column: ColumnDefinition<T>): string;
8
+ /**
9
+ * Infer API property type from column definition.
10
+ * Uses basic heuristics based on the accessor key name.
11
+ */
12
+ export declare function inferPropertyType<T>(column: ColumnDefinition<T>): SearchPropertyValueType;
13
+ /**
14
+ * Find a column by its id.
15
+ */
16
+ export declare function findColumn<T>(columns: ColumnDefinition<T>[], columnId: string): ColumnDefinition<T> | undefined;
@@ -1,2 +1,3 @@
1
1
  export * from './user-management.component';
2
2
  export * from './user-management.module';
3
+ export * from './user-status-badge/user-status-badge.component';
@@ -0,0 +1,11 @@
1
+ import { User } from 'verben-authentication-ui/src/lib/models';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Presentational card for a single user in the card view.
5
+ */
6
+ export declare class UserManagementCardComponent {
7
+ user: User;
8
+ selected: boolean;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserManagementCardComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserManagementCardComponent, "lib-user-management-card", never, { "user": { "alias": "user"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, {}, never, never, true, never>;
11
+ }
@@ -1,25 +1,23 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { Role, Status, Tag, User } from 'verben-authentication-ui/src/lib/models';
4
- import { EnvironmentService } from 'verben-authentication-ui/src/lib/services';
5
- import { CardData } from 'verben-ng-ui';
6
- import { UserManagementService } from '../services/user-management.service';
7
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * Form for editing a user's role, tags, and status.
7
+ * Identity fields are read-only.
8
+ */
8
9
  export declare class UserManagementFormComponent {
9
10
  private fb;
10
- private userManagementService;
11
- private envService;
12
- set currentData(value: CardData | null);
13
- roles: Role[];
14
- tags: Tag[];
15
- switchView: EventEmitter<undefined>;
16
- onFormSave: EventEmitter<Partial<User>>;
11
+ user: import("@angular/core").InputSignal<User | undefined>;
12
+ roles: import("@angular/core").InputSignal<Role[]>;
13
+ tags: import("@angular/core").InputSignal<Tag[]>;
14
+ save: EventEmitter<User>;
15
+ switchToTable: EventEmitter<void>;
17
16
  form: FormGroup;
18
17
  statusOptions: Status[];
19
- constructor(fb: FormBuilder, userManagementService: UserManagementService, envService: EnvironmentService);
20
- ngOnInit(): void;
18
+ constructor(fb: FormBuilder);
21
19
  onSave(): void;
22
- onDelete(): void;
20
+ onSwitchToTable(): void;
23
21
  static ɵfac: i0.ɵɵFactoryDeclaration<UserManagementFormComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<UserManagementFormComponent, "lib-user-request-form", never, { "currentData": { "alias": "currentData"; "required": false; }; "roles": { "alias": "roles"; "required": false; }; "tags": { "alias": "tags"; "required": false; }; }, { "switchView": "switchView"; "onFormSave": "onFormSave"; }, never, never, false, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserManagementFormComponent, "lib-user-management-form", never, { "user": { "alias": "user"; "required": false; "isSignal": true; }; "roles": { "alias": "roles"; "required": false; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; }, { "save": "save"; "switchToTable": "switchToTable"; }, never, never, true, never>;
25
23
  }
@@ -0,0 +1,30 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { Status, User } from 'verben-authentication-ui/src/lib/models';
3
+ import { ColumnDefinition, DataTableComponent, FormGroupConfig } from 'verben-ng-ui';
4
+ import { UserFacade } from '../user.facade';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Table view for users with inline row editing.
8
+ */
9
+ export declare class UserManagementTableComponent {
10
+ facade: UserFacade;
11
+ tableView: import("@angular/core").Signal<DataTableComponent<User> | undefined>;
12
+ users: User[];
13
+ columns: ColumnDefinition<User>[];
14
+ isLoading: boolean;
15
+ formGroupConfig?: FormGroupConfig<any>;
16
+ view: EventEmitter<User>;
17
+ delete: EventEmitter<User>;
18
+ saveRow: EventEmitter<User>;
19
+ statuses: Status[];
20
+ constructor(facade: UserFacade);
21
+ onView(user: User): void;
22
+ onDelete(user: User): void;
23
+ onRowSaved(event: {
24
+ index: number;
25
+ key: number | string;
26
+ data: Partial<User>;
27
+ }): void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserManagementTableComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserManagementTableComponent, "lib-user-management-table", never, { "users": { "alias": "users"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "formGroupConfig": { "alias": "formGroupConfig"; "required": false; }; }, { "view": "view"; "delete": "delete"; "saveRow": "saveRow"; }, never, never, true, never>;
30
+ }
@@ -1,130 +1,34 @@
1
- import { WritableSignal } from '@angular/core';
2
- import { PagedResult } from 'verben-authentication-ui/src/lib/models';
3
- import { HttpWebRequestService, UtilService } from 'verben-authentication-ui/src/lib/services';
4
- import { FormBuilder } from '@angular/forms';
5
- import { ActivatedRoute } from '@angular/router';
6
- import { Subject } from 'rxjs';
7
- import { UserAccessRequestService } from 'verben-authentication-ui/src/lib/components/user-request-approval';
8
- import { ConditionOptions, Role, Status, Tag, User } from 'verben-authentication-ui/src/lib/models';
9
- import { EnvironmentService } from 'verben-authentication-ui/src/lib/services';
10
- import { CardData, CardDataViewComponent, ColumnDefinition, DataViewComponent, DropdownChangeEvent, FormGroupConfig, IDataFilter } from 'verben-ng-ui';
11
- import { UserManagementService } from './services/user-management.service';
12
- import { UserManagementFormComponent } from './user-management-form/user-management-form.component';
1
+ import { OnInit } from '@angular/core';
2
+ import { User } from 'verben-authentication-ui/src/lib/models';
3
+ import { CardData, CardDataViewComponent, DataViewComponent, FilterCondition, SortCondition } from 'verben-ng-ui';
4
+ import { UserFacade } from './user.facade';
13
5
  import * as i0 from "@angular/core";
14
- interface TestParentObject {
15
- Id: string;
16
- Name: string;
17
- }
18
- export declare class UserManagementComponent {
19
- private route;
20
- private userManagementService;
21
- private userRole;
22
- private server;
23
- private utilService;
24
- private envSvc;
25
- private fb;
26
- cardDataView: CardDataViewComponent;
27
- dataView: DataViewComponent;
28
- childComponent: UserManagementFormComponent;
29
- private currentSearchTerm;
30
- allColumns: ColumnDefinition<User>[];
31
- filteredColumns: ColumnDefinition<User>[];
32
- skip: number;
33
- users: User[];
34
- searchTerm$: Subject<string>;
6
+ /**
7
+ * User-management page. Lists users in table/card views with inline row editing
8
+ * and a form panel, driven by the base-page facade.
9
+ */
10
+ export declare class UserManagementComponent implements OnInit {
11
+ facade: UserFacade;
35
12
  searchDebounceTime: number;
36
13
  pageSize: number;
37
- pageState: PagedResult<User> | null;
38
- errorMessage: string;
39
- appliedFilters: boolean;
40
- isLoading: boolean;
41
- hasMore: boolean;
42
- limit: number;
43
- sortParam: string;
44
- sortOrder: string;
45
- Roles: Role[];
46
- Tags: WritableSignal<Tag[]>;
47
- dataFit: PagedResult<User>;
48
- currentFilters: IDataFilter[];
49
- currentSorts: IDataFilter[];
14
+ /** Optional role filter, applied as the initial search term. */
50
15
  role: string;
51
- cardContextHistory: CardData[];
52
- param: string | null | undefined;
53
- formGroupConfig: WritableSignal<FormGroupConfig<any>>;
54
- statuses: Status[];
55
- constructor(route: ActivatedRoute, userManagementService: UserManagementService, userRole: UserAccessRequestService, server: HttpWebRequestService, utilService: UtilService, envSvc: EnvironmentService, fb: FormBuilder);
56
- ngOnInit(): Promise<void>;
57
- cardData: CardData[];
58
- data: any[];
59
- fetchUsers(sortValue?: string, order?: string): Promise<void>;
60
- getRoles(): Promise<undefined>;
61
- getTags(): Promise<undefined>;
62
- handleRoleId(value: string): string;
63
- /**
64
- * Format users into CardData for the UI library
65
- * @param users Array of users to format
66
- * @returns Array of CardData
67
- */
68
- private formatCardData;
69
- columns: ColumnDefinition<User>[];
70
- styles: any;
71
- selectedParent?: string;
72
- basicOption?: string;
73
- selectedOption: string[];
74
- selectedOptionTwo: string[];
75
- selectedOptionThree?: string;
76
- missingObject: any;
77
- isGridView: boolean;
78
- currentData: CardData;
79
- selectedColumnCount: number;
80
- selectedFilterTableCount: number;
81
- isOPen: boolean;
82
- selectedSortCount: number;
83
- showFilter: boolean;
84
- searchTerm: string;
85
- showColumn: boolean;
86
- showSort: boolean;
87
- selectedAll: boolean;
88
- visibleColumns: IDataFilter[];
89
- filterArray: IDataFilter[];
90
- sortOptions: IDataFilter[];
91
- testParents: TestParentObject[];
92
- getParentLabel(context: any): string;
93
- onSave(): void;
94
- onDataSave(event: {
95
- index: number;
96
- key: number | string;
97
- data: Partial<User>;
98
- }): Promise<void>;
99
- onDelete(): void;
100
- onDropdownChange(event: DropdownChangeEvent): void;
101
- onSelectionChange(selectedRows: User[]): void;
102
- handleExport(exportedData: Partial<any>[]): void;
103
- private downloadCSV;
104
- getCardDataByMailAddress(mailAddress: string): CardData | undefined;
105
- openDetailView(mailAddress: string): void;
106
- reset(): void;
107
- clearData(): void;
108
- loadMore(): void;
109
- onColumnChange(event: boolean): void;
110
- onSortChange(event: boolean): void;
111
- onColumnsUpdated(updatedColumns: IDataFilter[]): void;
112
- postSearch(payload: any): Promise<void>;
113
- onFilterApplied(appliedFilter: IDataFilter[]): void;
114
- getCondition(value: any): ConditionOptions | undefined;
115
- onSortUpdated(updatedSorts: IDataFilter[]): void;
116
- onSearch(event: {
117
- key: string;
118
- value: string;
119
- }): Promise<void>;
120
- clearLogs(sortValue?: string, order?: string): void;
121
- onViewChange(isGridView: boolean): void;
122
- onStateChange(event: {
123
- key: string;
124
- value: boolean;
125
- }): void;
126
- getRoleName(roleId: string): string;
16
+ vdv: DataViewComponent;
17
+ cardDataView: CardDataViewComponent;
18
+ private destroyRef;
19
+ constructor(facade: UserFacade);
20
+ ngOnInit(): void;
21
+ private clearCardView;
22
+ onFilterApplied(filters: FilterCondition[]): void;
23
+ onSortApplied(sorts: SortCondition[]): void;
24
+ onSearch(term: string): void;
25
+ onColumnsUpdated(columns: any): void;
26
+ onLoadMore(): void;
27
+ onViewUser(user: User): void;
28
+ onDeleteUser(user: User): void;
29
+ onSaveRow(user: User): void;
30
+ userCardClicked(selectedCard: CardData): void;
31
+ onSaveUser(user: User): void;
127
32
  static ɵfac: i0.ɵɵFactoryDeclaration<UserManagementComponent, never>;
128
- static ɵcmp: i0.ɵɵComponentDeclaration<UserManagementComponent, "lib-user-management", never, { "searchDebounceTime": { "alias": "searchDebounceTime"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; }, {}, never, never, false, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserManagementComponent, "lib-user-management", never, { "searchDebounceTime": { "alias": "searchDebounceTime"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "role": { "alias": "role"; "required": false; }; }, {}, never, never, true, never>;
129
34
  }
130
- export {};
@@ -1,14 +1,14 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./user-management.component";
3
- import * as i2 from "./user-management-form/user-management-form.component";
4
- import * as i3 from "./user-status-badge/user-status-badge.component";
5
- import * as i4 from "@angular/common/http";
6
- import * as i5 from "@angular/common";
7
- import * as i6 from "verben-ng-ui";
8
- import * as i7 from "@angular/forms";
9
- import * as i8 from "verben-authentication-ui/src/lib/components/user-request-approval";
3
+ import * as i2 from "./user-status-badge/user-status-badge.component";
4
+ /**
5
+ * Backward-compatibility shim. The components are standalone; this module keeps
6
+ * the historical `LibUserManagementModule` name so existing NgModule-based
7
+ * consumers keep working after the rebuild. It no longer depends on the
8
+ * access-request module.
9
+ */
10
10
  export declare class LibUserManagementModule {
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<LibUserManagementModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<LibUserManagementModule, [typeof i1.UserManagementComponent, typeof i2.UserManagementFormComponent, typeof i3.UserStatusBadgeComponent], [typeof i4.HttpClientModule, typeof i5.CommonModule, typeof i6.DataTableModule, typeof i6.CardModule, typeof i6.SvgModule, typeof i6.DataViewModule, typeof i6.CardDataViewModule, typeof i6.SortTableModule, typeof i6.VisibleColumnModule, typeof i6.TableFilterModule, typeof i6.DataExportModule, typeof i6.DataXportModule, typeof i7.FormsModule, typeof i7.ReactiveFormsModule, typeof i6.VerbenaInputModule, typeof i6.VerbenaButtonModule, typeof i6.VerbenaBadgeModule, typeof i6.DropDownModule, typeof i6.VerbenaSwitchModule, typeof i8.LibUserRequestApprovalModule], [typeof i1.UserManagementComponent]>;
12
+ static ɵmod: i0.ɵɵNgModuleDeclaration<LibUserManagementModule, never, [typeof i1.UserManagementComponent, typeof i2.UserStatusBadgeComponent], [typeof i1.UserManagementComponent, typeof i2.UserStatusBadgeComponent]>;
13
13
  static ɵinj: i0.ɵɵInjectorDeclaration<LibUserManagementModule>;
14
14
  }
@@ -8,5 +8,5 @@ export declare class UserStatusBadgeComponent {
8
8
  label: string;
9
9
  };
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<UserStatusBadgeComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<UserStatusBadgeComponent, "lib-user-status-badge", never, { "status": { "alias": "status"; "required": false; }; }, {}, never, never, false, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserStatusBadgeComponent, "lib-user-status-badge", never, { "status": { "alias": "status"; "required": false; }; }, {}, never, never, true, never>;
12
12
  }
@@ -0,0 +1,13 @@
1
+ import { User } from 'verben-authentication-ui/src/lib/models';
2
+ import { BasePageConfig } from 'verben-authentication-ui/src/lib/base';
3
+ import { ColumnDefinition } from 'verben-ng-ui';
4
+ /**
5
+ * Column definitions for the user table.
6
+ * Single source of truth for table, filter, sort, and export.
7
+ * The role column keys on `RoleID`; the table renders it as the role name.
8
+ */
9
+ export declare const USER_COLUMNS: ColumnDefinition<User>[];
10
+ /**
11
+ * Page configuration for user management.
12
+ */
13
+ export declare const USER_CONFIG: BasePageConfig<User>;
@@ -0,0 +1,42 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Role, Tag, User } from 'verben-authentication-ui/src/lib/models';
3
+ import { UtilService } from 'verben-authentication-ui/src/lib/services';
4
+ import { BaseDataPageFacade, SearchHandlerService } from 'verben-authentication-ui/src/lib/base';
5
+ import { ColumnDefinition } from 'verben-ng-ui';
6
+ import { UserService } from './user.service';
7
+ import { UserState } from './user.state';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * Facade for the user-management page.
11
+ */
12
+ export declare class UserFacade extends BaseDataPageFacade<User> {
13
+ private userService;
14
+ private blankUser?;
15
+ constructor(state: UserState, service: UserService, searchHandler: SearchHandlerService, utilService: UtilService);
16
+ get roles$(): Observable<Role[]>;
17
+ get tags$(): Observable<Tag[]>;
18
+ applyRuntimeConfig(options: {
19
+ pageSize?: number;
20
+ searchDebounceTime?: number;
21
+ }): void;
22
+ /** Seed an initial search term (used by the optional `role` input). */
23
+ setInitialSearch(term: string): void;
24
+ loadRoles(): Promise<void>;
25
+ loadTags(): Promise<void>;
26
+ getRoleName(roleId: string): string;
27
+ /**
28
+ * Select the user to show in the form. The form template binds to
29
+ * currentCardData(), so route selection through selectCard (reusing the
30
+ * matching card from the loaded list when present) rather than a separate
31
+ * selected-user stream that nothing reads.
32
+ */
33
+ openForm(user?: User): void;
34
+ closeForm(): void;
35
+ handleColumnsUpdated(columns: ColumnDefinition<User>[]): void;
36
+ saveUser(user: User): Promise<boolean>;
37
+ deleteUser(id: string): Promise<boolean>;
38
+ get emptyUser(): User;
39
+ private createEmptyUser;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserFacade, never>;
41
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserFacade>;
42
+ }
@@ -0,0 +1,26 @@
1
+ import { Role, Tag, User } from 'verben-authentication-ui/src/lib/models';
2
+ import { HttpWebRequestService } from 'verben-authentication-ui/src/lib/services';
3
+ import { BaseDataPageService, FilterHandlerService, SortHandlerService } from 'verben-authentication-ui/src/lib/base';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Service for user API operations.
7
+ *
8
+ * The auth API pluralises names, appends a `/{sortParam}/{sortOrder}` suffix to
9
+ * reads, and deletes via a query string, so the base URL seams are overridden.
10
+ * Roles/tags are loaded here so this page no longer depends on the
11
+ * access-request module.
12
+ */
13
+ export declare class UserService extends BaseDataPageService<User> {
14
+ private readonly defaultSort;
15
+ constructor(server: HttpWebRequestService, filterHandler: FilterHandlerService, sortHandler: SortHandlerService);
16
+ getEndpoint(): string;
17
+ protected listUrl(skip: number, limit: number): string;
18
+ protected searchTermUrl(term: string, skip: number, limit: number): string;
19
+ protected filterSearchUrl(skip: number, limit: number): string;
20
+ protected saveUrl(): string;
21
+ protected deleteUrl(itemIds: string[]): string;
22
+ getRoles(): Promise<Role[]>;
23
+ getTags(): Promise<Tag[]>;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
26
+ }
@@ -0,0 +1,19 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Role, Tag, User } from 'verben-authentication-ui/src/lib/models';
3
+ import { BaseDataPageState } from 'verben-authentication-ui/src/lib/base';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * State for the user-management page.
7
+ * Adds the roles/tags lists used by the form's dropdowns.
8
+ */
9
+ export declare class UserState extends BaseDataPageState<User> {
10
+ private roles$;
11
+ private tags$;
12
+ getRoles$(): Observable<Role[]>;
13
+ getRolesValue(): Role[];
14
+ setRoles(roles: Role[]): void;
15
+ getTags$(): Observable<Tag[]>;
16
+ setTags(tags: Tag[]): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserState, never>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserState>;
19
+ }
@@ -1,4 +1,4 @@
1
1
  export * from './user-request-approval.component';
2
2
  export * from './user-request-approval.module';
3
3
  export * from './user-access-request-status-badge/user-access-request-status-badge.component';
4
- export * from './services/user-access-request.service';
4
+ export * from './user-access-request.service';
@@ -8,5 +8,5 @@ export declare class UserAccessRequestStatusBadgeComponent {
8
8
  label: string;
9
9
  };
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<UserAccessRequestStatusBadgeComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<UserAccessRequestStatusBadgeComponent, "lib-user-access-request-status-badge", never, { "status": { "alias": "status"; "required": false; }; }, {}, never, never, false, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserAccessRequestStatusBadgeComponent, "lib-user-access-request-status-badge", never, { "status": { "alias": "status"; "required": false; }; }, {}, never, never, true, never>;
12
12
  }
@@ -0,0 +1,13 @@
1
+ import { UserAccessRequest } from 'verben-authentication-ui/src/lib/models';
2
+ import { BasePageConfig } from 'verben-authentication-ui/src/lib/base';
3
+ import { ColumnDefinition } from 'verben-ng-ui';
4
+ /**
5
+ * Column definitions for the access-request table.
6
+ * Single source of truth for table, filter, sort, and export.
7
+ */
8
+ export declare const USER_ACCESS_REQUEST_COLUMNS: ColumnDefinition<UserAccessRequest>[];
9
+ /**
10
+ * Page configuration for access-request approval.
11
+ * Create/import are disabled — this is an approval workflow, not CRUD create.
12
+ */
13
+ export declare const USER_ACCESS_REQUEST_CONFIG: BasePageConfig<UserAccessRequest>;
@@ -0,0 +1,36 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Role, UserAccessRequest } from 'verben-authentication-ui/src/lib/models';
3
+ import { UtilService } from 'verben-authentication-ui/src/lib/services';
4
+ import { BaseDataPageFacade, SearchHandlerService } from 'verben-authentication-ui/src/lib/base';
5
+ import { ColumnDefinition } from 'verben-ng-ui';
6
+ import { UserAccessRequestService } from './user-access-request.service';
7
+ import { UserAccessRequestState } from './user-access-request.state';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * Facade for the access-request approval page.
11
+ * Adds the approve/reject workflow on top of the generic base facade.
12
+ */
13
+ export declare class UserAccessRequestFacade extends BaseDataPageFacade<UserAccessRequest> {
14
+ private requestService;
15
+ private blankRequest?;
16
+ constructor(state: UserAccessRequestState, service: UserAccessRequestService, searchHandler: SearchHandlerService, utilService: UtilService);
17
+ get roles$(): Observable<Role[]>;
18
+ /**
19
+ * Select the request to show in the form. The form template binds to
20
+ * currentCardData(), so route selection through selectCard (reusing the
21
+ * matching card from the loaded list when present) rather than a separate
22
+ * selected-request stream that nothing reads.
23
+ */
24
+ openForm(request?: UserAccessRequest): void;
25
+ closeForm(): void;
26
+ handleColumnsUpdated(columns: ColumnDefinition<UserAccessRequest>[]): void;
27
+ loadRoles(): Promise<void>;
28
+ approveRequest(request: UserAccessRequest, roleId: string): Promise<boolean>;
29
+ rejectRequest(request: UserAccessRequest, comment?: string): Promise<boolean>;
30
+ private process;
31
+ deleteRequest(request: UserAccessRequest): Promise<boolean>;
32
+ get emptyRequest(): UserAccessRequest;
33
+ private createEmptyRequest;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserAccessRequestFacade, never>;
35
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserAccessRequestFacade>;
36
+ }
@@ -0,0 +1,30 @@
1
+ import { ErrorResponse, Role, Tag, UserAccessRequest } from 'verben-authentication-ui/src/lib/models';
2
+ import { HttpWebRequestService } from 'verben-authentication-ui/src/lib/services';
3
+ import { BaseDataPageService, FilterHandlerService, SortHandlerService } from 'verben-authentication-ui/src/lib/base';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Service for access-request API operations.
7
+ *
8
+ * The auth API pluralises names and appends a `/{sortParam}/{sortOrder}` suffix
9
+ * to every read, so the base URL seams are overridden accordingly. It also
10
+ * carries an approve/reject workflow and a bespoke delete-by-email endpoint that
11
+ * have no analog in the generic CRUD base.
12
+ *
13
+ * Kept publicly exported under its original name for backward compatibility.
14
+ */
15
+ export declare class UserAccessRequestService extends BaseDataPageService<UserAccessRequest> {
16
+ private readonly defaultSort;
17
+ constructor(server: HttpWebRequestService, filterHandler: FilterHandlerService, sortHandler: SortHandlerService);
18
+ getEndpoint(): string;
19
+ protected listUrl(skip: number, limit: number): string;
20
+ protected searchTermUrl(term: string, skip: number, limit: number): string;
21
+ protected filterSearchUrl(skip: number, limit: number): string;
22
+ protected saveUrl(): string;
23
+ deleteItems(emails: string[]): Promise<boolean | ErrorResponse>;
24
+ /** Approve (isApproval=true) or reject (false) the given requests. */
25
+ processRequests(requests: UserAccessRequest[], isApproval: boolean): Promise<UserAccessRequest[] | ErrorResponse>;
26
+ getRoles(): Promise<Role[]>;
27
+ getTags(): Promise<Tag[]>;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserAccessRequestService, never>;
29
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserAccessRequestService>;
30
+ }
@@ -0,0 +1,16 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Role, UserAccessRequest } from 'verben-authentication-ui/src/lib/models';
3
+ import { BaseDataPageState } from 'verben-authentication-ui/src/lib/base';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * State for the access-request approval page.
7
+ * Adds the roles list used by the form's role dropdown.
8
+ */
9
+ export declare class UserAccessRequestState extends BaseDataPageState<UserAccessRequest> {
10
+ private roles$;
11
+ getRoles$(): Observable<Role[]>;
12
+ getRolesValue(): Role[];
13
+ setRoles(roles: Role[]): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserAccessRequestState, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<UserAccessRequestState>;
16
+ }
@@ -0,0 +1,11 @@
1
+ import { UserAccessRequest } from 'verben-authentication-ui/src/lib/models';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Presentational card for a single access request in the card view.
5
+ */
6
+ export declare class UserRequestApprovalCardComponent {
7
+ request: UserAccessRequest;
8
+ selected: boolean;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserRequestApprovalCardComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<UserRequestApprovalCardComponent, "lib-user-request-approval-card", never, { "request": { "alias": "request"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, {}, never, never, true, never>;
11
+ }