@kuzntsv/uikit 1.0.80 → 1.0.82

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.
@@ -1,8 +1,8 @@
1
1
  import * as i0 from "@angular/core";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, HostListener, Injectable, InjectionToken, Injector, NgZone, Pipe, computed, effect, inject, input, linkedSignal, makeEnvironmentProviders, model, output, signal, viewChild } from "@angular/core";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, HostListener, Injectable, InjectionToken, Injector, NgZone, Pipe, computed, effect, inject, input, linkedSignal, makeEnvironmentProviders, model, output, signal, untracked, viewChild } from "@angular/core";
3
3
  import { Router, RouterLink } from "@angular/router";
4
4
  import { ReplaySubject, Subject, Subscription, filter, finalize, forkJoin, map, of, startWith, switchMap, take, tap } from "rxjs";
5
- import { API_NAME, AuthService, HIDE_ROLE_MARKER, NotificationService, RoleService, UIKIT_NOTIFICATION_TOKEN, formatZodError } from "@kuzntsv/uikit";
5
+ import { API_NAME, AuthService, HIDE_ROLE_MARKER, NotificationService, RoleService, SignalSelectionModel, UIKIT_NOTIFICATION_TOKEN, formatZodError } from "@kuzntsv/uikit";
6
6
  import * as i1$1 from "@angular/forms";
7
7
  import { FormControl, FormGroup, FormsModule, NgControl, ReactiveFormsModule, Validators } from "@angular/forms";
8
8
  import { MatAnchor, MatButton, MatIconButton } from "@angular/material/button";
@@ -34,14 +34,13 @@ import { MatProgressSpinner } from "@angular/material/progress-spinner";
34
34
  import * as i3$1 from "@angular/cdk/scrolling";
35
35
  import { ScrollingModule } from "@angular/cdk/scrolling";
36
36
  import { MatFormField as MatFormField$1, MatLabel as MatLabel$1, MatSelect } from "@angular/material/select";
37
- import { SelectionModel } from "@angular/cdk/collections";
38
37
  import { MatCheckbox } from "@angular/material/checkbox";
39
38
  import * as i3 from "@angular/material/paginator";
40
- import { MatPaginator, MatPaginatorModule } from "@angular/material/paginator";
39
+ import { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from "@angular/material/paginator";
41
40
  import * as i2 from "@angular/material/sort";
42
41
  import { MatSort, MatSortModule } from "@angular/material/sort";
43
42
  import * as i1 from "@angular/material/table";
44
- import { MatTable, MatTableDataSource, MatTableModule } from "@angular/material/table";
43
+ import { MatTableDataSource, MatTableModule } from "@angular/material/table";
45
44
  var LoginFormComponent = class LoginFormComponent {
46
45
  pending = input(false, ...ngDevMode ? [{ debugName: "pending" }] : /* istanbul ignore next */ []);
47
46
  errorMessage = input("", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
@@ -4418,6 +4417,15 @@ const PageStateSchema = z.object({
4418
4417
  pageSize: z.number().int().positive()
4419
4418
  });
4420
4419
  const TableStateSchema = SortStateSchema.merge(PageStateSchema);
4420
+ function getRuPaginatorIntl() {
4421
+ const intl = new MatPaginatorIntl();
4422
+ intl.itemsPerPageLabel = "Записей на странице";
4423
+ intl.firstPageLabel = "Первая страница";
4424
+ intl.previousPageLabel = "Предыдущая страница";
4425
+ intl.nextPageLabel = "Следующая страница";
4426
+ intl.lastPageLabel = "Последняя страница";
4427
+ return intl;
4428
+ }
4421
4429
  var TableComponent = class TableComponent {
4422
4430
  data = input([], ...ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []);
4423
4431
  length = input(0, ...ngDevMode ? [{ debugName: "length" }] : /* istanbul ignore next */ []);
@@ -4431,8 +4439,6 @@ var TableComponent = class TableComponent {
4431
4439
  sortStateChange = output();
4432
4440
  selectionChange = output();
4433
4441
  rowDoubleClicked = output();
4434
- cdr = inject(ChangeDetectorRef);
4435
- matTable = viewChild(MatTable, ...ngDevMode ? [{ debugName: "matTable" }] : /* istanbul ignore next */ []);
4436
4442
  sort = viewChild(MatSort, ...ngDevMode ? [{ debugName: "sort" }] : /* istanbul ignore next */ []);
4437
4443
  paginator = viewChild(MatPaginator, ...ngDevMode ? [{ debugName: "paginator" }] : /* istanbul ignore next */ []);
4438
4444
  contextMenu = viewChild(MatMenuTrigger, ...ngDevMode ? [{ debugName: "contextMenu" }] : /* istanbul ignore next */ []);
@@ -4456,67 +4462,67 @@ var TableComponent = class TableComponent {
4456
4462
  defaultPageIndex = 0;
4457
4463
  defaultPageSize = 10;
4458
4464
  dataSource = new MatTableDataSource();
4459
- selection = new SelectionModel();
4465
+ selection = computed(() => {
4466
+ return new SignalSelectionModel(this.allowMultiSelect(), [], (a, b) => a?.id === b?.id);
4467
+ }, ...ngDevMode ? [{ debugName: "selection" }] : /* istanbul ignore next */ []);
4460
4468
  displayedColumns = computed(() => {
4461
4469
  return ["select", ...this.columnOptions()?.filter((c) => !c.hide).map((item) => item.name) || []];
4462
4470
  }, ...ngDevMode ? [{ debugName: "displayedColumns" }] : /* istanbul ignore next */ []);
4471
+ totals = computed(() => {
4472
+ const currentData = this.data();
4473
+ const options = this.columnOptions();
4474
+ const result = {};
4475
+ options.forEach((col) => {
4476
+ if (!col.footer) return;
4477
+ const values = currentData.map((t) => t[col.name]).filter((v) => typeof v === "number");
4478
+ result[col.name] = values.length ? values.reduce((acc, v) => acc + v, 0) : "";
4479
+ });
4480
+ return result;
4481
+ }, ...ngDevMode ? [{ debugName: "totals" }] : /* istanbul ignore next */ []);
4463
4482
  constructor() {
4464
4483
  effect(() => {
4465
4484
  this.dataSource.data = [...this.data()];
4466
- const tableRef = this.matTable();
4467
- if (tableRef) tableRef.renderRows();
4468
- this.cdr.markForCheck();
4469
- if (this.selection) {
4470
- const selected = this.selection.selected;
4471
- this.selection.clear();
4472
- this.data().filter((v) => selected.map((s) => JSON.stringify(s)).includes(JSON.stringify(v))).forEach((d) => this.selection.select(d));
4473
- }
4485
+ const currentData = this.data();
4486
+ const model = this.selection();
4487
+ const nextSelected = currentData.filter((item) => model.isSelected(item));
4488
+ if (nextSelected.length > 0) model.select(...nextSelected);
4474
4489
  });
4475
4490
  effect(() => {
4476
- const paginator = this.paginator();
4477
- if (paginator) {
4478
- paginator._intl.itemsPerPageLabel = "Записей на странице";
4479
- paginator._intl.firstPageLabel = "Первая страница";
4480
- paginator._intl.previousPageLabel = "Предыдущая страница";
4481
- paginator._intl.nextPageLabel = "Следующая страница";
4482
- paginator._intl.lastPageLabel = "Последняя страница";
4483
- paginator._intl.changes.next();
4484
- }
4485
- });
4486
- }
4487
- ngOnInit() {
4488
- this.selection = new SelectionModel(this.allowMultiSelect());
4489
- this.selection.changed.subscribe((change) => {
4490
- this.selectionChange.emit(change.source.selected);
4491
+ const selectedArray = this.selection().selected();
4492
+ untracked(() => this.selectionChange.emit(selectedArray));
4491
4493
  });
4492
4494
  }
4493
4495
  onPageEvent(event) {
4494
- this.pageStateChange.emit({
4496
+ const newState = {
4495
4497
  pageIndex: event.pageIndex,
4496
4498
  pageSize: event.pageSize
4497
- });
4499
+ };
4500
+ this.pageState.set(newState);
4501
+ this.pageStateChange.emit(newState);
4498
4502
  }
4499
4503
  onSortEvent(sort) {
4500
- this.sortStateChange.emit({
4504
+ const newState = {
4501
4505
  sortActive: sort.active,
4502
4506
  sortDirection: sort.direction
4503
- });
4507
+ };
4508
+ this.sortState.set(newState);
4509
+ this.sortStateChange.emit(newState);
4504
4510
  }
4505
4511
  isAllSelected() {
4506
- return this.selection.selected.length === this.dataSource.data.length;
4512
+ const pageRows = this.dataSource.data;
4513
+ if (pageRows.length === 0) return false;
4514
+ return pageRows.every((row) => this.selection().isSelected(row));
4507
4515
  }
4508
4516
  masterToggle() {
4509
- console.log(this.selection.isMultipleSelection());
4510
- if (this.isAllSelected()) this.selection.clear();
4511
- else this.dataSource.data.forEach((row) => this.selection.select(row));
4517
+ if (this.isAllSelected()) this.selection().clear();
4518
+ else this.selection().select(...this.dataSource.data);
4512
4519
  }
4513
4520
  onRowClicked(row) {
4514
- if (this.selection.isSelected(row)) this.selection.deselect(row);
4515
- else this.selection.select(row);
4521
+ this.selection().toggle(row);
4516
4522
  }
4517
4523
  onRowDblClicked(row) {
4518
- this.selection.clear();
4519
- this.selection.select(row);
4524
+ this.selection().clear();
4525
+ this.selection().select(row);
4520
4526
  if (!this.rowDblClickedDisable()) this.rowDoubleClicked.emit(row);
4521
4527
  }
4522
4528
  onContextMenu(event, itemForMenu) {
@@ -4532,11 +4538,6 @@ var TableComponent = class TableComponent {
4532
4538
  contextMenu.openMenu();
4533
4539
  }
4534
4540
  }
4535
- getTotal(columnName) {
4536
- const arr = this.dataSource.data.filter((t) => typeof t[columnName] === "number").map((t) => t[columnName]);
4537
- if (arr.length === 0) return "";
4538
- else return arr.reduce((acc, value) => acc + value, 0);
4539
- }
4540
4541
  static ɵfac = i0.ɵɵngDeclareFactory({
4541
4542
  minVersion: "12.0.0",
4542
4543
  version: "22.2.2",
@@ -4615,14 +4616,11 @@ var TableComponent = class TableComponent {
4615
4616
  selectionChange: "selectionChange",
4616
4617
  rowDoubleClicked: "rowDoubleClicked"
4617
4618
  },
4619
+ providers: [{
4620
+ provide: MatPaginatorIntl,
4621
+ useFactory: getRuPaginatorIntl
4622
+ }],
4618
4623
  viewQueries: [
4619
- {
4620
- propertyName: "matTable",
4621
- first: true,
4622
- predicate: MatTable,
4623
- descendants: true,
4624
- isSignal: true
4625
- },
4626
4624
  {
4627
4625
  propertyName: "sort",
4628
4626
  first: true,
@@ -4646,7 +4644,7 @@ var TableComponent = class TableComponent {
4646
4644
  }
4647
4645
  ],
4648
4646
  ngImport: i0,
4649
- template: "<div class=\"component-container\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"sortState().sortActive\"\r\n [matSortDirection]=\"sortState().sortDirection\"\r\n (matSortChange)=\"onSortEvent($event)\"\r\n matSortDisableClear>\r\n\r\n <!-- Выбор строки Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (allowMultiSelect()) {\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n }\r\n </ng-container>\r\n\r\n @for (item of columnOptions(); track item) {\r\n <ng-container matColumnDef={{item.name}}>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [disabled]=\"item.titleSortDisable\">{{item.title}}</th>\r\n @if (!item.format) {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footer) {\r\n <strong>{{ getTotal(item.name) }}</strong>\r\n }\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n } \r\n }\r\n @if (item.format === 'pre-wrap') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" class=\"pre-wrap\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'link') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'linkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLink') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [routerLink]=\"[element[item.name]]\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLinkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'checkbox') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <mat-checkbox [checked]=\"element[item.name] === 1\" [disabled]=\"true\"></mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icons') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.icons) {\r\n <mat-icon [class]=\"item.classList ? item.classList[element[item.name]] : ''\" \r\n [matTooltip]=\"item.tooltips ? item.tooltips[element[item.name]] : ''\">{{item.icons[element[item.name]]}}</mat-icon>\r\n } \r\n @if (item.symbols) {\r\n <span [class]=\"item.classList ? item.classList[element[item.name]] : ''\" >{{item.symbols[element[item.name]]}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'actions') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.actions) {\r\n <div class=\"actions-container\">\r\n @for (action of item.actions; track action) {\r\n @if (!(action.hideFn ? action.hideFn(element) : action.hide)) {\r\n <button mat-icon-button\r\n (click)=\"action.onClickFn ? action.onClickFn(element) : ''\"\r\n (mousedown)=\"action.onClickMiddleFn ? action.onClickMiddleFn($event, element) : ''\"\r\n [disabled]=\"action.disabledFn ? action.disabledFn(element) : action.disabled\"\r\n [matTooltip]=\"action.tooltip ? action.tooltip : ''\" >\r\n @if (action.icon) {\r\n <mat-icon [class]=\"action.classList ? action.classList : ''\" >{{action.icon}}</mat-icon>\r\n }\r\n @if (action.symbol) {\r\n <span [class]=\"action.classList ? action.classList : ''\" >{{action.symbol}}</span>\r\n }\r\n {{ action.title }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'image') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <img\r\n [src]=\"element[item.name]\"\r\n [alt]=\"item.imageAlt && element[item.imageAlt] ? element[item.imageAlt] : ''\"\r\n [class]=\"item.classList ? item.classList : ''\"\r\n />\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n </ng-container>\r\n }\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">\r\n Нет данных для отображения\r\n </td>\r\n </tr>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns();\" \r\n (click)=\"onRowClicked(row)\" (dblclick)=\"onRowDblClicked(row)\" \r\n class=\"element-row\" [class.selected-row]=\"selection.isSelected(row)\">\r\n </tr>\r\n @if (footer()) {\r\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns(); sticky: true\"></tr>\r\n }\r\n </table>\r\n <div style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"contextMenu\" #menuTrigger=\"matMenuTrigger\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\">\r\n @for (menuItem of opt(); track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn(itemForMenu) : ''\"\r\n (mousedown)=\"menuItem.onClickMiddleFn ? menuItem.onClickMiddleFn($event, itemForMenu, menuTrigger) : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn(itemForMenu) : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon [class]=\"menuItem.classList ? menuItem.classList : ''\">{{menuItem.icon}}</mat-icon>\r\n }\r\n @if (menuItem.symbol) {\r\n <span [class]=\"menuItem.classList ? menuItem.classList : ''\">{{menuItem.symbol}}</span>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n\r\n\r\n<mat-paginator [length]=\"length()\"\r\n [pageIndex]=\"pageState().pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"pageState().pageSize || defaultPageSize\"\r\n (page)=\"onPageEvent($event)\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n",
4647
+ template: "<div class=\"component-container\">\r\n <div class=\"table-container\">\r\n <table\r\n mat-table\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"sortState().sortActive\"\r\n [matSortDirection]=\"sortState().sortDirection\"\r\n (matSortChange)=\"onSortEvent($event)\"\r\n matSortDisableClear\r\n >\r\n <!-- Выбор строки Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (allowMultiSelect()) {\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection().hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection().hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onRowClicked(row) : null\"\r\n [checked]=\"selection().isSelected(row)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n }\r\n </ng-container>\r\n\r\n @for (item of columnOptions(); track item.name) {\r\n <ng-container [matColumnDef]=\"item.name\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n [disabled]=\"item.titleSortDisable\"\r\n >\r\n {{ item.title }}\r\n </th>\r\n\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n (contextmenu)=\"onContextMenu($event, element)\"\r\n [matTooltip]=\"item.tooltip ?? ''\"\r\n >\r\n @switch (item.format) {\r\n @case (\"pre-wrap\") {\r\n {{ element[item.name] }}\r\n }\r\n @case (\"link\") {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{\r\n element[item.name]\r\n }}</a>\r\n }\r\n @case (\"linkIcon\") {\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon\r\n [class]=\"item.classList ? item.classList : ''\"\r\n >{{ item.icon }}</mat-icon\r\n >\r\n }\r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\">{{\r\n item.symbol\r\n }}</span>\r\n }\r\n </a>\r\n }\r\n }\r\n @case (\"routerLink\") {\r\n <a [routerLink]=\"[element[item.name]]\">{{\r\n element[item.name]\r\n }}</a>\r\n }\r\n @case (\"routerLinkIcon\") {\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon\r\n [class]=\"item.classList ? item.classList : ''\"\r\n >{{ item.icon }}</mat-icon\r\n >\r\n }\r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\">{{\r\n item.symbol\r\n }}</span>\r\n }\r\n </a>\r\n }\r\n }\r\n @case (\"checkbox\") {\r\n <mat-checkbox\r\n [checked]=\"element[item.name] === 1\"\r\n [disabled]=\"true\"\r\n ></mat-checkbox>\r\n }\r\n @case (\"icon\") {\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\">{{\r\n item.icon\r\n }}</mat-icon>\r\n }\r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\">{{\r\n item.symbol\r\n }}</span>\r\n }\r\n }\r\n @case (\"icons\") {\r\n @if (item.icons) {\r\n <mat-icon\r\n [class]=\"\r\n item.classList ? item.classList[element[item.name]] : ''\r\n \"\r\n [matTooltip]=\"\r\n item.tooltips ? item.tooltips[element[item.name]] : ''\r\n \"\r\n >{{ item.icons[element[item.name]] }}</mat-icon\r\n >\r\n }\r\n @if (item.symbols) {\r\n <span\r\n [class]=\"\r\n item.classList ? item.classList[element[item.name]] : ''\r\n \"\r\n >{{ item.symbols[element[item.name]] }}</span\r\n >\r\n }\r\n }\r\n @case (\"actions\") {\r\n @if (item.actions) {\r\n <div class=\"actions-container\">\r\n @for (action of item.actions; track action) {\r\n @if (\r\n !(action.hideFn ? action.hideFn(element) : action.hide)\r\n ) {\r\n <button\r\n mat-icon-button\r\n (click)=\"\r\n action.onClickFn ? action.onClickFn(element) : ''\r\n \"\r\n (mousedown)=\"\r\n action.onClickMiddleFn\r\n ? action.onClickMiddleFn($event, element)\r\n : ''\r\n \"\r\n [disabled]=\"\r\n action.disabledFn\r\n ? action.disabledFn(element)\r\n : action.disabled\r\n \"\r\n [matTooltip]=\"action.tooltip ? action.tooltip : ''\"\r\n >\r\n @if (action.icon) {\r\n <mat-icon\r\n [class]=\"action.classList ? action.classList : ''\"\r\n >{{ action.icon }}</mat-icon\r\n >\r\n }\r\n @if (action.symbol) {\r\n <span\r\n [class]=\"action.classList ? action.classList : ''\"\r\n >{{ action.symbol }}</span\r\n >\r\n }\r\n {{ action.title }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n @case (\"image\") {\r\n @if (element[item.name]) {\r\n <img\r\n [src]=\"element[item.name]\"\r\n [alt]=\"\r\n item.imageAlt && element[item.imageAlt]\r\n ? element[item.imageAlt]\r\n : ''\r\n \"\r\n [class]=\"item.classList ? item.classList : ''\"\r\n />\r\n }\r\n }\r\n @default {\r\n {{ element[item.name] }}\r\n }\r\n }\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (footer()) {\r\n @if (!item.format && item.footer) {\r\n <strong>{{ totals()[item.name] }}</strong>\r\n }\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">Нет данных для отображения</td>\r\n </tr>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"displayedColumns(); sticky: true\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns()\"\r\n (click)=\"onRowClicked(row)\"\r\n (dblclick)=\"onRowDblClicked(row)\"\r\n class=\"element-row\"\r\n [class.selected-row]=\"selection().isSelected(row)\"\r\n ></tr>\r\n @if (footer()) {\r\n <tr\r\n mat-footer-row\r\n *matFooterRowDef=\"displayedColumns(); sticky: true\"\r\n ></tr>\r\n }\r\n </table>\r\n <div\r\n style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"contextMenu\"\r\n #menuTrigger=\"matMenuTrigger\"\r\n ></div>\r\n <mat-menu #contextMenu=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\">\r\n @for (menuItem of opt(); track menuItem) {\r\n @if (\r\n menuItem.title === \"-\" &&\r\n !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)\r\n ) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (\r\n menuItem.title !== \"-\" &&\r\n !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)\r\n ) {\r\n <button\r\n mat-menu-item\r\n (click)=\"\r\n menuItem.onClickFn ? menuItem.onClickFn(itemForMenu) : ''\r\n \"\r\n (mousedown)=\"\r\n menuItem.onClickMiddleFn\r\n ? menuItem.onClickMiddleFn($event, itemForMenu, menuTrigger)\r\n : ''\r\n \"\r\n [disabled]=\"\r\n menuItem.disabledFn\r\n ? menuItem.disabledFn(itemForMenu)\r\n : menuItem.disabled\r\n \"\r\n >\r\n @if (menuItem.icon) {\r\n <mat-icon\r\n [class]=\"menuItem.classList ? menuItem.classList : ''\"\r\n >{{ menuItem.icon }}</mat-icon\r\n >\r\n }\r\n @if (menuItem.symbol) {\r\n <span [class]=\"menuItem.classList ? menuItem.classList : ''\">{{\r\n menuItem.symbol\r\n }}</span>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n\r\n <mat-paginator\r\n [length]=\"length()\"\r\n [pageIndex]=\"pageState().pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"pageState().pageSize || defaultPageSize\"\r\n (page)=\"onPageEvent($event)\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n ></mat-paginator>\r\n</div>\r\n",
4650
4648
  styles: [".component-container{display:flex;flex-direction:column;height:100%}.table-container{display:flex;flex-direction:column;justify-content:space-between;flex:auto;margin:0 20px;overflow:auto;height:400px}.center{position:absolute;inset:0 0 56px;background:#00000026;z-index:1;display:flex;align-items:center;justify-content:center}.mat-column-select{overflow:initial}tr.mat-footer-row{font-weight:700;height:56px}.mat-table{overflow-x:scroll}.mat-cell,.mat-header-cell{word-wrap:initial;display:table-cell;padding:0 10px;line-break:unset;white-space:nowrap;overflow:hidden;vertical-align:middle}.mat-row,.mat-header-row{display:table-row}tr.element-row:not(.selected-row):hover{background:#f5f5f5}tr.element-row:not(.selected-row):active{background:#efefef}.selected-row{background-color:#eee}.fact-done-row{background-color:#eefdec}a,a:visited,a:hover,a:active{color:inherit}.pre-wrap{white-space:pre-wrap}.actions-container{display:flex;column-gap:5px}\n"],
4651
4649
  dependencies: [
4652
4650
  {
@@ -4962,7 +4960,11 @@ i0.ɵɵngDeclareClassMetadata({
4962
4960
  MatTooltipModule,
4963
4961
  MatIconButton
4964
4962
  ],
4965
- template: "<div class=\"component-container\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"sortState().sortActive\"\r\n [matSortDirection]=\"sortState().sortDirection\"\r\n (matSortChange)=\"onSortEvent($event)\"\r\n matSortDisableClear>\r\n\r\n <!-- Выбор строки Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (allowMultiSelect()) {\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n }\r\n </ng-container>\r\n\r\n @for (item of columnOptions(); track item) {\r\n <ng-container matColumnDef={{item.name}}>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [disabled]=\"item.titleSortDisable\">{{item.title}}</th>\r\n @if (!item.format) {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footer) {\r\n <strong>{{ getTotal(item.name) }}</strong>\r\n }\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n } \r\n }\r\n @if (item.format === 'pre-wrap') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" class=\"pre-wrap\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'link') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'linkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLink') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [routerLink]=\"[element[item.name]]\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLinkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'checkbox') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <mat-checkbox [checked]=\"element[item.name] === 1\" [disabled]=\"true\"></mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icons') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.icons) {\r\n <mat-icon [class]=\"item.classList ? item.classList[element[item.name]] : ''\" \r\n [matTooltip]=\"item.tooltips ? item.tooltips[element[item.name]] : ''\">{{item.icons[element[item.name]]}}</mat-icon>\r\n } \r\n @if (item.symbols) {\r\n <span [class]=\"item.classList ? item.classList[element[item.name]] : ''\" >{{item.symbols[element[item.name]]}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'actions') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.actions) {\r\n <div class=\"actions-container\">\r\n @for (action of item.actions; track action) {\r\n @if (!(action.hideFn ? action.hideFn(element) : action.hide)) {\r\n <button mat-icon-button\r\n (click)=\"action.onClickFn ? action.onClickFn(element) : ''\"\r\n (mousedown)=\"action.onClickMiddleFn ? action.onClickMiddleFn($event, element) : ''\"\r\n [disabled]=\"action.disabledFn ? action.disabledFn(element) : action.disabled\"\r\n [matTooltip]=\"action.tooltip ? action.tooltip : ''\" >\r\n @if (action.icon) {\r\n <mat-icon [class]=\"action.classList ? action.classList : ''\" >{{action.icon}}</mat-icon>\r\n }\r\n @if (action.symbol) {\r\n <span [class]=\"action.classList ? action.classList : ''\" >{{action.symbol}}</span>\r\n }\r\n {{ action.title }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'image') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <img\r\n [src]=\"element[item.name]\"\r\n [alt]=\"item.imageAlt && element[item.imageAlt] ? element[item.imageAlt] : ''\"\r\n [class]=\"item.classList ? item.classList : ''\"\r\n />\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n </ng-container>\r\n }\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">\r\n Нет данных для отображения\r\n </td>\r\n </tr>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns();\" \r\n (click)=\"onRowClicked(row)\" (dblclick)=\"onRowDblClicked(row)\" \r\n class=\"element-row\" [class.selected-row]=\"selection.isSelected(row)\">\r\n </tr>\r\n @if (footer()) {\r\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns(); sticky: true\"></tr>\r\n }\r\n </table>\r\n <div style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"contextMenu\" #menuTrigger=\"matMenuTrigger\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\">\r\n @for (menuItem of opt(); track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn(itemForMenu) : ''\"\r\n (mousedown)=\"menuItem.onClickMiddleFn ? menuItem.onClickMiddleFn($event, itemForMenu, menuTrigger) : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn(itemForMenu) : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon [class]=\"menuItem.classList ? menuItem.classList : ''\">{{menuItem.icon}}</mat-icon>\r\n }\r\n @if (menuItem.symbol) {\r\n <span [class]=\"menuItem.classList ? menuItem.classList : ''\">{{menuItem.symbol}}</span>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n\r\n\r\n<mat-paginator [length]=\"length()\"\r\n [pageIndex]=\"pageState().pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"pageState().pageSize || defaultPageSize\"\r\n (page)=\"onPageEvent($event)\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n",
4963
+ providers: [{
4964
+ provide: MatPaginatorIntl,
4965
+ useFactory: getRuPaginatorIntl
4966
+ }],
4967
+ template: "<div class=\"component-container\">\r\n <div class=\"table-container\">\r\n <table\r\n mat-table\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"sortState().sortActive\"\r\n [matSortDirection]=\"sortState().sortDirection\"\r\n (matSortChange)=\"onSortEvent($event)\"\r\n matSortDisableClear\r\n >\r\n <!-- Выбор строки Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (allowMultiSelect()) {\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection().hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection().hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onRowClicked(row) : null\"\r\n [checked]=\"selection().isSelected(row)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n }\r\n </ng-container>\r\n\r\n @for (item of columnOptions(); track item.name) {\r\n <ng-container [matColumnDef]=\"item.name\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n [disabled]=\"item.titleSortDisable\"\r\n >\r\n {{ item.title }}\r\n </th>\r\n\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n (contextmenu)=\"onContextMenu($event, element)\"\r\n [matTooltip]=\"item.tooltip ?? ''\"\r\n >\r\n @switch (item.format) {\r\n @case (\"pre-wrap\") {\r\n {{ element[item.name] }}\r\n }\r\n @case (\"link\") {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{\r\n element[item.name]\r\n }}</a>\r\n }\r\n @case (\"linkIcon\") {\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon\r\n [class]=\"item.classList ? item.classList : ''\"\r\n >{{ item.icon }}</mat-icon\r\n >\r\n }\r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\">{{\r\n item.symbol\r\n }}</span>\r\n }\r\n </a>\r\n }\r\n }\r\n @case (\"routerLink\") {\r\n <a [routerLink]=\"[element[item.name]]\">{{\r\n element[item.name]\r\n }}</a>\r\n }\r\n @case (\"routerLinkIcon\") {\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon\r\n [class]=\"item.classList ? item.classList : ''\"\r\n >{{ item.icon }}</mat-icon\r\n >\r\n }\r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\">{{\r\n item.symbol\r\n }}</span>\r\n }\r\n </a>\r\n }\r\n }\r\n @case (\"checkbox\") {\r\n <mat-checkbox\r\n [checked]=\"element[item.name] === 1\"\r\n [disabled]=\"true\"\r\n ></mat-checkbox>\r\n }\r\n @case (\"icon\") {\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\">{{\r\n item.icon\r\n }}</mat-icon>\r\n }\r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\">{{\r\n item.symbol\r\n }}</span>\r\n }\r\n }\r\n @case (\"icons\") {\r\n @if (item.icons) {\r\n <mat-icon\r\n [class]=\"\r\n item.classList ? item.classList[element[item.name]] : ''\r\n \"\r\n [matTooltip]=\"\r\n item.tooltips ? item.tooltips[element[item.name]] : ''\r\n \"\r\n >{{ item.icons[element[item.name]] }}</mat-icon\r\n >\r\n }\r\n @if (item.symbols) {\r\n <span\r\n [class]=\"\r\n item.classList ? item.classList[element[item.name]] : ''\r\n \"\r\n >{{ item.symbols[element[item.name]] }}</span\r\n >\r\n }\r\n }\r\n @case (\"actions\") {\r\n @if (item.actions) {\r\n <div class=\"actions-container\">\r\n @for (action of item.actions; track action) {\r\n @if (\r\n !(action.hideFn ? action.hideFn(element) : action.hide)\r\n ) {\r\n <button\r\n mat-icon-button\r\n (click)=\"\r\n action.onClickFn ? action.onClickFn(element) : ''\r\n \"\r\n (mousedown)=\"\r\n action.onClickMiddleFn\r\n ? action.onClickMiddleFn($event, element)\r\n : ''\r\n \"\r\n [disabled]=\"\r\n action.disabledFn\r\n ? action.disabledFn(element)\r\n : action.disabled\r\n \"\r\n [matTooltip]=\"action.tooltip ? action.tooltip : ''\"\r\n >\r\n @if (action.icon) {\r\n <mat-icon\r\n [class]=\"action.classList ? action.classList : ''\"\r\n >{{ action.icon }}</mat-icon\r\n >\r\n }\r\n @if (action.symbol) {\r\n <span\r\n [class]=\"action.classList ? action.classList : ''\"\r\n >{{ action.symbol }}</span\r\n >\r\n }\r\n {{ action.title }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n @case (\"image\") {\r\n @if (element[item.name]) {\r\n <img\r\n [src]=\"element[item.name]\"\r\n [alt]=\"\r\n item.imageAlt && element[item.imageAlt]\r\n ? element[item.imageAlt]\r\n : ''\r\n \"\r\n [class]=\"item.classList ? item.classList : ''\"\r\n />\r\n }\r\n }\r\n @default {\r\n {{ element[item.name] }}\r\n }\r\n }\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (footer()) {\r\n @if (!item.format && item.footer) {\r\n <strong>{{ totals()[item.name] }}</strong>\r\n }\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">Нет данных для отображения</td>\r\n </tr>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"displayedColumns(); sticky: true\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns()\"\r\n (click)=\"onRowClicked(row)\"\r\n (dblclick)=\"onRowDblClicked(row)\"\r\n class=\"element-row\"\r\n [class.selected-row]=\"selection().isSelected(row)\"\r\n ></tr>\r\n @if (footer()) {\r\n <tr\r\n mat-footer-row\r\n *matFooterRowDef=\"displayedColumns(); sticky: true\"\r\n ></tr>\r\n }\r\n </table>\r\n <div\r\n style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"contextMenu\"\r\n #menuTrigger=\"matMenuTrigger\"\r\n ></div>\r\n <mat-menu #contextMenu=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\">\r\n @for (menuItem of opt(); track menuItem) {\r\n @if (\r\n menuItem.title === \"-\" &&\r\n !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)\r\n ) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (\r\n menuItem.title !== \"-\" &&\r\n !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)\r\n ) {\r\n <button\r\n mat-menu-item\r\n (click)=\"\r\n menuItem.onClickFn ? menuItem.onClickFn(itemForMenu) : ''\r\n \"\r\n (mousedown)=\"\r\n menuItem.onClickMiddleFn\r\n ? menuItem.onClickMiddleFn($event, itemForMenu, menuTrigger)\r\n : ''\r\n \"\r\n [disabled]=\"\r\n menuItem.disabledFn\r\n ? menuItem.disabledFn(itemForMenu)\r\n : menuItem.disabled\r\n \"\r\n >\r\n @if (menuItem.icon) {\r\n <mat-icon\r\n [class]=\"menuItem.classList ? menuItem.classList : ''\"\r\n >{{ menuItem.icon }}</mat-icon\r\n >\r\n }\r\n @if (menuItem.symbol) {\r\n <span [class]=\"menuItem.classList ? menuItem.classList : ''\">{{\r\n menuItem.symbol\r\n }}</span>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n\r\n <mat-paginator\r\n [length]=\"length()\"\r\n [pageIndex]=\"pageState().pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"pageState().pageSize || defaultPageSize\"\r\n (page)=\"onPageEvent($event)\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n ></mat-paginator>\r\n</div>\r\n",
4966
4968
  styles: [".component-container{display:flex;flex-direction:column;height:100%}.table-container{display:flex;flex-direction:column;justify-content:space-between;flex:auto;margin:0 20px;overflow:auto;height:400px}.center{position:absolute;inset:0 0 56px;background:#00000026;z-index:1;display:flex;align-items:center;justify-content:center}.mat-column-select{overflow:initial}tr.mat-footer-row{font-weight:700;height:56px}.mat-table{overflow-x:scroll}.mat-cell,.mat-header-cell{word-wrap:initial;display:table-cell;padding:0 10px;line-break:unset;white-space:nowrap;overflow:hidden;vertical-align:middle}.mat-row,.mat-header-row{display:table-row}tr.element-row:not(.selected-row):hover{background:#f5f5f5}tr.element-row:not(.selected-row):active{background:#efefef}.selected-row{background-color:#eee}.fact-done-row{background-color:#eefdec}a,a:visited,a:hover,a:active{color:inherit}.pre-wrap{white-space:pre-wrap}.actions-container{display:flex;column-gap:5px}\n"]
4967
4969
  }]
4968
4970
  }],
@@ -5048,10 +5050,6 @@ i0.ɵɵngDeclareClassMetadata({
5048
5050
  type: i0.Output,
5049
5051
  args: ["rowDoubleClicked"]
5050
5052
  }],
5051
- matTable: [{
5052
- type: i0.ViewChild,
5053
- args: [i0.forwardRef(() => MatTable), { isSignal: true }]
5054
- }],
5055
5053
  sort: [{
5056
5054
  type: i0.ViewChild,
5057
5055
  args: [i0.forwardRef(() => MatSort), { isSignal: true }]