@ohioepa/oepa-ui-lib 2.0.21 → 2.0.23

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.
@@ -2560,6 +2560,7 @@ class PTableComponent {
2560
2560
  tableExportService;
2561
2561
  fileUtilService;
2562
2562
  elRef;
2563
+ renderer;
2563
2564
  showFilterRow = false;
2564
2565
  headerRows = [];
2565
2566
  rows = [];
@@ -2694,12 +2695,13 @@ class PTableComponent {
2694
2695
  return this._data.map(x => Object.assign({}, x));
2695
2696
  }
2696
2697
  totalRow;
2697
- constructor(sanitizer, tableService, tableExportService, fileUtilService, elRef) {
2698
+ constructor(sanitizer, tableService, tableExportService, fileUtilService, elRef, renderer) {
2698
2699
  this.sanitizer = sanitizer;
2699
2700
  this.tableService = tableService;
2700
2701
  this.tableExportService = tableExportService;
2701
2702
  this.fileUtilService = fileUtilService;
2702
2703
  this.elRef = elRef;
2704
+ this.renderer = renderer;
2703
2705
  }
2704
2706
  ngOnInit() {
2705
2707
  this.paginationOn = !this._config.disablePagination;
@@ -2708,6 +2710,13 @@ class PTableComponent {
2708
2710
  if (this.config.className !== '') {
2709
2711
  $('table').addClass('table ' + this.config.className);
2710
2712
  }
2713
+ // 1. Find the PrimeNG scrollable wrapper specifically within this component
2714
+ const wrapper = this.elRef.nativeElement.querySelector('.p-datatable-wrapper');
2715
+ // 2. If it exists and doesn't already have a tabindex, add it
2716
+ if (wrapper && !wrapper.hasAttribute('tabindex')) {
2717
+ this.renderer.setAttribute(wrapper, 'tabindex', '0');
2718
+ this.renderer.setAttribute(wrapper, 'aria-label', 'Scrollable Data Table');
2719
+ }
2711
2720
  }
2712
2721
  extractInnerColumns(inner) {
2713
2722
  const header = { columns: [] };
@@ -3282,7 +3291,7 @@ class PTableComponent {
3282
3291
  convertToTable(template) {
3283
3292
  let oepaTable = undefined;
3284
3293
  if (template.component === PTableComponent) {
3285
- const table = new PTableComponent(this.sanitizer, this.tableService, this.tableExportService, this.fileUtilService, this.elRef);
3294
+ const table = new PTableComponent(this.sanitizer, this.tableService, this.tableExportService, this.fileUtilService, this.elRef, this.renderer);
3286
3295
  if (template.inputs && template.inputs.length > 0) {
3287
3296
  template.inputs.forEach((input) => {
3288
3297
  if (input.name === 'config') {
@@ -3346,13 +3355,13 @@ class PTableComponent {
3346
3355
  onCustomBtn2Click() {
3347
3356
  this.customBtn2Clicked.emit();
3348
3357
  }
3349
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PTableComponent, deps: [{ token: i1$3.DomSanitizer }, { token: TableService }, { token: TableExportService }, { token: i1$1.OepaFileUtilService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
3358
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PTableComponent, deps: [{ token: i1$3.DomSanitizer }, { token: TableService }, { token: TableExportService }, { token: i1$1.OepaFileUtilService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
3350
3359
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PTableComponent, selector: "oepa-p-table", inputs: { tableId: "tableId", allowEdit: "allowEdit", config: "config", complexHeader: "complexHeader", header: "header", customBtnLabel: "customBtnLabel", customBtnVisible: "customBtnVisible", customBtnEnabled: "customBtnEnabled", customBtnLabel2: "customBtnLabel2", customBtnVisible2: "customBtnVisible2", customBtnEnabled2: "customBtnEnabled2", small: "small", data: "data", totalRow: "totalRow" }, outputs: { cellClicked: "cellClicked", actionClicked: "actionClicked", rowSelected: "rowSelected", customBtnClicked: "customBtnClicked", customBtn2Clicked: "customBtn2Clicked" }, ngImport: i0, template: "<div *ngIf=\"!config.hideTable\">\n <form *ngIf=\"hiddenColumns.length > 0\">\n <div class=\"row mb-2\">\n <label class=\"col-sm-2 col-form-label\" [for]=\"tableId+'_UnhideColumnSelect'\">Show Hidden Columns:</label>\n <div class=\"col-sm-4\">\n <select class=\"form-select\" (change)=\"unhideColumn($any($event).target.value)\"\n [id]=\"tableId+'_UnhideColumnSelect'\">\n <option value=\"\">Choose a column</option>\n <option *ngFor=\"let col of hiddenColumns\" [value]=\"col.id\">{{col.title}}</option>\n </select>\n </div>\n </div>\n </form>\n\n <div ngClass=\"{{config.divClassName || ''}}\">\n <p-table [columns]=\"visibleColumns\" [value]=\"rows\" \n [scrollable]=\"config.verticalScroll\" [scrollHeight]=\"config.scrollHeight\"\n [tableStyle]=\"{'min-width': '50rem'}\">\n <ng-template pTemplate=\"header\" let-columns>\n <tr *ngFor=\"let hdr of headerRows; let hr=index;\" role=\"row\">\n <th *ngIf=\"dataHasDetails && hr === 0\" [rowSpan]=\"headerRows.length\" class=\"detail-indicator-col\">\n <span>\n <i (click)=\"toggleAllDetails()\" [id]=\"tableId+'_ShowAllDetailsLink'\" class=\"bi\"\n [ngClass]=\"{'bi-chevron-down': showAllDetails, 'bi-chevron-right': !showAllDetails}\"\n [tooltip]=\"(showAllDetails ? 'Hide' : 'Show') + ' details for all rows'\" placement=\"right\">\n </i>\n </span>\n </th>\n <ng-template ngFor let-col [ngForOf]=\"hdr.columns\" let-i=\"index\">\n <th *ngIf=\"!col.hidden && col.frozenColumn\" pFrozenColumn ngClass=\"{{col.className || ''}}\"\n [colSpan]=\"col.colspan || 1\" [rowSpan]=\"col.rowspan || 1\">\n <oepa-table-header-cell [column]=\"col\" [tableId]=\"tableId\" [allRowsSelected]=\"allRowsSelected\"\n [rowCount]=\"rows.length\" [noFiltersSubject]=\"noFiltersSubject\"\n (onToggleAllRowsSelection)=\"toggleAllRowsSelection()\" (onSortChanged)=\"onSortChanged($event)\"\n (onHideColumn)=\"hideColumn($event)\" (onFilterChanged)=\"onFilterChanged($event)\">\n </oepa-table-header-cell>\n </th>\n <th *ngIf=\"!col.hidden && !col.frozenColumn\" ngClass=\"{{col.className || ''}}\"\n [colSpan]=\"col.colspan || 1\" [rowSpan]=\"col.rowspan || 1\">\n <oepa-table-header-cell [column]=\"col\" [tableId]=\"tableId\" [allRowsSelected]=\"allRowsSelected\"\n [rowCount]=\"rows.length\" [noFiltersSubject]=\"noFiltersSubject\"\n (onToggleAllRowsSelection)=\"toggleAllRowsSelection()\" (onSortChanged)=\"onSortChanged($event)\"\n (onHideColumn)=\"hideColumn($event)\" (onFilterChanged)=\"onFilterChanged($event)\">\n </oepa-table-header-cell>\n </th>\n </ng-template>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-row let-r=\"rowIndex\" let-columns=\"columns\">\n <!-- Data Row -->\n <tr>\n <td *ngIf=\"dataHasDetails\">\n <!-- Detail icon (if specified) -->\n <span *ngIf=\"row.showDetail === true || row.showDetail === false\">\n <i *ngIf=\"row.detailIconClassName\" [ngClass]=\"row.detailIconClassName\"></i>\n <i (click)=\"toggleRowDetail(row)\" [id]=\"tableId+'_ShowDetailLink_'+r\" class=\"bi\"\n [ngClass]=\"{'bi-chevron-down': row.showDetail, 'bi-chevron-right': !row.showDetail}\"\n [tooltip]=\"(row.showDetail ? 'Hide' : 'Show') + ' details for this row'\" placement=\"right\">\n </i>\n </span>\n </td>\n <!-- If row is a divider, it spans the whole table -->\n <td *ngIf=\"row.isDivider\" [colSpan]=\"visibleColumnCount + (dataHasDetails ? 1 : 0)\"\n [ngClass]=\"row.dividerClassName || 'oepa-table-gray'\">&nbsp;</td>\n <!-- Data Rows -->\n <ng-template *ngIf=\"!row.isDivider\" ngFor let-col [ngForOf]=\"dataColumns\" let-i=\"index\">\n <td *ngIf=\"!col.hidden && (row|cellColspan:col) > 0 &&!col.frozenColumn\"\n ngClass=\"{{row|cellClassname:col || ''}}\" [colSpan]=\"row|cellColspan:col\">\n <oepa-table-data-cell [col]=\"col\" [i]=\"i\" [row]=\"row\" [r]=\"r\" [tableId]=\"tableId\"\n (onActionClick)=\"onActionClick($event)\" (onCellClick)=\"cellClick($event)\"\n (onToggleRowSelection)=\"toggleRowSelection($event)\"\n (onSingleRowSelection)=\"singleRowSelection($event)\"></oepa-table-data-cell>\n </td>\n <td *ngIf=\"!col.hidden && (row|cellColspan:col) > 0 &&col.frozenColumn\" pFrozenColumn\n ngClass=\"{{row|cellClassname:col || ''}}\" [colSpan]=\"row|cellColspan:col\">\n <oepa-table-data-cell [col]=\"col\" [i]=\"i\" [row]=\"row\" [r]=\"r\" [tableId]=\"tableId\"\n (onActionClick)=\"onActionClick($event)\" (onCellClick)=\"cellClick($event)\"\n (onToggleRowSelection)=\"toggleRowSelection($event)\"\n (onSingleRowSelection)=\"singleRowSelection($event)\"></oepa-table-data-cell>\n </td>\n </ng-template>\n </tr>\n\n <!-- Detail Row -->\n <tr *ngIf=\"row.showDetail\" class=\"table-info\">\n <td [colSpan]=\"visibleColumnCount + (dataHasDetails ? 1 : 0)\">\n <cml-template [templateInfo]=\"row.detail\"></cml-template>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n <!-- Table footer -->\n <form *ngIf=\"!config.hideFooter || (data && pageInfo.itemsPerPage < data.length)\" class=\"form-horizontal\">\n <div class=\"form-group row\">\n <!-- Table-wide filter -->\n <div class=\"col-sm-5\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label [for]=\"tableId+'_FilterAllColumnsInput'\" class=\"sr-only\">Filter all columns</label>\n <input *ngIf=\"!config.hideGlobalFilter\" placeholder=\"Filter all columns\"\n [oepaTableFiltering]=\"{ filterString: '' }\" [tableId]=\"tableId\" class=\"form-control input-sm\"\n (tableChanged)=\"onFilterChanged($event)\" [id]=\"tableId+'_FilterAllColumnsInput'\" />\n </div>\n <div class=\"col-sm-6\">\n <span *ngIf=\"config.showRowCountInFooter && _data && _data.length > 0\">\n <span class=\"badge bg-secondary\">{{_data.length}}</span>&nbsp;total rows\n </span>\n </div>\n </div>\n </div>\n <!-- Export Buttons -->\n <div class=\"col-sm-2 d-flex justify-content-center\">\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\" *ngIf=\"allowEdit\">\n <div *ngIf=\"config.exportToExcel || config.exportToHTML\" class=\"btn-group\" dropdown>\n <button id=\"exportBtn\" dropdownToggle type=\"button\" class=\"btn btn-primary dropdown-toggle\"\n aria-controls=\"dropdown-basic\" aria-label=\"Export options\">\n Export <span class=\"caret\"></span>\n <ul id=\"export-dropdown\" *dropdownMenu class=\"dropdown-menu\">\n <li *ngIf=\"config.exportToExcel\" role=\"menuitem\"><a class=\"dropdown-item\"\n (click)=\"exportToExcel()\">Export to Excel</a></li>\n <li *ngIf=\"config.exportToHTML\" role=\"menuitem\"><a class=\"dropdown-item\"\n (click)=\"exportToHTML()\">Export\n to HTML</a></li>\n </ul>\n </button>\n </div>\n <button *ngIf=\"customBtnVisible\" type=\"button\"\n ngClass=\"{{'btn btn-primary me-1' + (small ? ' btn-sm' : '')}}\" (click)=\"onCustomBtnClick()\"\n [id]=\"tableId+'_CustomBtn'\" [disabled]=\"!customBtnEnabled\" [attr.aria-label]=\"customBtnLabel\">{{customBtnLabel}}</button>\n <button *ngIf=\"customBtnVisible2\" type=\"button\"\n ngClass=\"{{'btn btn-primary me-1' + (small ? ' btn-sm' : '')}}\" (click)=\"onCustomBtn2Click()\"\n [id]=\"tableId+'_CustomBtn'\" [disabled]=\"!customBtnEnabled2\" [attr.aria-label]=\"customBtnLabel2\">{{customBtnLabel2}}</button>\n </div>\n </div>\n </div>\n <!-- Pagination -->\n <div *ngIf=\"!config.disablePagination\" class=\"col-sm-5 d-flex justify-content-end\">\n <pagination *ngIf=\"paginationOn\" class=\"pagination-sm\" [totalItems]=\"pageInfo.length\"\n [itemsPerPage]=\"pageInfo.itemsPerPage\" [maxSize]=\"pageInfo.maxSize\" [(ngModel)]=\"currentPage\"\n name=\"currentTablePage\" [boundaryLinks]=\"true\" [rotate]=\"false\" (pageChanged)=\"onPageChanged($event)\"\n (numPages)=\"pageInfo.numPages = $event\">\n </pagination>\n &nbsp;\n <button (click)=\"togglePagingation()\" type=\"button\" class=\"btn btn-default btn-sm me-1\"\n [attr.aria-label]=\"paginationOn ? 'Show All Rows' : 'Restore Pagination'\">\n {{ paginationOn ? 'Show All Rows' : 'Restore Pagination'}}\n </button>\n </div>\n <div *ngIf=\"allowEdit && (config.exportToExcel || config.exportToHTML)\" class=\"col-sm-12 text-center\">\n <span>Export only visible data:&nbsp;\n <input type=\"checkbox\" [checked]=\"exportVisibleOnly\" (click)=\"toggleExportVisibleOnly()\"\n id=\"exportVisibleOnlyCheckbox\" aria-label=\"Export only visible data\"/>\n &nbsp;&nbsp;\n </span>\n <span *ngIf=\"hasSelectableColumn()\">Include unselected rows in export:&nbsp;\n <input type=\"checkbox\" [checked]=\"exportUnselectedRows\" (click)=\"toggleExportUnselectedRows()\"\n id=\"exportUnselectedRowsCheckbox\" aria-label=\"Include unselected rows in export\"/>\n </span>\n </div>\n </div>\n </form>\n</div>", styles: [".pagination{margin:0}th.oepa-table-header-center{text-align:center}.oepa-table-bold{font-weight:700}.oepa-table-italic{font-style:italic}.oepa-table-line-through{text-decoration:line-through}.oepa-table-gray{background-color:#ddd}td.oepa-undeline-cell{border-bottom:1pt solid black}.detail-indicator-col{width:30px}.action-btn-col{width:90px}.select-col{width:20px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7$1.PaginationComponent, selector: "pagination", inputs: ["align", "maxSize", "boundaryLinks", "directionLinks", "firstText", "previousText", "nextText", "lastText", "rotate", "pageBtnClass", "disabled", "customPageTemplate", "customNextTemplate", "customPreviousTemplate", "customFirstTemplate", "customLastTemplate", "itemsPerPage", "totalItems"], outputs: ["numPages", "pageChanged"] }, { kind: "directive", type: i8$1.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i3.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i3.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i3.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i11.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i10.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "component", type: i1$1.OepaTemplateComponent, selector: "cml-template", inputs: ["templateInfo"] }, { kind: "component", type: TableDataCellComponent, selector: "oepa-table-data-cell", inputs: ["col", "row", "i", "r", "tableId"], outputs: ["onCellClick", "onToggleRowSelection", "onSingleRowSelection", "onActionClick"] }, { kind: "component", type: TableHeaderCellComponent, selector: "oepa-table-header-cell", inputs: ["column", "tableId", "allRowsSelected", "rowCount", "noFiltersSubject"], outputs: ["onToggleAllRowsSelection", "onSortChanged", "onHideColumn", "onFilterChanged"] }, { kind: "directive", type: OepaTableFilteringDirective, selector: "[oepaTableFiltering]", inputs: ["oepaTableFiltering", "tableId"], outputs: ["tableChanged"] }, { kind: "pipe", type: OepaTableCellColSpanPipe, name: "cellColspan" }, { kind: "pipe", type: OepaTableCellClassnamePipe, name: "cellClassname" }] });
3351
3360
  }
3352
3361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PTableComponent, decorators: [{
3353
3362
  type: Component,
3354
3363
  args: [{ selector: 'oepa-p-table', template: "<div *ngIf=\"!config.hideTable\">\n <form *ngIf=\"hiddenColumns.length > 0\">\n <div class=\"row mb-2\">\n <label class=\"col-sm-2 col-form-label\" [for]=\"tableId+'_UnhideColumnSelect'\">Show Hidden Columns:</label>\n <div class=\"col-sm-4\">\n <select class=\"form-select\" (change)=\"unhideColumn($any($event).target.value)\"\n [id]=\"tableId+'_UnhideColumnSelect'\">\n <option value=\"\">Choose a column</option>\n <option *ngFor=\"let col of hiddenColumns\" [value]=\"col.id\">{{col.title}}</option>\n </select>\n </div>\n </div>\n </form>\n\n <div ngClass=\"{{config.divClassName || ''}}\">\n <p-table [columns]=\"visibleColumns\" [value]=\"rows\" \n [scrollable]=\"config.verticalScroll\" [scrollHeight]=\"config.scrollHeight\"\n [tableStyle]=\"{'min-width': '50rem'}\">\n <ng-template pTemplate=\"header\" let-columns>\n <tr *ngFor=\"let hdr of headerRows; let hr=index;\" role=\"row\">\n <th *ngIf=\"dataHasDetails && hr === 0\" [rowSpan]=\"headerRows.length\" class=\"detail-indicator-col\">\n <span>\n <i (click)=\"toggleAllDetails()\" [id]=\"tableId+'_ShowAllDetailsLink'\" class=\"bi\"\n [ngClass]=\"{'bi-chevron-down': showAllDetails, 'bi-chevron-right': !showAllDetails}\"\n [tooltip]=\"(showAllDetails ? 'Hide' : 'Show') + ' details for all rows'\" placement=\"right\">\n </i>\n </span>\n </th>\n <ng-template ngFor let-col [ngForOf]=\"hdr.columns\" let-i=\"index\">\n <th *ngIf=\"!col.hidden && col.frozenColumn\" pFrozenColumn ngClass=\"{{col.className || ''}}\"\n [colSpan]=\"col.colspan || 1\" [rowSpan]=\"col.rowspan || 1\">\n <oepa-table-header-cell [column]=\"col\" [tableId]=\"tableId\" [allRowsSelected]=\"allRowsSelected\"\n [rowCount]=\"rows.length\" [noFiltersSubject]=\"noFiltersSubject\"\n (onToggleAllRowsSelection)=\"toggleAllRowsSelection()\" (onSortChanged)=\"onSortChanged($event)\"\n (onHideColumn)=\"hideColumn($event)\" (onFilterChanged)=\"onFilterChanged($event)\">\n </oepa-table-header-cell>\n </th>\n <th *ngIf=\"!col.hidden && !col.frozenColumn\" ngClass=\"{{col.className || ''}}\"\n [colSpan]=\"col.colspan || 1\" [rowSpan]=\"col.rowspan || 1\">\n <oepa-table-header-cell [column]=\"col\" [tableId]=\"tableId\" [allRowsSelected]=\"allRowsSelected\"\n [rowCount]=\"rows.length\" [noFiltersSubject]=\"noFiltersSubject\"\n (onToggleAllRowsSelection)=\"toggleAllRowsSelection()\" (onSortChanged)=\"onSortChanged($event)\"\n (onHideColumn)=\"hideColumn($event)\" (onFilterChanged)=\"onFilterChanged($event)\">\n </oepa-table-header-cell>\n </th>\n </ng-template>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-row let-r=\"rowIndex\" let-columns=\"columns\">\n <!-- Data Row -->\n <tr>\n <td *ngIf=\"dataHasDetails\">\n <!-- Detail icon (if specified) -->\n <span *ngIf=\"row.showDetail === true || row.showDetail === false\">\n <i *ngIf=\"row.detailIconClassName\" [ngClass]=\"row.detailIconClassName\"></i>\n <i (click)=\"toggleRowDetail(row)\" [id]=\"tableId+'_ShowDetailLink_'+r\" class=\"bi\"\n [ngClass]=\"{'bi-chevron-down': row.showDetail, 'bi-chevron-right': !row.showDetail}\"\n [tooltip]=\"(row.showDetail ? 'Hide' : 'Show') + ' details for this row'\" placement=\"right\">\n </i>\n </span>\n </td>\n <!-- If row is a divider, it spans the whole table -->\n <td *ngIf=\"row.isDivider\" [colSpan]=\"visibleColumnCount + (dataHasDetails ? 1 : 0)\"\n [ngClass]=\"row.dividerClassName || 'oepa-table-gray'\">&nbsp;</td>\n <!-- Data Rows -->\n <ng-template *ngIf=\"!row.isDivider\" ngFor let-col [ngForOf]=\"dataColumns\" let-i=\"index\">\n <td *ngIf=\"!col.hidden && (row|cellColspan:col) > 0 &&!col.frozenColumn\"\n ngClass=\"{{row|cellClassname:col || ''}}\" [colSpan]=\"row|cellColspan:col\">\n <oepa-table-data-cell [col]=\"col\" [i]=\"i\" [row]=\"row\" [r]=\"r\" [tableId]=\"tableId\"\n (onActionClick)=\"onActionClick($event)\" (onCellClick)=\"cellClick($event)\"\n (onToggleRowSelection)=\"toggleRowSelection($event)\"\n (onSingleRowSelection)=\"singleRowSelection($event)\"></oepa-table-data-cell>\n </td>\n <td *ngIf=\"!col.hidden && (row|cellColspan:col) > 0 &&col.frozenColumn\" pFrozenColumn\n ngClass=\"{{row|cellClassname:col || ''}}\" [colSpan]=\"row|cellColspan:col\">\n <oepa-table-data-cell [col]=\"col\" [i]=\"i\" [row]=\"row\" [r]=\"r\" [tableId]=\"tableId\"\n (onActionClick)=\"onActionClick($event)\" (onCellClick)=\"cellClick($event)\"\n (onToggleRowSelection)=\"toggleRowSelection($event)\"\n (onSingleRowSelection)=\"singleRowSelection($event)\"></oepa-table-data-cell>\n </td>\n </ng-template>\n </tr>\n\n <!-- Detail Row -->\n <tr *ngIf=\"row.showDetail\" class=\"table-info\">\n <td [colSpan]=\"visibleColumnCount + (dataHasDetails ? 1 : 0)\">\n <cml-template [templateInfo]=\"row.detail\"></cml-template>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n <!-- Table footer -->\n <form *ngIf=\"!config.hideFooter || (data && pageInfo.itemsPerPage < data.length)\" class=\"form-horizontal\">\n <div class=\"form-group row\">\n <!-- Table-wide filter -->\n <div class=\"col-sm-5\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label [for]=\"tableId+'_FilterAllColumnsInput'\" class=\"sr-only\">Filter all columns</label>\n <input *ngIf=\"!config.hideGlobalFilter\" placeholder=\"Filter all columns\"\n [oepaTableFiltering]=\"{ filterString: '' }\" [tableId]=\"tableId\" class=\"form-control input-sm\"\n (tableChanged)=\"onFilterChanged($event)\" [id]=\"tableId+'_FilterAllColumnsInput'\" />\n </div>\n <div class=\"col-sm-6\">\n <span *ngIf=\"config.showRowCountInFooter && _data && _data.length > 0\">\n <span class=\"badge bg-secondary\">{{_data.length}}</span>&nbsp;total rows\n </span>\n </div>\n </div>\n </div>\n <!-- Export Buttons -->\n <div class=\"col-sm-2 d-flex justify-content-center\">\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\" *ngIf=\"allowEdit\">\n <div *ngIf=\"config.exportToExcel || config.exportToHTML\" class=\"btn-group\" dropdown>\n <button id=\"exportBtn\" dropdownToggle type=\"button\" class=\"btn btn-primary dropdown-toggle\"\n aria-controls=\"dropdown-basic\" aria-label=\"Export options\">\n Export <span class=\"caret\"></span>\n <ul id=\"export-dropdown\" *dropdownMenu class=\"dropdown-menu\">\n <li *ngIf=\"config.exportToExcel\" role=\"menuitem\"><a class=\"dropdown-item\"\n (click)=\"exportToExcel()\">Export to Excel</a></li>\n <li *ngIf=\"config.exportToHTML\" role=\"menuitem\"><a class=\"dropdown-item\"\n (click)=\"exportToHTML()\">Export\n to HTML</a></li>\n </ul>\n </button>\n </div>\n <button *ngIf=\"customBtnVisible\" type=\"button\"\n ngClass=\"{{'btn btn-primary me-1' + (small ? ' btn-sm' : '')}}\" (click)=\"onCustomBtnClick()\"\n [id]=\"tableId+'_CustomBtn'\" [disabled]=\"!customBtnEnabled\" [attr.aria-label]=\"customBtnLabel\">{{customBtnLabel}}</button>\n <button *ngIf=\"customBtnVisible2\" type=\"button\"\n ngClass=\"{{'btn btn-primary me-1' + (small ? ' btn-sm' : '')}}\" (click)=\"onCustomBtn2Click()\"\n [id]=\"tableId+'_CustomBtn'\" [disabled]=\"!customBtnEnabled2\" [attr.aria-label]=\"customBtnLabel2\">{{customBtnLabel2}}</button>\n </div>\n </div>\n </div>\n <!-- Pagination -->\n <div *ngIf=\"!config.disablePagination\" class=\"col-sm-5 d-flex justify-content-end\">\n <pagination *ngIf=\"paginationOn\" class=\"pagination-sm\" [totalItems]=\"pageInfo.length\"\n [itemsPerPage]=\"pageInfo.itemsPerPage\" [maxSize]=\"pageInfo.maxSize\" [(ngModel)]=\"currentPage\"\n name=\"currentTablePage\" [boundaryLinks]=\"true\" [rotate]=\"false\" (pageChanged)=\"onPageChanged($event)\"\n (numPages)=\"pageInfo.numPages = $event\">\n </pagination>\n &nbsp;\n <button (click)=\"togglePagingation()\" type=\"button\" class=\"btn btn-default btn-sm me-1\"\n [attr.aria-label]=\"paginationOn ? 'Show All Rows' : 'Restore Pagination'\">\n {{ paginationOn ? 'Show All Rows' : 'Restore Pagination'}}\n </button>\n </div>\n <div *ngIf=\"allowEdit && (config.exportToExcel || config.exportToHTML)\" class=\"col-sm-12 text-center\">\n <span>Export only visible data:&nbsp;\n <input type=\"checkbox\" [checked]=\"exportVisibleOnly\" (click)=\"toggleExportVisibleOnly()\"\n id=\"exportVisibleOnlyCheckbox\" aria-label=\"Export only visible data\"/>\n &nbsp;&nbsp;\n </span>\n <span *ngIf=\"hasSelectableColumn()\">Include unselected rows in export:&nbsp;\n <input type=\"checkbox\" [checked]=\"exportUnselectedRows\" (click)=\"toggleExportUnselectedRows()\"\n id=\"exportUnselectedRowsCheckbox\" aria-label=\"Include unselected rows in export\"/>\n </span>\n </div>\n </div>\n </form>\n</div>", styles: [".pagination{margin:0}th.oepa-table-header-center{text-align:center}.oepa-table-bold{font-weight:700}.oepa-table-italic{font-style:italic}.oepa-table-line-through{text-decoration:line-through}.oepa-table-gray{background-color:#ddd}td.oepa-undeline-cell{border-bottom:1pt solid black}.detail-indicator-col{width:30px}.action-btn-col{width:90px}.select-col{width:20px}\n"] }]
3355
- }], ctorParameters: () => [{ type: i1$3.DomSanitizer }, { type: TableService }, { type: TableExportService }, { type: i1$1.OepaFileUtilService }, { type: i0.ElementRef }], propDecorators: { tableId: [{
3364
+ }], ctorParameters: () => [{ type: i1$3.DomSanitizer }, { type: TableService }, { type: TableExportService }, { type: i1$1.OepaFileUtilService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { tableId: [{
3356
3365
  type: Input
3357
3366
  }], allowEdit: [{
3358
3367
  type: Input
@@ -7617,8 +7626,8 @@ class OepaPinService {
7617
7626
  * @param userID Retrieve the Pin for the specified userID
7618
7627
  * @returns OepaPin
7619
7628
  */
7620
- retrievePin(userID) {
7621
- return this.http.get(this.pinsUrl + '/' + userID, { params: { 'app': this.app } });
7629
+ retrievePinForCurrentUser() {
7630
+ return this.http.get(this.pinsUrl + '/currentUser', { params: { 'app': this.app } });
7622
7631
  }
7623
7632
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OepaPinService, deps: [{ token: i1.HttpClient }, { token: 'ebizRootURL' }, { token: 'app' }], target: i0.ɵɵFactoryTarget.Injectable });
7624
7633
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OepaPinService, providedIn: 'root' });
@@ -7687,7 +7696,7 @@ class PinModalComponent {
7687
7696
  this.currentUserID = this.userAccount.loginName;
7688
7697
  this.noPin = true;
7689
7698
  if (this.currentUserID) {
7690
- this.pinService.retrievePin(this.currentUserID).subscribe({
7699
+ this.pinService.retrievePinForCurrentUser().subscribe({
7691
7700
  next: (result) => {
7692
7701
  if (result) {
7693
7702
  if (result.status == 'ACTIVE') {