@ieeesa-npm/groups 0.15.3 → 0.15.5
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/esm2022/lib/assets/constants.json +32 -0
- package/esm2022/lib/components/view-roster/view-roster.component.mjs +47 -7
- package/esm2022/lib/services/roster-export.service.mjs +396 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ieeesa-npm-groups.mjs +466 -10
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/view-roster/view-roster.component.d.ts +16 -2
- package/lib/services/groups.service.d.ts +1 -13
- package/lib/services/roster-export.service.d.ts +171 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -5,23 +5,25 @@ import { CommonModule } from '@angular/common';
|
|
|
5
5
|
import * as i3$1 from '@angular/forms';
|
|
6
6
|
import { FormsModule, Validators } from '@angular/forms';
|
|
7
7
|
import * as i2$1 from '@ieeesa-npm/presentation';
|
|
8
|
-
import { SlideToggleComponent, AlignType, FormControlType, DynamicFormComponent, MenuComponent, IconButtonComponent, TextTruncatedDirective, SearchType, ChipsType, TableColumnType, TableColumnSortDirection, ModalConfirmationComponent, DataTableComponent, ModalComponent, SearchComponent, SelectComponent, LegendComponent } from '@ieeesa-npm/presentation';
|
|
8
|
+
import { SlideToggleComponent, AlignType, FormControlType, DynamicFormComponent, MenuComponent, IconButtonComponent, TextTruncatedDirective, SearchType, ExportFormat, PolicyConfirmationDialogComponent, ExportSuccessDialogComponent, ChipsType, TableColumnType, TableColumnSortDirection, ModalConfirmationComponent, DataTableComponent, ExportFormatPopoverComponent, ModalComponent, SearchComponent, SelectComponent, LegendComponent } from '@ieeesa-npm/presentation';
|
|
9
9
|
import * as i2 from '@ieeesa-npm/utility';
|
|
10
10
|
import { AlertsService } from '@ieeesa-npm/utility';
|
|
11
|
-
import
|
|
11
|
+
import * as i1$1 from '@angular/common/http';
|
|
12
|
+
import { HttpErrorResponse, HttpParams } from '@angular/common/http';
|
|
12
13
|
import * as i1 from '@angular/material/dialog';
|
|
13
14
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
14
|
-
import { BehaviorSubject, map, catchError, Subject, takeUntil, forkJoin, merge } from 'rxjs';
|
|
15
|
+
import { BehaviorSubject, map, catchError, Subject, takeUntil, forkJoin, merge, EMPTY } from 'rxjs';
|
|
15
16
|
import { AlertType, FormStatus, ModalType } from '@ieeesa-npm/models';
|
|
16
17
|
import * as i4 from '@angular/material/button';
|
|
17
18
|
import { MatButtonModule } from '@angular/material/button';
|
|
18
19
|
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
19
|
-
import { takeUntil as takeUntil$1, map as map$1 } from 'rxjs/operators';
|
|
20
|
+
import { takeUntil as takeUntil$1, map as map$1, catchError as catchError$1 } from 'rxjs/operators';
|
|
20
21
|
import { MatIconModule } from '@angular/material/icon';
|
|
21
22
|
import * as i4$1 from '@angular/material/tree';
|
|
22
23
|
import { MatTreeModule } from '@angular/material/tree';
|
|
23
24
|
import * as i5 from '@angular/material/tooltip';
|
|
24
25
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
26
|
+
import { saveAs } from 'file-saver';
|
|
25
27
|
|
|
26
28
|
var addUserRoster = {
|
|
27
29
|
heading: "New User",
|
|
@@ -279,6 +281,38 @@ var viewRoster = {
|
|
|
279
281
|
searchPlaceholderIndividual: "Search by Name/Email Address/Representing Org",
|
|
280
282
|
emptyFieldValueReplacedBy: "-"
|
|
281
283
|
};
|
|
284
|
+
var rosterExport = {
|
|
285
|
+
buttonLabel: "Export",
|
|
286
|
+
ariaLabel: "Export roster",
|
|
287
|
+
popoverTitle: "Select the file format for roster export.",
|
|
288
|
+
formatOptions: {
|
|
289
|
+
csv: {
|
|
290
|
+
label: "CSV",
|
|
291
|
+
subtitle: "Comma separated file",
|
|
292
|
+
ariaLabel: "Export roster as CSV"
|
|
293
|
+
},
|
|
294
|
+
excel: {
|
|
295
|
+
label: "Excel",
|
|
296
|
+
subtitle: "Spreadsheet File",
|
|
297
|
+
ariaLabel: "Export roster as Excel"
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
policyDialog: {
|
|
301
|
+
title: "IEEE Data Access and Use Policy",
|
|
302
|
+
bodyText: "The application is governed by IEEE's data access and use policy. Data can only be used for its original intended purpose. Click \"Confirm\" to export the data into a CSV/Excel file or click \"Cancel\" to cancel the download.",
|
|
303
|
+
policyUrl: "https://www.ieee.org/ieee-data-access-and-use-policy.html",
|
|
304
|
+
policyLinkText: "data access and use policy",
|
|
305
|
+
cancelLabel: "Cancel",
|
|
306
|
+
confirmLabel: "Confirm"
|
|
307
|
+
},
|
|
308
|
+
successDialog: {
|
|
309
|
+
message: "The file was downloaded successfully.",
|
|
310
|
+
closeButton: "Close"
|
|
311
|
+
},
|
|
312
|
+
messages: {
|
|
313
|
+
exportFailed: "Failed to export roster. Please try again."
|
|
314
|
+
}
|
|
315
|
+
};
|
|
282
316
|
var editUserRoles = {
|
|
283
317
|
heading: "Edit System User",
|
|
284
318
|
message: {
|
|
@@ -363,6 +397,7 @@ var constants = {
|
|
|
363
397
|
deleteGroup: deleteGroup,
|
|
364
398
|
deleteUsersGroup: deleteUsersGroup,
|
|
365
399
|
viewRoster: viewRoster,
|
|
400
|
+
rosterExport: rosterExport,
|
|
366
401
|
editUserRoles: editUserRoles,
|
|
367
402
|
errors: errors,
|
|
368
403
|
ariaLabel: ariaLabel
|
|
@@ -379,6 +414,7 @@ var screenTexts = /*#__PURE__*/Object.freeze({
|
|
|
379
414
|
editGroup: editGroup,
|
|
380
415
|
editUserRoles: editUserRoles,
|
|
381
416
|
errors: errors,
|
|
417
|
+
rosterExport: rosterExport,
|
|
382
418
|
viewGroups: viewGroups,
|
|
383
419
|
viewRoster: viewRoster
|
|
384
420
|
});
|
|
@@ -4286,6 +4322,390 @@ var TableColumnSchemaUserGroup;
|
|
|
4286
4322
|
TableColumnSchemaUserGroup["MEMBER_TYPE"] = "memberType";
|
|
4287
4323
|
})(TableColumnSchemaUserGroup || (TableColumnSchemaUserGroup = {}));
|
|
4288
4324
|
|
|
4325
|
+
/**
|
|
4326
|
+
* RosterExportService owns the complete group roster export flow:
|
|
4327
|
+
* 1. Manages export popover open/close state
|
|
4328
|
+
* 2. Opens IEEE Data Access and Use Policy confirmation dialog
|
|
4329
|
+
* 3. Calls the backend roster export API (blob response)
|
|
4330
|
+
* 4. Triggers file download via File System Access API / file-saver
|
|
4331
|
+
* 5. Shows success/error dialogs and toasts
|
|
4332
|
+
*
|
|
4333
|
+
* The component only needs to:
|
|
4334
|
+
* - Subscribe to `isPopoverOpen$` for popover visibility
|
|
4335
|
+
* - Call `togglePopover()` on Export button click
|
|
4336
|
+
* - Call `onFormatSelected(format, groupId, groupName)` when user picks a format
|
|
4337
|
+
*
|
|
4338
|
+
* Follows the same pattern as MeetingExportService in the events-and-meetings library.
|
|
4339
|
+
* @export
|
|
4340
|
+
* @class RosterExportService
|
|
4341
|
+
*/
|
|
4342
|
+
class RosterExportService {
|
|
4343
|
+
constructor(
|
|
4344
|
+
// eslint-disable-next-line no-unused-vars
|
|
4345
|
+
httpClient,
|
|
4346
|
+
// eslint-disable-next-line no-unused-vars
|
|
4347
|
+
dialog,
|
|
4348
|
+
// eslint-disable-next-line no-unused-vars
|
|
4349
|
+
alertService) {
|
|
4350
|
+
this.httpClient = httpClient;
|
|
4351
|
+
this.dialog = dialog;
|
|
4352
|
+
this.alertService = alertService;
|
|
4353
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4354
|
+
this.constants = screenTexts;
|
|
4355
|
+
this.destroy$ = new Subject();
|
|
4356
|
+
/** Controls popover open/close state */
|
|
4357
|
+
this.isPopoverOpenSubject$ = new BehaviorSubject(false);
|
|
4358
|
+
this.isPopoverOpen$ = this.isPopoverOpenSubject$.asObservable();
|
|
4359
|
+
/** Controls in-progress state for button disable */
|
|
4360
|
+
this.isExportInProgressSubject$ = new BehaviorSubject(false);
|
|
4361
|
+
this.isExportInProgress$ = this.isExportInProgressSubject$.asObservable();
|
|
4362
|
+
/** Format options for the export popover */
|
|
4363
|
+
this.exportFormatOptions = [
|
|
4364
|
+
{
|
|
4365
|
+
label: this.constants?.rosterExport?.formatOptions?.csv?.label ?? 'CSV',
|
|
4366
|
+
value: ExportFormat.CSV,
|
|
4367
|
+
ariaLabel: this.constants?.rosterExport?.formatOptions?.csv?.ariaLabel ?? 'Export roster as CSV',
|
|
4368
|
+
},
|
|
4369
|
+
{
|
|
4370
|
+
label: this.constants?.rosterExport?.formatOptions?.excel?.label ?? 'Excel',
|
|
4371
|
+
value: ExportFormat.EXCEL,
|
|
4372
|
+
ariaLabel: this.constants?.rosterExport?.formatOptions?.excel?.ariaLabel ?? 'Export roster as Excel',
|
|
4373
|
+
},
|
|
4374
|
+
];
|
|
4375
|
+
/** Subtitle labels for the format selection cards */
|
|
4376
|
+
this.exportFormatSubtitles = {
|
|
4377
|
+
csv: this.constants?.rosterExport?.formatOptions?.csv?.subtitle ?? 'Comma separated file',
|
|
4378
|
+
xls: this.constants?.rosterExport?.formatOptions?.excel?.subtitle ?? 'Spreadsheet File',
|
|
4379
|
+
};
|
|
4380
|
+
/** Popover title */
|
|
4381
|
+
this.popoverTitle = this.constants?.rosterExport?.popoverTitle ?? 'Select the file format for roster export.';
|
|
4382
|
+
}
|
|
4383
|
+
/**
|
|
4384
|
+
* Sets the API base URL for roster export calls.
|
|
4385
|
+
* @param {string} url - Base URL (e.g., 'https://saappsapidev.ieee.org/v1')
|
|
4386
|
+
* @memberof RosterExportService
|
|
4387
|
+
*/
|
|
4388
|
+
setApiBaseUrl(url) {
|
|
4389
|
+
this.apiBaseUrl = url;
|
|
4390
|
+
}
|
|
4391
|
+
/**
|
|
4392
|
+
* Toggles the export format popover open/closed.
|
|
4393
|
+
* Called by the component on Export button click.
|
|
4394
|
+
* @memberof RosterExportService
|
|
4395
|
+
*/
|
|
4396
|
+
togglePopover() {
|
|
4397
|
+
this.isPopoverOpenSubject$.next(!this.isPopoverOpenSubject$.getValue());
|
|
4398
|
+
}
|
|
4399
|
+
/**
|
|
4400
|
+
* Closes the export format popover.
|
|
4401
|
+
* @memberof RosterExportService
|
|
4402
|
+
*/
|
|
4403
|
+
closePopover() {
|
|
4404
|
+
this.isPopoverOpenSubject$.next(false);
|
|
4405
|
+
}
|
|
4406
|
+
/**
|
|
4407
|
+
* Handles format selection from the export popover.
|
|
4408
|
+
* Closes popover, opens IEEE Policy dialog, on confirm triggers export.
|
|
4409
|
+
* This is the main entry point called by the component after user picks a format.
|
|
4410
|
+
* @param {ExportFormat} format - Selected format (CSV or XLS)
|
|
4411
|
+
* @param {string} groupId - The group ID to export the roster for
|
|
4412
|
+
* @param {string} groupName - The group name for filename generation
|
|
4413
|
+
* @memberof RosterExportService
|
|
4414
|
+
*/
|
|
4415
|
+
onFormatSelected(format, groupId, groupName) {
|
|
4416
|
+
this.closePopover();
|
|
4417
|
+
const dialogData = {
|
|
4418
|
+
title: this.constants?.rosterExport?.policyDialog?.title ?? 'IEEE Data Access and Use Policy',
|
|
4419
|
+
bodyText: this.constants?.rosterExport?.policyDialog?.bodyText ?? 'The application is governed by IEEE\'s data access and use policy. Data can only be used for its original intended purpose. Click "Confirm" to export the data into a CSV/Excel file or click "Cancel" to cancel the download.',
|
|
4420
|
+
policyUrl: this.constants?.rosterExport?.policyDialog?.policyUrl ?? 'https://www.ieee.org/ieee-data-access-and-use-policy.html',
|
|
4421
|
+
policyLinkText: this.constants?.rosterExport?.policyDialog?.policyLinkText ?? 'data access and use policy',
|
|
4422
|
+
cancelLabel: this.constants?.rosterExport?.policyDialog?.cancelLabel ?? 'Cancel',
|
|
4423
|
+
confirmLabel: this.constants?.rosterExport?.policyDialog?.confirmLabel ?? 'Confirm',
|
|
4424
|
+
};
|
|
4425
|
+
const dialogRef = this.dialog.open(PolicyConfirmationDialogComponent, {
|
|
4426
|
+
data: dialogData,
|
|
4427
|
+
width: '637px',
|
|
4428
|
+
panelClass: ['ieeesa-policy-dialog'],
|
|
4429
|
+
});
|
|
4430
|
+
dialogRef.afterClosed()
|
|
4431
|
+
.pipe(takeUntil(this.destroy$))
|
|
4432
|
+
.subscribe((confirmed) => {
|
|
4433
|
+
if (confirmed) {
|
|
4434
|
+
this.startExport(format, groupId, groupName);
|
|
4435
|
+
}
|
|
4436
|
+
});
|
|
4437
|
+
}
|
|
4438
|
+
/**
|
|
4439
|
+
* Starts the export after the user confirms the policy dialog.
|
|
4440
|
+
*
|
|
4441
|
+
* When the File System Access API is available, the native Save picker is opened
|
|
4442
|
+
* HERE — synchronously within the confirm handler — while the user activation from
|
|
4443
|
+
* the confirm click is still valid. (Opening it later, inside the async HTTP
|
|
4444
|
+
* response callback, would exceed the activation window and the browser would
|
|
4445
|
+
* reject it with a SecurityError.) The obtained file handle is then passed to the
|
|
4446
|
+
* HTTP flow, which writes the downloaded bytes to it once the response arrives, so
|
|
4447
|
+
* the success dialog is still shown only AFTER the file is saved.
|
|
4448
|
+
*
|
|
4449
|
+
* If the user cancels the picker we abort before making the request. If the API is
|
|
4450
|
+
* unavailable (Firefox/Safari) we proceed without a handle and fall back to
|
|
4451
|
+
* `saveAs()` after the response.
|
|
4452
|
+
* @param {ExportFormat} format
|
|
4453
|
+
* @param {string} groupId
|
|
4454
|
+
* @param {string} groupName
|
|
4455
|
+
* @memberof RosterExportService
|
|
4456
|
+
*/
|
|
4457
|
+
startExport(format, groupId, groupName) {
|
|
4458
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4459
|
+
const showSaveFilePicker = window.showSaveFilePicker;
|
|
4460
|
+
if (typeof showSaveFilePicker !== 'function') {
|
|
4461
|
+
// API unavailable: no handle; executeExport() will use the saveAs() fallback.
|
|
4462
|
+
this.executeExport(format, groupId, groupName, null);
|
|
4463
|
+
return;
|
|
4464
|
+
}
|
|
4465
|
+
const mimeType = format === ExportFormat.CSV
|
|
4466
|
+
? 'text/csv'
|
|
4467
|
+
: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
|
4468
|
+
const extension = format === ExportFormat.CSV ? '.csv' : '.xlsx';
|
|
4469
|
+
const suggestedName = this.buildFilename(groupName, format);
|
|
4470
|
+
// Open the picker now, while the confirm-click activation is still valid.
|
|
4471
|
+
showSaveFilePicker({
|
|
4472
|
+
suggestedName,
|
|
4473
|
+
types: [
|
|
4474
|
+
{
|
|
4475
|
+
description: format === ExportFormat.CSV ? 'CSV File' : 'Excel File',
|
|
4476
|
+
accept: { [mimeType]: [extension] },
|
|
4477
|
+
},
|
|
4478
|
+
],
|
|
4479
|
+
})
|
|
4480
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4481
|
+
.then((handle) => {
|
|
4482
|
+
this.executeExport(format, groupId, groupName, handle);
|
|
4483
|
+
})
|
|
4484
|
+
.catch((error) => {
|
|
4485
|
+
// User cancelled the Save dialog — abort silently, no request made.
|
|
4486
|
+
if (error instanceof DOMException && error.name === 'AbortError') {
|
|
4487
|
+
return;
|
|
4488
|
+
}
|
|
4489
|
+
// Any other picker error: fall back to the saveAs() flow.
|
|
4490
|
+
this.executeExport(format, groupId, groupName, null);
|
|
4491
|
+
});
|
|
4492
|
+
}
|
|
4493
|
+
/**
|
|
4494
|
+
* Executes the roster export API call and writes the downloaded file.
|
|
4495
|
+
* Endpoint: GET /v1/groups/roster/export/{groupId}?format=csv|xlsx
|
|
4496
|
+
* When a pre-obtained file handle is provided (from the picker opened at confirm
|
|
4497
|
+
* time) the bytes are written to it; otherwise it falls back to `saveAs()`.
|
|
4498
|
+
* The success dialog is shown only after the file has been written.
|
|
4499
|
+
* @param {ExportFormat} format - The selected export format
|
|
4500
|
+
* @param {string} groupId - The group identifier
|
|
4501
|
+
* @param {string} groupName - The group name for filename
|
|
4502
|
+
* @param {FileSystemFileHandle | null} fileHandle - Handle from the Save picker, or null
|
|
4503
|
+
* @memberof RosterExportService
|
|
4504
|
+
*/
|
|
4505
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4506
|
+
executeExport(format, groupId, groupName, fileHandle) {
|
|
4507
|
+
this.isExportInProgressSubject$.next(true);
|
|
4508
|
+
// Backend expects 'csv' or 'xlsx'. The ExportFormat.EXCEL enum value is
|
|
4509
|
+
// 'xls', so it must be mapped to 'xlsx' here — sending 'xls' is rejected
|
|
4510
|
+
// with error code 1079.
|
|
4511
|
+
const formatValue = format === ExportFormat.CSV ? 'csv' : 'xlsx';
|
|
4512
|
+
const params = new HttpParams().set('format', formatValue);
|
|
4513
|
+
const url = `${this.getExportApiUrl()}/groups/roster/export/${groupId}`;
|
|
4514
|
+
this.httpClient
|
|
4515
|
+
.get(url, {
|
|
4516
|
+
params,
|
|
4517
|
+
responseType: 'blob',
|
|
4518
|
+
observe: 'response',
|
|
4519
|
+
})
|
|
4520
|
+
.pipe(map$1((response) => {
|
|
4521
|
+
const filename = this.extractFilenameFromResponse(response, format, groupName);
|
|
4522
|
+
return { blob: response.body, filename };
|
|
4523
|
+
}), catchError$1(() => {
|
|
4524
|
+
this.isExportInProgressSubject$.next(false);
|
|
4525
|
+
this.alertService.showMessage({
|
|
4526
|
+
status: 'custom',
|
|
4527
|
+
message: this.constants?.rosterExport?.messages?.exportFailed ?? 'Failed to export roster. Please try again.',
|
|
4528
|
+
alertType: AlertType.ERROR,
|
|
4529
|
+
isCloseNeeded: true,
|
|
4530
|
+
});
|
|
4531
|
+
// Error is fully handled (alert shown). Complete the stream instead of
|
|
4532
|
+
// rethrowing, so the next-only subscribe does not report it as an
|
|
4533
|
+
// unhandled RxJS error.
|
|
4534
|
+
return EMPTY;
|
|
4535
|
+
}), takeUntil(this.destroy$))
|
|
4536
|
+
.subscribe({
|
|
4537
|
+
next: (result) => {
|
|
4538
|
+
// Write to the pre-obtained handle (picker opened at confirm time) or fall
|
|
4539
|
+
// back to saveAs(). Success dialog only shows after the file is written.
|
|
4540
|
+
this.downloadFile(result.blob, result.filename, format, fileHandle)
|
|
4541
|
+
.then(({ saved }) => {
|
|
4542
|
+
this.isExportInProgressSubject$.next(false);
|
|
4543
|
+
if (saved) {
|
|
4544
|
+
this.showExportSuccessDialogAfterDownload(result.filename);
|
|
4545
|
+
}
|
|
4546
|
+
})
|
|
4547
|
+
.catch(() => {
|
|
4548
|
+
this.isExportInProgressSubject$.next(false);
|
|
4549
|
+
this.alertService.showMessage({
|
|
4550
|
+
status: 'custom',
|
|
4551
|
+
message: this.constants?.rosterExport?.messages?.exportFailed ?? 'Failed to export roster. Please try again.',
|
|
4552
|
+
alertType: AlertType.ERROR,
|
|
4553
|
+
isCloseNeeded: true,
|
|
4554
|
+
});
|
|
4555
|
+
});
|
|
4556
|
+
},
|
|
4557
|
+
});
|
|
4558
|
+
}
|
|
4559
|
+
/**
|
|
4560
|
+
* Shows the export success dialog after a successful file download.
|
|
4561
|
+
* @param {string} filename - The downloaded filename
|
|
4562
|
+
* @memberof RosterExportService
|
|
4563
|
+
*/
|
|
4564
|
+
showExportSuccessDialogAfterDownload(filename) {
|
|
4565
|
+
const successMessage = this.constants?.rosterExport?.successDialog?.message ?? 'The file was downloaded successfully.';
|
|
4566
|
+
const closeLabel = this.constants?.rosterExport?.successDialog?.closeButton ?? 'Close';
|
|
4567
|
+
const dialogData = {
|
|
4568
|
+
message: successMessage,
|
|
4569
|
+
filename,
|
|
4570
|
+
closeLabel,
|
|
4571
|
+
};
|
|
4572
|
+
this.dialog.open(ExportSuccessDialogComponent, {
|
|
4573
|
+
data: dialogData,
|
|
4574
|
+
width: '467px',
|
|
4575
|
+
panelClass: ['ieeesa-export-success-dialog-panel'],
|
|
4576
|
+
autoFocus: false,
|
|
4577
|
+
});
|
|
4578
|
+
}
|
|
4579
|
+
/**
|
|
4580
|
+
* Returns the API base URL for roster export.
|
|
4581
|
+
* @return {string}
|
|
4582
|
+
* @memberof RosterExportService
|
|
4583
|
+
*/
|
|
4584
|
+
getExportApiUrl() {
|
|
4585
|
+
if (!this.apiBaseUrl) {
|
|
4586
|
+
throw new Error('RosterExportService apiBaseUrl is not set. Call setApiBaseUrl() before export.');
|
|
4587
|
+
}
|
|
4588
|
+
// apiBaseUrl already carries the version segment (e.g. '.../v1'), same as every
|
|
4589
|
+
// other GroupsService call which is built as `${apiBaseUrl}/groups/...`. So the
|
|
4590
|
+
// caller only appends '/groups/roster/export/{groupId}' — the version is NOT
|
|
4591
|
+
// repeated here. Strip a trailing slash to avoid a double slash before '/groups'.
|
|
4592
|
+
return this.apiBaseUrl.replace(/\/+$/, '');
|
|
4593
|
+
}
|
|
4594
|
+
/**
|
|
4595
|
+
* Extracts filename from Content-Disposition header.
|
|
4596
|
+
* Falls back to buildFilename() if header is missing.
|
|
4597
|
+
* @param {HttpResponse<Blob>} response
|
|
4598
|
+
* @param {ExportFormat} format
|
|
4599
|
+
* @param {string} groupName
|
|
4600
|
+
* @return {string}
|
|
4601
|
+
* @memberof RosterExportService
|
|
4602
|
+
*/
|
|
4603
|
+
extractFilenameFromResponse(response, format, groupName) {
|
|
4604
|
+
const contentDisposition = response.headers.get('Content-Disposition');
|
|
4605
|
+
if (contentDisposition) {
|
|
4606
|
+
const filenameMatch = contentDisposition.match(/filename="?([^"]+)"?/);
|
|
4607
|
+
if (filenameMatch && filenameMatch[1]) {
|
|
4608
|
+
return filenameMatch[1].replace(/[/\\:*?"<>|]/g, '_').substring(0, 200);
|
|
4609
|
+
}
|
|
4610
|
+
}
|
|
4611
|
+
return this.buildFilename(groupName, format);
|
|
4612
|
+
}
|
|
4613
|
+
/**
|
|
4614
|
+
* Builds a sanitized filename for the roster export.
|
|
4615
|
+
* Pattern: {SanitizedGroupName}_Roster.{extension}
|
|
4616
|
+
* @param {string} groupName
|
|
4617
|
+
* @param {ExportFormat} format
|
|
4618
|
+
* @return {string}
|
|
4619
|
+
* @memberof RosterExportService
|
|
4620
|
+
*/
|
|
4621
|
+
buildFilename(groupName, format) {
|
|
4622
|
+
const sanitized = this.sanitizeGroupName(groupName);
|
|
4623
|
+
const extension = format === ExportFormat.CSV ? 'csv' : 'xlsx';
|
|
4624
|
+
return `${sanitized}_Roster.${extension}`;
|
|
4625
|
+
}
|
|
4626
|
+
/**
|
|
4627
|
+
* Sanitizes the group name for use in a filename.
|
|
4628
|
+
* Replaces non-alphanumeric characters (except hyphen/underscore) with underscore,
|
|
4629
|
+
* collapses consecutive underscores, and truncates to 200 chars.
|
|
4630
|
+
* @param {string} groupName
|
|
4631
|
+
* @return {string}
|
|
4632
|
+
* @memberof RosterExportService
|
|
4633
|
+
*/
|
|
4634
|
+
sanitizeGroupName(groupName) {
|
|
4635
|
+
if (!groupName) {
|
|
4636
|
+
return 'Unnamed_Group';
|
|
4637
|
+
}
|
|
4638
|
+
const sanitized = groupName
|
|
4639
|
+
.replace(/[^a-zA-Z0-9_-]/g, '_')
|
|
4640
|
+
.replace(/_+/g, '_')
|
|
4641
|
+
.substring(0, 200);
|
|
4642
|
+
return sanitized || 'Unnamed_Group';
|
|
4643
|
+
}
|
|
4644
|
+
/**
|
|
4645
|
+
* Writes the downloaded bytes to disk and resolves ONLY when the save has actually
|
|
4646
|
+
* completed.
|
|
4647
|
+
*
|
|
4648
|
+
* The Save picker is opened earlier (at policy-confirm time, while user activation
|
|
4649
|
+
* is still valid — see {@link startExport}); this method only writes to the handle
|
|
4650
|
+
* it produced. That keeps the "success dialog after save" ordering without hitting
|
|
4651
|
+
* the SecurityError that occurs when the picker is opened from this async callback.
|
|
4652
|
+
*
|
|
4653
|
+
* When no handle is provided (File System Access API unavailable, or the picker
|
|
4654
|
+
* errored), we fall back to FileSaver's `saveAs()`, which resolves immediately.
|
|
4655
|
+
* @param {Blob} blob - The file contents
|
|
4656
|
+
* @param {string} filename - The suggested filename (used by the saveAs fallback)
|
|
4657
|
+
* @param {ExportFormat} format - The selected export format (drives MIME type)
|
|
4658
|
+
* @param {FileSystemFileHandle | null} fileHandle - Handle from the Save picker, or null
|
|
4659
|
+
* @return {Promise<{ saved: boolean }>} Resolves with `saved: true` once written.
|
|
4660
|
+
* @memberof RosterExportService
|
|
4661
|
+
*/
|
|
4662
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4663
|
+
async downloadFile(blob, filename, format, fileHandle) {
|
|
4664
|
+
const mimeType = format === ExportFormat.CSV
|
|
4665
|
+
? 'text/csv'
|
|
4666
|
+
: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
|
4667
|
+
const typedBlob = new Blob([blob], { type: mimeType });
|
|
4668
|
+
// No handle (API unavailable or picker errored) → standard download.
|
|
4669
|
+
if (!fileHandle) {
|
|
4670
|
+
saveAs(typedBlob, filename);
|
|
4671
|
+
return { saved: true };
|
|
4672
|
+
}
|
|
4673
|
+
// Write to the location the user already chose at confirm time.
|
|
4674
|
+
const writable = await fileHandle.createWritable();
|
|
4675
|
+
await writable.write(typedBlob);
|
|
4676
|
+
await writable.close();
|
|
4677
|
+
return { saved: true };
|
|
4678
|
+
}
|
|
4679
|
+
/**
|
|
4680
|
+
* Cleanup — call from the component's ngOnDestroy.
|
|
4681
|
+
* @memberof RosterExportService
|
|
4682
|
+
*/
|
|
4683
|
+
destroy() {
|
|
4684
|
+
this.destroy$.next(true);
|
|
4685
|
+
// This service is providedIn: 'root' (singleton), so its state survives
|
|
4686
|
+
// navigation. Reset the UI-facing flags so a new roster component instance
|
|
4687
|
+
// does not inherit a stale-open popover or a permanently-disabled export
|
|
4688
|
+
// button if the user left the page mid-export or with the popover open.
|
|
4689
|
+
this.isPopoverOpenSubject$.next(false);
|
|
4690
|
+
this.isExportInProgressSubject$.next(false);
|
|
4691
|
+
// Signal current takeUntil subscriptions to unsubscribe, then re-create the
|
|
4692
|
+
// subject. This service is a providedIn: 'root' singleton whose destroy() is
|
|
4693
|
+
// called on every ViewRosterComponent teardown; completing destroy$ would
|
|
4694
|
+
// permanently close it, so later exports could never be torn down. A fresh
|
|
4695
|
+
// subject keeps the teardown channel usable across component lifecycles.
|
|
4696
|
+
this.destroy$.next(true);
|
|
4697
|
+
this.destroy$ = new Subject();
|
|
4698
|
+
}
|
|
4699
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterExportService, deps: [{ token: i1$1.HttpClient }, { token: i1.MatDialog }, { token: i2.AlertsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4700
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterExportService, providedIn: 'root' }); }
|
|
4701
|
+
}
|
|
4702
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterExportService, decorators: [{
|
|
4703
|
+
type: Injectable,
|
|
4704
|
+
args: [{
|
|
4705
|
+
providedIn: 'root',
|
|
4706
|
+
}]
|
|
4707
|
+
}], ctorParameters: function () { return [{ type: i1$1.HttpClient }, { type: i1.MatDialog }, { type: i2.AlertsService }]; } });
|
|
4708
|
+
|
|
4289
4709
|
/**
|
|
4290
4710
|
* ViewRosterComponent implements the functionalities to add, edit, delete user to group roster, assign and modify roles(s) to the group users, and search user from roster.
|
|
4291
4711
|
* @export
|
|
@@ -4303,12 +4723,15 @@ class ViewRosterComponent {
|
|
|
4303
4723
|
// eslint-disable-next-line no-unused-vars
|
|
4304
4724
|
cdr,
|
|
4305
4725
|
// eslint-disable-next-line no-unused-vars
|
|
4306
|
-
globalErrorHandlerService
|
|
4726
|
+
globalErrorHandlerService,
|
|
4727
|
+
// eslint-disable-next-line no-unused-vars
|
|
4728
|
+
rosterExportService) {
|
|
4307
4729
|
this.dialog = dialog;
|
|
4308
4730
|
this.groupService = groupService;
|
|
4309
4731
|
this.alertService = alertService;
|
|
4310
4732
|
this.cdr = cdr;
|
|
4311
4733
|
this.globalErrorHandlerService = globalErrorHandlerService;
|
|
4734
|
+
this.rosterExportService = rosterExportService;
|
|
4312
4735
|
this.destroy$ = new Subject();
|
|
4313
4736
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4314
4737
|
this.constants = screenTexts;
|
|
@@ -4342,6 +4765,7 @@ class ViewRosterComponent {
|
|
|
4342
4765
|
}
|
|
4343
4766
|
ngOnInit() {
|
|
4344
4767
|
this.userInfo = this.groupService?.getUserInfo();
|
|
4768
|
+
this.rosterExportService.setApiBaseUrl(this.groupService?.apiBaseUrl);
|
|
4345
4769
|
const groupType = this.groupService.getBusinessRuleOfSelectedGroup();
|
|
4346
4770
|
this.hasClassification = groupType?.hasClassification ?? false;
|
|
4347
4771
|
this.groupRosterType = groupType?.rosterType;
|
|
@@ -4997,21 +5421,53 @@ class ViewRosterComponent {
|
|
|
4997
5421
|
isCloseNeeded: true,
|
|
4998
5422
|
});
|
|
4999
5423
|
}
|
|
5424
|
+
/**
|
|
5425
|
+
* Toggles the export format popover — delegates to RosterExportService.
|
|
5426
|
+
* @memberof ViewRosterComponent
|
|
5427
|
+
*/
|
|
5428
|
+
onExportClick() {
|
|
5429
|
+
this.rosterExportService.togglePopover();
|
|
5430
|
+
}
|
|
5431
|
+
/**
|
|
5432
|
+
* Handles export format selection — delegates to RosterExportService using the
|
|
5433
|
+
* currently selected group's id and name.
|
|
5434
|
+
* @param {ExportFormat} format
|
|
5435
|
+
* @memberof ViewRosterComponent
|
|
5436
|
+
*/
|
|
5437
|
+
onExportFormatSelected(format) {
|
|
5438
|
+
const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();
|
|
5439
|
+
const groupId = selectedGroupInfo?.groupId;
|
|
5440
|
+
// Without a group id the export URL would be malformed, so guard here
|
|
5441
|
+
// instead of firing a bad request.
|
|
5442
|
+
if (!groupId) {
|
|
5443
|
+
this.showAlertMessage(this.constants?.errors?.default, AlertType.ERROR);
|
|
5444
|
+
return;
|
|
5445
|
+
}
|
|
5446
|
+
const groupName = selectedGroupInfo?.groupName ?? '';
|
|
5447
|
+
this.rosterExportService.onFormatSelected(format, groupId, groupName);
|
|
5448
|
+
}
|
|
5000
5449
|
/**
|
|
5001
5450
|
* NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
5002
5451
|
* @memberof ViewRosterComponent
|
|
5003
5452
|
*/
|
|
5004
5453
|
ngOnDestroy() {
|
|
5454
|
+
this.rosterExportService.destroy();
|
|
5005
5455
|
this.destroy$.next(true);
|
|
5006
5456
|
this.destroy$.unsubscribe();
|
|
5007
5457
|
}
|
|
5008
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, deps: [{ token: i1.MatDialog }, { token: GroupsService }, { token: i2.AlertsService }, { token: i0.ChangeDetectorRef }, { token: i2.GlobalErrorHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5009
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewRosterComponent, isStandalone: true, selector: "ieeesa-view-roster", ngImport: i0, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n></ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle"] }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
5458
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, deps: [{ token: i1.MatDialog }, { token: GroupsService }, { token: i2.AlertsService }, { token: i0.ChangeDetectorRef }, { token: i2.GlobalErrorHandlerService }, { token: RosterExportService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5459
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewRosterComponent, isStandalone: true, selector: "ieeesa-view-roster", ngImport: i0, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n>\r\n <!-- Export Roster Button + Popover \u2014 projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__export-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"!tableData?.length || (rosterExportService.isExportInProgress$ | async)\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\r\n</ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}.ieeesa-view-roster__export-wrapper{position:relative}.ieeesa-view-roster__export-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.ieeesa-view-roster__export-btn-icon{width:16px;height:16px;flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: ExportFormatPopoverComponent, selector: "ieeesa-export-format-popover", inputs: ["formatOptions", "origin", "isOpen", "popoverTitle", "formatSubtitles"], outputs: ["formatSelected", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
5010
5460
|
}
|
|
5011
5461
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, decorators: [{
|
|
5012
5462
|
type: Component,
|
|
5013
|
-
args: [{ selector: 'ieeesa-view-roster', standalone: true, imports: [CommonModule, DataTableComponent, MatDialogModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n></ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}\n"] }]
|
|
5014
|
-
|
|
5463
|
+
args: [{ selector: 'ieeesa-view-roster', standalone: true, imports: [
|
|
5464
|
+
CommonModule,
|
|
5465
|
+
DataTableComponent,
|
|
5466
|
+
MatDialogModule,
|
|
5467
|
+
MatButtonModule,
|
|
5468
|
+
ExportFormatPopoverComponent,
|
|
5469
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n>\r\n <!-- Export Roster Button + Popover \u2014 projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__export-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"!tableData?.length || (rosterExportService.isExportInProgress$ | async)\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\r\n</ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}.ieeesa-view-roster__export-wrapper{position:relative}.ieeesa-view-roster__export-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.ieeesa-view-roster__export-btn-icon{width:16px;height:16px;flex-shrink:0}\n"] }]
|
|
5470
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: GroupsService }, { type: i2.AlertsService }, { type: i0.ChangeDetectorRef }, { type: i2.GlobalErrorHandlerService }, { type: RosterExportService }]; } });
|
|
5015
5471
|
|
|
5016
5472
|
/**
|
|
5017
5473
|
* Groups component is a wrapper or container component for groups management reusable component and in this component integrates all group management functionalities and this will be entry component for managing groups when it is consumed in other applications.
|
|
@@ -5652,5 +6108,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
5652
6108
|
* Generated bundle index. Do not edit.
|
|
5653
6109
|
*/
|
|
5654
6110
|
|
|
5655
|
-
export { AddWorkingGroupsComponent, CreateGroupComponent, EditUserRolesComponent, FilterType, GroupAction, GroupFunctionType, GroupNode, GroupRosterType, Groups, GroupsComponent, GroupsDataSource, GroupsModule, GroupsService, GroupsValidationPatterns, ReciprocalCreditSectionComponent, RoleType, RosterFunctionType, TableColumnSchemaUserGroup, TreeViewComponent, representingOrgRequiredValidator, skipWhenArray };
|
|
6111
|
+
export { AddWorkingGroupsComponent, CreateGroupComponent, EditUserRolesComponent, FilterType, GroupAction, GroupFunctionType, GroupNode, GroupRosterType, Groups, GroupsComponent, GroupsDataSource, GroupsModule, GroupsService, GroupsValidationPatterns, ReciprocalCreditSectionComponent, RoleType, RosterExportService, RosterFunctionType, TableColumnSchemaUserGroup, TreeViewComponent, representingOrgRequiredValidator, skipWhenArray };
|
|
5656
6112
|
//# sourceMappingURL=ieeesa-npm-groups.mjs.map
|