@memberjunction/ng-explorer-settings 6.1.4 → 6.2.0-edge.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/dist/lib/account-info/account-info.component.d.ts +1 -1
- package/dist/lib/account-info/account-info.component.js +2 -2
- package/dist/lib/account-info/account-info.component.js.map +1 -1
- package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts +93 -10
- package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts.map +1 -1
- package/dist/lib/application-management/application-dialog/application-dialog.component.js +232 -80
- package/dist/lib/application-management/application-dialog/application-dialog.component.js.map +1 -1
- package/dist/lib/application-management/application-management.component.d.ts +94 -11
- package/dist/lib/application-management/application-management.component.d.ts.map +1 -1
- package/dist/lib/application-management/application-management.component.js +231 -67
- package/dist/lib/application-management/application-management.component.js.map +1 -1
- package/dist/lib/application-settings/application-settings.component.d.ts +4 -4
- package/dist/lib/application-settings/application-settings.component.js +10 -10
- package/dist/lib/application-settings/application-settings.component.js.map +1 -1
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts +88 -10
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -1
- package/dist/lib/entity-permissions/entity-permissions.component.js +219 -63
- package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -1
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts +44 -6
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts.map +1 -1
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js +117 -43
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js.map +1 -1
- package/dist/lib/notification-preferences/notification-preferences.component.d.ts +25 -3
- package/dist/lib/notification-preferences/notification-preferences.component.d.ts.map +1 -1
- package/dist/lib/notification-preferences/notification-preferences.component.js +62 -18
- package/dist/lib/notification-preferences/notification-preferences.component.js.map +1 -1
- package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts +32 -4
- package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts.map +1 -1
- package/dist/lib/role-management/role-dialog/role-dialog.component.js +84 -30
- package/dist/lib/role-management/role-dialog/role-dialog.component.js.map +1 -1
- package/dist/lib/role-management/role-management-agent-context.d.ts +12 -4
- package/dist/lib/role-management/role-management-agent-context.d.ts.map +1 -1
- package/dist/lib/role-management/role-management-agent-context.js +26 -10
- package/dist/lib/role-management/role-management-agent-context.js.map +1 -1
- package/dist/lib/role-management/role-management.component.d.ts +95 -11
- package/dist/lib/role-management/role-management.component.d.ts.map +1 -1
- package/dist/lib/role-management/role-management.component.js +259 -91
- package/dist/lib/role-management/role-management.component.js.map +1 -1
- package/dist/lib/settings/settings.component.d.ts +87 -11
- package/dist/lib/settings/settings.component.d.ts.map +1 -1
- package/dist/lib/settings/settings.component.js +211 -65
- package/dist/lib/settings/settings.component.js.map +1 -1
- package/dist/lib/shared/settings-card.component.d.ts +24 -4
- package/dist/lib/shared/settings-card.component.d.ts.map +1 -1
- package/dist/lib/shared/settings-card.component.js +46 -6
- package/dist/lib/shared/settings-card.component.js.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.d.ts +172 -18
- package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.js +320 -108
- package/dist/lib/sql-logging/sql-logging.component.js.map +1 -1
- package/dist/lib/user-app-config/user-app-config-content.component.js +3 -3
- package/dist/lib/user-app-config/user-app-config-content.component.js.map +1 -1
- package/dist/lib/user-app-config/user-app-config-reorder.d.ts +4 -0
- package/dist/lib/user-app-config/user-app-config-reorder.d.ts.map +1 -1
- package/dist/lib/user-app-config/user-app-config-reorder.js +11 -3
- package/dist/lib/user-app-config/user-app-config-reorder.js.map +1 -1
- package/dist/lib/user-management/transaction-group-refusals.d.ts +45 -0
- package/dist/lib/user-management/transaction-group-refusals.d.ts.map +1 -0
- package/dist/lib/user-management/transaction-group-refusals.js +49 -0
- package/dist/lib/user-management/transaction-group-refusals.js.map +1 -0
- package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts +44 -6
- package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts.map +1 -1
- package/dist/lib/user-management/user-dialog/user-dialog.component.js +134 -45
- package/dist/lib/user-management/user-dialog/user-dialog.component.js.map +1 -1
- package/dist/lib/user-management/user-management-agent-context.d.ts +10 -0
- package/dist/lib/user-management/user-management-agent-context.d.ts.map +1 -1
- package/dist/lib/user-management/user-management-agent-context.js +26 -6
- package/dist/lib/user-management/user-management-agent-context.js.map +1 -1
- package/dist/lib/user-management/user-management.component.d.ts +174 -16
- package/dist/lib/user-management/user-management.component.d.ts.map +1 -1
- package/dist/lib/user-management/user-management.component.js +501 -177
- package/dist/lib/user-management/user-management.component.js.map +1 -1
- package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts +97 -15
- package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts.map +1 -1
- package/dist/lib/user-profile-settings/user-profile-settings.component.js +280 -116
- package/dist/lib/user-profile-settings/user-profile-settings.component.js.map +1 -1
- package/package.json +20 -20
|
@@ -20,8 +20,12 @@ export type UserStatusFilter = (typeof VALID_USER_STATUS_FILTERS)[number];
|
|
|
20
20
|
*/
|
|
21
21
|
export declare const USER_AGENT_CONTEXT_NAME_LIST_CAP = 25;
|
|
22
22
|
/** Type-guard for a user-status filter string. Keeps the SwitchUserStatusFilter tool tolerant. */
|
|
23
|
+
export declare function IsValidUserStatusFilter(value: unknown): value is UserStatusFilter;
|
|
24
|
+
/** @deprecated Use {@link IsValidUserStatusFilter}. */
|
|
23
25
|
export declare function isValidUserStatusFilter(value: unknown): value is UserStatusFilter;
|
|
24
26
|
/** Cap a list of names to {@link USER_AGENT_CONTEXT_NAME_LIST_CAP}. Pure + deterministic. */
|
|
27
|
+
export declare function CapUserNames(names: readonly string[]): string[];
|
|
28
|
+
/** @deprecated Use {@link CapUserNames}. */
|
|
25
29
|
export declare function capUserNames(names: readonly string[]): string[];
|
|
26
30
|
/**
|
|
27
31
|
* A minimal, NON-SENSITIVE descriptor of a user, supplied by the component so the pure
|
|
@@ -57,12 +61,16 @@ export type NamedLookupResult<T> = {
|
|
|
57
61
|
* Pure + deterministic over the supplied candidate list. On a miss, returns a clear error
|
|
58
62
|
* listing a sample of available names so the agent can correct itself.
|
|
59
63
|
*/
|
|
64
|
+
export declare function ResolveUserByIDOrName(input: string, candidates: readonly UserNameCandidate[]): NamedLookupResult<UserNameCandidate>;
|
|
65
|
+
/** @deprecated Use {@link ResolveUserByIDOrName}. */
|
|
60
66
|
export declare function resolveUserByIDOrName(input: string, candidates: readonly UserNameCandidate[]): NamedLookupResult<UserNameCandidate>;
|
|
61
67
|
/**
|
|
62
68
|
* Resolve an agent-supplied role reference (id or display name) against the loaded roles,
|
|
63
69
|
* tolerantly: exact ID → exact name → first contains. Backs FilterUsersByRole so the agent
|
|
64
70
|
* can say either the role name or the role id.
|
|
65
71
|
*/
|
|
72
|
+
export declare function ResolveRoleByIDOrName(input: string, candidates: readonly RoleNameCandidate[]): NamedLookupResult<RoleNameCandidate>;
|
|
73
|
+
/** @deprecated Use {@link ResolveRoleByIDOrName}. */
|
|
66
74
|
export declare function resolveRoleByIDOrName(input: string, candidates: readonly RoleNameCandidate[]): NamedLookupResult<RoleNameCandidate>;
|
|
67
75
|
/**
|
|
68
76
|
* The plain, component-supplied snapshot used to build the user-management agent context.
|
|
@@ -103,5 +111,7 @@ export interface UserManagementAgentContextInput {
|
|
|
103
111
|
* stays unit-testable and decoupled from change-detection timing. Bounds every name list and
|
|
104
112
|
* emits a companion total-count when truncated.
|
|
105
113
|
*/
|
|
114
|
+
export declare function BuildUserManagementAgentContext(input: UserManagementAgentContextInput): Record<string, unknown>;
|
|
115
|
+
/** @deprecated Use {@link BuildUserManagementAgentContext}. */
|
|
106
116
|
export declare function buildUserManagementAgentContext(input: UserManagementAgentContextInput): Record<string, unknown>;
|
|
107
117
|
//# sourceMappingURL=user-management-agent-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-management-agent-context.d.ts","sourceRoot":"","sources":["../../../src/lib/user-management/user-management-agent-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,wCAAyC,CAAC;AAChF,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAEjF;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/D;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,MAAM,iBAAiB,CAAC,CAAC,IACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAmBnI;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAmBnI;AAkBD;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC5C,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,qEAAqE;IACrE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB/G"}
|
|
1
|
+
{"version":3,"file":"user-management-agent-context.d.ts","sourceRoot":"","sources":["../../../src/lib/user-management/user-management-agent-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,wCAAyC,CAAC;AAChF,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAEjF;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAEjF;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/D;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/D;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,MAAM,iBAAiB,CAAC,CAAC,IACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAmBnI;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAEnI;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAmBnI;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAEnI;AAkBD;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC5C,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,qEAAqE;IACrE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB/G;AAED,+DAA+D;AAC/D,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE/G"}
|
|
@@ -19,13 +19,21 @@ export const VALID_USER_STATUS_FILTERS = ['all', 'active', 'inactive'];
|
|
|
19
19
|
*/
|
|
20
20
|
export const USER_AGENT_CONTEXT_NAME_LIST_CAP = 25;
|
|
21
21
|
/** Type-guard for a user-status filter string. Keeps the SwitchUserStatusFilter tool tolerant. */
|
|
22
|
-
export function
|
|
22
|
+
export function IsValidUserStatusFilter(value) {
|
|
23
23
|
return typeof value === 'string' && VALID_USER_STATUS_FILTERS.includes(value);
|
|
24
24
|
}
|
|
25
|
+
/** @deprecated Use {@link IsValidUserStatusFilter}. */
|
|
26
|
+
export function isValidUserStatusFilter(value) {
|
|
27
|
+
return IsValidUserStatusFilter(value);
|
|
28
|
+
}
|
|
25
29
|
/** Cap a list of names to {@link USER_AGENT_CONTEXT_NAME_LIST_CAP}. Pure + deterministic. */
|
|
26
|
-
export function
|
|
30
|
+
export function CapUserNames(names) {
|
|
27
31
|
return names.slice(0, USER_AGENT_CONTEXT_NAME_LIST_CAP);
|
|
28
32
|
}
|
|
33
|
+
/** @deprecated Use {@link CapUserNames}. */
|
|
34
|
+
export function capUserNames(names) {
|
|
35
|
+
return CapUserNames(names);
|
|
36
|
+
}
|
|
29
37
|
/**
|
|
30
38
|
* Resolve an agent-supplied user reference against the loaded users, tolerantly:
|
|
31
39
|
* 1. exact ID match (case-insensitive)
|
|
@@ -35,7 +43,7 @@ export function capUserNames(names) {
|
|
|
35
43
|
* Pure + deterministic over the supplied candidate list. On a miss, returns a clear error
|
|
36
44
|
* listing a sample of available names so the agent can correct itself.
|
|
37
45
|
*/
|
|
38
|
-
export function
|
|
46
|
+
export function ResolveUserByIDOrName(input, candidates) {
|
|
39
47
|
const needle = input.trim().toLowerCase();
|
|
40
48
|
if (!needle) {
|
|
41
49
|
return { ok: false, error: 'Provide a user ID or name to select.' };
|
|
@@ -55,12 +63,16 @@ export function resolveUserByIDOrName(input, candidates) {
|
|
|
55
63
|
const sample = candidates.slice(0, 5).map(c => c.Name).join(', ');
|
|
56
64
|
return { ok: false, error: `No user matches "${input}". Available users include: ${sample || '(none loaded)'}.` };
|
|
57
65
|
}
|
|
66
|
+
/** @deprecated Use {@link ResolveUserByIDOrName}. */
|
|
67
|
+
export function resolveUserByIDOrName(input, candidates) {
|
|
68
|
+
return ResolveUserByIDOrName(input, candidates);
|
|
69
|
+
}
|
|
58
70
|
/**
|
|
59
71
|
* Resolve an agent-supplied role reference (id or display name) against the loaded roles,
|
|
60
72
|
* tolerantly: exact ID → exact name → first contains. Backs FilterUsersByRole so the agent
|
|
61
73
|
* can say either the role name or the role id.
|
|
62
74
|
*/
|
|
63
|
-
export function
|
|
75
|
+
export function ResolveRoleByIDOrName(input, candidates) {
|
|
64
76
|
const needle = input.trim().toLowerCase();
|
|
65
77
|
if (!needle) {
|
|
66
78
|
return { ok: false, error: 'Provide a role ID or name.' };
|
|
@@ -80,6 +92,10 @@ export function resolveRoleByIDOrName(input, candidates) {
|
|
|
80
92
|
const sample = candidates.slice(0, 8).map(c => c.Name).join(', ');
|
|
81
93
|
return { ok: false, error: `No role matches "${input}". Available roles: ${sample || '(none loaded)'}.` };
|
|
82
94
|
}
|
|
95
|
+
/** @deprecated Use {@link ResolveRoleByIDOrName}. */
|
|
96
|
+
export function resolveRoleByIDOrName(input, candidates) {
|
|
97
|
+
return ResolveRoleByIDOrName(input, candidates);
|
|
98
|
+
}
|
|
83
99
|
/** The lowercased forms a user can be matched against (display name, email, "First Last"). */
|
|
84
100
|
function fullNameForms(c) {
|
|
85
101
|
const forms = [];
|
|
@@ -100,7 +116,7 @@ function fullNameForms(c) {
|
|
|
100
116
|
* stays unit-testable and decoupled from change-detection timing. Bounds every name list and
|
|
101
117
|
* emits a companion total-count when truncated.
|
|
102
118
|
*/
|
|
103
|
-
export function
|
|
119
|
+
export function BuildUserManagementAgentContext(input) {
|
|
104
120
|
const context = {
|
|
105
121
|
TotalUserCount: input.TotalUserCount,
|
|
106
122
|
FilteredUserCount: input.FilteredUserCount,
|
|
@@ -119,12 +135,16 @@ export function buildUserManagementAgentContext(input) {
|
|
|
119
135
|
appendBoundedList(context, 'VisibleColumns', 'VisibleColumnCount', input.VisibleColumns);
|
|
120
136
|
return context;
|
|
121
137
|
}
|
|
138
|
+
/** @deprecated Use {@link BuildUserManagementAgentContext}. */
|
|
139
|
+
export function buildUserManagementAgentContext(input) {
|
|
140
|
+
return BuildUserManagementAgentContext(input);
|
|
141
|
+
}
|
|
122
142
|
/** Add a capped name list under `listKey`, plus a `countKey` total when the source was truncated. */
|
|
123
143
|
function appendBoundedList(target, listKey, countKey, source) {
|
|
124
144
|
if (source.length === 0) {
|
|
125
145
|
return;
|
|
126
146
|
}
|
|
127
|
-
target[listKey] =
|
|
147
|
+
target[listKey] = CapUserNames(source);
|
|
128
148
|
if (source.length > USER_AGENT_CONTEXT_NAME_LIST_CAP) {
|
|
129
149
|
target[countKey] = source.length;
|
|
130
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-management-agent-context.js","sourceRoot":"","sources":["../../../src/lib/user-management/user-management-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure helpers for the User Management admin surface's AI-agent integration.\n *\n * 🔒 READ-ONLY / GOVERNANCE SURFACE. These helpers shape a non-sensitive snapshot of the\n * user-management screen into the key-value `AgentContext` object and back agent-supplied\n * user references with tolerant id→name→contains resolution. They are intentionally free of\n * Angular / component dependencies so they can be unit-tested in isolation (mirrors the\n * Data Explorer's {@link ../../../../dashboards/src/DataExplorer/data-explorer-agent-context}\n * pattern), and they NEVER surface passwords, tokens, or other secrets — only counts,\n * filter state, and display names/emails the user already sees on screen.\n */\n\n/** The three user-status filter values the surface supports. */\nexport const VALID_USER_STATUS_FILTERS = ['all', 'active', 'inactive'] as const;\nexport type UserStatusFilter = (typeof VALID_USER_STATUS_FILTERS)[number];\n\n/**\n * Upper bound on how many user/role display values we publish in a name-list context field\n * (VisibleUserNames, VisibleUserEmails, AvailableRoleNames, VisibleColumns). Keeps the\n * streamed note bounded even when hundreds of rows are loaded; a companion total-count field\n * reports the true number when the list is truncated.\n */\nexport const USER_AGENT_CONTEXT_NAME_LIST_CAP = 25;\n\n/** Type-guard for a user-status filter string. Keeps the SwitchUserStatusFilter tool tolerant. */\nexport function isValidUserStatusFilter(value: unknown): value is UserStatusFilter {\n return typeof value === 'string' && (VALID_USER_STATUS_FILTERS as readonly string[]).includes(value);\n}\n\n/** Cap a list of names to {@link USER_AGENT_CONTEXT_NAME_LIST_CAP}. Pure + deterministic. */\nexport function capUserNames(names: readonly string[]): string[] {\n return names.slice(0, USER_AGENT_CONTEXT_NAME_LIST_CAP);\n}\n\n/**\n * A minimal, NON-SENSITIVE descriptor of a user, supplied by the component so the pure\n * resolver can match agent input against what the user sees. Mirrors the salient slice of\n * `MJUserEntity` — never includes credentials.\n */\nexport interface UserNameCandidate {\n ID: string;\n Name: string;\n Email?: string | null;\n FirstName?: string | null;\n LastName?: string | null;\n}\n\n/** A minimal, NON-SENSITIVE descriptor of a role (id + display name). */\nexport interface RoleNameCandidate {\n ID: string;\n Name: string;\n}\n\n/** Outcome of a tolerant id→name→contains resolution. */\nexport type NamedLookupResult<T> =\n | { ok: true; match: T }\n | { ok: false; error: string };\n\n/**\n * Resolve an agent-supplied user reference against the loaded users, tolerantly:\n * 1. exact ID match (case-insensitive)\n * 2. exact display-name / email match (case-insensitive)\n * 3. first case-insensitive *contains* match on name, email, or \"First Last\"\n *\n * Pure + deterministic over the supplied candidate list. On a miss, returns a clear error\n * listing a sample of available names so the agent can correct itself.\n */\nexport function resolveUserByIDOrName(input: string, candidates: readonly UserNameCandidate[]): NamedLookupResult<UserNameCandidate> {\n const needle = input.trim().toLowerCase();\n if (!needle) {\n return { ok: false, error: 'Provide a user ID or name to select.' };\n }\n const byId = candidates.find(c => c.ID.toLowerCase() === needle);\n if (byId) {\n return { ok: true, match: byId };\n }\n const exact = candidates.find(c => fullNameForms(c).some(form => form === needle));\n if (exact) {\n return { ok: true, match: exact };\n }\n const contains = candidates.find(c => fullNameForms(c).some(form => form.includes(needle)));\n if (contains) {\n return { ok: true, match: contains };\n }\n const sample = candidates.slice(0, 5).map(c => c.Name).join(', ');\n return { ok: false, error: `No user matches \"${input}\". Available users include: ${sample || '(none loaded)'}.` };\n}\n\n/**\n * Resolve an agent-supplied role reference (id or display name) against the loaded roles,\n * tolerantly: exact ID → exact name → first contains. Backs FilterUsersByRole so the agent\n * can say either the role name or the role id.\n */\nexport function resolveRoleByIDOrName(input: string, candidates: readonly RoleNameCandidate[]): NamedLookupResult<RoleNameCandidate> {\n const needle = input.trim().toLowerCase();\n if (!needle) {\n return { ok: false, error: 'Provide a role ID or name.' };\n }\n const byId = candidates.find(c => c.ID.toLowerCase() === needle);\n if (byId) {\n return { ok: true, match: byId };\n }\n const exact = candidates.find(c => c.Name.toLowerCase() === needle);\n if (exact) {\n return { ok: true, match: exact };\n }\n const contains = candidates.find(c => c.Name.toLowerCase().includes(needle));\n if (contains) {\n return { ok: true, match: contains };\n }\n const sample = candidates.slice(0, 8).map(c => c.Name).join(', ');\n return { ok: false, error: `No role matches \"${input}\". Available roles: ${sample || '(none loaded)'}.` };\n}\n\n/** The lowercased forms a user can be matched against (display name, email, \"First Last\"). */\nfunction fullNameForms(c: UserNameCandidate): string[] {\n const forms: string[] = [];\n if (c.Name) {\n forms.push(c.Name.toLowerCase());\n }\n if (c.Email) {\n forms.push(c.Email.toLowerCase());\n }\n const combined = `${c.FirstName ?? ''} ${c.LastName ?? ''}`.trim().toLowerCase();\n if (combined) {\n forms.push(combined);\n }\n return forms;\n}\n\n/**\n * The plain, component-supplied snapshot used to build the user-management agent context.\n * NON-SENSITIVE by construction — counts, filter state, and on-screen display values only.\n */\nexport interface UserManagementAgentContextInput {\n /** Total users loaded (unfiltered). */\n TotalUserCount: number;\n /** Users currently visible after status/role/search filters. */\n FilteredUserCount: number;\n /** Count of active users (across the unfiltered set). */\n ActiveUserCount: number;\n /** Count of inactive users (across the unfiltered set). */\n InactiveUserCount: number;\n /** Active status filter. */\n StatusFilter: UserStatusFilter;\n /** Active role-filter id, or null when no role filter is applied. */\n RoleFilterId: string | null;\n /** Resolved display name for {@link RoleFilterId}, or null. */\n RoleFilterName: string | null;\n /** Current free-text search string. */\n SearchText: string;\n /** Display name of the currently selected user, or null. */\n SelectedUserId: string | null;\n /** Display name of the currently selected user, or null. NEVER a credential. */\n SelectedUserName: string | null;\n /** Display names of the currently visible (filtered) users, in list order. */\n VisibleUserNames: string[];\n /** Emails of the currently visible (filtered) users, in list order. */\n VisibleUserEmails: string[];\n /** Names of the roles available as filter options. */\n AvailableRoleNames: string[];\n /** Column/field labels currently shown in the user grid. */\n VisibleColumns: string[];\n}\n\n/**\n * Build the agent-visible context object for User Management. Pure (no `this`) so the shape\n * stays unit-testable and decoupled from change-detection timing. Bounds every name list and\n * emits a companion total-count when truncated.\n */\nexport function buildUserManagementAgentContext(input: UserManagementAgentContextInput): Record<string, unknown> {\n const context: Record<string, unknown> = {\n TotalUserCount: input.TotalUserCount,\n FilteredUserCount: input.FilteredUserCount,\n ActiveUserCount: input.ActiveUserCount,\n InactiveUserCount: input.InactiveUserCount,\n StatusFilter: input.StatusFilter,\n RoleFilterId: input.RoleFilterId,\n RoleFilterName: input.RoleFilterName,\n SearchText: input.SearchText,\n SelectedUserId: input.SelectedUserId,\n SelectedUserName: input.SelectedUserName,\n };\n\n appendBoundedList(context, 'VisibleUserNames', 'VisibleUserNameCount', input.VisibleUserNames);\n appendBoundedList(context, 'VisibleUserEmails', 'VisibleUserEmailCount', input.VisibleUserEmails);\n appendBoundedList(context, 'AvailableRoleNames', 'AvailableRoleCount', input.AvailableRoleNames);\n appendBoundedList(context, 'VisibleColumns', 'VisibleColumnCount', input.VisibleColumns);\n\n return context;\n}\n\n/** Add a capped name list under `listKey`, plus a `countKey` total when the source was truncated. */\nfunction appendBoundedList(target: Record<string, unknown>, listKey: string, countKey: string, source: readonly string[]): void {\n if (source.length === 0) {\n return;\n }\n target[listKey] = capUserNames(source);\n if (source.length > USER_AGENT_CONTEXT_NAME_LIST_CAP) {\n target[countKey] = source.length;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"user-management-agent-context.js","sourceRoot":"","sources":["../../../src/lib/user-management/user-management-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure helpers for the User Management admin surface's AI-agent integration.\n *\n * 🔒 READ-ONLY / GOVERNANCE SURFACE. These helpers shape a non-sensitive snapshot of the\n * user-management screen into the key-value `AgentContext` object and back agent-supplied\n * user references with tolerant id→name→contains resolution. They are intentionally free of\n * Angular / component dependencies so they can be unit-tested in isolation (mirrors the\n * Data Explorer's {@link ../../../../dashboards/src/DataExplorer/data-explorer-agent-context}\n * pattern), and they NEVER surface passwords, tokens, or other secrets — only counts,\n * filter state, and display names/emails the user already sees on screen.\n */\n\n/** The three user-status filter values the surface supports. */\nexport const VALID_USER_STATUS_FILTERS = ['all', 'active', 'inactive'] as const;\nexport type UserStatusFilter = (typeof VALID_USER_STATUS_FILTERS)[number];\n\n/**\n * Upper bound on how many user/role display values we publish in a name-list context field\n * (VisibleUserNames, VisibleUserEmails, AvailableRoleNames, VisibleColumns). Keeps the\n * streamed note bounded even when hundreds of rows are loaded; a companion total-count field\n * reports the true number when the list is truncated.\n */\nexport const USER_AGENT_CONTEXT_NAME_LIST_CAP = 25;\n\n/** Type-guard for a user-status filter string. Keeps the SwitchUserStatusFilter tool tolerant. */\nexport function IsValidUserStatusFilter(value: unknown): value is UserStatusFilter {\n return typeof value === 'string' && (VALID_USER_STATUS_FILTERS as readonly string[]).includes(value);\n}\n\n/** @deprecated Use {@link IsValidUserStatusFilter}. */\nexport function isValidUserStatusFilter(value: unknown): value is UserStatusFilter {\n return IsValidUserStatusFilter(value);\n}\n\n/** Cap a list of names to {@link USER_AGENT_CONTEXT_NAME_LIST_CAP}. Pure + deterministic. */\nexport function CapUserNames(names: readonly string[]): string[] {\n return names.slice(0, USER_AGENT_CONTEXT_NAME_LIST_CAP);\n}\n\n/** @deprecated Use {@link CapUserNames}. */\nexport function capUserNames(names: readonly string[]): string[] {\n return CapUserNames(names);\n}\n\n/**\n * A minimal, NON-SENSITIVE descriptor of a user, supplied by the component so the pure\n * resolver can match agent input against what the user sees. Mirrors the salient slice of\n * `MJUserEntity` — never includes credentials.\n */\nexport interface UserNameCandidate {\n ID: string;\n Name: string;\n Email?: string | null;\n FirstName?: string | null;\n LastName?: string | null;\n}\n\n/** A minimal, NON-SENSITIVE descriptor of a role (id + display name). */\nexport interface RoleNameCandidate {\n ID: string;\n Name: string;\n}\n\n/** Outcome of a tolerant id→name→contains resolution. */\nexport type NamedLookupResult<T> =\n | { ok: true; match: T } // case-violation-ok-legacy-back-compat: renaming it broke a use the checker could not see from the declaration — the compile proved it\n | { ok: false; error: string }; // case-violation-ok-legacy-back-compat: the PascalCase name is already declared on this type\n\n/**\n * Resolve an agent-supplied user reference against the loaded users, tolerantly:\n * 1. exact ID match (case-insensitive)\n * 2. exact display-name / email match (case-insensitive)\n * 3. first case-insensitive *contains* match on name, email, or \"First Last\"\n *\n * Pure + deterministic over the supplied candidate list. On a miss, returns a clear error\n * listing a sample of available names so the agent can correct itself.\n */\nexport function ResolveUserByIDOrName(input: string, candidates: readonly UserNameCandidate[]): NamedLookupResult<UserNameCandidate> {\n const needle = input.trim().toLowerCase();\n if (!needle) {\n return { ok: false, error: 'Provide a user ID or name to select.' };\n }\n const byId = candidates.find(c => c.ID.toLowerCase() === needle);\n if (byId) {\n return { ok: true, match: byId };\n }\n const exact = candidates.find(c => fullNameForms(c).some(form => form === needle));\n if (exact) {\n return { ok: true, match: exact };\n }\n const contains = candidates.find(c => fullNameForms(c).some(form => form.includes(needle)));\n if (contains) {\n return { ok: true, match: contains };\n }\n const sample = candidates.slice(0, 5).map(c => c.Name).join(', ');\n return { ok: false, error: `No user matches \"${input}\". Available users include: ${sample || '(none loaded)'}.` };\n}\n\n/** @deprecated Use {@link ResolveUserByIDOrName}. */\nexport function resolveUserByIDOrName(input: string, candidates: readonly UserNameCandidate[]): NamedLookupResult<UserNameCandidate> {\n return ResolveUserByIDOrName(input, candidates);\n}\n\n/**\n * Resolve an agent-supplied role reference (id or display name) against the loaded roles,\n * tolerantly: exact ID → exact name → first contains. Backs FilterUsersByRole so the agent\n * can say either the role name or the role id.\n */\nexport function ResolveRoleByIDOrName(input: string, candidates: readonly RoleNameCandidate[]): NamedLookupResult<RoleNameCandidate> {\n const needle = input.trim().toLowerCase();\n if (!needle) {\n return { ok: false, error: 'Provide a role ID or name.' };\n }\n const byId = candidates.find(c => c.ID.toLowerCase() === needle);\n if (byId) {\n return { ok: true, match: byId };\n }\n const exact = candidates.find(c => c.Name.toLowerCase() === needle);\n if (exact) {\n return { ok: true, match: exact };\n }\n const contains = candidates.find(c => c.Name.toLowerCase().includes(needle));\n if (contains) {\n return { ok: true, match: contains };\n }\n const sample = candidates.slice(0, 8).map(c => c.Name).join(', ');\n return { ok: false, error: `No role matches \"${input}\". Available roles: ${sample || '(none loaded)'}.` };\n}\n\n/** @deprecated Use {@link ResolveRoleByIDOrName}. */\nexport function resolveRoleByIDOrName(input: string, candidates: readonly RoleNameCandidate[]): NamedLookupResult<RoleNameCandidate> {\n return ResolveRoleByIDOrName(input, candidates);\n}\n\n/** The lowercased forms a user can be matched against (display name, email, \"First Last\"). */\nfunction fullNameForms(c: UserNameCandidate): string[] {\n const forms: string[] = [];\n if (c.Name) {\n forms.push(c.Name.toLowerCase());\n }\n if (c.Email) {\n forms.push(c.Email.toLowerCase());\n }\n const combined = `${c.FirstName ?? ''} ${c.LastName ?? ''}`.trim().toLowerCase();\n if (combined) {\n forms.push(combined);\n }\n return forms;\n}\n\n/**\n * The plain, component-supplied snapshot used to build the user-management agent context.\n * NON-SENSITIVE by construction — counts, filter state, and on-screen display values only.\n */\nexport interface UserManagementAgentContextInput {\n /** Total users loaded (unfiltered). */\n TotalUserCount: number;\n /** Users currently visible after status/role/search filters. */\n FilteredUserCount: number;\n /** Count of active users (across the unfiltered set). */\n ActiveUserCount: number;\n /** Count of inactive users (across the unfiltered set). */\n InactiveUserCount: number;\n /** Active status filter. */\n StatusFilter: UserStatusFilter;\n /** Active role-filter id, or null when no role filter is applied. */\n RoleFilterId: string | null;\n /** Resolved display name for {@link RoleFilterId}, or null. */\n RoleFilterName: string | null;\n /** Current free-text search string. */\n SearchText: string;\n /** Display name of the currently selected user, or null. */\n SelectedUserId: string | null;\n /** Display name of the currently selected user, or null. NEVER a credential. */\n SelectedUserName: string | null;\n /** Display names of the currently visible (filtered) users, in list order. */\n VisibleUserNames: string[];\n /** Emails of the currently visible (filtered) users, in list order. */\n VisibleUserEmails: string[];\n /** Names of the roles available as filter options. */\n AvailableRoleNames: string[];\n /** Column/field labels currently shown in the user grid. */\n VisibleColumns: string[];\n}\n\n/**\n * Build the agent-visible context object for User Management. Pure (no `this`) so the shape\n * stays unit-testable and decoupled from change-detection timing. Bounds every name list and\n * emits a companion total-count when truncated.\n */\nexport function BuildUserManagementAgentContext(input: UserManagementAgentContextInput): Record<string, unknown> {\n const context: Record<string, unknown> = {\n TotalUserCount: input.TotalUserCount,\n FilteredUserCount: input.FilteredUserCount,\n ActiveUserCount: input.ActiveUserCount,\n InactiveUserCount: input.InactiveUserCount,\n StatusFilter: input.StatusFilter,\n RoleFilterId: input.RoleFilterId,\n RoleFilterName: input.RoleFilterName,\n SearchText: input.SearchText,\n SelectedUserId: input.SelectedUserId,\n SelectedUserName: input.SelectedUserName,\n };\n\n appendBoundedList(context, 'VisibleUserNames', 'VisibleUserNameCount', input.VisibleUserNames);\n appendBoundedList(context, 'VisibleUserEmails', 'VisibleUserEmailCount', input.VisibleUserEmails);\n appendBoundedList(context, 'AvailableRoleNames', 'AvailableRoleCount', input.AvailableRoleNames);\n appendBoundedList(context, 'VisibleColumns', 'VisibleColumnCount', input.VisibleColumns);\n\n return context;\n}\n\n/** @deprecated Use {@link BuildUserManagementAgentContext}. */\nexport function buildUserManagementAgentContext(input: UserManagementAgentContextInput): Record<string, unknown> {\n return BuildUserManagementAgentContext(input);\n}\n\n/** Add a capped name list under `listKey`, plus a `countKey` total when the source was truncated. */\nfunction appendBoundedList(target: Record<string, unknown>, listKey: string, countKey: string, source: readonly string[]): void {\n if (source.length === 0) {\n return;\n }\n target[listKey] = CapUserNames(source);\n if (source.length > USER_AGENT_CONTEXT_NAME_LIST_CAP) {\n target[countKey] = source.length;\n }\n}\n"]}
|
|
@@ -19,31 +19,103 @@ interface FilterOptions {
|
|
|
19
19
|
export declare class UserManagementComponent extends BaseDashboard implements OnDestroy {
|
|
20
20
|
private cdr;
|
|
21
21
|
private ngZone;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
Users: MJUserEntity[];
|
|
23
|
+
/** @deprecated Use {@link Users}. */
|
|
24
|
+
get users(): MJUserEntity[];
|
|
25
|
+
/** @deprecated Use {@link Users}. */
|
|
26
|
+
set users(value: MJUserEntity[]);
|
|
27
|
+
FilteredUsers: MJUserEntity[];
|
|
28
|
+
/** @deprecated Use {@link FilteredUsers}. */
|
|
29
|
+
get filteredUsers(): MJUserEntity[];
|
|
30
|
+
/** @deprecated Use {@link FilteredUsers}. */
|
|
31
|
+
set filteredUsers(value: MJUserEntity[]);
|
|
32
|
+
Roles: MJRoleEntity[];
|
|
33
|
+
/** @deprecated Use {@link Roles}. */
|
|
34
|
+
get roles(): MJRoleEntity[];
|
|
35
|
+
/** @deprecated Use {@link Roles}. */
|
|
36
|
+
set roles(value: MJRoleEntity[]);
|
|
37
|
+
SelectedUser: MJUserEntity | null;
|
|
38
|
+
/** @deprecated Use {@link SelectedUser}. */
|
|
39
|
+
get selectedUser(): MJUserEntity | null;
|
|
40
|
+
/** @deprecated Use {@link SelectedUser}. */
|
|
41
|
+
set selectedUser(value: MJUserEntity | null);
|
|
26
42
|
isLoading: boolean;
|
|
27
43
|
error: string | null;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
SelectedUserIds: Set<string>;
|
|
45
|
+
/** @deprecated Use {@link SelectedUserIds}. */
|
|
46
|
+
get selectedUserIds(): Set<string>;
|
|
47
|
+
/** @deprecated Use {@link SelectedUserIds}. */
|
|
48
|
+
set selectedUserIds(value: Set<string>);
|
|
49
|
+
ShowUserDialog: boolean;
|
|
50
|
+
/** @deprecated Use {@link ShowUserDialog}. */
|
|
51
|
+
get showUserDialog(): boolean;
|
|
52
|
+
/** @deprecated Use {@link ShowUserDialog}. */
|
|
53
|
+
set showUserDialog(value: boolean);
|
|
54
|
+
UserDialogData: UserDialogData | null;
|
|
55
|
+
/** @deprecated Use {@link UserDialogData}. */
|
|
56
|
+
get userDialogData(): UserDialogData | null;
|
|
57
|
+
/** @deprecated Use {@link UserDialogData}. */
|
|
58
|
+
set userDialogData(value: UserDialogData | null);
|
|
59
|
+
ShowBulkActionConfirm: boolean;
|
|
60
|
+
/** @deprecated Use {@link ShowBulkActionConfirm}. */
|
|
61
|
+
get showBulkActionConfirm(): boolean;
|
|
62
|
+
/** @deprecated Use {@link ShowBulkActionConfirm}. */
|
|
63
|
+
set showBulkActionConfirm(value: boolean);
|
|
64
|
+
BulkActionType: 'enable' | 'disable' | 'delete' | null;
|
|
65
|
+
/** @deprecated Use {@link BulkActionType}. */
|
|
66
|
+
get bulkActionType(): 'enable' | 'disable' | 'delete' | null;
|
|
67
|
+
/** @deprecated Use {@link BulkActionType}. */
|
|
68
|
+
set bulkActionType(value: 'enable' | 'disable' | 'delete' | null);
|
|
69
|
+
ShowBulkRoleAssign: boolean;
|
|
70
|
+
/** @deprecated Use {@link ShowBulkRoleAssign}. */
|
|
71
|
+
get showBulkRoleAssign(): boolean;
|
|
72
|
+
/** @deprecated Use {@link ShowBulkRoleAssign}. */
|
|
73
|
+
set showBulkRoleAssign(value: boolean);
|
|
74
|
+
BulkRoleId: string;
|
|
75
|
+
/** @deprecated Use {@link BulkRoleId}. */
|
|
76
|
+
get bulkRoleId(): string;
|
|
77
|
+
/** @deprecated Use {@link BulkRoleId}. */
|
|
78
|
+
set bulkRoleId(value: string);
|
|
79
|
+
Stats: UserStats;
|
|
80
|
+
/** @deprecated Use {@link Stats}. */
|
|
81
|
+
get stats(): UserStats;
|
|
82
|
+
/** @deprecated Use {@link Stats}. */
|
|
83
|
+
set stats(value: UserStats);
|
|
84
|
+
Filters$: BehaviorSubject<FilterOptions>;
|
|
85
|
+
/** @deprecated Use {@link Filters$}. */
|
|
86
|
+
get filters$(): BehaviorSubject<FilterOptions>;
|
|
87
|
+
/** @deprecated Use {@link Filters$}. */
|
|
88
|
+
set filters$(value: BehaviorSubject<FilterOptions>);
|
|
37
89
|
showCreateDialog: boolean;
|
|
38
|
-
|
|
39
|
-
|
|
90
|
+
ShowEditDialog: boolean;
|
|
91
|
+
/** @deprecated Use {@link ShowEditDialog}. */
|
|
92
|
+
get showEditDialog(): boolean;
|
|
93
|
+
/** @deprecated Use {@link ShowEditDialog}. */
|
|
94
|
+
set showEditDialog(value: boolean);
|
|
95
|
+
ShowDeleteConfirm: boolean;
|
|
96
|
+
/** @deprecated Use {@link ShowDeleteConfirm}. */
|
|
97
|
+
get showDeleteConfirm(): boolean;
|
|
98
|
+
/** @deprecated Use {@link ShowDeleteConfirm}. */
|
|
99
|
+
set showDeleteConfirm(value: boolean);
|
|
40
100
|
private expandedUserIds;
|
|
41
101
|
private userRoleMap;
|
|
42
|
-
|
|
102
|
+
GridConfig: {
|
|
43
103
|
pageSize: number;
|
|
44
104
|
sortField: string;
|
|
45
105
|
sortDirection: string;
|
|
46
106
|
};
|
|
107
|
+
/** @deprecated Use {@link GridConfig}. */
|
|
108
|
+
get gridConfig(): {
|
|
109
|
+
pageSize: number;
|
|
110
|
+
sortField: string;
|
|
111
|
+
sortDirection: string;
|
|
112
|
+
};
|
|
113
|
+
/** @deprecated Use {@link GridConfig}. */
|
|
114
|
+
set gridConfig(value: {
|
|
115
|
+
pageSize: number;
|
|
116
|
+
sortField: string;
|
|
117
|
+
sortDirection: string;
|
|
118
|
+
});
|
|
47
119
|
protected destroy$: Subject<void>;
|
|
48
120
|
private get metadata();
|
|
49
121
|
constructor(cdr: ChangeDetectorRef, ngZone: NgZone);
|
|
@@ -79,6 +151,8 @@ export declare class UserManagementComponent extends BaseDashboard implements On
|
|
|
79
151
|
private handleRefreshTool;
|
|
80
152
|
private handleExportTool;
|
|
81
153
|
ngOnDestroy(): void;
|
|
154
|
+
LoadInitialData(): Promise<void>;
|
|
155
|
+
/** @deprecated Use {@link LoadInitialData}. */
|
|
82
156
|
loadInitialData(): Promise<void>;
|
|
83
157
|
private loadUsers;
|
|
84
158
|
private loadRoles;
|
|
@@ -87,41 +161,91 @@ export declare class UserManagementComponent extends BaseDashboard implements On
|
|
|
87
161
|
private setupFilterSubscription;
|
|
88
162
|
private applyFilters;
|
|
89
163
|
private calculateStats;
|
|
164
|
+
OnStatusFilterChange(status: 'all' | 'active' | 'inactive'): void;
|
|
165
|
+
/** @deprecated Use {@link OnStatusFilterChange}. */
|
|
90
166
|
onStatusFilterChange(status: 'all' | 'active' | 'inactive'): void;
|
|
167
|
+
UpdateFilter(partial: Partial<FilterOptions>): void;
|
|
168
|
+
/** @deprecated Use {@link UpdateFilter}. */
|
|
91
169
|
updateFilter(partial: Partial<FilterOptions>): void;
|
|
170
|
+
SelectUser(user: MJUserEntity): void;
|
|
171
|
+
/** @deprecated Use {@link SelectUser}. */
|
|
92
172
|
selectUser(user: MJUserEntity): void;
|
|
93
173
|
createNewUser(): void;
|
|
174
|
+
EditUser(user: MJUserEntity): void;
|
|
175
|
+
/** @deprecated Use {@link EditUser}. */
|
|
94
176
|
editUser(user: MJUserEntity): void;
|
|
177
|
+
ConfirmDeleteUser(user: MJUserEntity): void;
|
|
178
|
+
/** @deprecated Use {@link ConfirmDeleteUser}. */
|
|
95
179
|
confirmDeleteUser(user: MJUserEntity): void;
|
|
180
|
+
DeleteUser(): Promise<void>;
|
|
181
|
+
/** @deprecated Use {@link DeleteUser}. */
|
|
96
182
|
deleteUser(): Promise<void>;
|
|
183
|
+
ToggleUserStatus(user: MJUserEntity): Promise<void>;
|
|
184
|
+
/** @deprecated Use {@link ToggleUserStatus}. */
|
|
97
185
|
toggleUserStatus(user: MJUserEntity): Promise<void>;
|
|
186
|
+
ExportUsers(): void;
|
|
187
|
+
/** @deprecated Use {@link ExportUsers}. */
|
|
98
188
|
exportUsers(): void;
|
|
99
189
|
private escapeCSV;
|
|
190
|
+
RefreshData(): void;
|
|
191
|
+
/** @deprecated Use {@link RefreshData}. */
|
|
100
192
|
refreshData(): void;
|
|
193
|
+
GetStatusIcon(user: MJUserEntity): string;
|
|
194
|
+
/** @deprecated Use {@link GetStatusIcon}. */
|
|
101
195
|
getStatusIcon(user: MJUserEntity): string;
|
|
196
|
+
GetStatusClass(user: MJUserEntity): string;
|
|
197
|
+
/** @deprecated Use {@link GetStatusClass}. */
|
|
102
198
|
getStatusClass(user: MJUserEntity): string;
|
|
199
|
+
GetUserTypeIcon(user: MJUserEntity): string;
|
|
200
|
+
/** @deprecated Use {@link GetUserTypeIcon}. */
|
|
103
201
|
getUserTypeIcon(user: MJUserEntity): string;
|
|
202
|
+
GetUserInitials(user: MJUserEntity): string;
|
|
203
|
+
/** @deprecated Use {@link GetUserInitials}. */
|
|
104
204
|
getUserInitials(user: MJUserEntity): string;
|
|
205
|
+
OnUserDialogResult(result: UserDialogResult): void;
|
|
206
|
+
/** @deprecated Use {@link OnUserDialogResult}. */
|
|
105
207
|
onUserDialogResult(result: UserDialogResult): void;
|
|
208
|
+
get IsAllSelected(): boolean;
|
|
209
|
+
/** @deprecated Use {@link IsAllSelected}. */
|
|
106
210
|
get isAllSelected(): boolean;
|
|
211
|
+
get IsIndeterminate(): boolean;
|
|
212
|
+
/** @deprecated Use {@link IsIndeterminate}. */
|
|
107
213
|
get isIndeterminate(): boolean;
|
|
214
|
+
get HasSelection(): boolean;
|
|
215
|
+
/** @deprecated Use {@link HasSelection}. */
|
|
108
216
|
get hasSelection(): boolean;
|
|
217
|
+
get SelectedCount(): number;
|
|
218
|
+
/** @deprecated Use {@link SelectedCount}. */
|
|
109
219
|
get selectedCount(): number;
|
|
220
|
+
get HasActiveFilters(): boolean;
|
|
221
|
+
/** @deprecated Use {@link HasActiveFilters}. */
|
|
110
222
|
get hasActiveFilters(): boolean;
|
|
223
|
+
get ActiveFilterCount(): number;
|
|
224
|
+
/** @deprecated Use {@link ActiveFilterCount}. */
|
|
111
225
|
get activeFilterCount(): number;
|
|
226
|
+
ClearFilters(): void;
|
|
227
|
+
/** @deprecated Use {@link ClearFilters}. */
|
|
112
228
|
clearFilters(): void;
|
|
113
229
|
/**
|
|
114
230
|
* FilterFieldConfig[] describing the popover's Role field. Driven off
|
|
115
231
|
* `roles[]` so the dropdown stays in sync as roles load.
|
|
116
232
|
*/
|
|
233
|
+
get FilterFields(): FilterFieldConfig[];
|
|
234
|
+
/** @deprecated Use {@link FilterFields}. */
|
|
117
235
|
get filterFields(): FilterFieldConfig[];
|
|
118
236
|
/** Current popover field values keyed by FilterFieldConfig.key. */
|
|
237
|
+
get FilterValues(): Record<string, unknown>;
|
|
238
|
+
/** @deprecated Use {@link FilterValues}. */
|
|
119
239
|
get filterValues(): Record<string, unknown>;
|
|
120
240
|
/** Total active filters (Status + Role) — drives the Filter button badge. */
|
|
121
241
|
get TotalActiveFilterCount(): number;
|
|
122
242
|
/** Apply a value change from <mj-filter-panel>. */
|
|
243
|
+
OnFilterPanelChange(values: Record<string, unknown>): void;
|
|
244
|
+
/** @deprecated Use {@link OnFilterPanelChange}. */
|
|
123
245
|
onFilterPanelChange(values: Record<string, unknown>): void;
|
|
124
246
|
/** Clear all filters (Status + Role); search persists. */
|
|
247
|
+
ClearAllAppliedFilters(): void;
|
|
248
|
+
/** @deprecated Use {@link ClearAllAppliedFilters}. */
|
|
125
249
|
clearAllAppliedFilters(): void;
|
|
126
250
|
/** True when search and/or panel filters are narrowing the list — gates the
|
|
127
251
|
* no-results empty-state "Reset filters" CTA. */
|
|
@@ -129,24 +253,58 @@ export declare class UserManagementComponent extends BaseDashboard implements On
|
|
|
129
253
|
/** Reset everything narrowing the list (search + Status + Role) and refresh
|
|
130
254
|
* immediately. Wired to the no-results empty-state CTA. Unlike
|
|
131
255
|
* clearAllAppliedFilters(), this also clears the search box. */
|
|
256
|
+
ResetAllFiltersAndSearch(): void;
|
|
257
|
+
/** @deprecated Use {@link ResetAllFiltersAndSearch}. */
|
|
132
258
|
resetAllFiltersAndSearch(): void;
|
|
259
|
+
ToggleSelectAll(): void;
|
|
260
|
+
/** @deprecated Use {@link ToggleSelectAll}. */
|
|
133
261
|
toggleSelectAll(): void;
|
|
262
|
+
ToggleUserSelection(userId: string, event?: Event): void;
|
|
263
|
+
/** @deprecated Use {@link ToggleUserSelection}. */
|
|
134
264
|
toggleUserSelection(userId: string, event?: Event): void;
|
|
265
|
+
IsUserSelected(userId: string): boolean;
|
|
266
|
+
/** @deprecated Use {@link IsUserSelected}. */
|
|
135
267
|
isUserSelected(userId: string): boolean;
|
|
268
|
+
ClearSelection(): void;
|
|
269
|
+
/** @deprecated Use {@link ClearSelection}. */
|
|
136
270
|
clearSelection(): void;
|
|
271
|
+
ConfirmBulkAction(action: 'enable' | 'disable' | 'delete'): void;
|
|
272
|
+
/** @deprecated Use {@link ConfirmBulkAction}. */
|
|
137
273
|
confirmBulkAction(action: 'enable' | 'disable' | 'delete'): void;
|
|
274
|
+
CancelBulkAction(): void;
|
|
275
|
+
/** @deprecated Use {@link CancelBulkAction}. */
|
|
138
276
|
cancelBulkAction(): void;
|
|
277
|
+
ExecuteBulkAction(): Promise<void>;
|
|
278
|
+
/** @deprecated Use {@link ExecuteBulkAction}. */
|
|
139
279
|
executeBulkAction(): Promise<void>;
|
|
140
280
|
private bulkSetUserStatus;
|
|
141
281
|
private bulkDeleteUsers;
|
|
282
|
+
OpenBulkRoleAssign(): void;
|
|
283
|
+
/** @deprecated Use {@link OpenBulkRoleAssign}. */
|
|
142
284
|
openBulkRoleAssign(): void;
|
|
285
|
+
CancelBulkRoleAssign(): void;
|
|
286
|
+
/** @deprecated Use {@link CancelBulkRoleAssign}. */
|
|
143
287
|
cancelBulkRoleAssign(): void;
|
|
288
|
+
ExecuteBulkRoleAssign(): Promise<void>;
|
|
289
|
+
/** @deprecated Use {@link ExecuteBulkRoleAssign}. */
|
|
144
290
|
executeBulkRoleAssign(): Promise<void>;
|
|
291
|
+
GetBulkActionMessage(): string;
|
|
292
|
+
/** @deprecated Use {@link GetBulkActionMessage}. */
|
|
145
293
|
getBulkActionMessage(): string;
|
|
294
|
+
GetBulkActionTitle(): string;
|
|
295
|
+
/** @deprecated Use {@link GetBulkActionTitle}. */
|
|
146
296
|
getBulkActionTitle(): string;
|
|
297
|
+
GetBulkActionButtonText(): string;
|
|
298
|
+
/** @deprecated Use {@link GetBulkActionButtonText}. */
|
|
147
299
|
getBulkActionButtonText(): string;
|
|
300
|
+
ToggleUserExpansion(userId: string): void;
|
|
301
|
+
/** @deprecated Use {@link ToggleUserExpansion}. */
|
|
148
302
|
toggleUserExpansion(userId: string): void;
|
|
303
|
+
IsUserExpanded(userId: string): boolean;
|
|
304
|
+
/** @deprecated Use {@link IsUserExpanded}. */
|
|
149
305
|
isUserExpanded(userId: string): boolean;
|
|
306
|
+
GetUserRoles(userId: string): MJRoleEntity[];
|
|
307
|
+
/** @deprecated Use {@link GetUserRoles}. */
|
|
150
308
|
getUserRoles(userId: string): MJRoleEntity[];
|
|
151
309
|
/**
|
|
152
310
|
* Names a user for an error message. Falls back to the raw ID rather than to a placeholder so a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-management.component.d.ts","sourceRoot":"","sources":["../../../src/lib/user-management/user-management.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;;
|
|
1
|
+
{"version":3,"file":"user-management.component.d.ts","sourceRoot":"","sources":["../../../src/lib/user-management/user-management.component.ts"],"names":[],"mappings":"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"}
|