@genesislcap/pbc-auth-ui 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # Web Client
2
+
3
+ ## Frontend stack
4
+
5
+ Genesis components are standards-based Web Components, making them compatible with almost any modern web framework.
6
+ Our state-of-the-art design system and component set is built on top of
7
+ [Microsoft FAST](https://www.fast.design/docs/introduction/).
8
+
9
+ # Development
10
+
11
+ 1. Install dependencies:
12
+
13
+ ```shell
14
+ npm run bootstrap
15
+ ```
16
+
17
+ 2. Start Web development server in watch mode:
18
+
19
+ ```shell
20
+ npm run dev
21
+ ```
22
+
23
+ 3. Build for production:
24
+
25
+ ```shell
26
+ npm run build
27
+ ```
28
+
29
+ Preview production build:
30
+
31
+ ```shell
32
+ npm run serve
33
+ ```
34
+
35
+ ## Clean
36
+
37
+ Remove distribution and node_modules directories:
38
+
39
+ ```shell
40
+ npm run clean
41
+ ```
42
+
43
+ Baseline task combines `clean` and `bootstrap` tasks into a single command:
44
+
45
+ ```shell
46
+ npm run baseline
47
+ ```
@@ -0,0 +1,2 @@
1
+ export * from './user-admin/users';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.federated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.federated.d.ts","sourceRoot":"","sources":["../../src/index.federated.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare const HostENV: import("@microsoft/fast-foundation").InterfaceSymbol<string>;
2
+ export declare const HostURL: import("@microsoft/fast-foundation").InterfaceSymbol<string>;
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,8DAA+B,CAAC;AAEpD,eAAO,MAAM,OAAO,8DAA+B,CAAC"}
@@ -0,0 +1,568 @@
1
+ import { GridProRendererTypes } from '@genesislcap/foundation-zero-grid-pro';
2
+ import { FASTElement } from '@microsoft/fast-element';
3
+ import { DatasourceConfiguration } from '@genesislcap/foundation-entity-management';
4
+ /**
5
+ * Defines the default columns which are present on the user management component
6
+ *
7
+ * @remarks
8
+ *
9
+ * This is exported so you can override and mix-in custom columns along with the default
10
+ * @public
11
+ */
12
+ export declare const UsersColumnConfig: ({
13
+ field: string;
14
+ headerName: string;
15
+ enableCellChangeFlash: boolean;
16
+ enableRowGroup: boolean;
17
+ enablePivot: boolean;
18
+ enableValue: boolean;
19
+ } | {
20
+ field: string;
21
+ headerName: string;
22
+ valueFormatter: ({ value }: {
23
+ value: any;
24
+ }) => string;
25
+ enableCellChangeFlash: boolean;
26
+ enableRowGroup: boolean;
27
+ enablePivot: boolean;
28
+ enableValue: boolean;
29
+ })[];
30
+ declare const Users_base: (new (...args: any[]) => {
31
+ "__#1@#_container": import("@genesislcap/foundation-utils").FoundationLayoutContainer | import("@genesislcap/foundation-utils").LayoutCacheContainer | import("@genesislcap/foundation-utils").DOMContainer;
32
+ "__#1@#_latestTokenCode": string;
33
+ "__#1@#_hasFirstLoaded": boolean;
34
+ "__#1@#_cleanupTimeout": NodeJS.Timeout;
35
+ "__#1@#_shouldForceLifecycle": boolean;
36
+ cloneNode(deep?: boolean): Node;
37
+ deepClone(): Node;
38
+ readonly shouldRunDisconnect: boolean;
39
+ readonly shouldRunConnect: boolean;
40
+ "__#1@#_blockLifecycleDueToTokenChange"(lifecycleType: "connect" | "disconnect" | "reconnect"): boolean;
41
+ "__#1@#_tryFindContainingLayout"(e: Element): import("@genesislcap/foundation-utils").FoundationLayoutContainer | import("@genesislcap/foundation-utils").LayoutCacheContainer | import("@genesislcap/foundation-utils").DOMContainer;
42
+ connectedCallback(): void;
43
+ readonly $fastController: import("@microsoft/fast-element").Controller;
44
+ $emit(type: string, detail?: any, options?: Omit<CustomEventInit<any>, "detail">): boolean | void;
45
+ disconnectedCallback(): void;
46
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
47
+ accessKey: string;
48
+ readonly accessKeyLabel: string;
49
+ autocapitalize: string;
50
+ dir: string;
51
+ draggable: boolean;
52
+ hidden: boolean;
53
+ inert: boolean;
54
+ innerText: string;
55
+ lang: string;
56
+ readonly offsetHeight: number;
57
+ readonly offsetLeft: number;
58
+ readonly offsetParent: Element;
59
+ readonly offsetTop: number;
60
+ readonly offsetWidth: number;
61
+ outerText: string;
62
+ spellcheck: boolean;
63
+ title: string;
64
+ translate: boolean;
65
+ attachInternals(): ElementInternals;
66
+ click(): void;
67
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
68
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
69
+ removeEventListener<K_1 extends keyof HTMLElementEventMap>(type: K_1, listener: (this: HTMLElement, ev: HTMLElementEventMap[K_1]) => any, options?: boolean | EventListenerOptions): void;
70
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
71
+ readonly attributes: NamedNodeMap;
72
+ readonly classList: DOMTokenList;
73
+ className: string;
74
+ readonly clientHeight: number;
75
+ readonly clientLeft: number;
76
+ readonly clientTop: number;
77
+ readonly clientWidth: number;
78
+ /**
79
+ * entityID used to control the definition of an optional entity column which is created with the {@link Users.entityColumn} function.
80
+ * @internal
81
+ */
82
+ id: string;
83
+ readonly localName: string;
84
+ readonly namespaceURI: string;
85
+ onfullscreenchange: (this: Element, ev: Event) => any;
86
+ onfullscreenerror: (this: Element, ev: Event) => any;
87
+ outerHTML: string;
88
+ readonly ownerDocument: Document;
89
+ readonly part: DOMTokenList;
90
+ readonly prefix: string;
91
+ readonly scrollHeight: number;
92
+ scrollLeft: number;
93
+ scrollTop: number;
94
+ readonly scrollWidth: number;
95
+ readonly shadowRoot: ShadowRoot;
96
+ slot: string;
97
+ readonly tagName: string;
98
+ attachShadow(init: ShadowRootInit): ShadowRoot;
99
+ closest<K_2 extends keyof HTMLElementTagNameMap>(selector: K_2): HTMLElementTagNameMap[K_2];
100
+ closest<K_3 extends keyof SVGElementTagNameMap>(selector: K_3): SVGElementTagNameMap[K_3];
101
+ closest<E extends Element = Element>(selectors: string): E;
102
+ getAttribute(qualifiedName: string): string;
103
+ getAttributeNS(namespace: string, localName: string): string;
104
+ getAttributeNames(): string[];
105
+ getAttributeNode(qualifiedName: string): Attr;
106
+ getAttributeNodeNS(namespace: string, localName: string): Attr;
107
+ getBoundingClientRect(): DOMRect;
108
+ getClientRects(): DOMRectList;
109
+ getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;
110
+ getElementsByTagName<K_4 extends keyof HTMLElementTagNameMap>(qualifiedName: K_4): HTMLCollectionOf<HTMLElementTagNameMap[K_4]>;
111
+ getElementsByTagName<K_5 extends keyof SVGElementTagNameMap>(qualifiedName: K_5): HTMLCollectionOf<SVGElementTagNameMap[K_5]>;
112
+ getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
113
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
114
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
115
+ getElementsByTagNameNS(namespace: string, localName: string): HTMLCollectionOf<Element>;
116
+ hasAttribute(qualifiedName: string): boolean;
117
+ hasAttributeNS(namespace: string, localName: string): boolean;
118
+ hasAttributes(): boolean;
119
+ hasPointerCapture(pointerId: number): boolean;
120
+ insertAdjacentElement(where: InsertPosition, element: Element): Element;
121
+ insertAdjacentHTML(position: InsertPosition, text: string): void;
122
+ insertAdjacentText(where: InsertPosition, data: string): void;
123
+ matches(selectors: string): boolean;
124
+ releasePointerCapture(pointerId: number): void;
125
+ removeAttribute(qualifiedName: string): void;
126
+ removeAttributeNS(namespace: string, localName: string): void;
127
+ removeAttributeNode(attr: Attr): Attr;
128
+ requestFullscreen(options?: FullscreenOptions): Promise<void>;
129
+ requestPointerLock(): void;
130
+ scroll(options?: ScrollToOptions): void;
131
+ scroll(x: number, y: number): void;
132
+ scrollBy(options?: ScrollToOptions): void;
133
+ scrollBy(x: number, y: number): void;
134
+ scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;
135
+ scrollTo(options?: ScrollToOptions): void;
136
+ scrollTo(x: number, y: number): void;
137
+ setAttribute(qualifiedName: string, value: string): void;
138
+ setAttributeNS(namespace: string, qualifiedName: string, value: string): void;
139
+ setAttributeNode(attr: Attr): Attr;
140
+ setAttributeNodeNS(attr: Attr): Attr;
141
+ setPointerCapture(pointerId: number): void;
142
+ toggleAttribute(qualifiedName: string, force?: boolean): boolean;
143
+ webkitMatchesSelector(selectors: string): boolean;
144
+ readonly baseURI: string;
145
+ readonly childNodes: NodeListOf<ChildNode>;
146
+ readonly firstChild: ChildNode;
147
+ readonly isConnected: boolean;
148
+ readonly lastChild: ChildNode;
149
+ readonly nextSibling: ChildNode;
150
+ readonly nodeName: string;
151
+ readonly nodeType: number;
152
+ nodeValue: string;
153
+ readonly parentElement: HTMLElement;
154
+ readonly parentNode: ParentNode;
155
+ readonly previousSibling: ChildNode;
156
+ textContent: string;
157
+ appendChild<T_1 extends Node>(node: T_1): T_1;
158
+ compareDocumentPosition(other: Node): number;
159
+ contains(other: Node): boolean;
160
+ getRootNode(options?: GetRootNodeOptions): Node;
161
+ hasChildNodes(): boolean;
162
+ insertBefore<T_2 extends Node>(node: T_2, child: Node): T_2;
163
+ isDefaultNamespace(namespace: string): boolean;
164
+ isEqualNode(otherNode: Node): boolean;
165
+ isSameNode(otherNode: Node): boolean;
166
+ lookupNamespaceURI(prefix: string): string;
167
+ lookupPrefix(namespace: string): string;
168
+ normalize(): void;
169
+ removeChild<T_3 extends Node>(child: T_3): T_3;
170
+ replaceChild<T_4 extends Node>(node: Node, child: T_4): T_4;
171
+ readonly ATTRIBUTE_NODE: number;
172
+ readonly CDATA_SECTION_NODE: number;
173
+ readonly COMMENT_NODE: number;
174
+ readonly DOCUMENT_FRAGMENT_NODE: number;
175
+ readonly DOCUMENT_NODE: number;
176
+ readonly DOCUMENT_POSITION_CONTAINED_BY: number;
177
+ readonly DOCUMENT_POSITION_CONTAINS: number;
178
+ readonly DOCUMENT_POSITION_DISCONNECTED: number;
179
+ readonly DOCUMENT_POSITION_FOLLOWING: number;
180
+ readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
181
+ readonly DOCUMENT_POSITION_PRECEDING: number;
182
+ readonly DOCUMENT_TYPE_NODE: number;
183
+ readonly ELEMENT_NODE: number;
184
+ readonly ENTITY_NODE: number;
185
+ readonly ENTITY_REFERENCE_NODE: number;
186
+ readonly NOTATION_NODE: number;
187
+ readonly PROCESSING_INSTRUCTION_NODE: number;
188
+ readonly TEXT_NODE: number;
189
+ dispatchEvent(event: Event): boolean;
190
+ ariaAtomic: string;
191
+ ariaAutoComplete: string;
192
+ ariaBusy: string;
193
+ ariaChecked: string;
194
+ ariaColCount: string;
195
+ ariaColIndex: string;
196
+ ariaColIndexText: string;
197
+ ariaColSpan: string;
198
+ ariaCurrent: string;
199
+ ariaDisabled: string;
200
+ ariaExpanded: string;
201
+ ariaHasPopup: string;
202
+ ariaHidden: string;
203
+ ariaInvalid: string;
204
+ ariaKeyShortcuts: string;
205
+ ariaLabel: string;
206
+ ariaLevel: string;
207
+ ariaLive: string;
208
+ ariaModal: string;
209
+ ariaMultiLine: string;
210
+ ariaMultiSelectable: string;
211
+ ariaOrientation: string;
212
+ ariaPlaceholder: string;
213
+ ariaPosInSet: string;
214
+ ariaPressed: string;
215
+ ariaReadOnly: string;
216
+ ariaRequired: string;
217
+ ariaRoleDescription: string;
218
+ ariaRowCount: string;
219
+ ariaRowIndex: string;
220
+ ariaRowIndexText: string;
221
+ ariaRowSpan: string;
222
+ ariaSelected: string;
223
+ ariaSetSize: string;
224
+ ariaSort: string;
225
+ ariaValueMax: string;
226
+ ariaValueMin: string;
227
+ ariaValueNow: string;
228
+ ariaValueText: string;
229
+ role: string;
230
+ animate(keyframes: PropertyIndexedKeyframes | Keyframe[], options?: number | KeyframeAnimationOptions): Animation;
231
+ getAnimations(options?: GetAnimationsOptions): Animation[];
232
+ after(...nodes: (string | Node)[]): void;
233
+ before(...nodes: (string | Node)[]): void;
234
+ remove(): void;
235
+ replaceWith(...nodes: (string | Node)[]): void;
236
+ innerHTML: string;
237
+ readonly nextElementSibling: Element;
238
+ readonly previousElementSibling: Element;
239
+ readonly childElementCount: number;
240
+ readonly children: HTMLCollection;
241
+ readonly firstElementChild: Element;
242
+ readonly lastElementChild: Element;
243
+ append(...nodes: (string | Node)[]): void;
244
+ prepend(...nodes: (string | Node)[]): void;
245
+ querySelector<K_6 extends keyof HTMLElementTagNameMap>(selectors: K_6): HTMLElementTagNameMap[K_6];
246
+ querySelector<K_7 extends keyof SVGElementTagNameMap>(selectors: K_7): SVGElementTagNameMap[K_7];
247
+ querySelector<E_1 extends Element = Element>(selectors: string): E_1;
248
+ querySelectorAll<K_8 extends keyof HTMLElementTagNameMap>(selectors: K_8): NodeListOf<HTMLElementTagNameMap[K_8]>;
249
+ querySelectorAll<K_9 extends keyof SVGElementTagNameMap>(selectors: K_9): NodeListOf<SVGElementTagNameMap[K_9]>;
250
+ querySelectorAll<E_2 extends Element = Element>(selectors: string): NodeListOf<E_2>;
251
+ replaceChildren(...nodes: (string | Node)[]): void;
252
+ readonly assignedSlot: HTMLSlotElement;
253
+ oncopy: (this: DocumentAndElementEventHandlers, ev: ClipboardEvent) => any;
254
+ oncut: (this: DocumentAndElementEventHandlers, ev: ClipboardEvent) => any;
255
+ onpaste: (this: DocumentAndElementEventHandlers, ev: ClipboardEvent) => any;
256
+ readonly style: CSSStyleDeclaration;
257
+ contentEditable: string;
258
+ enterKeyHint: string;
259
+ inputMode: string;
260
+ readonly isContentEditable: boolean;
261
+ onabort: (this: GlobalEventHandlers, ev: UIEvent) => any;
262
+ onanimationcancel: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
263
+ onanimationend: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
264
+ onanimationiteration: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
265
+ onanimationstart: (this: GlobalEventHandlers, ev: AnimationEvent) => any;
266
+ onauxclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;
267
+ onbeforeinput: (this: GlobalEventHandlers, ev: InputEvent) => any;
268
+ onblur: (this: GlobalEventHandlers, ev: FocusEvent) => any;
269
+ oncancel: (this: GlobalEventHandlers, ev: Event) => any;
270
+ oncanplay: (this: GlobalEventHandlers, ev: Event) => any;
271
+ oncanplaythrough: (this: GlobalEventHandlers, ev: Event) => any;
272
+ onchange: (this: GlobalEventHandlers, ev: Event) => any;
273
+ onclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;
274
+ onclose: (this: GlobalEventHandlers, ev: Event) => any;
275
+ oncontextmenu: (this: GlobalEventHandlers, ev: MouseEvent) => any;
276
+ oncuechange: (this: GlobalEventHandlers, ev: Event) => any;
277
+ ondblclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;
278
+ ondrag: (this: GlobalEventHandlers, ev: DragEvent) => any;
279
+ ondragend: (this: GlobalEventHandlers, ev: DragEvent) => any;
280
+ ondragenter: (this: GlobalEventHandlers, ev: DragEvent) => any;
281
+ ondragleave: (this: GlobalEventHandlers, ev: DragEvent) => any;
282
+ ondragover: (this: GlobalEventHandlers, ev: DragEvent) => any;
283
+ ondragstart: (this: GlobalEventHandlers, ev: DragEvent) => any;
284
+ ondrop: (this: GlobalEventHandlers, ev: DragEvent) => any;
285
+ ondurationchange: (this: GlobalEventHandlers, ev: Event) => any;
286
+ onemptied: (this: GlobalEventHandlers, ev: Event) => any;
287
+ onended: (this: GlobalEventHandlers, ev: Event) => any;
288
+ onerror: OnErrorEventHandlerNonNull;
289
+ onfocus: (this: GlobalEventHandlers, ev: FocusEvent) => any;
290
+ onformdata: (this: GlobalEventHandlers, ev: FormDataEvent) => any;
291
+ ongotpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;
292
+ oninput: (this: GlobalEventHandlers, ev: Event) => any;
293
+ oninvalid: (this: GlobalEventHandlers, ev: Event) => any;
294
+ onkeydown: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
295
+ onkeypress: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
296
+ onkeyup: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;
297
+ onload: (this: GlobalEventHandlers, ev: Event) => any;
298
+ onloadeddata: (this: GlobalEventHandlers, ev: Event) => any;
299
+ onloadedmetadata: (this: GlobalEventHandlers, ev: Event) => any;
300
+ onloadstart: (this: GlobalEventHandlers, ev: Event) => any;
301
+ onlostpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;
302
+ onmousedown: (this: GlobalEventHandlers, ev: MouseEvent) => any;
303
+ onmouseenter: (this: GlobalEventHandlers, ev: MouseEvent) => any;
304
+ onmouseleave: (this: GlobalEventHandlers, ev: MouseEvent) => any;
305
+ onmousemove: (this: GlobalEventHandlers, ev: MouseEvent) => any;
306
+ onmouseout: (this: GlobalEventHandlers, ev: MouseEvent) => any;
307
+ onmouseover: (this: GlobalEventHandlers, ev: MouseEvent) => any;
308
+ onmouseup: (this: GlobalEventHandlers, ev: MouseEvent) => any;
309
+ onpause: (this: GlobalEventHandlers, ev: Event) => any;
310
+ onplay: (this: GlobalEventHandlers, ev: Event) => any;
311
+ onplaying: (this: GlobalEventHandlers, ev: Event) => any;
312
+ onpointercancel: (this: GlobalEventHandlers, ev: PointerEvent) => any;
313
+ onpointerdown: (this: GlobalEventHandlers, ev: PointerEvent) => any;
314
+ onpointerenter: (this: GlobalEventHandlers, ev: PointerEvent) => any;
315
+ onpointerleave: (this: GlobalEventHandlers, ev: PointerEvent) => any;
316
+ onpointermove: (this: GlobalEventHandlers, ev: PointerEvent) => any;
317
+ onpointerout: (this: GlobalEventHandlers, ev: PointerEvent) => any;
318
+ onpointerover: (this: GlobalEventHandlers, ev: PointerEvent) => any;
319
+ onpointerup: (this: GlobalEventHandlers, ev: PointerEvent) => any;
320
+ onprogress: (this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any;
321
+ onratechange: (this: GlobalEventHandlers, ev: Event) => any;
322
+ onreset: (this: GlobalEventHandlers, ev: Event) => any;
323
+ onresize: (this: GlobalEventHandlers, ev: UIEvent) => any;
324
+ onscroll: (this: GlobalEventHandlers, ev: Event) => any;
325
+ onsecuritypolicyviolation: (this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any;
326
+ onseeked: (this: GlobalEventHandlers, ev: Event) => any;
327
+ onseeking: (this: GlobalEventHandlers, ev: Event) => any;
328
+ onselect: (this: GlobalEventHandlers, ev: Event) => any;
329
+ onselectionchange: (this: GlobalEventHandlers, ev: Event) => any;
330
+ onselectstart: (this: GlobalEventHandlers, ev: Event) => any;
331
+ onslotchange: (this: GlobalEventHandlers, ev: Event) => any;
332
+ onstalled: (this: GlobalEventHandlers, ev: Event) => any;
333
+ onsubmit: (this: GlobalEventHandlers, ev: SubmitEvent) => any;
334
+ onsuspend: (this: GlobalEventHandlers, ev: Event) => any;
335
+ ontimeupdate: (this: GlobalEventHandlers, ev: Event) => any;
336
+ ontoggle: (this: GlobalEventHandlers, ev: Event) => any;
337
+ ontouchcancel?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
338
+ ontouchend?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
339
+ ontouchmove?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
340
+ ontouchstart?: (this: GlobalEventHandlers, ev: TouchEvent) => any;
341
+ ontransitioncancel: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
342
+ ontransitionend: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
343
+ ontransitionrun: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
344
+ ontransitionstart: (this: GlobalEventHandlers, ev: TransitionEvent) => any;
345
+ onvolumechange: (this: GlobalEventHandlers, ev: Event) => any;
346
+ onwaiting: (this: GlobalEventHandlers, ev: Event) => any;
347
+ onwebkitanimationend: (this: GlobalEventHandlers, ev: Event) => any;
348
+ onwebkitanimationiteration: (this: GlobalEventHandlers, ev: Event) => any;
349
+ onwebkitanimationstart: (this: GlobalEventHandlers, ev: Event) => any;
350
+ onwebkittransitionend: (this: GlobalEventHandlers, ev: Event) => any;
351
+ onwheel: (this: GlobalEventHandlers, ev: WheelEvent) => any;
352
+ autofocus: boolean;
353
+ readonly dataset: DOMStringMap;
354
+ nonce?: string;
355
+ tabIndex: number;
356
+ blur(): void;
357
+ focus(options?: FocusOptions): void;
358
+ }) & (new () => HTMLElement & FASTElement) & {
359
+ from<TBase extends {
360
+ new (): HTMLElement;
361
+ prototype: HTMLElement;
362
+ }>(BaseType: TBase): new () => InstanceType<TBase> & FASTElement;
363
+ define<TType extends Function>(type: TType, nameOrDef?: string | import("@microsoft/fast-element").PartialFASTElementDefinition): TType;
364
+ };
365
+ /**
366
+ * Main class which defines the user management functionality
367
+ *
368
+ * @remarks
369
+ *
370
+ * Under the hood the user-management is the entity-management micro-frontend configured for use
371
+ * with the `ALL_USERS` resource.
372
+ *
373
+ * @public
374
+ *
375
+ * @example
376
+ *
377
+ * With no customisation required the user management micro-frontend can simply be dropped into the
378
+ * template as shown. However, it is advised to wrap it in an error boundary component.
379
+ * ```javascript
380
+ * <user-management></user-management>
381
+ * ```
382
+ * With this default example above the columns will be the {@link UsersColumnConfig} as well as the
383
+ * entity and status columns. The entity and status
384
+ * columns are always added regardless of the other columns which are configured.
385
+ *
386
+ * You can add in additional customisation options. For example you can define a custom column and
387
+ * then mix-in with the standard columns
388
+ * ```javascript
389
+ * import { Users, UsersColumnConfig, } from '@genesislcap/foundation-entity-management';
390
+ *
391
+ * const userColumns = [
392
+ * {
393
+ * field: 'ACCESS_TYPE',
394
+ * headerName: 'Access Type',
395
+ * },
396
+ * ];
397
+ *
398
+ * // Definition inside of the html template
399
+ * <user-management :columns=${() => [...UsersColumnConfig, ...userColumns]}></user-management>
400
+ * ```
401
+ */
402
+ export declare class Users extends Users_base {
403
+ /**
404
+ * DI connect object which is used to interact with the backend.
405
+ *
406
+ * @remarks
407
+ *
408
+ * Requires {@link @genesislcap/foundation-comms#Connect | the connect class} to be registered with the
409
+ * DI container
410
+ * @internal
411
+ */
412
+ private connect;
413
+ /**
414
+ * Auth provider which is used to confirm authorisation of the user for their user management permissions
415
+ *
416
+ * @remarks
417
+ *
418
+ * Requires {@link @genesislcap/foundation-comms#Auth | the auth class} to be registered with the
419
+ * DI container
420
+ * @internal
421
+ */
422
+ private auth;
423
+ /**
424
+ * The configuration which is used when interacting with the resource on the backend
425
+ *
426
+ * @remarks
427
+ *
428
+ * Handles the configuration such as how many rows of entities to fetch at a time
429
+ * @internal
430
+ */
431
+ datasourceConfig: DatasourceConfiguration;
432
+ /**
433
+ * Configuring the resourceName from the entity-management, set to manage the users resource specifically
434
+ * @internal
435
+ */
436
+ resourceName: string;
437
+ /**
438
+ * This attribute controls whether and how the user manager stores the state of the columns when the user edits them. Defaulted to `entity_users_management`.
439
+ *
440
+ * @remarks
441
+ *
442
+ * Setting this value will set the entity manager to persist the column states through page refreshes etc. An example of what is stored is when the user resizes or reorders columns.
443
+ * This value must be unique for each table in your app otherwise the persisted data will be corrupted.
444
+ * There is an option on the grid for the user to reset the table to the default layout if they wish.
445
+ * @public
446
+ */
447
+ persistColumnStateKey: string;
448
+ /**
449
+ * Returns a configuration for an optional status column
450
+ *
451
+ * @returns Column configuration for an optional status column
452
+ * @internal
453
+ */
454
+ statusColumn(): {
455
+ headerName: string;
456
+ field: string;
457
+ minWidth: number;
458
+ width: number;
459
+ suppressSizeToFit: boolean;
460
+ cellRendererSelector: any;
461
+ enableCellChangeFlash: boolean;
462
+ enableRowGroup: boolean;
463
+ enablePivot: boolean;
464
+ enableValue: boolean;
465
+ };
466
+ /**
467
+ * Returns the config for an entity column if the entityID attribute is defined
468
+ *
469
+ * @returns Config for an entity column if the entityID is defined, else an empty array
470
+ * @internal
471
+ */
472
+ entityColumn(): {
473
+ headerName: string;
474
+ field: string;
475
+ enableCellChangeFlash: boolean;
476
+ enableRowGroup: boolean;
477
+ enablePivot: boolean;
478
+ enableValue: boolean;
479
+ }[];
480
+ /**
481
+ * Column definition, default to the UsersColumnConfig
482
+ */
483
+ columns: any;
484
+ additionalCreateFields: any;
485
+ additionalUpdateFields: any;
486
+ allAccessType: boolean;
487
+ private entityIdValue;
488
+ /**
489
+ * String which contains event if we have permission to insert user of empty string if not
490
+ */
491
+ createEvent: string;
492
+ /**
493
+ * String which contains event if we have permission to delete user of empty string if not
494
+ */
495
+ deleteEvent: string;
496
+ /**
497
+ * String which contains event if we have permission to update user of empty string if not
498
+ */
499
+ updateEvent: string;
500
+ /**
501
+ * entityID used to control the definition of an optional entity column which is created with the {@link Users.entityColumn} function.
502
+ * @internal
503
+ */
504
+ entityID: string;
505
+ /**
506
+ * entityID used to display label from the selector of entityID {@link Users.entityColumn} function.
507
+ * @internal
508
+ */
509
+ entityLabelKey: string;
510
+ /**
511
+ * entityID used to control the definition of an optional entity column which is created with the {@link Users.entityColumn} function.
512
+ * @internal
513
+ */
514
+ entityLabel: string;
515
+ /**
516
+ * Definition of the `DATASERVER` query which is used when managing Counterpartys
517
+ * @internal
518
+ */
519
+ availableEntitiesEndpoint: string;
520
+ /**
521
+ * Constructor will set the {@link Users.createEvent} {@link Users.deleteEvent} {@link Users.updateEvent} to match the permissions set from the server
522
+ */
523
+ constructor();
524
+ connectedCallback(): Promise<void>;
525
+ deepClone(): Node;
526
+ /**
527
+ * Used as the callback function in {@link Users.statusColumn}
528
+ * @internal
529
+ */
530
+ statusRendererSelector(params: any): {
531
+ component: GridProRendererTypes;
532
+ params: {
533
+ actionClick: () => Promise<void>;
534
+ actionName: string;
535
+ appearance: string;
536
+ };
537
+ };
538
+ /**
539
+ * Changes the status of an entity
540
+ *
541
+ * @remarks
542
+ *
543
+ * The action which is run on the status button from {@link Users.statusRendererSelector}
544
+ *
545
+ * @internal
546
+ */
547
+ changeStatus(params: any): Promise<void>;
548
+ /**
549
+ * @internal
550
+ */
551
+ readUserData(user: any): Promise<{
552
+ USER_PROFILES: any[];
553
+ ADDRESS_LINE_1: any;
554
+ ADDRESS_LINE_2: any;
555
+ ADDRESS_LINE_3: any;
556
+ ADDRESS_LINE_4: any;
557
+ ACCESS_TYPE: string;
558
+ } | {
559
+ USER_PROFILES: any[];
560
+ ADDRESS_LINE_1: any;
561
+ ADDRESS_LINE_2: any;
562
+ ADDRESS_LINE_3: any;
563
+ ADDRESS_LINE_4: any;
564
+ ACCESS_TYPE?: undefined;
565
+ }>;
566
+ }
567
+ export {};
568
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/user-admin/users.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAA4B,WAAW,EAAc,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAWpF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;IAoC7B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkKA;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAnKL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBASa,KAAM,SAAQ,UAA2B;IACpD;;;;;;;;OAQG;IACM,OAAO,CAAC,OAAO,CAAU;IAElC;;;;;;;;OAQG;IACG,OAAO,CAAC,IAAI,CAAO;IAEzB;;;;;;;OAOG;IACS,gBAAgB,EAAE,uBAAuB,CAAC;IAEtD;;;OAGG;IACG,YAAY,SAAe;IAEjC;;;;;;;;;OASG;IAC8C,qBAAqB,EAAE,MAAM,CAClD;IAE5B;;;;;OAKG;IACI,YAAY;;;;;;;;;;;;IAYnB;;;;;OAKG;IACI,YAAY;;;;;;;;IAYnB;;OAEG;IACS,OAAO,EAAE,GAAG,CAAqB;IAEjC,sBAAsB,EAAE,GAAG,CAAM;IACjC,sBAAsB,EAAE,GAAG,CAAM;IAEjC,aAAa,EAAE,OAAO,CAAC;IACnC,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACS,WAAW,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACS,WAAW,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACS,WAAW,EAAE,MAAM,CAAC;IAEhC;;;OAGG;IACG,QAAQ,EAAE,MAAM,CAAqB;IAE3C;;;OAGG;IACG,cAAc,EAAE,MAAM,CAAU;IAEtC;;;OAGG;IACG,WAAW,EAAE,MAAM,CAAkB;IAE3C;;;OAGG;IACG,yBAAyB,EAAE,MAAM,CAAuB;IAE9D;;OAEG;;IAaG,iBAAiB;IAcd,SAAS,IAAI,IAAI;IAc1B;;;OAGG;IACH,sBAAsB,CAAC,MAAM,KAAA;;;;;;;;IAW7B;;;;;;;;OAQG;IACG,YAAY,CAAC,MAAM,KAAA;IAoCzB;;OAEG;IACG,YAAY,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;CAwBxB"}
@@ -0,0 +1,3 @@
1
+ import type { ViewTemplate } from '@microsoft/fast-element';
2
+ export declare const UsersTemplate: ViewTemplate;
3
+ //# sourceMappingURL=users.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.template.d.ts","sourceRoot":"","sources":["../../../src/user-admin/users.template.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAqF5D,eAAO,MAAM,aAAa,EAAE,YAmC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Format the error as a string with a different format depending on whether
3
+ * `err` has a `FIELD` property or not
4
+ * @public
5
+ */
6
+ export declare const getErrorFormat: (err: any) => string;
7
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,cAAc,sBAAsE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './formatting';
2
+ export * from './logger';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @public
3
+ */
4
+ export declare const logger: import("@genesislcap/foundation-logger").Logger;
5
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,MAAM,iDAA6B,CAAC"}
@@ -0,0 +1 @@
1
+ import('./index');
@@ -0,0 +1 @@
1
+ export * from './user-admin/users';
@@ -0,0 +1,3 @@
1
+ import { DI } from '@microsoft/fast-foundation';
2
+ export const HostENV = DI.createInterface();
3
+ export const HostURL = DI.createInterface();
@@ -0,0 +1,313 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Auth, Connect } from '@genesislcap/foundation-comms';
3
+ import { showNotification } from '@genesislcap/foundation-notifications';
4
+ import { LifecycleMixin } from '@genesislcap/foundation-utils';
5
+ import { GridProRendererTypes } from '@genesislcap/foundation-zero-grid-pro';
6
+ import { attr, css, customElement, FASTElement, observable } from '@microsoft/fast-element';
7
+ import { getErrorFormat, logger } from '../utils';
8
+ import { UsersTemplate } from './users.template';
9
+ const defaultColumnConfig = {
10
+ enableCellChangeFlash: true,
11
+ enableRowGroup: false,
12
+ enablePivot: true,
13
+ enableValue: true,
14
+ };
15
+ /**
16
+ * Defines the default columns which are present on the user management component
17
+ *
18
+ * @remarks
19
+ *
20
+ * This is exported so you can override and mix-in custom columns along with the default
21
+ * @public
22
+ */
23
+ export const UsersColumnConfig = [
24
+ Object.assign(Object.assign({}, defaultColumnConfig), { field: 'USER_NAME', headerName: 'Username' }),
25
+ Object.assign(Object.assign({}, defaultColumnConfig), { field: 'FIRST_NAME', headerName: 'First Name' }),
26
+ Object.assign(Object.assign({}, defaultColumnConfig), { field: 'LAST_NAME', headerName: 'Last Name' }),
27
+ Object.assign(Object.assign({}, defaultColumnConfig), { field: 'EMAIL_ADDRESS', headerName: 'Email' }),
28
+ Object.assign(Object.assign({}, defaultColumnConfig), { field: 'LAST_LOGIN', headerName: 'Last Login', valueFormatter: ({ value }) => value
29
+ ? new Intl.DateTimeFormat('default', {
30
+ year: 'numeric',
31
+ month: 'numeric',
32
+ day: 'numeric',
33
+ hour: 'numeric',
34
+ minute: 'numeric',
35
+ }).format(value)
36
+ : '' }),
37
+ ];
38
+ /**
39
+ * Main class which defines the user management functionality
40
+ *
41
+ * @remarks
42
+ *
43
+ * Under the hood the user-management is the entity-management micro-frontend configured for use
44
+ * with the `ALL_USERS` resource.
45
+ *
46
+ * @public
47
+ *
48
+ * @example
49
+ *
50
+ * With no customisation required the user management micro-frontend can simply be dropped into the
51
+ * template as shown. However, it is advised to wrap it in an error boundary component.
52
+ * ```javascript
53
+ * <user-management></user-management>
54
+ * ```
55
+ * With this default example above the columns will be the {@link UsersColumnConfig} as well as the
56
+ * entity and status columns. The entity and status
57
+ * columns are always added regardless of the other columns which are configured.
58
+ *
59
+ * You can add in additional customisation options. For example you can define a custom column and
60
+ * then mix-in with the standard columns
61
+ * ```javascript
62
+ * import { Users, UsersColumnConfig, } from '@genesislcap/foundation-entity-management';
63
+ *
64
+ * const userColumns = [
65
+ * {
66
+ * field: 'ACCESS_TYPE',
67
+ * headerName: 'Access Type',
68
+ * },
69
+ * ];
70
+ *
71
+ * // Definition inside of the html template
72
+ * <user-management :columns=${() => [...UsersColumnConfig, ...userColumns]}></user-management>
73
+ * ```
74
+ */
75
+ let Users = class Users extends LifecycleMixin(FASTElement) {
76
+ /**
77
+ * Returns a configuration for an optional status column
78
+ *
79
+ * @returns Column configuration for an optional status column
80
+ * @internal
81
+ */
82
+ statusColumn() {
83
+ return Object.assign(Object.assign({}, defaultColumnConfig), { headerName: 'Status', field: 'STATUS', minWidth: 135, width: 135, suppressSizeToFit: true, cellRendererSelector: this.statusRendererSelector.bind(this) });
84
+ }
85
+ /**
86
+ * Returns the config for an entity column if the entityID attribute is defined
87
+ *
88
+ * @returns Config for an entity column if the entityID is defined, else an empty array
89
+ * @internal
90
+ */
91
+ entityColumn() {
92
+ return this.entityID
93
+ ? [
94
+ Object.assign(Object.assign({}, defaultColumnConfig), { headerName: this.entityLabel, field: this.entityID }),
95
+ ]
96
+ : [];
97
+ }
98
+ /**
99
+ * Constructor will set the {@link Users.createEvent} {@link Users.deleteEvent} {@link Users.updateEvent} to match the permissions set from the server
100
+ */
101
+ constructor() {
102
+ super();
103
+ /**
104
+ * Configuring the resourceName from the entity-management, set to manage the users resource specifically
105
+ * @internal
106
+ */
107
+ this.resourceName = 'ALL_USERS';
108
+ /**
109
+ * This attribute controls whether and how the user manager stores the state of the columns when the user edits them. Defaulted to `entity_users_management`.
110
+ *
111
+ * @remarks
112
+ *
113
+ * Setting this value will set the entity manager to persist the column states through page refreshes etc. An example of what is stored is when the user resizes or reorders columns.
114
+ * This value must be unique for each table in your app otherwise the persisted data will be corrupted.
115
+ * There is an option on the grid for the user to reset the table to the default layout if they wish.
116
+ * @public
117
+ */
118
+ this.persistColumnStateKey = 'entity_users_management';
119
+ /**
120
+ * Column definition, default to the UsersColumnConfig
121
+ */
122
+ this.columns = UsersColumnConfig;
123
+ this.additionalCreateFields = [];
124
+ this.additionalUpdateFields = [];
125
+ /**
126
+ * entityID used to control the definition of an optional entity column which is created with the {@link Users.entityColumn} function.
127
+ * @internal
128
+ */
129
+ this.entityID = 'COUNTERPARTY_ID';
130
+ /**
131
+ * entityID used to display label from the selector of entityID {@link Users.entityColumn} function.
132
+ * @internal
133
+ */
134
+ this.entityLabelKey = 'NAME';
135
+ /**
136
+ * entityID used to control the definition of an optional entity column which is created with the {@link Users.entityColumn} function.
137
+ * @internal
138
+ */
139
+ this.entityLabel = 'Counterparty';
140
+ /**
141
+ * Definition of the `DATASERVER` query which is used when managing Counterpartys
142
+ * @internal
143
+ */
144
+ this.availableEntitiesEndpoint = 'ALL_COUNTERPARTYS';
145
+ this.createEvent = this.auth.currentUser.hasPermission('INSERT_USER')
146
+ ? 'EVENT_INSERT_USER'
147
+ : '';
148
+ this.deleteEvent = this.auth.currentUser.hasPermission('DELETE_USER')
149
+ ? 'EVENT_DELETE_USER'
150
+ : '';
151
+ this.updateEvent = this.auth.currentUser.hasPermission('AMEND_USER') ? 'EVENT_AMEND_USER' : '';
152
+ }
153
+ connectedCallback() {
154
+ const _super = Object.create(null, {
155
+ connectedCallback: { get: () => super.connectedCallback }
156
+ });
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ _super.connectedCallback.call(this);
159
+ // retrieving access type of currently logged-in user
160
+ const userReq = yield this.connect.snapshot('ALL_USERS', {
161
+ CRITERIA_MATCH: `USER_NAME == '${this.auth.currentUser.username}'`,
162
+ });
163
+ if (userReq.ROW[0]) {
164
+ this.allAccessType = userReq.ROW[0].ACCESS_TYPE === 'ALL';
165
+ this.entityIdValue = userReq.ROW[0][this.entityID];
166
+ }
167
+ });
168
+ }
169
+ deepClone() {
170
+ const copy = super.deepClone();
171
+ copy.additionalCreateFields = structuredClone(this.additionalCreateFields);
172
+ copy.additionalUpdateFields = structuredClone(this.additionalUpdateFields);
173
+ copy.allAccessType = structuredClone(this.allAccessType);
174
+ copy.createEvent = structuredClone(this.createEvent);
175
+ copy.datasourceConfig = structuredClone(this.datasourceConfig);
176
+ copy.deleteEvent = structuredClone(this.deleteEvent);
177
+ copy.updateEvent = structuredClone(this.updateEvent);
178
+ // this.columns[number] might contain a function, so can't use structuredClone
179
+ copy.columns = this.columns ? [...this.columns].map((x) => (Object.assign({}, x))) : this.columns;
180
+ return copy;
181
+ }
182
+ /**
183
+ * Used as the callback function in {@link Users.statusColumn}
184
+ * @internal
185
+ */
186
+ statusRendererSelector(params) {
187
+ return {
188
+ component: GridProRendererTypes.action,
189
+ params: {
190
+ actionClick: () => this.changeStatus(params),
191
+ actionName: params.value === 'ENABLED' ? 'Deactivate' : 'Activate',
192
+ appearance: 'secondary-orange',
193
+ },
194
+ };
195
+ }
196
+ /**
197
+ * Changes the status of an entity
198
+ *
199
+ * @remarks
200
+ *
201
+ * The action which is run on the status button from {@link Users.statusRendererSelector}
202
+ *
203
+ * @internal
204
+ */
205
+ changeStatus(params) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ const isEnabled = params.data.STATUS === 'ENABLED';
208
+ // optimistically set value and store previous value
209
+ const previousValue = params.data.STATUS;
210
+ params.setValue(isEnabled ? 'DISABLED' : 'ENABLED');
211
+ const changeStatusRequest = yield this.connect.commitEvent(isEnabled ? 'EVENT_DISABLE_USER' : 'EVENT_ENABLE_USER', {
212
+ DETAILS: {
213
+ USER_NAME: params.data.USER_NAME,
214
+ },
215
+ });
216
+ if (changeStatusRequest.ERROR) {
217
+ logger.error(changeStatusRequest.ERROR);
218
+ const notificationCloseTimeout = 5000;
219
+ changeStatusRequest.ERROR.forEach((err) => {
220
+ showNotification({
221
+ title: err.CODE,
222
+ body: getErrorFormat(err),
223
+ config: {
224
+ toast: { type: 'warning', autoClose: true, closeTimeout: notificationCloseTimeout },
225
+ },
226
+ }, 'zero');
227
+ });
228
+ // bring back original value
229
+ params.setValue(previousValue);
230
+ }
231
+ });
232
+ }
233
+ /**
234
+ * @internal
235
+ */
236
+ readUserData(user) {
237
+ var _a;
238
+ return __awaiter(this, void 0, void 0, function* () {
239
+ const userProfiles = yield this.connect.request('PROFILE_USER', {
240
+ REQUEST: {
241
+ USER_NAME: user.USER_NAME,
242
+ },
243
+ });
244
+ const defaultValues = !this.allAccessType && ((_a = this.entityIdValue) === null || _a === void 0 ? void 0 : _a.length)
245
+ ? {
246
+ ACCESS_TYPE: 'ENTITY',
247
+ [this.entityID]: this.entityIdValue,
248
+ }
249
+ : {};
250
+ return Object.assign(Object.assign({}, defaultValues), { USER_PROFILES: (userProfiles.REPLY || []).map((profile) => profile.PROFILE_NAME), ADDRESS_LINE_1: user.ADDRESS_LINE1, ADDRESS_LINE_2: user.ADDRESS_LINE2, ADDRESS_LINE_3: user.ADDRESS_LINE3, ADDRESS_LINE_4: user.ADDRESS_LINE4 });
251
+ });
252
+ }
253
+ };
254
+ __decorate([
255
+ Connect
256
+ ], Users.prototype, "connect", void 0);
257
+ __decorate([
258
+ Auth
259
+ ], Users.prototype, "auth", void 0);
260
+ __decorate([
261
+ observable
262
+ ], Users.prototype, "datasourceConfig", void 0);
263
+ __decorate([
264
+ attr
265
+ ], Users.prototype, "resourceName", void 0);
266
+ __decorate([
267
+ attr({ attribute: 'persist-column-state-key' })
268
+ ], Users.prototype, "persistColumnStateKey", void 0);
269
+ __decorate([
270
+ observable
271
+ ], Users.prototype, "columns", void 0);
272
+ __decorate([
273
+ observable
274
+ ], Users.prototype, "additionalCreateFields", void 0);
275
+ __decorate([
276
+ observable
277
+ ], Users.prototype, "additionalUpdateFields", void 0);
278
+ __decorate([
279
+ observable
280
+ ], Users.prototype, "allAccessType", void 0);
281
+ __decorate([
282
+ observable
283
+ ], Users.prototype, "createEvent", void 0);
284
+ __decorate([
285
+ observable
286
+ ], Users.prototype, "deleteEvent", void 0);
287
+ __decorate([
288
+ observable
289
+ ], Users.prototype, "updateEvent", void 0);
290
+ __decorate([
291
+ attr
292
+ ], Users.prototype, "entityID", void 0);
293
+ __decorate([
294
+ attr
295
+ ], Users.prototype, "entityLabelKey", void 0);
296
+ __decorate([
297
+ attr
298
+ ], Users.prototype, "entityLabel", void 0);
299
+ __decorate([
300
+ attr
301
+ ], Users.prototype, "availableEntitiesEndpoint", void 0);
302
+ Users = __decorate([
303
+ customElement({
304
+ name: 'user-management',
305
+ template: UsersTemplate,
306
+ styles: css `
307
+ :host {
308
+ height: 100%;
309
+ }
310
+ `,
311
+ })
312
+ ], Users);
313
+ export { Users };
@@ -0,0 +1,90 @@
1
+ import { html } from '@microsoft/fast-element';
2
+ const conditionalSchemaEntry = (predicate, entry) => {
3
+ return predicate ? [entry] : [];
4
+ };
5
+ const editUserSchema = (edit, allAccessType, entityID, entityLabel, entityLabelKey, availableEntitiesEndpoint, additionalEntries = []) => ({
6
+ type: 'VerticalLayout',
7
+ elements: [
8
+ {
9
+ type: 'Control',
10
+ label: 'Username',
11
+ scope: '#/properties/USER_NAME',
12
+ options: {
13
+ readonly: edit,
14
+ },
15
+ },
16
+ {
17
+ type: 'Control',
18
+ label: 'Email',
19
+ scope: '#/properties/EMAIL_ADDRESS',
20
+ },
21
+ {
22
+ type: 'Control',
23
+ label: 'First Name',
24
+ scope: '#/properties/FIRST_NAME',
25
+ },
26
+ {
27
+ type: 'Control',
28
+ label: 'Last Name',
29
+ scope: '#/properties/LAST_NAME',
30
+ },
31
+ ...conditionalSchemaEntry(!edit, {
32
+ type: 'Control',
33
+ label: 'One Time Password',
34
+ scope: '#/properties/ONE_TIME_PASSWORD',
35
+ }),
36
+ {
37
+ type: 'Control',
38
+ label: 'User Profiles',
39
+ scope: '#/properties/USER_PROFILES',
40
+ options: {
41
+ allOptionsResourceName: 'ALL_PROFILES',
42
+ valueField: 'PROFILE_NAME',
43
+ labelField: 'PROFILE_NAME',
44
+ },
45
+ },
46
+ ...conditionalSchemaEntry(!!entityID, {
47
+ type: 'Control',
48
+ label: 'Access Type',
49
+ scope: '#/properties/ACCESS_TYPE',
50
+ options: {
51
+ hidden: !allAccessType,
52
+ },
53
+ }),
54
+ ...conditionalSchemaEntry(!!entityID, {
55
+ type: 'Control',
56
+ scope: `#/properties/${entityID}`,
57
+ options: {
58
+ allOptionsResourceName: availableEntitiesEndpoint,
59
+ valueField: entityID,
60
+ labelField: entityLabelKey || entityID,
61
+ hidden: !allAccessType,
62
+ },
63
+ label: entityLabel,
64
+ }),
65
+ ...additionalEntries.map((entry) => typeof entry === 'string'
66
+ ? {
67
+ type: 'Control',
68
+ scope: `#/properties/${entry}`,
69
+ }
70
+ : entry),
71
+ ],
72
+ });
73
+ export const UsersTemplate = html `
74
+ <entity-management
75
+ resourceName=${(x) => x.resourceName}
76
+ title="User Management"
77
+ entityLabel="User"
78
+ createEvent="${(x) => x.createEvent}"
79
+ :readEventFn=${(x) => (user) => x.readUserData(user)}
80
+ updateEvent="${(x) => x.updateEvent}"
81
+ deleteEvent="${(x) => x.deleteEvent}"
82
+ entityLabel="User Details"
83
+ :updateFormUiSchema=${(x) => editUserSchema(true, x.allAccessType, x.entityID, x.entityLabel, x.entityLabelKey, x.availableEntitiesEndpoint, x.additionalUpdateFields)}
84
+ :createFormUiSchema=${(x) => editUserSchema(false, x.allAccessType, x.entityID, x.entityLabel, x.entityLabelKey, x.availableEntitiesEndpoint, x.additionalCreateFields)}
85
+ persist-column-state-key=${(x) => x.persistColumnStateKey}
86
+ size-columns-to-fit
87
+ :columns=${(x) => [...x.columns, ...x.entityColumn(), x.statusColumn()]}
88
+ :datasourceConfig=${(x) => x.datasourceConfig}
89
+ ></entity-management>
90
+ `;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Format the error as a string with a different format depending on whether
3
+ * `err` has a `FIELD` property or not
4
+ * @public
5
+ */
6
+ export const getErrorFormat = (err) => (err.FIELD ? `${err.FIELD} - ${err.TEXT}` : `${err.TEXT}`);
@@ -0,0 +1,2 @@
1
+ export * from './formatting';
2
+ export * from './logger';
@@ -0,0 +1,5 @@
1
+ import { createLogger } from '@genesislcap/foundation-logger';
2
+ /**
3
+ * @public
4
+ */
5
+ export const logger = createLogger('user-admin');
package/index.html ADDED
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>{{htmlWebpackPlugin.options.title}}</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ </head>
8
+ <style>
9
+ html,
10
+ body {
11
+ width: 100%;
12
+ height: 100%;
13
+ padding: 0;
14
+ margin: 0;
15
+ }
16
+ :not(:defined) {
17
+ visibility: hidden;
18
+ }
19
+ </style>
20
+ <body>
21
+ <user-management></user-management>
22
+ {{#if insertEntryPoint}}
23
+ <script type="module" src="/src/index.ts"></script>
24
+ {{/if}}
25
+ </body>
26
+ </html>
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@genesislcap/pbc-auth-ui",
3
+ "description": "Genesis PBC auth UI",
4
+ "version": "1.0.3",
5
+ "license": "SEE LICENSE IN license.txt",
6
+ "main": "dist/esm/index.js",
7
+ "types": "dist/foundation-auth.d.ts",
8
+ "engines": {
9
+ "node": ">=20.0.0"
10
+ },
11
+ "config": {
12
+ "PORT": 5070
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/foundation-auth.d.ts",
17
+ "default": "./dist/esm/index.js"
18
+ },
19
+ "./e2e": {
20
+ "default": "./test/e2e/index.ts"
21
+ },
22
+ "./package.json": "./package.json"
23
+ },
24
+ "typesVersions": {
25
+ "*": {
26
+ "e2e": [
27
+ "./test/e2e/index.ts"
28
+ ]
29
+ }
30
+ },
31
+ "scripts": {
32
+ "bootstrap": "npm install --no-fund --no-audit",
33
+ "bootstrap:ci": "npm ci --no-fund --no-audit",
34
+ "build": "genx build -b ts",
35
+ "build:webpack": "genx build",
36
+ "build:webpack:stats": "genx analyze",
37
+ "clean": "rimraf dist tsconfig.tsbuildinfo",
38
+ "dev": "genx dev -e API_HOST,ENABLE_SSO",
39
+ "dev:docker": "npm run dev -- --host 0.0.0.0",
40
+ "dev:intellij": "genx dev -e ENABLE_SSO",
41
+ "dev:no-open": "npm run dev -- --no-open",
42
+ "dev:https": "npm run dev -- --https",
43
+ "dev:webpack": "npm run dev -- -b webpack",
44
+ "serve": "genx serve",
45
+ "test": "genx test",
46
+ "test:coverage": "genx test --coverage",
47
+ "test:coverage:browser": "genx test --coverage --browser",
48
+ "test:e2e": "genx test --e2e",
49
+ "test:e2e:debug": "genx test --e2e --debug",
50
+ "test:e2e:ui": "genx test --e2e --interactive",
51
+ "test:unit:browser": "genx test --browser",
52
+ "test:unit:browser:watch": "genx test --browser --watch",
53
+ "test:unit:watch": "genx test --watch",
54
+ "test:debug": "genx test --debug"
55
+ },
56
+ "devDependencies": {
57
+ "@genesislcap/foundation-testing": "~14",
58
+ "@genesislcap/genx": "~14",
59
+ "playwright-lighthouse": "^3.1.0",
60
+ "rimraf": "^3.0.2",
61
+ "tslib": "^2.3.1"
62
+ },
63
+ "peerDependencies": {
64
+ "@ag-grid-community/core": "29.2.0",
65
+ "@genesislcap/foundation-comms": "~14",
66
+ "@genesislcap/foundation-entity-management": "~14",
67
+ "@genesislcap/foundation-logger": "~14",
68
+ "@genesislcap/foundation-notifications": "~14",
69
+ "@genesislcap/foundation-utils": "~14",
70
+ "@microsoft/fast-components": "^2.21.3",
71
+ "@microsoft/fast-element": "^1.7.0",
72
+ "@microsoft/fast-foundation": "^2.33.2",
73
+ "@microsoft/fast-router": "^0.4.2"
74
+ },
75
+ "publishConfig": {
76
+ "access": "public"
77
+ },
78
+ "customElements": "dist/custom-elements.json"
79
+ }
@@ -0,0 +1,5 @@
1
+ sonar.projectKey=genesislcap_auth-server_client
2
+ sonar.projectName=pbc-auth-ui
3
+ sonar.organization=genesislcap
4
+ sonar.host.url=https://sonarcloud.io
5
+ sonar.sourceEncoding=UTF-8