@kuzntsv/uikit 1.0.19 → 1.0.22

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.
@@ -1099,7 +1099,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
1099
1099
  class SafePipe {
1100
1100
  sanitizer = inject(DomSanitizer);
1101
1101
  transform(url) {
1102
- return this.sanitizer.bypassSecurityTrustResourceUrl(url);
1102
+ if (!url) {
1103
+ return '';
1104
+ }
1105
+ // Проверяем, является ли значение уже объектом SafeUrl.
1106
+ // Объекты SafeUrl от DomSanitizer имеют скрытые свойства или метод toString(),
1107
+ // но самый надежный способ в Angular — проверить, что это не обычная строка.
1108
+ if (typeof url !== 'string') {
1109
+ return url; // Возвращаем как есть, так как это уже SafeUrl
1110
+ }
1111
+ return this.sanitizer.bypassSecurityTrustUrl(url);
1103
1112
  }
1104
1113
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SafePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1105
1114
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: SafePipe, isStandalone: true, name: "safe" });
@@ -1107,7 +1116,8 @@ class SafePipe {
1107
1116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SafePipe, decorators: [{
1108
1117
  type: Pipe,
1109
1118
  args: [{
1110
- name: 'safe'
1119
+ name: 'safe',
1120
+ standalone: true
1111
1121
  }]
1112
1122
  }] });
1113
1123
 
@@ -1196,11 +1206,11 @@ class NavBarComponent extends BaseNavBarMenuClass {
1196
1206
  });
1197
1207
  }
1198
1208
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: NavBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1199
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: NavBarComponent, isStandalone: true, selector: "ngx-uik-navbar", inputs: { visibleOnLogout: { classPropertyName: "visibleOnLogout", publicName: "visibleOnLogout", isSignal: true, isRequired: false, transformFunction: null }, visibleAvatar: { classPropertyName: "visibleAvatar", publicName: "visibleAvatar", isSignal: true, isRequired: false, transformFunction: null }, visibleLogoutBtn: { classPropertyName: "visibleLogoutBtn", publicName: "visibleLogoutBtn", isSignal: true, isRequired: false, transformFunction: null }, loggedIn: { classPropertyName: "loggedIn", publicName: "loggedIn", isSignal: true, isRequired: false, transformFunction: null }, fioUser: { classPropertyName: "fioUser", publicName: "fioUser", isSignal: true, isRequired: false, transformFunction: null }, userTooltip: { classPropertyName: "userTooltip", publicName: "userTooltip", isSignal: true, isRequired: false, transformFunction: null }, avatarURL: { classPropertyName: "avatarURL", publicName: "avatarURL", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, usesInheritance: true, ngImport: i0, template: "@if (visibleOnLogout() || loggedIn()) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if (visibleAvatar() && (loggedIn() === false || !avatarURL)) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">\u0412\u044B\u0439\u0442\u0438 <mat-icon>logout</mat-icon></a>\r\n }\r\n </nav>\r\n}", styles: [".ngx-uik-navbar-header{display:flex;flex-wrap:wrap;align-items:center;padding:8px 16px}.flex-spacer{flex-grow:1}.user-name{margin-left:8px;line-height:1rem;white-space:normal}.user-photo{border-radius:50%;width:32px;height:32px;margin-right:10px}.mat-mdc-button{color:#fff!important;padding-left:16px!important;padding-right:16px!important}.mdc-button{letter-spacing:normal}\n"], dependencies: [{ kind: "component", type: MatAnchor, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: SafePipe, name: "safe" }] });
1209
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: NavBarComponent, isStandalone: true, selector: "ngx-uik-navbar", inputs: { visibleOnLogout: { classPropertyName: "visibleOnLogout", publicName: "visibleOnLogout", isSignal: true, isRequired: false, transformFunction: null }, visibleAvatar: { classPropertyName: "visibleAvatar", publicName: "visibleAvatar", isSignal: true, isRequired: false, transformFunction: null }, visibleLogoutBtn: { classPropertyName: "visibleLogoutBtn", publicName: "visibleLogoutBtn", isSignal: true, isRequired: false, transformFunction: null }, loggedIn: { classPropertyName: "loggedIn", publicName: "loggedIn", isSignal: true, isRequired: false, transformFunction: null }, fioUser: { classPropertyName: "fioUser", publicName: "fioUser", isSignal: true, isRequired: false, transformFunction: null }, userTooltip: { classPropertyName: "userTooltip", publicName: "userTooltip", isSignal: true, isRequired: false, transformFunction: null }, avatarURL: { classPropertyName: "avatarURL", publicName: "avatarURL", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, usesInheritance: true, ngImport: i0, template: "@if (visibleOnLogout() || loggedIn()) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if (visibleAvatar() && (loggedIn() === false || !avatarURL())) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && !!avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">\u0412\u044B\u0439\u0442\u0438 <mat-icon>logout</mat-icon></a>\r\n }\r\n </nav>\r\n}", styles: [".ngx-uik-navbar-header{display:flex;flex-wrap:wrap;align-items:center;padding:8px 16px}.flex-spacer{flex-grow:1}.user-name{margin-left:8px;line-height:1rem;white-space:normal}.user-photo{border-radius:50%;width:32px;height:32px;margin-right:10px}.mat-mdc-button{color:#fff!important;padding-left:16px!important;padding-right:16px!important}.mdc-button{letter-spacing:normal}\n"], dependencies: [{ kind: "component", type: MatAnchor, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: SafePipe, name: "safe" }] });
1200
1210
  }
1201
1211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: NavBarComponent, decorators: [{
1202
1212
  type: Component,
1203
- args: [{ selector: 'ngx-uik-navbar', imports: [MatAnchor, MatIcon, MatTooltip, SafePipe], template: "@if (visibleOnLogout() || loggedIn()) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if (visibleAvatar() && (loggedIn() === false || !avatarURL)) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">\u0412\u044B\u0439\u0442\u0438 <mat-icon>logout</mat-icon></a>\r\n }\r\n </nav>\r\n}", styles: [".ngx-uik-navbar-header{display:flex;flex-wrap:wrap;align-items:center;padding:8px 16px}.flex-spacer{flex-grow:1}.user-name{margin-left:8px;line-height:1rem;white-space:normal}.user-photo{border-radius:50%;width:32px;height:32px;margin-right:10px}.mat-mdc-button{color:#fff!important;padding-left:16px!important;padding-right:16px!important}.mdc-button{letter-spacing:normal}\n"] }]
1213
+ args: [{ selector: 'ngx-uik-navbar', imports: [MatAnchor, MatIcon, MatTooltip, SafePipe], template: "@if (visibleOnLogout() || loggedIn()) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if (visibleAvatar() && (loggedIn() === false || !avatarURL())) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && !!avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">\u0412\u044B\u0439\u0442\u0438 <mat-icon>logout</mat-icon></a>\r\n }\r\n </nav>\r\n}", styles: [".ngx-uik-navbar-header{display:flex;flex-wrap:wrap;align-items:center;padding:8px 16px}.flex-spacer{flex-grow:1}.user-name{margin-left:8px;line-height:1rem;white-space:normal}.user-photo{border-radius:50%;width:32px;height:32px;margin-right:10px}.mat-mdc-button{color:#fff!important;padding-left:16px!important;padding-right:16px!important}.mdc-button{letter-spacing:normal}\n"] }]
1204
1214
  }], ctorParameters: () => [], propDecorators: { visibleOnLogout: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleOnLogout", required: false }] }], visibleAvatar: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleAvatar", required: false }] }], visibleLogoutBtn: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleLogoutBtn", required: false }] }], loggedIn: [{ type: i0.Input, args: [{ isSignal: true, alias: "loggedIn", required: false }] }], fioUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "fioUser", required: false }] }], userTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "userTooltip", required: false }] }], avatarURL: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarURL", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }] } });
1205
1215
 
1206
1216
  class NotFoundComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"kuzntsv-uikit-ui.mjs","sources":["../../ui/src/auth/components/login-form/login-form.component.ts","../../ui/src/auth/components/login-form/login-form.component.html","../../ui/src/auth/components/permit-form/permit-form.component.ts","../../ui/src/auth/components/permit-form/permit-form.component.html","../../ui/src/services/avatar.service.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.html","../../ui/src/shared/date-range-input/models/date-range.ts","../../ui/src/shared/date-range-input/models/date-formats.ts","../../ui/src/shared/date-range-input/date-range-input.component.ts","../../ui/src/shared/date-range-input/date-range-input.component.html","../../ui/src/shared/dialog/dialog.component.ts","../../ui/src/shared/dialog/dialog.component.html","../../ui/src/shared/dialog/models/dialog-action.ts","../../ui/src/shared/empty/empty.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.html","../../ui/src/base/base-classes/base-edit-dialog-data.ts","../../ui/src/base/base-classes/base-edit-class.ts","../../ui/src/base/base-classes/base-entity-action.ts","../../ui/src/base/base-classes/base-filter-class.ts","../../ui/src/base/base-classes/base-nav-bar-menu-class.ts","../../ui/src/services/local-storage-service.ts","../../ui/src/base/base-classes/base-page-class.ts","../../ui/src/base/base-classes/base-service-class.ts","../../ui/src/pipes/safe.pipe.ts","../../ui/src/pipes/time.pipe.ts","../../ui/src/pipes/truncate.pipe.ts","../../ui/src/shared/navbar/navbar.ts","../../ui/src/shared/navbar/navbar.html","../../ui/src/shared/not-found/not-found.component.ts","../../ui/src/shared/not-found/not-found.component.html","../../ui/src/shared/progress-spinner/progress-spinner.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.html","../../ui/src/shared/select-with-group/select-with-group.component.ts","../../ui/src/shared/select-with-group/select-with-group.component.html","../../ui/src/shared/table/table.component.ts","../../ui/src/shared/table/table.component.html","../../ui/src/services/loader.service.ts","../../ui/src/services/secure-image.service.ts","../../ui/src/services/export.service.ts","../../ui/src/services/sse/sse.service.ts","../../ui/src/auth/components/login-page/login-page.component.ts","../../ui/src/auth/components/login-page/login-page.component.html","../../ui/src/directives/disable-if-role.directive.ts","../../ui/src/directives/hide-if-role-not.directive.ts","../../ui/src/directives/set-value.directive.ts","../../ui/src/guards/auth-guard.service.ts","../../ui/src/guards/redirect-guard.ts","../../ui/src/guards/role-guard.service.ts","../../ui/src/logger/logger.config.ts","../../ui/src/logger/logger.service.ts","../../ui/src/logger/logger.provider.ts","../../ui/src/models/sec-user.model.ts","../../ui/src/public-api.ts","../../ui/src/kuzntsv-uikit-ui.ts"],"sourcesContent":["\r\nimport { Component, effect, input, output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { Authenticate } from '../../models/authenticate';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-form',\r\n templateUrl: 'login-form.component.html',\r\n styleUrls: ['login-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent, FormsModule, ReactiveFormsModule, MatFormField, \r\n MatLabel, MatInput, MatError, MatIcon, MatSuffix, MatButton]\r\n})\r\nexport class LoginFormComponent {\r\n pending = input<boolean>(false);\r\n errorMessage = input<string>('');\r\n submitted = output<Authenticate>();\r\n\r\n hide = true;\r\n\r\n form: FormGroup = new FormGroup({\r\n username: new FormControl('', [Validators.required]),\r\n password: new FormControl('', [Validators.required]),\r\n });\r\n\r\n constructor() { \r\n effect(() => {\r\n if (this.pending()) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\r\n });\r\n }\r\n\r\n submit() {\r\n if (this.form.valid) {\r\n this.submitted.emit(this.form.value);\r\n }\r\n }\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Авторизация\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Имя пользователя</mat-label>\r\n <input type=\"text\" pattern=\"[A-Za-z]{1,}.[A-Za-z]{1,}.[A-Za-z]*\"\r\n matInput\r\n autocomplete=\"on\"\r\n name=\"login-form-username\"\r\n placeholder=\"Имя пользователя\"\r\n formControlName=\"username\">\r\n @if (form.controls['username'].hasError('pattern')) {\r\n <mat-error>\r\n Пожалуйста, используйте требуемый формат (Пример: a.p.petrov)\r\n </mat-error>\r\n }\r\n @if (form.controls['username'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Пароль</mat-label>\r\n <input [type]=\"hide ? 'password' : 'text'\" matInput placeholder=\"Пароль\" formControlName=\"password\">\r\n <mat-icon class=\"watcher\" matSuffix (mousedown)=\"hide=false\" (mouseup)=\"hide=true\"\r\n >{{ hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n @if (form.controls['password'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n @if (errorMessage()) {\r\n <p class=\"loginError\">\r\n {{ errorMessage() }}\r\n </p>\r\n }\r\n\r\n <p class=\"loginButtons\">\r\n <button type=\"submit\" mat-button mat-stroked-button color=\"primary\" [disabled]=\"pending()\">Войти</button>\r\n </p>\r\n\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n","import { Component, ElementRef, HostListener, OnInit, output, viewChild } from '@angular/core';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\n\r\n@Component({\r\n selector: 'ngx-uik-permit-form',\r\n templateUrl: 'permit-form.component.html',\r\n styleUrls: ['permit-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent]\r\n})\r\nexport class PermitFormComponent implements OnInit {\r\n readonly hidy = viewChild<ElementRef>('hidy');\r\n\r\n submitted = output<string>();\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n mouseHandling(event: MouseEvent) {\r\n this.hidy()?.nativeElement.focus();\r\n }\r\n\r\n ngOnInit() {\r\n // Обнуляем значение Input\r\n const hidy = this.hidy();\r\n if (hidy) {\r\n hidy.nativeElement.value = null;\r\n hidy.nativeElement.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Поле ввода\r\n *\r\n * @param событие нажатия на клавишу\r\n */\r\n onKeydown(event: any): void {\r\n if (event.key === 'Enter') {\r\n const permit = this.hidy()?.nativeElement.value;\r\n if (permit) {\r\n this.submitted.emit(permit);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Приложите пропуск\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div class=\"permit\"></div>\r\n </mat-card-content>\r\n</mat-card>\r\n<input #hidy class=\"hidy\" type=\"text\" (keydown)=\"onKeydown($event)\"/>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AvatarService {\r\n baseRoute = 'common/human/';\r\n\r\n private readonly http = inject(HttpClient);\r\n\r\n getAvatarById(idHuman: number): Observable<ArrayBuffer> {\r\n return this.http.get(this.baseRoute + idHuman + '/avatar', { responseType: 'arraybuffer' });\r\n }\r\n\r\n}\r\n","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Component, effect, ElementRef, input, output, viewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent, MatOption } from \"@angular/material/autocomplete\";\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { Observable, startWith } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\nimport { ChipItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-chip-input-autocomplete',\r\n templateUrl: './chip-input-autocomplete.component.html',\r\n styleUrl: './chip-input-autocomplete.component.css',\r\n imports: [MatFormField, AsyncPipe, FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatIcon, MatOption,\r\n MatChipsModule, MatLabel]\r\n})\r\nexport class BaseMatChipComponent {\r\n\r\n // Все элементы\r\n items = input<ChipItem[]>([]);\r\n // Выбранные элементы, ключи (ChipItem.value)\r\n selectedItemsInput = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n readonly input = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n inputCtrl = new FormControl();\r\n filteredItems$?: Observable<ChipItem[]>;\r\n selectedItems: ChipItem[] = [];\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.items().length > 0) {\r\n this.filteredItems$ = this.inputCtrl.valueChanges.pipe(\r\n startWith(null),\r\n map(item => (item ? this._filter(item) : this.items().slice())),\r\n );\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.selectedItemsInput())\r\n this.selectedItems = this.items().filter(s => this.selectedItemsInput().includes(s.value));\r\n });\r\n }\r\n\r\n remove(value: string): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const index = this.selectedItems.map(i => i.value).indexOf(value);\r\n if (index >= 0) {\r\n this.selectedItems.splice(index, 1);\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n }\r\n }\r\n\r\n selected(event: MatAutocompleteSelectedEvent): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const item = this.items().find(s => s.value == event.option.value)\r\n if (item) {\r\n this.selectedItems.push(item);\r\n }\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n const inputValue = this.input();\r\n if (inputValue)\r\n inputValue.nativeElement.value = '';\r\n this.inputCtrl.setValue(null);\r\n }\r\n\r\n private _filter(value: string): ChipItem[] {\r\n const filterValue = value.toLowerCase();\r\n return this.items().filter(item => item.viewValue.toLowerCase().includes(filterValue));\r\n }\r\n\r\n onCloseClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"chip-list\" appearance=\"fill\">\r\n <mat-label>{{ title() }}</mat-label>\r\n <mat-chip-grid #chipList aria-label=\"'Выбор '+title()\">\r\n @for (item of selectedItems; track item) {\r\n <mat-chip-row color=\"primary\"\r\n (removed)=\"remove(item.value)\">\r\n {{ item.viewValue }}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input\r\n #input\r\n [placeholder]=\"'Введите '+title()+'...'\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n >\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (item of filteredItems$ | async; track item) {\r\n <mat-option [value]=\"item.value\"\r\n [disabled]=\"selectedItemsInput()?.includes(item.value)\">\r\n {{ item.viewValue }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (selectedItems.length > 0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onCloseClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import moment from \"moment\";\r\n\r\nexport interface DateRange {\r\n begin: string;\r\n end: string;\r\n}\r\n\r\nexport function dateFormat(date: Date): string {\r\n if (date)\r\n return moment(date).format(\"YYYY-MM-DD\")\r\n else\r\n return '';\r\n}\r\n","// See the Moment.js docs for the meaning of these formats:\r\n// https://momentjs.com/docs/#/displaying/format/\r\nexport const MY_FORMATS = {\r\n parse: {\r\n dateInput: 'DD.MM.YYYY',\r\n },\r\n display: {\r\n dateInput: 'DD.MM.YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n };","import { Component, effect, input, OnDestroy, OnInit, output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MatDatepickerToggle, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate } from '@angular/material/datepicker';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport 'moment/locale/ru';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { dateFormat, DateRange, MY_FORMATS } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-date-range-input',\r\n templateUrl: './date-range-input.component.html',\r\n styleUrls: ['./date-range-input.component.scss'],\r\n imports: [MatFormField, MatLabel, MatDateRangeInput, FormsModule, ReactiveFormsModule, MatStartDate, MatEndDate,\r\n MatDatepickerToggle, MatSuffix, MatDateRangePicker, MatError],\r\n providers: [\r\n { provide: MAT_DATE_LOCALE, useValue: 'ru' },\r\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\r\n ]\r\n})\r\nexport class DateRangeInputComponent implements OnInit, OnDestroy {\r\n label = input<string>('');\r\n dateRange = input<DateRange>(<DateRange>{ begin: '', end: '' });\r\n // eslint-disable-next-line no-magic-numbers\r\n minDate = input<Date>(new Date(2020, 0, 1));\r\n clearInput = input<any>(null);\r\n required = input<boolean>(false);\r\n dateRangeChange = output<DateRange>();\r\n\r\n form = new FormGroup({\r\n begin: new FormControl(),\r\n end: new FormControl(),\r\n });\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.clearInput())\r\n this.form.reset();\r\n });\r\n\r\n effect(() => {\r\n const value = this.dateRange();\r\n if (this.form) {\r\n this.form.controls['begin'].setValue(value.begin ? new Date(value.begin) : null);\r\n this.form.controls['end'].setValue(value.end ? new Date(value.begin) : null);\r\n }\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(this.form.value));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.required()) {\r\n this.form.controls['begin'].addValidators(Validators.required);\r\n this.form.controls['end'].addValidators(Validators.required);\r\n }\r\n\r\n // подписка на изменение периода\r\n this.form.valueChanges\r\n .pipe(\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n )\r\n .subscribe({\r\n next: range => {\r\n if (this.required()) {\r\n if (range.begin && range.end) {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n } else {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private rangeToDateDateRange(range: Partial<{ begin: Date; end: Date }>): DateRange {\r\n return {\r\n begin: range.begin ? dateFormat(range.begin) : '',\r\n end: range.end ? dateFormat(range.end) : ''\r\n };\r\n }\r\n\r\n}\r\n","<mat-form-field appearance=\"fill\">\r\n <mat-label>{{label()}}</mat-label>\r\n <mat-date-range-input\r\n [rangePicker]=\"picker\"\r\n [formGroup]=\"form\"\r\n [min]=\"minDate()\">\r\n <input matStartDate formControlName=\"begin\" placeholder=\"Дата начала\">\r\n <input matEndDate formControlName=\"end\" placeholder=\"Дата окончания\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n <mat-error>Укажите период</mat-error>\r\n</mat-form-field>\r\n\r\n","import { Component, inject } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\n\r\nimport { DialogData } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css'],\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton, MatDialogClose]\r\n})\r\nexport class DialogComponent {\r\n\r\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\r\n readonly dialogRef = inject(MatDialogRef<DialogComponent>);\r\n\r\n constructor() {\r\n if (!this.data.title) {\r\n this.data.title = 'Подтверждение';\r\n }\r\n if (!this.data.btnNoTitle) {\r\n this.data.btnNoTitle = 'Нет';\r\n }\r\n if (!this.data.btnYesTitle) {\r\n this.data.btnYesTitle = 'Да';\r\n }\r\n }\r\n\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ data.title }}</h1>\r\n<div mat-dialog-content>\r\n <div style=\"white-space: pre-line\">{{ data.message }}</div>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n <button mat-raised-button (click)=\"onNoClick()\" cdkFocusInitial>{{ data.btnNoTitle }}</button>\r\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"data.id\">{{ data.btnYesTitle }}</button>\r\n</div>\r\n\r\n","export enum DialogAction {\r\n Add = 'Добавить',\r\n Edit = 'Изменить',\r\n Delete = 'Удалить',\r\n None = ''\r\n }","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-empty-route-guard-holder',\r\n standalone: true,\r\n template: '' // пустой шаблон, так как гуард сразу уводит пользователя со страницы\r\n})\r\nexport class EmptyComponent {}\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { RoleService } from '@kuzntsv/uikit';\r\nimport { IContextMenuOptions } from '../../../shared/table';\r\n\r\n@Component({\r\n selector: 'ngx-uik-base-toolbar',\r\n templateUrl: 'base-toolbar.component.html',\r\n styleUrls: ['base-toolbar.component.scss'],\r\n imports: [\r\n MatToolbar,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatMenu,\r\n MatDivider,\r\n MatMenuTrigger,\r\n MatMenuItem,\r\n ],\r\n})\r\nexport class BaseToolbarComponent {\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesNewBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesEditBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesRemoveBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesCopyBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesExcelBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesCsvBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesPdfBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesPrintBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesRefreshBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesClearBtn = input<string[]>([]);\r\n\r\n // Состояния блокировки\r\n newBtnDisabled = input<boolean>(false);\r\n editBtnDisabled = input<boolean>(false);\r\n removeBtnDisabled = input<boolean>(false);\r\n copyBtnDisabled = input<boolean>(false);\r\n excelBtnDisabled = input<boolean>(false);\r\n csvBtnDisabled = input<boolean>(false);\r\n pdfBtnDisabled = input<boolean>(false);\r\n printBtnDisabled = input<boolean>(false);\r\n refreshBtnDisabled = input<boolean>(false);\r\n clearBtnDisabled = input<boolean>(false);\r\n\r\n // Тултипы\r\n newBtnTooltip = input<string>('Добавить');\r\n editBtnTooltip = input<string>('Изменить');\r\n removeBtnTooltip = input<string>('Удалить');\r\n copyBtnTooltip = input<string>('Скопировать');\r\n excelBtnTooltip = input<string>('Экспортировать в Excel');\r\n csvBtnTooltip = input<string>('Экспортировать в Csv');\r\n pdfBtnTooltip = input<string>('Экспортировать в Pdf');\r\n printBtnTooltip = input<string>('Печатать');\r\n refreshBtnTooltip = input<string>('Обновить данные');\r\n clearBtnTooltip = input<string>('Очистить фильтр');\r\n\r\n /** Список элементов контекстного меню. */\r\n newBtnOpt = input<IContextMenuOptions<string>[]>([]);\r\n\r\n // События\r\n clickedNewBtn = output();\r\n clickedEditBtn = output();\r\n clickedRemoveBtn = output();\r\n clickedCopyBtn = output();\r\n clickedExcelBtn = output();\r\n clickedCsvBtn = output();\r\n clickedPdfBtn = output();\r\n clickedPrintBtn = output();\r\n clickedRefreshBtn = output();\r\n clickedClearBtn = output();\r\n\r\n // DI\r\n // protected authService = inject(AuthService);\r\n protected roleService = inject(RoleService);\r\n\r\n // Вычисляемые сигналы видимости кнопок.\r\n readonly isNewBtnVisible = computed(() => this.checkVisibility(this.rolesNewBtn()));\r\n readonly isEditBtnVisible = computed(() => this.checkVisibility(this.rolesEditBtn()));\r\n readonly isRemoveBtnVisible = computed(() => this.checkVisibility(this.rolesRemoveBtn()));\r\n readonly isCopyBtnVisible = computed(() => this.checkVisibility(this.rolesCopyBtn()));\r\n readonly isExcelBtnVisible = computed(() => this.checkVisibility(this.rolesExcelBtn()));\r\n readonly isCsvBtnVisible = computed(() => this.checkVisibility(this.rolesCsvBtn()));\r\n readonly isPdfBtnVisible = computed(() => this.checkVisibility(this.rolesPdfBtn()));\r\n readonly isPrintBtnVisible = computed(() => this.checkVisibility(this.rolesPrintBtn()));\r\n readonly isRefreshBtnVisible = computed(() => this.checkVisibility(this.rolesRefreshBtn()));\r\n readonly isClearBtnVisible = computed(() => this.checkVisibility(this.rolesClearBtn()));\r\n\r\n /** \r\n * Внутренний метод для вычисления видимости.\r\n * Не вызывается напрямую из шаблона, а служит хелпером для декларативных computed.\r\n * Проверяет, заблокирован ли доступ к элементу на основе списка ограничений.\r\n * Возвращает true, если у пользователя есть запрещенная роль или передан маркер 'HIDE'.\r\n * Администратор (ADMIN) всегда игнорирует любые запреты и маркер 'HIDE'.\r\n */\r\n private checkVisibility(forbiddenRoles: string[]): boolean {\r\n return !this.roleService.hasForbiddenRole(forbiddenRoles);\r\n }\r\n\r\n onNewClick() {\r\n this.clickedNewBtn.emit();\r\n }\r\n\r\n onEditClick() {\r\n this.clickedEditBtn.emit();\r\n }\r\n\r\n onRemoveClick() {\r\n this.clickedRemoveBtn.emit();\r\n }\r\n\r\n onCopyClick() {\r\n this.clickedCopyBtn.emit();\r\n }\r\n\r\n onExcelClick() {\r\n this.clickedExcelBtn.emit();\r\n }\r\n\r\n onCsvClick() {\r\n this.clickedCsvBtn.emit();\r\n }\r\n\r\n onPdfClick() {\r\n this.clickedPdfBtn.emit();\r\n }\r\n\r\n onPrintClick() {\r\n this.clickedPrintBtn.emit();\r\n }\r\n\r\n onRefreshGridClick() {\r\n this.clickedRefreshBtn.emit();\r\n }\r\n\r\n onClearClick() {\r\n this.clickedClearBtn.emit();\r\n }\r\n}\r\n","<mat-toolbar>\r\n @if (isNewBtnVisible()) {\r\n @if (newBtnOpt() && newBtnOpt().length > 0) {\r\n <button [disabled]=\"newBtnDisabled()\" [matMenuTriggerFor]=\"menuNewBtn\"\r\n mat-icon-button [matTooltip]=\"newBtnTooltip()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <mat-menu #menuNewBtn=\"matMenu\">\r\n @for (menuItem of newBtnOpt(); track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn('') : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn('') : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </mat-menu>\r\n } \r\n @else {\r\n <button [disabled]=\"newBtnDisabled()\" (click)=\"onNewClick()\"\r\n mat-icon-button routerLink=\"new\" routerLinkActive=\"active\" [matTooltip]=\"newBtnTooltip()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n }\r\n\r\n @if (isEditBtnVisible()) {\r\n <button [disabled]=\"editBtnDisabled()\" (click)=\"onEditClick()\"\r\n mat-icon-button routerLink=\"edit\" color=\"primary\" routerLinkActive=\"active\" [matTooltip]=\"editBtnTooltip()\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n @if (isRemoveBtnVisible()) {\r\n <button [disabled]=\"removeBtnDisabled()\" (click)=\"onRemoveClick()\"\r\n mat-icon-button routerLink=\"delete\" color=\"warn\" routerLinkActive=\"active\" [matTooltip]=\"removeBtnTooltip()\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n }\r\n @if (isCopyBtnVisible()) {\r\n <button [disabled]=\"copyBtnDisabled()\" (click)=\"onCopyClick()\"\r\n mat-icon-button routerLink=\"delete\" routerLinkActive=\"active\" [matTooltip]=\"copyBtnTooltip()\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n }\r\n @if (isExcelBtnVisible()) {\r\n <button [disabled]=\"excelBtnDisabled()\" (click)=\"onExcelClick()\"\r\n mat-icon-button routerLink=\"excel\" routerLinkActive=\"active\" [matTooltip]=\"excelBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">explicit</mat-icon>\r\n </button>\r\n }\r\n @if (isCsvBtnVisible()) {\r\n <button [disabled]=\"csvBtnDisabled()\" (click)=\"onCsvClick()\"\r\n mat-icon-button routerLink=\"csv\" routerLinkActive=\"active\" [matTooltip]=\"csvBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">download</mat-icon>\r\n </button>\r\n }\r\n @if (isPdfBtnVisible()) {\r\n <button [disabled]=\"pdfBtnDisabled()\" (click)=\"onPdfClick()\"\r\n mat-icon-button routerLink=\"pdf\" routerLinkActive=\"active\" [matTooltip]=\"pdfBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">picture_as_pdf</mat-icon>\r\n </button>\r\n }\r\n @if (isPrintBtnVisible()) {\r\n <button [disabled]=\"printBtnDisabled()\" (click)=\"onPrintClick()\"\r\n mat-icon-button routerLink=\"print\" routerLinkActive=\"active\" [matTooltip]=\"printBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">print_outline</mat-icon>\r\n </button>\r\n }\r\n @if (isRefreshBtnVisible()) {\r\n <button [disabled]=\"refreshBtnDisabled()\" (click)=\"onRefreshGridClick()\"\r\n mat-icon-button routerLink=\"refresh\" routerLinkActive=\"active\" [matTooltip]=\"refreshBtnTooltip()\">\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n }\r\n @if (isClearBtnVisible()) {\r\n <button [disabled]=\"clearBtnDisabled()\" (click)=\"onClearClick()\"\r\n mat-icon-button routerLink=\"clear\" routerLinkActive=\"active\" [matTooltip]=\"clearBtnTooltip()\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n</mat-toolbar>\r\n","export interface IEditDialogData<T, K = any> {\r\n action: Action;\r\n entity: T;\r\n extraData?: K;\r\n}\r\n\r\nexport enum Action {\r\n Add = 'Добавление',\r\n Edit = 'Изменение'\r\n}\r\n","import { Directive, inject, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { NotificationService, RoleService } from '@kuzntsv/uikit';\r\n\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\nimport { LoaderService } from '../../services';\r\n\r\n@Directive()\r\nexport abstract class BaseEditClass<T> implements OnDestroy {\r\n /** Заголовок. */\r\n public abstract title: string;\r\n /** Данные диалога. */\r\n protected abstract dialogData?: IEditDialogData<T>;\r\n /** Форма. */\r\n public abstract form?: FormGroup<any>;\r\n /** Ссылка на диалог. */\r\n protected abstract dialogRef?: MatDialogRef<any, IEditDialogData<T> | null>;\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n /** Сервис ролей. */\r\n protected roleService = inject(RoleService);\r\n\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n protected subscription = new Subscription();\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onNoClick(event: MouseEvent): void {\r\n this.dialogRef?.close(null);\r\n event.preventDefault(); // иначе сработает onSubmit\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.form) {\r\n if (this.form.valid) {\r\n if (this.dialogData)\r\n Object.keys(this.form.controls).forEach(\r\n (controlName) =>\r\n (this.dialogData!.entity[controlName as keyof T] =\r\n this.form?.controls[controlName].value),\r\n );\r\n this.dialogRef?.close(this.dialogData);\r\n } else {\r\n Object.keys(this.form.controls).forEach((controlName) =>\r\n this.form?.controls[controlName].markAsTouched(),\r\n );\r\n }\r\n }\r\n }\r\n\r\n formActionIsAdd(): boolean {\r\n return this.dialogData?.action === Action.Add;\r\n }\r\n\r\n formActionIsEdit(): boolean {\r\n return this.dialogData?.action === Action.Edit;\r\n }\r\n\r\n /**\r\n * Определяет видимость элемента на основе ЧЕРНОГО списка ролей.\r\n * По умолчанию элемент ВИДИМ. Скрывается (возвращает false), если у пользователя\r\n * есть запрещенная роль или если передан маркер скрытия фичи HIDE_ROLE_MARKER.\r\n */\r\n protected isVisibleForForbiddenRoles(forbiddenRoles: string[]): boolean {\r\n // Если роль запрещена, метод roleService вернет true.\r\n // Мы инвертируем (!), чтобы видимость (isMenuVisible) стала false.\r\n return !this.roleService.hasForbiddenRole(forbiddenRoles);\r\n }\r\n\r\n /**\r\n * Определяет видимость элемента на основе БЕЛОГО списка ролей.\r\n * По умолчанию элемент СКРЫТ. Показывается (возвращает true), только если у пользователя\r\n * есть хотя бы одна из разрешенных ролей. Администратор (ADMIN) всегда видит элемент.\r\n */\r\n protected isVisibleForAllowedRoles(allowedRoles: string[]): boolean {\r\n // Проверяем, есть ли у пользователя хотя бы одна роль из разрешенного списка.\r\n // (Предполагается, что у вашего roleService есть соответствующий метод, например, hasAnyRole)\r\n return this.roleService.hasAnyRole(allowedRoles);\r\n }\r\n}\r\n","export interface IEntityAction<T> {\r\n action: EntityAction;\r\n entity: T;\r\n}\r\n\r\nexport enum EntityAction {\r\n Init = 'Инициализация',\r\n Add = 'Добавление',\r\n Edit = 'Изменение',\r\n Delete = 'Удаление'\r\n}\r\n","import { Directive, inject, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LocalStorageService, LoaderService } from '../../services';\r\nimport { NotificationService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseFilterClass implements OnDestroy {\r\n\r\n /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultDebounceTime = 500;\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","import { Directive, inject } from \"@angular/core\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { Router } from \"@angular/router\";\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseNavBarMenuClass {\r\n\r\n protected roleService = inject(RoleService);\r\n protected router = inject(Router);\r\n\r\n /** \r\n * Определяет видимость пункта меню на основе ЧЕРНОГО списка ролей.\r\n * По умолчанию пункт меню ВИДИМ. Скрывается (возвращает false), если у пользователя \r\n * есть запрещенная роль или если передан маркер скрытия фичи HIDE_ROLE_MARKER.\r\n */\r\n protected isVisibleForForbiddenRoles(forbiddenRoles: string[]): boolean {\r\n // Если роль запрещена, метод roleService вернет true. \r\n // Мы инвертируем (!), чтобы видимость (isMenuVisible) стала false.\r\n return !this.roleService.hasForbiddenRole(forbiddenRoles);\r\n }\r\n\r\n /** \r\n * Определяет видимость пункта меню на основе БЕЛОГО списка ролей.\r\n * По умолчанию пункт меню СКРЫТ. Показывается (возвращает true), только если у пользователя \r\n * есть хотя бы одна из разрешенных ролей. Администратор (ADMIN) всегда видит элемент.\r\n */\r\n protected isVisibleForAllowedRoles(allowedRoles: string[]): boolean {\r\n // Проверяем, есть ли у пользователя хотя бы одна роль из разрешенного списка.\r\n // (Предполагается, что у вашего roleService есть соответствующий метод, например, hasAnyRole)\r\n return this.roleService.hasAnyRole(allowedRoles);\r\n }\r\n\r\n /** Нажата средняя кнопка (открыть ссылку в новой вкладке). */\r\n onMiddleClick(event: MouseEvent, baseUrl: string, menu: MatMenuTrigger) {\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if (event.button === 1) {\r\n // event.preventDefault();\r\n menu.closeMenu();\r\n const urlTree = this.router.serializeUrl(\r\n this.router.createUrlTree([baseUrl]\r\n )\r\n );\r\n window.open(urlTree, '_blank');\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n constructor() { }\r\n\r\n public saveData(key: string, value: string) {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n public getData(key: string) {\r\n return localStorage.getItem(key)\r\n }\r\n public removeData(key: string) {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n public clearData() {\r\n localStorage.clear();\r\n }\r\n\r\n}\r\n","import { Directive, OnDestroy, inject, signal } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { Router } from '@angular/router';\r\nimport { Subject, Subscription, forkJoin, map, switchMap, tap } from 'rxjs';\r\n\r\nimport { LocalStorageService } from '../../services/local-storage-service';\r\nimport { DialogComponent } from '../../shared/dialog/dialog.component';\r\nimport { IContextMenuOptions, IPageState, ISortState, ITableState } from '../../shared/table';\r\nimport { ObjectKeys, SortDirection, fnCbType, fnGetCountType, fnGetDataType, fnMapEntityType, fnType } from '../../types/types';\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\n\r\nimport { LoaderService } from '../../services';\r\nimport { HIDE_ROLE_MARKER, UIKIT_NOTIFICATION_TOKEN } from '@kuzntsv/uikit';\r\n\r\n\r\n@Directive()\r\nexport class BasePageClass<T> implements OnDestroy {\r\n\r\n protected dialog = inject(MatDialog);\r\n\r\n /** Данные для табличного компонента. */\r\n data = signal<T[]>([]);\r\n /** Количество записей по фильтру. */\r\n length = signal<number>(0);\r\n\r\n entityService: any;\r\n entityType: any;\r\n entityEditComponent: any;\r\n extraData?: any;\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n dialogEditWidth = 'auto';\r\n dialogRemoveWidth = '400px';\r\n\r\n routeAddress: string = '';\r\n\r\n /** Сообщение при удалении записи(й). */\r\n removalMessage: string = '';\r\n /** Заголовок страницы. */\r\n pageTitle: string = '';\r\n\r\n /**\r\n * Создание записи: вызывается перед открытием диалога.\r\n */\r\n beforeOpenDialogOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед открытием диалога.\r\n */\r\n beforeOpenDialogOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnNewEvent: fnCbType<T>;\r\n /**\r\n * Редактирование записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnEditEvent: fnCbType<T>;\r\n\r\n editorRoles: string[] = [];\r\n executeRoles: string[] = [];\r\n /** Список ролей, для которых скрыть элемент. */\r\n hideRoles: string[] = [HIDE_ROLE_MARKER];\r\n\r\n /** Загрузка данных. */\r\n loadData$: Subject<null> = new Subject<null>();\r\n /** Загрузка количества записей. */\r\n loadLength$: Subject<null> = new Subject<null>();\r\n /** Очистка фильтра. */\r\n clearFilter$: Subject<null> = new Subject<null>();\r\n\r\n /** Очистка фильтра (для очистки присвоить пустой объект '{}'). */\r\n clearFilter: any = null;\r\n\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = false;\r\n /** Выбранные строки в таблице. */\r\n selected: T[] = [];\r\n\r\n /** Состояние сортировки, пагинации. */\r\n tableState: ITableState;\r\n\r\n /** Доступность кнопки \"Изменить\". */\r\n editBtnDisabled = true;\r\n /** Доступность кнопки \"Удалить\". */\r\n removeBtnDisabled = true;\r\n\r\n /** Разрешено ли отправлять событие rowDoubleClicked при двойном щелчке мышью. */\r\n dblClickedEventEnable = true;\r\n\r\n // Список элементов контекстного меню.\r\n opt: IContextMenuOptions<T>[] = [];\r\n\r\n // DI\r\n protected router = inject(Router);\r\n /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(UIKIT_NOTIFICATION_TOKEN);\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n this.tableState = {\r\n sortActive: this.localStorageService.getData(this.constructor.name + 'SortActive') || '',\r\n sortDirection: (this.localStorageService.getData(this.constructor.name + 'SortDirection') || '') as SortDirection,\r\n pageIndex: Number(this.localStorageService.getData(this.constructor.name + 'PageIndex')) || this.defaultPageIndex,\r\n pageSize: Number(this.localStorageService.getData(this.constructor.name + 'PageSize')) || this.defaultPageSize\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n subscribeToLoadData( fnGetData: fnGetDataType<T>, fnGetCount: fnGetCountType<T>, fnMapEntity?: fnMapEntityType<T>) {\r\n // отменять стримы, созданные ранее\r\n const subs = this.loadData$\r\n .pipe(\r\n tap(() => this.loaderService.show()),\r\n switchMap(() => fnGetData()),\r\n map(v => (fnMapEntity && Array.isArray(v)) ? v.map(fnMapEntity()) : v),\r\n )\r\n .subscribe({\r\n next: (response: T[]) => {\r\n this.data.set(response || []);\r\n this.loaderService.hide();\r\n },\r\n error: (error: any) => {\r\n this.loaderService.hide();\r\n console.log(error); \r\n const errorMessage = error.message || error;\r\n this.notificationService?.error('Произошла ошибка: ' + errorMessage, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n const subs2 = this.loadLength$\r\n .pipe(\r\n switchMap(() => fnGetCount())\r\n )\r\n .subscribe({\r\n next: (response: number) => {\r\n this.length.set(response);\r\n },\r\n error: (error: any) => {\r\n console.log(error);\r\n this.notificationService.error('Произошла ошибка: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n\r\n // загрузить данные и количество записей\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onPageChange(pageState: IPageState) {\r\n this.tableState.pageIndex = pageState.pageIndex;\r\n this.tableState.pageSize = pageState.pageSize;\r\n this.localStorageService.saveData(this.constructor.name + 'PageIndex', pageState.pageIndex.toString());\r\n this.localStorageService.saveData(this.constructor.name + 'PageSize', pageState.pageSize.toString());\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onSortChange(sortState: ISortState) {\r\n this.tableState.sortActive = sortState.sortActive;\r\n this.tableState.sortDirection = sortState.sortDirection;\r\n this.localStorageService.saveData(this.constructor.name + 'SortActive', sortState.sortActive);\r\n this.localStorageService.saveData(this.constructor.name + 'SortDirection', sortState.sortDirection);\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n entityFactory(type: new () => T): T {\r\n return new type();\r\n }\r\n\r\n /** Событие изменение выбранных записей. */\r\n onSelectionChange(selected: T[]) {\r\n this.selected = selected;\r\n this.editBtnDisabledUpdate(this.selected);\r\n this.removeBtnDisabledUpdate(this.selected);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Изменить\" - вызывается при изменении выбранных записей. */\r\n editBtnDisabledUpdate(selected: T[]) {\r\n this.editBtnDisabled = !(selected && selected.length === 1);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Удалить\" - вызывается при изменении выбранных записей. */\r\n removeBtnDisabledUpdate(selected: T[]) {\r\n this.removeBtnDisabled = !(selected && selected.length > 0);\r\n }\r\n\r\n /** Событие двойной клик. */\r\n onRowDoubleClicked() {\r\n this.editEvent();\r\n }\r\n\r\n /** Событие создание. */\r\n newEvent() {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Add, entity: new this.entityType(null) };\r\n\r\n // Назначить значения полей объекта перед открытием диалога.\r\n if (this.beforeOpenDialogOnNewEvent) {\r\n this.beforeOpenDialogOnNewEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnNewEvent)\r\n this.beforeSaveOnNewEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.newObject(result.entity)\r\n .subscribe({\r\n next: (obj: any) => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnNewEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись добавлена.');\r\n }\r\n this.afterSaveOnNewEvent(callback.bind(this), obj, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService?.success('Запись добавлена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.error('Произошла ошибка при добавлении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription.add(subs2);\r\n } else {\r\n this.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n\r\n /** Событие редактирование. */\r\n editEvent() {\r\n if (this.selected && this.selected.length === 1) {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Edit, entity: this.selected[0] };\r\n\r\n // Назначить значения полей объекта перед открытием диалога.\r\n if (this.beforeOpenDialogOnEditEvent) {\r\n this.beforeOpenDialogOnEditEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnEditEvent)\r\n this.beforeSaveOnEditEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.editObject(result.entity)\r\n .subscribe({\r\n next: () => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnEditEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись изменена.');\r\n }\r\n this.afterSaveOnEditEvent(callback.bind(this), result.entity, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись изменена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.error('Произошла ошибка при изменении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription.add(subs2);\r\n } else {\r\n this.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n }\r\n\r\n /** Событие удаление. */\r\n removeEvent() {\r\n // если выбрана запись(и)\r\n if (this.selected && this.selected.length > 0) {\r\n const dialogRef = this.openDialogRemoveConfirm(this.removalMessage);\r\n if (dialogRef) {\r\n const subs = dialogRef.afterClosed().subscribe((result: any) => {\r\n // при подтверждении возвращается 'delete'\r\n if (result === 'delete') {\r\n // готовим объект с запросами на удаление\r\n const sourcesObject: ObjectKeys = {};\r\n this.selected.forEach((item, index) => sourcesObject['obj' + index] = this.entityService.deleteObject(item));\r\n // ждем, когда выполнятся все запросы\r\n const subs = forkJoin(sourcesObject)\r\n .subscribe({\r\n next: () => {\r\n this.refreshEvent();\r\n this.notificationService.success('Выбранные записи удалены.');\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService?.error('Произошла ошибка при удалении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription.add(subs2);\r\n }\r\n }\r\n }\r\n\r\n /** Событие обновления данных. */\r\n refreshEvent() {\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n /** Событие очистки фильтра. */\r\n clearEvent() {\r\n this.clearFilter$.next(null);\r\n this.clearFilter = {};\r\n }\r\n\r\n /** Изменение сообщения об удалении. */\r\n onRemovalMessageChange(message: string) {\r\n this.removalMessage = message;\r\n }\r\n\r\n /** Изменение заголовка страницы. */\r\n onPageTitleChange(title: string) {\r\n this.pageTitle = title;\r\n }\r\n\r\n openDialog(entityComponent: any, data: IEditDialogData<T>, dialog: any) {\r\n // create dialog config\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.disableClose = true;\r\n dialogConfig.autoFocus = true;\r\n dialogConfig.width = this.dialogEditWidth;\r\n dialogConfig.data = data;\r\n dialogConfig.panelClass = this.entityType.name + '-edit-dialog';\r\n // return dialog\r\n return dialog.open(entityComponent, dialogConfig);\r\n }\r\n\r\n openDialogRemoveConfirm(removalMessage: string): MatDialogRef<DialogComponent> | undefined {\r\n let message = 'Вы хотите удалить ';\r\n message += removalMessage ?\r\n removalMessage :\r\n this.allowMultiSelect ? `выбранные записи (${this.selected.length})?` : 'выбранную запись?';\r\n return this.dialog.open(DialogComponent, {\r\n width: this.dialogRemoveWidth,\r\n data: {\r\n id: 'delete',\r\n title: 'Подтверждение',\r\n message: message,\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Удалить'\r\n }\r\n });\r\n }\r\n\r\n // contextMenu: При щелчке ПКМ открыть в новой вкладке.\r\n protected onMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T, contextMenu: MatMenuTrigger) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\r\n contextMenu.closeMenu();\r\n // Converts the route into a string that can be used\r\n // with the window.open() function\r\n const url = this.router.serializeUrl(\r\n queryParamName && queryParamValue ?\r\n this.router.createUrlTree([baseUrl], { queryParams: { [queryParamName]: item[queryParamValue as keyof T] } })\r\n : this.router.createUrlTree([baseUrl])\r\n );\r\n window.open(url, '_blank');\r\n }\r\n };\r\n }\r\n\r\n // Action в таблице: При щелчке ПКМ открыть в новой вкладке.\r\n protected onActionMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\r\n // Converts the route into a string that can be used\r\n // with the window.open() function\r\n const url = this.router.serializeUrl(\r\n queryParamName && queryParamValue ?\r\n this.router.createUrlTree([baseUrl], { queryParams: { [queryParamName]: item[queryParamValue as keyof T] } })\r\n : this.router.createUrlTree([baseUrl])\r\n );\r\n window.open(url, '_blank');\r\n }\r\n };\r\n }\r\n\r\n protected dateToString(date: string | number | Date) {\r\n return date ? (new Date(date)).toLocaleString('ru-RU', { timeZone: 'Europe/Samara' }) : null; // MSK+01\r\n }\r\n\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { BaseClass } from './base-class';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport abstract class BaseServiceClass<T extends BaseClass> {\r\n abstract baseRoute: string;\r\n abstract entityType: any;\r\n\r\n protected countRoute = 'count';\r\n\r\n protected pageIndexParam = 'page';\r\n protected pageSizeParam = 'limit';\r\n protected sortColumnParam = 'column';\r\n protected directionParam = 'direction';\r\n\r\n protected http = inject(HttpClient);\r\n\r\n getObjects(): Observable<T[]> {\r\n return this.http.get<T[]>(this.baseRoute)\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n getObject(id: number): any {\r\n return this.http.get<T>(this.baseRoute + id)\r\n .pipe(map(data => new this.entityType(data).deserialize(data)));\r\n }\r\n\r\n getCount(): Observable<number> {\r\n return this.http.get<number>(this.baseRoute + this.countRoute);\r\n }\r\n\r\n getObjectsByPaging(pageIndex: number, pageSize: number, sortColumn: string, direction: string): Observable<T[]> {\r\n const params = this.getParams(pageIndex, pageSize, sortColumn, direction);\r\n return this.http.get<T[]>(this.baseRoute, { params })\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n newObject(entity: T): any {\r\n return this.http.post(this.baseRoute, entity);\r\n }\r\n\r\n editObject(entity: T): any {\r\n return this.http.put(this.baseRoute + entity.id, entity);\r\n }\r\n\r\n deleteObject(entity: T): any {\r\n return this.http.delete(this.baseRoute + entity.id);\r\n }\r\n\r\n protected getParams(pageIndex: number, pageSize: number, sortColumn: string, direction: string): HttpParams {\r\n let params = new HttpParams();\r\n if (pageIndex + 1)\r\n // переход от индекса к номеру страницы\r\n params = params.append(this.pageIndexParam, pageIndex + 1);\r\n if (pageSize)\r\n params = params.append(this.pageSizeParam, pageSize);\r\n if (sortColumn)\r\n params = params.append(this.sortColumnParam, sortColumn);\r\n if (direction)\r\n params = params.append(this.directionParam, direction);\r\n return params;\r\n }\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safe'\r\n})\r\nexport class SafePipe implements PipeTransform {\r\n\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(url: string) {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'time'\r\n})\r\nexport class TimePipe implements PipeTransform {\r\n\r\n transform(value: number): string {\r\n // const hour = Math.abs(value) >= 60 ? Math.round(value / 60) + 'ч.' : '';\r\n // const minute = ' ' + Math.abs(value % 60) + 'м.';\r\n // return value === 0 ? '0' : hour + ' ' + minute;\r\n\r\n const hour = Math.abs(value) >= 60 ? Math.floor(Math.abs(value) / 60).toString().padStart(2,'0') : '00';\r\n const minute = Math.abs(value % 60).toString().padStart(2,'0');\r\n const time = hour + ':' + minute;\r\n return value < 0 ? '-' + time : time;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate'\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n // Usage:\r\n // {{ str | truncate:[20] }} // or\r\n // {{ str | truncate:[20, '...'] }} // or|\r\n transform(value: string, args: any[]): string {\r\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\r\n const trail = args.length > 1 ? args[1] : '...';\r\n return value.length > limit ? value.substring(0, limit) + trail : value;\r\n }\r\n\r\n}\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { MatAnchor } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { BaseNavBarMenuClass } from '../../base';\r\nimport { SafePipe } from '../../pipes';\r\nimport { DialogComponent } from '../dialog';\r\nimport { filter, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ngx-uik-navbar',\r\n templateUrl: 'navbar.html',\r\n styleUrls: ['./navbar.scss'],\r\n imports: [MatAnchor, MatIcon, MatTooltip, SafePipe],\r\n})\r\nexport class NavBarComponent extends BaseNavBarMenuClass {\r\n /** Видимость панели, когда loggedIn === false. */\r\n visibleOnLogout = input<boolean>(false);\r\n /** Видимость аватара. */\r\n visibleAvatar = input<boolean>(true);\r\n /** Видимость кнопки \"Выйти\". */\r\n visibleLogoutBtn = input<boolean>(true);\r\n\r\n /** Признак, что пользователь авторизован. */\r\n loggedIn = input<boolean>(false);\r\n /** ФИО пользователя. */\r\n fioUser = input<string>('');\r\n /** Всплывающая подсказка о пользователе. */\r\n userTooltip = input<string>('');\r\n /** URL аватара */\r\n avatarURL = input<string>('');\r\n\r\n /** Нажата кнопка \"Выйти\". */\r\n logout = output<string>();\r\n\r\n private readonly dialog = inject(MatDialog);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n onLogout() {\r\n this.logout.emit(this.router.url);\r\n }\r\n\r\n openDialog(): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n width: '400px',\r\n data: {\r\n id: 'logout',\r\n title: 'Подтверждение',\r\n message: 'Вы хотите выйти?',\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Выйти',\r\n },\r\n });\r\n\r\n dialogRef\r\n .afterClosed()\r\n .pipe(\r\n take(1), // Берем только одно значение (когда закрылся)\r\n filter((id) => !!id), // Пропускаем дальше, только если id существует (нажали \"Выйти\")\r\n )\r\n .subscribe((id: any) => {\r\n if (id) {\r\n this.onLogout();\r\n }\r\n });\r\n }\r\n}\r\n","@if (visibleOnLogout() || loggedIn()) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if (visibleAvatar() && (loggedIn() === false || !avatarURL)) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">Выйти <mat-icon>logout</mat-icon></a>\r\n }\r\n </nav>\r\n}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ngx-uik-not-found',\r\n templateUrl: './not-found.component.html',\r\n styleUrls: ['./not-found.component.css'],\r\n standalone: true\r\n})\r\nexport class NotFoundComponent {\r\n\r\n}\r\n","<div class=\"center\">\r\n <h3 class=\"mat-display-1\">Страница не найдена</h3>\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'ngx-uik-loader',\r\n template: `\r\n <div class=\"loading-indicator\" mat-dialog-content>\r\n <mat-progress-spinner mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </div>\r\n `,\r\n styles: [`\r\n /* Разместить по центру */\r\n .loading-indicator {\r\n position: fixed;\r\n z-index: 999;\r\n height: 2em;\r\n width: 2em;\r\n overflow: initial;\r\n margin: auto;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n\r\n /* Заблокировать оверлей */\r\n .loading-indicator:before {\r\n content: '';\r\n display: block;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0,0,0,0.3);\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatProgressSpinner]\r\n})\r\n\r\nexport class ProgressSpinnerComponent implements AfterViewInit {\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n\r\n ngAfterViewInit() {\r\n this.cdRef.detectChanges();\r\n }\r\n}\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { Component, effect, input, linkedSignal, OnDestroy, OnInit, output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule, MatOption } from '@angular/material/autocomplete';\r\nimport { MatError, MatFormField, MatHint, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\r\n\r\nimport { SelectItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-autocomplete-with-vs',\r\n templateUrl: './select-autocomplete-with-vs.component.html',\r\n styleUrl: './select-autocomplete-with-vs.component.css',\r\n imports: [FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatHint, MatError, MatOption, MatIcon,\r\n MatFormField, ScrollingModule, MatInput, MatLabel]\r\n})\r\nexport class BaseSelectAutocompleteWithVsComponent implements OnInit, OnDestroy {\r\n // https://stackblitz.com/edit/autocomplete-with-virtual-scroll-dc9u2g\r\n\r\n // Все элементы\r\n items = input<SelectItem[]>([]);\r\n // Выбранный элемент (входной параметр)\r\n selectedItemInput = input<SelectItem | undefined>(undefined);\r\n // Заголовок\r\n title = input<string>('');\r\n // Видимость\r\n isVisible = input<boolean>(true);\r\n // Обязательность\r\n isRequired = input<boolean>(false);\r\n // Доступность\r\n isDisabled = input<boolean>(false);\r\n // Доступность\r\n width = input<string>('200');\r\n\r\n // Выбранный элемент\r\n selectedItem = linkedSignal(() => this.selectedItemInput());\r\n // Событие изменения выбранного элемента\r\n selectedItemChange = output<string>();\r\n\r\n public height: string = '200px';\r\n // input элемент\r\n inputCtrl = new FormControl();\r\n // отфильтрованные (отображаемые) элементы\r\n filteredItems: SelectItem[] = [];\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n console.log('ITEMS =', this.items());\r\n //this.filteredItems = this.items();\r\n\r\n console.log('selectedItem =', this.selectedItemInput());\r\n if (this.items().length > 0) {\r\n console.log('filteredItems SET');\r\n this.setFileredItems(this.items());\r\n this.inputCtrl.setValue(this.selectedItemInput());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n // Listen for changes to the input\r\n const subs = this.inputCtrl.valueChanges\r\n .pipe(\r\n startWith(''),\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n // Note: If the option value is bound to object, after selecting the option\r\n // Note: the value will change from string to {}. We want to perform search\r\n // Note: only when the type is string (no match)\r\n //filter(q => typeof q === 'string'),\r\n //tap((v) => console.log('v=', v)),\r\n map((value) => {\r\n // Filter the options\r\n console.log('typeof value =', typeof value);\r\n\r\n if (typeof value === 'undefined') {\r\n this.setFileredItems(this.items());\r\n } else {\r\n if (typeof value !== 'object') {\r\n console.log('v1=', value);\r\n this.setFileredItems(this.items()\r\n .filter(option => option.viewValue.toLowerCase().includes(value.toLowerCase())));\r\n } else {\r\n // typeof value === 'object'\r\n console.log('v2=', value);\r\n if (value) {\r\n // this.predmet = value;\r\n this.setFileredItems(this.items()\r\n .filter((option) => option.viewValue.toLowerCase().includes(value.viewValue.toLowerCase())));\r\n console.log('v3=', value);\r\n } else {\r\n this.setFileredItems(this.items());\r\n console.log('v4=', value);\r\n }\r\n }\r\n }\r\n\r\n })\r\n )\r\n .subscribe();\r\n this.subscription.add(subs);\r\n\r\n if (this.isDisabled()) {\r\n this.inputCtrl.disable();\r\n } else {\r\n this.inputCtrl.enable();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onSelectedItemChange(item: any) {\r\n console.log(\"onSelectedItemChange, item=\", item);\r\n this.selectedItem.set(item);\r\n this.selectedItemChange.emit(item);\r\n }\r\n\r\n onClearClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.inputCtrl.setValue('');\r\n }\r\n\r\n displayWithFn(lookup: any) {\r\n return lookup ? lookup.viewValue : null;\r\n }\r\n\r\n private setFileredItems(items: SelectItem[]) {\r\n this.filteredItems = items;\r\n // Recompute how big the viewport should be.\r\n // eslint-disable-next-line no-magic-numbers\r\n if (items.length < 4) {\r\n // eslint-disable-next-line no-magic-numbers\r\n this.height = items.length * 50 + 'px';\r\n } else {\r\n this.height = '200px';\r\n }\r\n console.log('update filteredItems =', this.filteredItems);\r\n }\r\n}\r\n","@if (isVisible()) {\r\n <mat-form-field [style.width.px]=\"width()\">\r\n <mat-label>{{ title() }}</mat-label>\r\n <input type=\"text\"\r\n [placeholder]=title()\r\n aria-label=\"Number\"\r\n matInput\r\n (ngModelChange)=\"onSelectedItemChange($event)\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [required]=\"isRequired() ? 'required' : ''\"\r\n >\r\n @if (!isDisabled && selectedItem()) {\r\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClearClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWithFn\" showPanel=\"true\">\r\n <cdk-virtual-scroll-viewport class=\"autocomplete-test-viewport\" [style.height]=\"height\" itemSize=\"25\">\r\n <mat-option *cdkVirtualFor=\"let option of filteredItems\" [value]=\"option\" class=\"autocomplete-item\">\r\n {{option.viewValue}}\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n @if (inputCtrl.invalid) {\r\n <mat-error>Введите {{title()}}</mat-error>\r\n }\r\n @if (!inputCtrl.value) {\r\n <mat-hint>Начните вводить ...</mat-hint>\r\n }\r\n </mat-form-field>\r\n}","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\n\r\nimport { Component, effect, input, output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatOptgroup, MatOption } from '@angular/material/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatSelect } from '@angular/material/select';\r\n\r\nimport { SelectGroup } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-with-group',\r\n templateUrl: './select-with-group.component.html',\r\n styleUrls: ['./select-with-group.component.css'],\r\n imports: [FormsModule, ReactiveFormsModule, MatIcon, MatOption, MatOptgroup, MatSelect, MatFormField, MatLabel]\r\n})\r\nexport class BaseSelectWithGroupComponent {\r\n\r\n // Все группы\r\n groups = input<SelectGroup[]>([]);\r\n // Выбранные элементы, ключи (BaseSelectItem.value)\r\n selectedItems = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n control = new FormControl<number[]>([]);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.groups().length > 0) {\r\n this.control.setValue(this.selectedItems().map(i => Number(i)));\r\n }\r\n });\r\n }\r\n\r\n selectionChange($event: any) {\r\n this.selectedItemsChange.emit($event.value.map((i: number) => i.toString()));\r\n }\r\n\r\n onClearClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n // this.control.setValue('');\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"select-with-group\" appearance=\"fill\">\r\n <mat-label>{{ title() }}</mat-label>\r\n <mat-select [formControl]=\"control\" (selectionChange)=\"selectionChange($event)\" multiple>\r\n @for (group of groups(); track group) {\r\n <mat-optgroup [label]=\"group.name\">\r\n @for (item of group.items; track item) {\r\n <mat-option [value]=\"item.value\" >\r\n {{item.viewValue}}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }\r\n\r\n </mat-select>\r\n @if (control.value && control.value!.length > 0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClearClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { AfterViewInit, Component, OnDestroy, OnInit, effect, input, linkedSignal, output, viewChild } from '@angular/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\r\nimport {\r\n MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\r\n MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef,\r\n MatTable, MatTableDataSource, MatTableModule\r\n} from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { RouterLink } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { IColumnOptions } from './models/column-options.interface';\r\nimport { IContextMenuOptions } from './models/context-menu-options.interface';\r\nimport { IPageState, ISortState, ITableState } from './models/table-state';\r\n\r\n@Component({\r\n selector: 'ngx-uik-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n imports: [MatTable, MatSort, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCheckbox, MatCellDef, MatCell,\r\n MatSortHeader, MatIcon, RouterLink, MatNoDataRow, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow,\r\n MatMenuTrigger, MatMenu, MatMenuContent, MatDivider, MatMenuItem, MatPaginator, MatFooterRowDef, MatFooterRow,\r\n MatFooterCellDef, MatFooterCell, MatTableModule, MatTooltipModule, MatIconButton]\r\n})\r\nexport class TableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\r\n /** Отображаемые данные. */\r\n data = input<T[]>([]);\r\n /** Количество записей. */\r\n length = input<number>(0);\r\n /** Настройки колонок. */\r\n columnOptions = input<IColumnOptions<T>[]>([]);\r\n /** Состояние сортировки, пагинации. */\r\n tableState = input.required<ITableState>();\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = input<boolean>(false);\r\n /** Список элементов контекстного меню. */\r\n opt = input<IContextMenuOptions<T>[]>([]);\r\n /** Отправка события rowDoubleClicked (при двойном щелчке мышью) отключена. */\r\n rowDblClickedDisable = input<boolean>(false);\r\n /** Отображать строку с итогом. */\r\n footer = input<boolean>(false);\r\n\r\n /** Изменение страницы. */\r\n pageStateChange = output<IPageState>();\r\n /** Изменение сортировки. */\r\n sortStateChange = output<ISortState>();\r\n /** Изменение выбранных записей. */\r\n selectionChange = output<T[]>();\r\n /** Двойной щелчек ЛКМ*/\r\n rowDoubleClicked = output<T>();\r\n\r\n readonly sort = viewChild(MatSort);\r\n readonly paginator = viewChild(MatPaginator);\r\n readonly contextMenu = viewChild(MatMenuTrigger);\r\n\r\n pageState = linkedSignal<IPageState>(() => {\r\n return { pageIndex: this.tableState().pageIndex, pageSize: this.tableState().pageSize };\r\n });\r\n\r\n sortState = linkedSignal<ISortState>(() => {\r\n return { sortActive: this.tableState().sortActive, sortDirection: this.tableState().sortDirection };\r\n });\r\n\r\n /** Выбранная строка, для которого будет показываться меню при нажатии правой кнопки мыши. */\r\n itemForMenu?: T;\r\n /** Позиция в которой отображается контекстное меню. */\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n /** Источник данных для отображения. */\r\n dataSource = new MatTableDataSource<T>();\r\n\r\n /** Выбранные записи. */\r\n selection: SelectionModel<T> = new SelectionModel<T>();\r\n\r\n /** Список отображаемых колонок (формируется из @columnOptions). */\r\n displayedColumns?: string[];\r\n\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.dataSource.data = this.data();\r\n\r\n // сохранить выделенные строки, если они все еще есть в данных\r\n const selected = this.selection.selected;\r\n this.selection.clear();\r\n this.data().filter(v => selected.map(s => JSON.stringify(s)).includes(JSON.stringify(v))).map(d => {\r\n this.selection.select(d);\r\n });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.displayedColumns = ['select'].concat(this.columnOptions()?.filter(c => !c.hide).map((item) => item.name) || []);\r\n\r\n // пересоздаем, т.к. параметр allowMultiSelect появляется только сейчас\r\n this.selection = new SelectionModel<T>(this.allowMultiSelect());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // подписи элементов управления пагинатора (MatPaginatorIntl)\r\n const paginator = this.paginator();\r\n if (paginator) {\r\n paginator._intl.itemsPerPageLabel = 'Записей на странице';\r\n paginator._intl.firstPageLabel = 'Первая страница';\r\n paginator._intl.previousPageLabel = 'Предыдущая страница';\r\n paginator._intl.nextPageLabel = 'Следующая страница';\r\n paginator._intl.lastPageLabel = 'Последняя страница';\r\n\r\n // изменение пагинации\r\n const subs = paginator.page.subscribe(page => {\r\n const pageState = {\r\n pageIndex: page.pageIndex,\r\n pageSize: page.pageSize\r\n } as IPageState;\r\n this.pageState.set(pageState);\r\n this.pageStateChange.emit(pageState);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n // изменение сортировки\r\n const sortValue = this.sort();\r\n if (sortValue) {\r\n const subs = sortValue.sortChange\r\n .subscribe(sort => {\r\n const sortState = {\r\n sortActive: sort.active,\r\n sortDirection: sort.direction\r\n } as ISortState;\r\n this.sortState.set(sortState);\r\n this.sortStateChange.emit(sortState);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n // изменение выбранных записей\r\n if (this.selection) {\r\n const subs = this.selection.changed.subscribe(change => {\r\n this.selectionChange.emit(change.source.selected);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n }\r\n\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.dataSource.data.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n console.log(this.selection.isMultipleSelection());\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.dataSource.data.forEach(row => this.selection.select(row));\r\n }\r\n }\r\n\r\n /** При щелчке по строке. */\r\n onRowClicked(row: T) {\r\n // выделение строки при щелчке по строке\r\n if (this.selection.isSelected(row)) {\r\n this.selection.deselect(row);\r\n } else {\r\n this.selection.select(row);\r\n }\r\n }\r\n\r\n /** При двойном щелчке по строке. */\r\n onRowDblClicked(row: T) {\r\n // выделение строки при двойном щелчке по строке\r\n this.selection.clear();\r\n this.selection.select(row);\r\n if (!this.rowDblClickedDisable())\r\n this.rowDoubleClicked.emit(row);\r\n }\r\n\r\n /** При вызове контекстного меню. */\r\n onContextMenu(event: MouseEvent, itemForMenu: T | undefined) {\r\n if (this.opt() && this.opt().length === 0) {\r\n // если нет пунктов меню, то не показываем меню\r\n return;\r\n }\r\n event.preventDefault();\r\n this.itemForMenu = itemForMenu;\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n // как это (menuData) использовать в шаблоне не понятно, поэтому использую this.itemForMenu\r\n // https://www.concretepage.com/angular-material/passing-data-to-mat-menu-angular-material\r\n const contextMenu = this.contextMenu();\r\n if (contextMenu) {\r\n contextMenu.menuData = { itemForMenu };\r\n contextMenu.menu?.focusFirstItem('mouse');\r\n contextMenu.openMenu();\r\n }\r\n }\r\n\r\n getTotal(columnName: string) {\r\n const arr = this.dataSource.data\r\n .filter(t => typeof t[columnName as keyof T] === 'number')\r\n .map(t => t[columnName as keyof T]);\r\n if (arr.length === 0)\r\n return ''\r\n else\r\n return arr.reduce((acc, value) => acc + <number>value, 0);\r\n }\r\n}\r\n","<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 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 showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\nimport { ProgressSpinnerComponent } from '../shared';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class LoaderService {\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n private readonly overlay = inject(Overlay);\r\n\r\n public show() {\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create();\r\n }\r\n const spinnerOverlayPortal = new ComponentPortal(ProgressSpinnerComponent);\r\n // Исправление ошибки Expression has changed after it was checked\r\n setTimeout(() => {\r\n if (!this.overlayRef?.hasAttached()) {\r\n this.overlayRef?.attach(spinnerOverlayPortal);\r\n }\r\n });\r\n }\r\n\r\n public hide() {\r\n if (this.overlayRef) {\r\n this.overlayRef.detach();\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { API_NAME } from '@kuzntsv/uikit';\r\n\r\n@Injectable({\r\n providedIn: 'root' // Сервис будет доступен глобально во всем приложении\r\n})\r\nexport class SecureImageService {\r\n private readonly http = inject(HttpClient);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n /**\r\n * Загружает защищенное изображение и возвращает SafeUrl\r\n */\r\n getSecureUrl(relativeUrl: string | null | undefined, apiKey: string = 'default'): Observable<SafeUrl | string> {\r\n if (!relativeUrl) {\r\n return of('');\r\n }\r\n\r\n const context = new HttpContext().set(API_NAME, apiKey);\r\n\r\n return this.http.get(relativeUrl, { responseType: 'blob', context }).pipe(\r\n map((blob) => {\r\n const objectUrl = URL.createObjectURL(blob);\r\n return this.sanitizer.bypassSecurityTrustUrl(objectUrl);\r\n }),\r\n catchError((err) => {\r\n console.error(`[SecureImageService] Ошибка загрузки картинки с API \"${apiKey}\":`, err);\r\n return of(''); \r\n })\r\n );\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportService {\r\n\r\n // Экспорт в CSV\r\n exportCSV(data: any, filename = 'data', arrHeader: any, newHeaders: any) {\r\n const csvData = this.convertToCSV(data, arrHeader, newHeaders);\r\n console.log(csvData);\r\n const blob = new Blob(['\\ufeff' + csvData], { type: 'text/csv;charset=utf-8;' });\r\n const dwldLink = document.createElement('a');\r\n const url = URL.createObjectURL(blob);\r\n const isSafariBrowser = navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\r\n if (isSafariBrowser) { //if Safari open in new window to save file with random filename.\r\n dwldLink.setAttribute('target', '_blank');\r\n }\r\n dwldLink.setAttribute('href', url);\r\n dwldLink.setAttribute('download', filename + '.csv');\r\n dwldLink.style.visibility = 'hidden';\r\n document.body.appendChild(dwldLink);\r\n dwldLink.click();\r\n document.body.removeChild(dwldLink);\r\n }\r\n\r\n convertToCSV(objArray: any, headerList: any, newHeaders: any) {\r\n const array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;\r\n let str = '';\r\n let row = 'S.No,';\r\n for (const index in newHeaders) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n row += newHeaders[index] + ',';\r\n }\r\n }\r\n row = row.slice(0, -1);\r\n str += row + '\\r\\n';\r\n for (let i = 0; i < array.length; i++) {\r\n let line = (i + 1) + '';\r\n for (const index in headerList) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n const head = headerList[index];\r\n line += ',' + array[i][head];\r\n }\r\n }\r\n str += line + '\\r\\n';\r\n }\r\n return str;\r\n }\r\n\r\n}\r\n","import { Injectable, inject, NgZone } from \"@angular/core\";\r\nimport { Observable, ReplaySubject } from \"rxjs\";\r\n\r\nimport { SseUser } from \"./models/sse-user\";\r\nimport { Topic } from \"./models/topic\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SseService<T> {\r\n\r\n private zone = inject(NgZone);\r\n\r\n private eventSource: EventSource | null = null;\r\n private isConnected = false;\r\n\r\n constructor() { }\r\n\r\n createSseEventSource(baseUrl: string, user: SseUser, topic: Topic): Observable<T> {\r\n const subject = new ReplaySubject<T>(1);\r\n\r\n // Close any existing connection\r\n this.closeSseEventSource();\r\n\r\n const topicUri = topic.getTopic(baseUrl, user);\r\n // environment.sse_url\r\n this.eventSource = new EventSource(topicUri\r\n //, {withCredentials: true}\r\n );\r\n\r\n if (this.eventSource) {\r\n this.isConnected = true;\r\n\r\n // Listen for messages\r\n this.eventSource.onmessage = (event: MessageEvent) => {\r\n console.log(event);\r\n const messageData: T = JSON.parse(event.data);\r\n this.zone.run(() => {\r\n subject.next(messageData);\r\n });\r\n };\r\n this.eventSource.onopen = () => {\r\n console.log('SSE connection opened.');\r\n };\r\n // Process error\r\n this.eventSource.onerror = (error: any) => {\r\n console.error('SSE error:', error);\r\n this.reconnectOnError(baseUrl, user, topic, subject);\r\n };\r\n }\r\n return subject.asObservable();\r\n }\r\n\r\n private reconnectOnError(baseUrl: string, user: SseUser, topic: Topic, subject: ReplaySubject<T>): void {\r\n\r\n this.closeSseEventSource();\r\n if (this.isConnected) return; // Prevent duplicate connections\r\n\r\n console.log('Reconnecting to SSE in 1 second...');\r\n setTimeout(() => {\r\n this.zone.run(() => {\r\n this.createSseEventSource(baseUrl, user, topic).subscribe(subject);\r\n });\r\n }, 1000);\r\n }\r\n\r\n closeSseEventSource(): void {\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n this.eventSource = null;\r\n this.isConnected = false;\r\n console.log('SSE Connection closed');\r\n }\r\n }\r\n}","import { Component, inject, input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { finalize } from 'rxjs';\r\n\r\nimport { Authenticate } from '../../models/authenticate';\r\nimport { AuthService, UIKIT_NOTIFICATION_TOKEN } from '@kuzntsv/uikit';\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\nimport { PermitFormComponent } from '../permit-form/permit-form.component';\r\nimport { LoaderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-page',\r\n templateUrl: 'login-page.component.html',\r\n styleUrls: ['login-page.component.scss'],\r\n imports: [LoginFormComponent, PermitFormComponent],\r\n})\r\nexport class LoginPageComponent implements OnInit {\r\n pending: boolean = false;\r\n error: string = '';\r\n isKiosk: boolean = false;\r\n /**\r\n * Идентификатор АС получаем автоматически из ActivatedRoute Data!\r\n * (Для этого в настройках роутера должен быть включен withComponentInputBinding())\r\n */\r\n idCas = input<number>(0);\r\n\r\n private readonly authService = inject(AuthService);\r\n private readonly router = inject(Router);\r\n private readonly loaderService = inject(LoaderService);\r\n private readonly notificationService = inject(UIKIT_NOTIFICATION_TOKEN, {\r\n optional: true,\r\n });\r\n\r\n ngOnInit() {\r\n if (\r\n localStorage.getItem('id_human') ||\r\n localStorage.getItem('kiosk-keyboard-layout')\r\n ) {\r\n // this.isKiosk = true;\r\n }\r\n }\r\n\r\n onSubmit($event: Authenticate) {\r\n this.loaderService.show();\r\n this.pending = true;\r\n\r\n this.authService\r\n .login($event.username, $event.password, this.idCas())\r\n .pipe(\r\n // Очищаем состояние лоадеров ВСЕГДА (и при успехе, и при ошибке)\r\n finalize(() => {\r\n this.pending = false;\r\n this.loaderService.hide();\r\n }),\r\n )\r\n .subscribe({\r\n next: () => this.handleSuccessLogin(),\r\n error: (error) => {\r\n const errorMsg =\r\n error.error?.message || error.message || 'Ошибка при авторизации';\r\n this.notificationService?.error(errorMsg, 0);\r\n },\r\n });\r\n }\r\n\r\n onSubmitPermit($event: string) {\r\n const permit = $event;\r\n\r\n this.loaderService.show();\r\n this.pending = true;\r\n\r\n this.authService\r\n .loginByPermit(permit, this.idCas())\r\n .pipe(\r\n // Очищаем состояние лоадеров ВСЕГДА (и при успехе, и при ошибке)\r\n finalize(() => {\r\n this.pending = false;\r\n this.loaderService.hide();\r\n }),\r\n )\r\n .subscribe({\r\n next: () => this.handleSuccessLogin(),\r\n error: (error) => {\r\n const errorMsg =\r\n error.error?.message || error.message || 'Ошибка при авторизации';\r\n this.notificationService?.error(errorMsg, 0);\r\n },\r\n });\r\n }\r\n\r\n private handleSuccessLogin(): void {\r\n this.notificationService?.success('Успешная авторизация');\r\n\r\n // ЛОГИКА ВОЗВРАТА ПОСЛЕ УСПЕШНОГО ЛОГИНА\r\n if (this.router) {\r\n // Извлекаем returnUrl из текущего query-параметра текущего маршрута\r\n const currentUrlTree = this.router.parseUrl(this.router.url);\r\n const returnUrl = currentUrlTree.queryParamMap.get('returnUrl');\r\n\r\n if (returnUrl) {\r\n // Декодируем и перенаправляем пользователя туда, где он был\r\n this.router.navigateByUrl(decodeURIComponent(returnUrl));\r\n return;\r\n }\r\n\r\n // Если returnUrl нет, идем на главную\r\n this.router.navigate(['/']);\r\n }\r\n\r\n // Логика перенаправления обратно: достаем returnUrl из текущих query-параметров страницы логина\r\n const currentUrlTree = this.router.parseUrl(this.router.url);\r\n const returnUrl = currentUrlTree.queryParamMap.get('returnUrl');\r\n\r\n if (returnUrl) {\r\n this.router.navigateByUrl(decodeURIComponent(returnUrl));\r\n }\r\n {\r\n this.router.navigate(['/']); // дефолтный роут, если returnUrl нет\r\n }\r\n }\r\n}\r\n","@if (!isKiosk) {\r\n <ngx-uik-login-form\r\n (submitted)=\"onSubmit($event)\"\r\n [pending]=\"pending\"\r\n [errorMessage]=\"error\">\r\n </ngx-uik-login-form>\r\n }\r\n @if (isKiosk) {\r\n <ngx-uik-permit-form\r\n (submitted)=\"onSubmitPermit($event)\"\r\n >\r\n </ngx-uik-permit-form>\r\n }","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfRole]',\r\n standalone: true\r\n})\r\nexport class DisableIfRoleDirective {\r\n readonly forbiddenRoles = input<string[]>([], { alias: 'ngxUikDisableIfRole' });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n // Спрашиваем у сервиса, заблокирована ли данная конфигурация ролей\r\n const shouldDisable = this.roleService.hasForbiddenRole(this.forbiddenRoles());\r\n\r\n\r\n // 2. Безопасное управление атрибутом для любых элементов\r\n const nativeEl = this.el.nativeElement;\r\n \r\n if ('disabled' in nativeEl) {\r\n nativeEl.disabled = shouldDisable;\r\n } else {\r\n // Для элементов вроде <a>, у которых нет свойства disabled в DOM API\r\n if (shouldDisable) {\r\n nativeEl.setAttribute('disabled', 'true');\r\n } else {\r\n nativeEl.removeAttribute('disabled');\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfForbiddenRole]',\r\n standalone: true,\r\n})\r\nexport class HideIfForbiddenRoleDirective {\r\n readonly forbiddenRoles = input<string[]>([], {\r\n alias: 'ngxUikHideIfForbiddenRole',\r\n });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n // Элемент скрывается, если у пользователя есть запрещенная роль или передан маркер HIDE_ROLE_MARKER\r\n const shouldHide = this.roleService.hasForbiddenRole(\r\n this.forbiddenRoles(),\r\n );\r\n\r\n // Управляем отображением. Пустая строка возвращает дефолтный CSS-стиль элемента.\r\n this.el.nativeElement.style.display = shouldHide ? 'none' : '';\r\n });\r\n }\r\n}\r\n","import { Directive, effect, inject, input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[setValue]',\r\n standalone: true,\r\n})\r\nexport class SetValueDirective {\r\n readonly value = input<any>(null, { alias: 'setValue' });\r\n\r\n // 3. Используем опциональный inject, чтобы директива не падала, если формы нет\r\n private readonly ngControl = inject(NgControl, { optional: true });\r\n\r\n constructor() {\r\n effect(() => {\r\n // Эффект автоматически отслеживает изменение входного значения\r\n const val = this.value();\r\n\r\n // Безопасное приведение undefined к null для стандартизации значений в формах\r\n const normalizedValue = val === undefined ? null : val;\r\n\r\n // Используем проверку, так как на старте ngControl.control может быть еще не создан Angular-ом\r\n if (this.ngControl && this.ngControl.control) {\r\n this.ngControl.control.setValue(normalizedValue, { emitEvent: false });\r\n }\r\n });\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router } from '@angular/router';\r\nimport { AuthService } from '@kuzntsv/uikit';\r\n\r\nexport const authGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const authService = inject(AuthService);\r\n const router = inject(Router);\r\n\r\n const isLogin = authService.loggedIn();\r\n if (!isLogin) {\r\n console.log('state.url =', state.url);\r\n\r\n // Если не зарегистрирован вернуть в форму авторизации\r\n return router.createUrlTree(['/login'], { queryParams: { returnUrl: state.url } });\r\n }\r\n\r\n return isLogin;\r\n };\r\n};","import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';\r\n\r\nexport const redirectGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\r\n const externalUrl = route.data?.['externalUrl'];\r\n \r\n if (externalUrl) {\r\n window.location.href = externalUrl;\r\n }\r\n \r\n return true;\r\n};\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn } from '@angular/router';\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n/**\r\n * Пускает на роут только тех пользователей, у которых есть роли из списка allowedRoles.\r\n * ADMIN всегда имеет доступ.\r\n */\r\nexport const roleGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const roleService = inject(RoleService);\r\n\r\n // Проверяем доступ на основе аргумента allowedRoles\r\n return roleService.hasAnyRole(allowedRoles);\r\n };\r\n};","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface LoggerConfig {\r\n isProduction: boolean;\r\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\r\n}\r\n\r\nexport const LOGGER_CONFIG = new InjectionToken<LoggerConfig>('LOGGER_CONFIG');\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { LOGGER_CONFIG } from './logger.config';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoggerService {\r\n public logPrefix: string = '';\r\n private isProduction: boolean;\r\n private readonly config = inject(LOGGER_CONFIG);\r\n\r\n constructor() {\r\n this.isProduction = this.config.isProduction;\r\n }\r\n\r\n log(message: string, ...args: any[]) {\r\n if (!this.isProduction) {\r\n // Prepend log prefix log string\r\n args.unshift(this.logPrefix + ' ');\r\n console.log(`[DEV LOG]: ${message}`, ...args);\r\n }else {\r\n console.log(`[PROD LOG]: ${message}`, ...args);\r\n }\r\n }\r\n\r\n error(message: string, ...args: any[]): void {\r\n console.error(`[ERROR]: ${message}`, ...args);\r\n }\r\n}\r\n\r\n\r\n\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { LOGGER_CONFIG, LoggerConfig } from './logger.config';\r\nimport { LoggerService } from './logger.service';\r\n\r\n\r\nexport function provideLogger(config: LoggerConfig): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: LOGGER_CONFIG, useValue: config },\r\n LoggerService\r\n ]);\r\n};\r\n","import { Deserializable } from './deserializable.model';\r\nimport { SecUserView } from './sec-user-view.model';\r\n\r\nexport class SecUser implements Deserializable {\r\n id: number = 0;\r\n login: string = '';\r\n fio: string = '';\r\n dept: number = 0;\r\n tabnum: number = 0;\r\n userView: SecUserView | undefined;\r\n\r\n public constructor(init: SecUser) {\r\n if (init) {\r\n Object.assign(this, init);\r\n } else {\r\n this.id = 0;\r\n this.login = '';\r\n this.dept = 0;\r\n this.tabnum = 0;\r\n this.fio = '';\r\n }\r\n }\r\n\r\n deserialize(input: any): this {\r\n Object.assign(this, input);\r\n return this;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of uikit\r\n */\r\n\r\nexport * from './auth';\r\nexport * from './base';\r\nexport * from './directives';\r\nexport * from './guards';\r\nexport * from './logger';\r\nexport * from './models';\r\nexport * from './pipes';\r\nexport * from './services';\r\nexport * from './shared';\r\nexport * from './types';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","startWith","i3","MatOption","MatFormField","MatLabel"],"mappings":"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"}
1
+ {"version":3,"file":"kuzntsv-uikit-ui.mjs","sources":["../../ui/src/auth/components/login-form/login-form.component.ts","../../ui/src/auth/components/login-form/login-form.component.html","../../ui/src/auth/components/permit-form/permit-form.component.ts","../../ui/src/auth/components/permit-form/permit-form.component.html","../../ui/src/services/avatar.service.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.html","../../ui/src/shared/date-range-input/models/date-range.ts","../../ui/src/shared/date-range-input/models/date-formats.ts","../../ui/src/shared/date-range-input/date-range-input.component.ts","../../ui/src/shared/date-range-input/date-range-input.component.html","../../ui/src/shared/dialog/dialog.component.ts","../../ui/src/shared/dialog/dialog.component.html","../../ui/src/shared/dialog/models/dialog-action.ts","../../ui/src/shared/empty/empty.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.html","../../ui/src/base/base-classes/base-edit-dialog-data.ts","../../ui/src/base/base-classes/base-edit-class.ts","../../ui/src/base/base-classes/base-entity-action.ts","../../ui/src/base/base-classes/base-filter-class.ts","../../ui/src/base/base-classes/base-nav-bar-menu-class.ts","../../ui/src/services/local-storage-service.ts","../../ui/src/base/base-classes/base-page-class.ts","../../ui/src/base/base-classes/base-service-class.ts","../../ui/src/pipes/safe.pipe.ts","../../ui/src/pipes/time.pipe.ts","../../ui/src/pipes/truncate.pipe.ts","../../ui/src/shared/navbar/navbar.ts","../../ui/src/shared/navbar/navbar.html","../../ui/src/shared/not-found/not-found.component.ts","../../ui/src/shared/not-found/not-found.component.html","../../ui/src/shared/progress-spinner/progress-spinner.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.html","../../ui/src/shared/select-with-group/select-with-group.component.ts","../../ui/src/shared/select-with-group/select-with-group.component.html","../../ui/src/shared/table/table.component.ts","../../ui/src/shared/table/table.component.html","../../ui/src/services/loader.service.ts","../../ui/src/services/secure-image.service.ts","../../ui/src/services/export.service.ts","../../ui/src/services/sse/sse.service.ts","../../ui/src/auth/components/login-page/login-page.component.ts","../../ui/src/auth/components/login-page/login-page.component.html","../../ui/src/directives/disable-if-role.directive.ts","../../ui/src/directives/hide-if-role-not.directive.ts","../../ui/src/directives/set-value.directive.ts","../../ui/src/guards/auth-guard.service.ts","../../ui/src/guards/redirect-guard.ts","../../ui/src/guards/role-guard.service.ts","../../ui/src/logger/logger.config.ts","../../ui/src/logger/logger.service.ts","../../ui/src/logger/logger.provider.ts","../../ui/src/models/sec-user.model.ts","../../ui/src/public-api.ts","../../ui/src/kuzntsv-uikit-ui.ts"],"sourcesContent":["\r\nimport { Component, effect, input, output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { Authenticate } from '../../models/authenticate';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-form',\r\n templateUrl: 'login-form.component.html',\r\n styleUrls: ['login-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent, FormsModule, ReactiveFormsModule, MatFormField, \r\n MatLabel, MatInput, MatError, MatIcon, MatSuffix, MatButton]\r\n})\r\nexport class LoginFormComponent {\r\n pending = input<boolean>(false);\r\n errorMessage = input<string>('');\r\n submitted = output<Authenticate>();\r\n\r\n hide = true;\r\n\r\n form: FormGroup = new FormGroup({\r\n username: new FormControl('', [Validators.required]),\r\n password: new FormControl('', [Validators.required]),\r\n });\r\n\r\n constructor() { \r\n effect(() => {\r\n if (this.pending()) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\r\n });\r\n }\r\n\r\n submit() {\r\n if (this.form.valid) {\r\n this.submitted.emit(this.form.value);\r\n }\r\n }\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Авторизация\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Имя пользователя</mat-label>\r\n <input type=\"text\" pattern=\"[A-Za-z]{1,}.[A-Za-z]{1,}.[A-Za-z]*\"\r\n matInput\r\n autocomplete=\"on\"\r\n name=\"login-form-username\"\r\n placeholder=\"Имя пользователя\"\r\n formControlName=\"username\">\r\n @if (form.controls['username'].hasError('pattern')) {\r\n <mat-error>\r\n Пожалуйста, используйте требуемый формат (Пример: a.p.petrov)\r\n </mat-error>\r\n }\r\n @if (form.controls['username'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Пароль</mat-label>\r\n <input [type]=\"hide ? 'password' : 'text'\" matInput placeholder=\"Пароль\" formControlName=\"password\">\r\n <mat-icon class=\"watcher\" matSuffix (mousedown)=\"hide=false\" (mouseup)=\"hide=true\"\r\n >{{ hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n @if (form.controls['password'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n @if (errorMessage()) {\r\n <p class=\"loginError\">\r\n {{ errorMessage() }}\r\n </p>\r\n }\r\n\r\n <p class=\"loginButtons\">\r\n <button type=\"submit\" mat-button mat-stroked-button color=\"primary\" [disabled]=\"pending()\">Войти</button>\r\n </p>\r\n\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n","import { Component, ElementRef, HostListener, OnInit, output, viewChild } from '@angular/core';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\n\r\n@Component({\r\n selector: 'ngx-uik-permit-form',\r\n templateUrl: 'permit-form.component.html',\r\n styleUrls: ['permit-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent]\r\n})\r\nexport class PermitFormComponent implements OnInit {\r\n readonly hidy = viewChild<ElementRef>('hidy');\r\n\r\n submitted = output<string>();\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n mouseHandling(event: MouseEvent) {\r\n this.hidy()?.nativeElement.focus();\r\n }\r\n\r\n ngOnInit() {\r\n // Обнуляем значение Input\r\n const hidy = this.hidy();\r\n if (hidy) {\r\n hidy.nativeElement.value = null;\r\n hidy.nativeElement.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Поле ввода\r\n *\r\n * @param событие нажатия на клавишу\r\n */\r\n onKeydown(event: any): void {\r\n if (event.key === 'Enter') {\r\n const permit = this.hidy()?.nativeElement.value;\r\n if (permit) {\r\n this.submitted.emit(permit);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Приложите пропуск\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div class=\"permit\"></div>\r\n </mat-card-content>\r\n</mat-card>\r\n<input #hidy class=\"hidy\" type=\"text\" (keydown)=\"onKeydown($event)\"/>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AvatarService {\r\n baseRoute = 'common/human/';\r\n\r\n private readonly http = inject(HttpClient);\r\n\r\n getAvatarById(idHuman: number): Observable<ArrayBuffer> {\r\n return this.http.get(this.baseRoute + idHuman + '/avatar', { responseType: 'arraybuffer' });\r\n }\r\n\r\n}\r\n","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Component, effect, ElementRef, input, output, viewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent, MatOption } from \"@angular/material/autocomplete\";\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { Observable, startWith } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\nimport { ChipItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-chip-input-autocomplete',\r\n templateUrl: './chip-input-autocomplete.component.html',\r\n styleUrl: './chip-input-autocomplete.component.css',\r\n imports: [MatFormField, AsyncPipe, FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatIcon, MatOption,\r\n MatChipsModule, MatLabel]\r\n})\r\nexport class BaseMatChipComponent {\r\n\r\n // Все элементы\r\n items = input<ChipItem[]>([]);\r\n // Выбранные элементы, ключи (ChipItem.value)\r\n selectedItemsInput = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n readonly input = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n inputCtrl = new FormControl();\r\n filteredItems$?: Observable<ChipItem[]>;\r\n selectedItems: ChipItem[] = [];\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.items().length > 0) {\r\n this.filteredItems$ = this.inputCtrl.valueChanges.pipe(\r\n startWith(null),\r\n map(item => (item ? this._filter(item) : this.items().slice())),\r\n );\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.selectedItemsInput())\r\n this.selectedItems = this.items().filter(s => this.selectedItemsInput().includes(s.value));\r\n });\r\n }\r\n\r\n remove(value: string): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const index = this.selectedItems.map(i => i.value).indexOf(value);\r\n if (index >= 0) {\r\n this.selectedItems.splice(index, 1);\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n }\r\n }\r\n\r\n selected(event: MatAutocompleteSelectedEvent): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const item = this.items().find(s => s.value == event.option.value)\r\n if (item) {\r\n this.selectedItems.push(item);\r\n }\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n const inputValue = this.input();\r\n if (inputValue)\r\n inputValue.nativeElement.value = '';\r\n this.inputCtrl.setValue(null);\r\n }\r\n\r\n private _filter(value: string): ChipItem[] {\r\n const filterValue = value.toLowerCase();\r\n return this.items().filter(item => item.viewValue.toLowerCase().includes(filterValue));\r\n }\r\n\r\n onCloseClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"chip-list\" appearance=\"fill\">\r\n <mat-label>{{ title() }}</mat-label>\r\n <mat-chip-grid #chipList aria-label=\"'Выбор '+title()\">\r\n @for (item of selectedItems; track item) {\r\n <mat-chip-row color=\"primary\"\r\n (removed)=\"remove(item.value)\">\r\n {{ item.viewValue }}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input\r\n #input\r\n [placeholder]=\"'Введите '+title()+'...'\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n >\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (item of filteredItems$ | async; track item) {\r\n <mat-option [value]=\"item.value\"\r\n [disabled]=\"selectedItemsInput()?.includes(item.value)\">\r\n {{ item.viewValue }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (selectedItems.length > 0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onCloseClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import moment from \"moment\";\r\n\r\nexport interface DateRange {\r\n begin: string;\r\n end: string;\r\n}\r\n\r\nexport function dateFormat(date: Date): string {\r\n if (date)\r\n return moment(date).format(\"YYYY-MM-DD\")\r\n else\r\n return '';\r\n}\r\n","// See the Moment.js docs for the meaning of these formats:\r\n// https://momentjs.com/docs/#/displaying/format/\r\nexport const MY_FORMATS = {\r\n parse: {\r\n dateInput: 'DD.MM.YYYY',\r\n },\r\n display: {\r\n dateInput: 'DD.MM.YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n };","import { Component, effect, input, OnDestroy, OnInit, output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MatDatepickerToggle, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate } from '@angular/material/datepicker';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport 'moment/locale/ru';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { dateFormat, DateRange, MY_FORMATS } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-date-range-input',\r\n templateUrl: './date-range-input.component.html',\r\n styleUrls: ['./date-range-input.component.scss'],\r\n imports: [MatFormField, MatLabel, MatDateRangeInput, FormsModule, ReactiveFormsModule, MatStartDate, MatEndDate,\r\n MatDatepickerToggle, MatSuffix, MatDateRangePicker, MatError],\r\n providers: [\r\n { provide: MAT_DATE_LOCALE, useValue: 'ru' },\r\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\r\n ]\r\n})\r\nexport class DateRangeInputComponent implements OnInit, OnDestroy {\r\n label = input<string>('');\r\n dateRange = input<DateRange>(<DateRange>{ begin: '', end: '' });\r\n // eslint-disable-next-line no-magic-numbers\r\n minDate = input<Date>(new Date(2020, 0, 1));\r\n clearInput = input<any>(null);\r\n required = input<boolean>(false);\r\n dateRangeChange = output<DateRange>();\r\n\r\n form = new FormGroup({\r\n begin: new FormControl(),\r\n end: new FormControl(),\r\n });\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.clearInput())\r\n this.form.reset();\r\n });\r\n\r\n effect(() => {\r\n const value = this.dateRange();\r\n if (this.form) {\r\n this.form.controls['begin'].setValue(value.begin ? new Date(value.begin) : null);\r\n this.form.controls['end'].setValue(value.end ? new Date(value.begin) : null);\r\n }\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(this.form.value));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.required()) {\r\n this.form.controls['begin'].addValidators(Validators.required);\r\n this.form.controls['end'].addValidators(Validators.required);\r\n }\r\n\r\n // подписка на изменение периода\r\n this.form.valueChanges\r\n .pipe(\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n )\r\n .subscribe({\r\n next: range => {\r\n if (this.required()) {\r\n if (range.begin && range.end) {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n } else {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private rangeToDateDateRange(range: Partial<{ begin: Date; end: Date }>): DateRange {\r\n return {\r\n begin: range.begin ? dateFormat(range.begin) : '',\r\n end: range.end ? dateFormat(range.end) : ''\r\n };\r\n }\r\n\r\n}\r\n","<mat-form-field appearance=\"fill\">\r\n <mat-label>{{label()}}</mat-label>\r\n <mat-date-range-input\r\n [rangePicker]=\"picker\"\r\n [formGroup]=\"form\"\r\n [min]=\"minDate()\">\r\n <input matStartDate formControlName=\"begin\" placeholder=\"Дата начала\">\r\n <input matEndDate formControlName=\"end\" placeholder=\"Дата окончания\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n <mat-error>Укажите период</mat-error>\r\n</mat-form-field>\r\n\r\n","import { Component, inject } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\n\r\nimport { DialogData } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css'],\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton, MatDialogClose]\r\n})\r\nexport class DialogComponent {\r\n\r\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\r\n readonly dialogRef = inject(MatDialogRef<DialogComponent>);\r\n\r\n constructor() {\r\n if (!this.data.title) {\r\n this.data.title = 'Подтверждение';\r\n }\r\n if (!this.data.btnNoTitle) {\r\n this.data.btnNoTitle = 'Нет';\r\n }\r\n if (!this.data.btnYesTitle) {\r\n this.data.btnYesTitle = 'Да';\r\n }\r\n }\r\n\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ data.title }}</h1>\r\n<div mat-dialog-content>\r\n <div style=\"white-space: pre-line\">{{ data.message }}</div>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n <button mat-raised-button (click)=\"onNoClick()\" cdkFocusInitial>{{ data.btnNoTitle }}</button>\r\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"data.id\">{{ data.btnYesTitle }}</button>\r\n</div>\r\n\r\n","export enum DialogAction {\r\n Add = 'Добавить',\r\n Edit = 'Изменить',\r\n Delete = 'Удалить',\r\n None = ''\r\n }","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-empty-route-guard-holder',\r\n standalone: true,\r\n template: '' // пустой шаблон, так как гуард сразу уводит пользователя со страницы\r\n})\r\nexport class EmptyComponent {}\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { RoleService } from '@kuzntsv/uikit';\r\nimport { IContextMenuOptions } from '../../../shared/table';\r\n\r\n@Component({\r\n selector: 'ngx-uik-base-toolbar',\r\n templateUrl: 'base-toolbar.component.html',\r\n styleUrls: ['base-toolbar.component.scss'],\r\n imports: [\r\n MatToolbar,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatMenu,\r\n MatDivider,\r\n MatMenuTrigger,\r\n MatMenuItem,\r\n ],\r\n})\r\nexport class BaseToolbarComponent {\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesNewBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesEditBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesRemoveBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesCopyBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesExcelBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesCsvBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesPdfBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesPrintBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesRefreshBtn = input<string[]>([]);\r\n /** \r\n * Список Ролей, для которых кнопка видна. Если в списке есть роль 'HIDE', то скрывается.\r\n */\r\n rolesClearBtn = input<string[]>([]);\r\n\r\n // Состояния блокировки\r\n newBtnDisabled = input<boolean>(false);\r\n editBtnDisabled = input<boolean>(false);\r\n removeBtnDisabled = input<boolean>(false);\r\n copyBtnDisabled = input<boolean>(false);\r\n excelBtnDisabled = input<boolean>(false);\r\n csvBtnDisabled = input<boolean>(false);\r\n pdfBtnDisabled = input<boolean>(false);\r\n printBtnDisabled = input<boolean>(false);\r\n refreshBtnDisabled = input<boolean>(false);\r\n clearBtnDisabled = input<boolean>(false);\r\n\r\n // Тултипы\r\n newBtnTooltip = input<string>('Добавить');\r\n editBtnTooltip = input<string>('Изменить');\r\n removeBtnTooltip = input<string>('Удалить');\r\n copyBtnTooltip = input<string>('Скопировать');\r\n excelBtnTooltip = input<string>('Экспортировать в Excel');\r\n csvBtnTooltip = input<string>('Экспортировать в Csv');\r\n pdfBtnTooltip = input<string>('Экспортировать в Pdf');\r\n printBtnTooltip = input<string>('Печатать');\r\n refreshBtnTooltip = input<string>('Обновить данные');\r\n clearBtnTooltip = input<string>('Очистить фильтр');\r\n\r\n /** Список элементов контекстного меню. */\r\n newBtnOpt = input<IContextMenuOptions<string>[]>([]);\r\n\r\n // События\r\n clickedNewBtn = output();\r\n clickedEditBtn = output();\r\n clickedRemoveBtn = output();\r\n clickedCopyBtn = output();\r\n clickedExcelBtn = output();\r\n clickedCsvBtn = output();\r\n clickedPdfBtn = output();\r\n clickedPrintBtn = output();\r\n clickedRefreshBtn = output();\r\n clickedClearBtn = output();\r\n\r\n // DI\r\n // protected authService = inject(AuthService);\r\n protected roleService = inject(RoleService);\r\n\r\n // Вычисляемые сигналы видимости кнопок.\r\n readonly isNewBtnVisible = computed(() => this.checkVisibility(this.rolesNewBtn()));\r\n readonly isEditBtnVisible = computed(() => this.checkVisibility(this.rolesEditBtn()));\r\n readonly isRemoveBtnVisible = computed(() => this.checkVisibility(this.rolesRemoveBtn()));\r\n readonly isCopyBtnVisible = computed(() => this.checkVisibility(this.rolesCopyBtn()));\r\n readonly isExcelBtnVisible = computed(() => this.checkVisibility(this.rolesExcelBtn()));\r\n readonly isCsvBtnVisible = computed(() => this.checkVisibility(this.rolesCsvBtn()));\r\n readonly isPdfBtnVisible = computed(() => this.checkVisibility(this.rolesPdfBtn()));\r\n readonly isPrintBtnVisible = computed(() => this.checkVisibility(this.rolesPrintBtn()));\r\n readonly isRefreshBtnVisible = computed(() => this.checkVisibility(this.rolesRefreshBtn()));\r\n readonly isClearBtnVisible = computed(() => this.checkVisibility(this.rolesClearBtn()));\r\n\r\n /** \r\n * Внутренний метод для вычисления видимости.\r\n * Не вызывается напрямую из шаблона, а служит хелпером для декларативных computed.\r\n * Проверяет, заблокирован ли доступ к элементу на основе списка ограничений.\r\n * Возвращает true, если у пользователя есть запрещенная роль или передан маркер 'HIDE'.\r\n * Администратор (ADMIN) всегда игнорирует любые запреты и маркер 'HIDE'.\r\n */\r\n private checkVisibility(forbiddenRoles: string[]): boolean {\r\n return !this.roleService.hasForbiddenRole(forbiddenRoles);\r\n }\r\n\r\n onNewClick() {\r\n this.clickedNewBtn.emit();\r\n }\r\n\r\n onEditClick() {\r\n this.clickedEditBtn.emit();\r\n }\r\n\r\n onRemoveClick() {\r\n this.clickedRemoveBtn.emit();\r\n }\r\n\r\n onCopyClick() {\r\n this.clickedCopyBtn.emit();\r\n }\r\n\r\n onExcelClick() {\r\n this.clickedExcelBtn.emit();\r\n }\r\n\r\n onCsvClick() {\r\n this.clickedCsvBtn.emit();\r\n }\r\n\r\n onPdfClick() {\r\n this.clickedPdfBtn.emit();\r\n }\r\n\r\n onPrintClick() {\r\n this.clickedPrintBtn.emit();\r\n }\r\n\r\n onRefreshGridClick() {\r\n this.clickedRefreshBtn.emit();\r\n }\r\n\r\n onClearClick() {\r\n this.clickedClearBtn.emit();\r\n }\r\n}\r\n","<mat-toolbar>\r\n @if (isNewBtnVisible()) {\r\n @if (newBtnOpt() && newBtnOpt().length > 0) {\r\n <button [disabled]=\"newBtnDisabled()\" [matMenuTriggerFor]=\"menuNewBtn\"\r\n mat-icon-button [matTooltip]=\"newBtnTooltip()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <mat-menu #menuNewBtn=\"matMenu\">\r\n @for (menuItem of newBtnOpt(); track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn('') : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn('') : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </mat-menu>\r\n } \r\n @else {\r\n <button [disabled]=\"newBtnDisabled()\" (click)=\"onNewClick()\"\r\n mat-icon-button routerLink=\"new\" routerLinkActive=\"active\" [matTooltip]=\"newBtnTooltip()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n }\r\n\r\n @if (isEditBtnVisible()) {\r\n <button [disabled]=\"editBtnDisabled()\" (click)=\"onEditClick()\"\r\n mat-icon-button routerLink=\"edit\" color=\"primary\" routerLinkActive=\"active\" [matTooltip]=\"editBtnTooltip()\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n @if (isRemoveBtnVisible()) {\r\n <button [disabled]=\"removeBtnDisabled()\" (click)=\"onRemoveClick()\"\r\n mat-icon-button routerLink=\"delete\" color=\"warn\" routerLinkActive=\"active\" [matTooltip]=\"removeBtnTooltip()\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n }\r\n @if (isCopyBtnVisible()) {\r\n <button [disabled]=\"copyBtnDisabled()\" (click)=\"onCopyClick()\"\r\n mat-icon-button routerLink=\"delete\" routerLinkActive=\"active\" [matTooltip]=\"copyBtnTooltip()\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n }\r\n @if (isExcelBtnVisible()) {\r\n <button [disabled]=\"excelBtnDisabled()\" (click)=\"onExcelClick()\"\r\n mat-icon-button routerLink=\"excel\" routerLinkActive=\"active\" [matTooltip]=\"excelBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">explicit</mat-icon>\r\n </button>\r\n }\r\n @if (isCsvBtnVisible()) {\r\n <button [disabled]=\"csvBtnDisabled()\" (click)=\"onCsvClick()\"\r\n mat-icon-button routerLink=\"csv\" routerLinkActive=\"active\" [matTooltip]=\"csvBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">download</mat-icon>\r\n </button>\r\n }\r\n @if (isPdfBtnVisible()) {\r\n <button [disabled]=\"pdfBtnDisabled()\" (click)=\"onPdfClick()\"\r\n mat-icon-button routerLink=\"pdf\" routerLinkActive=\"active\" [matTooltip]=\"pdfBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">picture_as_pdf</mat-icon>\r\n </button>\r\n }\r\n @if (isPrintBtnVisible()) {\r\n <button [disabled]=\"printBtnDisabled()\" (click)=\"onPrintClick()\"\r\n mat-icon-button routerLink=\"print\" routerLinkActive=\"active\" [matTooltip]=\"printBtnTooltip()\">\r\n <mat-icon class=\"material-icons-outlined\">print_outline</mat-icon>\r\n </button>\r\n }\r\n @if (isRefreshBtnVisible()) {\r\n <button [disabled]=\"refreshBtnDisabled()\" (click)=\"onRefreshGridClick()\"\r\n mat-icon-button routerLink=\"refresh\" routerLinkActive=\"active\" [matTooltip]=\"refreshBtnTooltip()\">\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n }\r\n @if (isClearBtnVisible()) {\r\n <button [disabled]=\"clearBtnDisabled()\" (click)=\"onClearClick()\"\r\n mat-icon-button routerLink=\"clear\" routerLinkActive=\"active\" [matTooltip]=\"clearBtnTooltip()\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n</mat-toolbar>\r\n","export interface IEditDialogData<T, K = any> {\r\n action: Action;\r\n entity: T;\r\n extraData?: K;\r\n}\r\n\r\nexport enum Action {\r\n Add = 'Добавление',\r\n Edit = 'Изменение'\r\n}\r\n","import { Directive, inject, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { NotificationService, RoleService } from '@kuzntsv/uikit';\r\n\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\nimport { LoaderService } from '../../services';\r\n\r\n@Directive()\r\nexport abstract class BaseEditClass<T> implements OnDestroy {\r\n /** Заголовок. */\r\n public abstract title: string;\r\n /** Данные диалога. */\r\n protected abstract dialogData?: IEditDialogData<T>;\r\n /** Форма. */\r\n public abstract form?: FormGroup<any>;\r\n /** Ссылка на диалог. */\r\n protected abstract dialogRef?: MatDialogRef<any, IEditDialogData<T> | null>;\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n /** Сервис ролей. */\r\n protected roleService = inject(RoleService);\r\n\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n protected subscription = new Subscription();\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onNoClick(event: MouseEvent): void {\r\n this.dialogRef?.close(null);\r\n event.preventDefault(); // иначе сработает onSubmit\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.form) {\r\n if (this.form.valid) {\r\n if (this.dialogData)\r\n Object.keys(this.form.controls).forEach(\r\n (controlName) =>\r\n (this.dialogData!.entity[controlName as keyof T] =\r\n this.form?.controls[controlName].value),\r\n );\r\n this.dialogRef?.close(this.dialogData);\r\n } else {\r\n Object.keys(this.form.controls).forEach((controlName) =>\r\n this.form?.controls[controlName].markAsTouched(),\r\n );\r\n }\r\n }\r\n }\r\n\r\n formActionIsAdd(): boolean {\r\n return this.dialogData?.action === Action.Add;\r\n }\r\n\r\n formActionIsEdit(): boolean {\r\n return this.dialogData?.action === Action.Edit;\r\n }\r\n\r\n /**\r\n * Определяет видимость элемента на основе ЧЕРНОГО списка ролей.\r\n * По умолчанию элемент ВИДИМ. Скрывается (возвращает false), если у пользователя\r\n * есть запрещенная роль или если передан маркер скрытия фичи HIDE_ROLE_MARKER.\r\n */\r\n protected isVisibleForForbiddenRoles(forbiddenRoles: string[]): boolean {\r\n // Если роль запрещена, метод roleService вернет true.\r\n // Мы инвертируем (!), чтобы видимость (isMenuVisible) стала false.\r\n return !this.roleService.hasForbiddenRole(forbiddenRoles);\r\n }\r\n\r\n /**\r\n * Определяет видимость элемента на основе БЕЛОГО списка ролей.\r\n * По умолчанию элемент СКРЫТ. Показывается (возвращает true), только если у пользователя\r\n * есть хотя бы одна из разрешенных ролей. Администратор (ADMIN) всегда видит элемент.\r\n */\r\n protected isVisibleForAllowedRoles(allowedRoles: string[]): boolean {\r\n // Проверяем, есть ли у пользователя хотя бы одна роль из разрешенного списка.\r\n // (Предполагается, что у вашего roleService есть соответствующий метод, например, hasAnyRole)\r\n return this.roleService.hasAnyRole(allowedRoles);\r\n }\r\n}\r\n","export interface IEntityAction<T> {\r\n action: EntityAction;\r\n entity: T;\r\n}\r\n\r\nexport enum EntityAction {\r\n Init = 'Инициализация',\r\n Add = 'Добавление',\r\n Edit = 'Изменение',\r\n Delete = 'Удаление'\r\n}\r\n","import { Directive, inject, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LocalStorageService, LoaderService } from '../../services';\r\nimport { NotificationService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseFilterClass implements OnDestroy {\r\n\r\n /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultDebounceTime = 500;\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","import { Directive, inject } from \"@angular/core\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { Router } from \"@angular/router\";\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseNavBarMenuClass {\r\n\r\n protected roleService = inject(RoleService);\r\n protected router = inject(Router);\r\n\r\n /** \r\n * Определяет видимость пункта меню на основе ЧЕРНОГО списка ролей.\r\n * По умолчанию пункт меню ВИДИМ. Скрывается (возвращает false), если у пользователя \r\n * есть запрещенная роль или если передан маркер скрытия фичи HIDE_ROLE_MARKER.\r\n */\r\n protected isVisibleForForbiddenRoles(forbiddenRoles: string[]): boolean {\r\n // Если роль запрещена, метод roleService вернет true. \r\n // Мы инвертируем (!), чтобы видимость (isMenuVisible) стала false.\r\n return !this.roleService.hasForbiddenRole(forbiddenRoles);\r\n }\r\n\r\n /** \r\n * Определяет видимость пункта меню на основе БЕЛОГО списка ролей.\r\n * По умолчанию пункт меню СКРЫТ. Показывается (возвращает true), только если у пользователя \r\n * есть хотя бы одна из разрешенных ролей. Администратор (ADMIN) всегда видит элемент.\r\n */\r\n protected isVisibleForAllowedRoles(allowedRoles: string[]): boolean {\r\n // Проверяем, есть ли у пользователя хотя бы одна роль из разрешенного списка.\r\n // (Предполагается, что у вашего roleService есть соответствующий метод, например, hasAnyRole)\r\n return this.roleService.hasAnyRole(allowedRoles);\r\n }\r\n\r\n /** Нажата средняя кнопка (открыть ссылку в новой вкладке). */\r\n onMiddleClick(event: MouseEvent, baseUrl: string, menu: MatMenuTrigger) {\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if (event.button === 1) {\r\n // event.preventDefault();\r\n menu.closeMenu();\r\n const urlTree = this.router.serializeUrl(\r\n this.router.createUrlTree([baseUrl]\r\n )\r\n );\r\n window.open(urlTree, '_blank');\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n constructor() { }\r\n\r\n public saveData(key: string, value: string) {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n public getData(key: string) {\r\n return localStorage.getItem(key)\r\n }\r\n public removeData(key: string) {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n public clearData() {\r\n localStorage.clear();\r\n }\r\n\r\n}\r\n","import { Directive, OnDestroy, inject, signal } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { Router } from '@angular/router';\r\nimport { Subject, Subscription, forkJoin, map, switchMap, tap } from 'rxjs';\r\n\r\nimport { LocalStorageService } from '../../services/local-storage-service';\r\nimport { DialogComponent } from '../../shared/dialog/dialog.component';\r\nimport { IContextMenuOptions, IPageState, ISortState, ITableState } from '../../shared/table';\r\nimport { ObjectKeys, SortDirection, fnCbType, fnGetCountType, fnGetDataType, fnMapEntityType, fnType } from '../../types/types';\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\n\r\nimport { LoaderService } from '../../services';\r\nimport { HIDE_ROLE_MARKER, UIKIT_NOTIFICATION_TOKEN } from '@kuzntsv/uikit';\r\n\r\n\r\n@Directive()\r\nexport class BasePageClass<T> implements OnDestroy {\r\n\r\n protected dialog = inject(MatDialog);\r\n\r\n /** Данные для табличного компонента. */\r\n data = signal<T[]>([]);\r\n /** Количество записей по фильтру. */\r\n length = signal<number>(0);\r\n\r\n entityService: any;\r\n entityType: any;\r\n entityEditComponent: any;\r\n extraData?: any;\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n dialogEditWidth = 'auto';\r\n dialogRemoveWidth = '400px';\r\n\r\n routeAddress: string = '';\r\n\r\n /** Сообщение при удалении записи(й). */\r\n removalMessage: string = '';\r\n /** Заголовок страницы. */\r\n pageTitle: string = '';\r\n\r\n /**\r\n * Создание записи: вызывается перед открытием диалога.\r\n */\r\n beforeOpenDialogOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед открытием диалога.\r\n */\r\n beforeOpenDialogOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnNewEvent: fnCbType<T>;\r\n /**\r\n * Редактирование записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnEditEvent: fnCbType<T>;\r\n\r\n editorRoles: string[] = [];\r\n executeRoles: string[] = [];\r\n /** Список ролей, для которых скрыть элемент. */\r\n hideRoles: string[] = [HIDE_ROLE_MARKER];\r\n\r\n /** Загрузка данных. */\r\n loadData$: Subject<null> = new Subject<null>();\r\n /** Загрузка количества записей. */\r\n loadLength$: Subject<null> = new Subject<null>();\r\n /** Очистка фильтра. */\r\n clearFilter$: Subject<null> = new Subject<null>();\r\n\r\n /** Очистка фильтра (для очистки присвоить пустой объект '{}'). */\r\n clearFilter: any = null;\r\n\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = false;\r\n /** Выбранные строки в таблице. */\r\n selected: T[] = [];\r\n\r\n /** Состояние сортировки, пагинации. */\r\n tableState: ITableState;\r\n\r\n /** Доступность кнопки \"Изменить\". */\r\n editBtnDisabled = true;\r\n /** Доступность кнопки \"Удалить\". */\r\n removeBtnDisabled = true;\r\n\r\n /** Разрешено ли отправлять событие rowDoubleClicked при двойном щелчке мышью. */\r\n dblClickedEventEnable = true;\r\n\r\n // Список элементов контекстного меню.\r\n opt: IContextMenuOptions<T>[] = [];\r\n\r\n // DI\r\n protected router = inject(Router);\r\n /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(UIKIT_NOTIFICATION_TOKEN);\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n this.tableState = {\r\n sortActive: this.localStorageService.getData(this.constructor.name + 'SortActive') || '',\r\n sortDirection: (this.localStorageService.getData(this.constructor.name + 'SortDirection') || '') as SortDirection,\r\n pageIndex: Number(this.localStorageService.getData(this.constructor.name + 'PageIndex')) || this.defaultPageIndex,\r\n pageSize: Number(this.localStorageService.getData(this.constructor.name + 'PageSize')) || this.defaultPageSize\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n subscribeToLoadData( fnGetData: fnGetDataType<T>, fnGetCount: fnGetCountType<T>, fnMapEntity?: fnMapEntityType<T>) {\r\n // отменять стримы, созданные ранее\r\n const subs = this.loadData$\r\n .pipe(\r\n tap(() => this.loaderService.show()),\r\n switchMap(() => fnGetData()),\r\n map(v => (fnMapEntity && Array.isArray(v)) ? v.map(fnMapEntity()) : v),\r\n )\r\n .subscribe({\r\n next: (response: T[]) => {\r\n this.data.set(response || []);\r\n this.loaderService.hide();\r\n },\r\n error: (error: any) => {\r\n this.loaderService.hide();\r\n console.log(error); \r\n const errorMessage = error.message || error;\r\n this.notificationService?.error('Произошла ошибка: ' + errorMessage, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n const subs2 = this.loadLength$\r\n .pipe(\r\n switchMap(() => fnGetCount())\r\n )\r\n .subscribe({\r\n next: (response: number) => {\r\n this.length.set(response);\r\n },\r\n error: (error: any) => {\r\n console.log(error);\r\n this.notificationService.error('Произошла ошибка: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n\r\n // загрузить данные и количество записей\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onPageChange(pageState: IPageState) {\r\n this.tableState.pageIndex = pageState.pageIndex;\r\n this.tableState.pageSize = pageState.pageSize;\r\n this.localStorageService.saveData(this.constructor.name + 'PageIndex', pageState.pageIndex.toString());\r\n this.localStorageService.saveData(this.constructor.name + 'PageSize', pageState.pageSize.toString());\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onSortChange(sortState: ISortState) {\r\n this.tableState.sortActive = sortState.sortActive;\r\n this.tableState.sortDirection = sortState.sortDirection;\r\n this.localStorageService.saveData(this.constructor.name + 'SortActive', sortState.sortActive);\r\n this.localStorageService.saveData(this.constructor.name + 'SortDirection', sortState.sortDirection);\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n entityFactory(type: new () => T): T {\r\n return new type();\r\n }\r\n\r\n /** Событие изменение выбранных записей. */\r\n onSelectionChange(selected: T[]) {\r\n this.selected = selected;\r\n this.editBtnDisabledUpdate(this.selected);\r\n this.removeBtnDisabledUpdate(this.selected);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Изменить\" - вызывается при изменении выбранных записей. */\r\n editBtnDisabledUpdate(selected: T[]) {\r\n this.editBtnDisabled = !(selected && selected.length === 1);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Удалить\" - вызывается при изменении выбранных записей. */\r\n removeBtnDisabledUpdate(selected: T[]) {\r\n this.removeBtnDisabled = !(selected && selected.length > 0);\r\n }\r\n\r\n /** Событие двойной клик. */\r\n onRowDoubleClicked() {\r\n this.editEvent();\r\n }\r\n\r\n /** Событие создание. */\r\n newEvent() {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Add, entity: new this.entityType(null) };\r\n\r\n // Назначить значения полей объекта перед открытием диалога.\r\n if (this.beforeOpenDialogOnNewEvent) {\r\n this.beforeOpenDialogOnNewEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnNewEvent)\r\n this.beforeSaveOnNewEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.newObject(result.entity)\r\n .subscribe({\r\n next: (obj: any) => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnNewEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись добавлена.');\r\n }\r\n this.afterSaveOnNewEvent(callback.bind(this), obj, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService?.success('Запись добавлена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.error('Произошла ошибка при добавлении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription.add(subs2);\r\n } else {\r\n this.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n\r\n /** Событие редактирование. */\r\n editEvent() {\r\n if (this.selected && this.selected.length === 1) {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Edit, entity: this.selected[0] };\r\n\r\n // Назначить значения полей объекта перед открытием диалога.\r\n if (this.beforeOpenDialogOnEditEvent) {\r\n this.beforeOpenDialogOnEditEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnEditEvent)\r\n this.beforeSaveOnEditEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.editObject(result.entity)\r\n .subscribe({\r\n next: () => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnEditEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись изменена.');\r\n }\r\n this.afterSaveOnEditEvent(callback.bind(this), result.entity, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись изменена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.error('Произошла ошибка при изменении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription.add(subs2);\r\n } else {\r\n this.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n }\r\n\r\n /** Событие удаление. */\r\n removeEvent() {\r\n // если выбрана запись(и)\r\n if (this.selected && this.selected.length > 0) {\r\n const dialogRef = this.openDialogRemoveConfirm(this.removalMessage);\r\n if (dialogRef) {\r\n const subs = dialogRef.afterClosed().subscribe((result: any) => {\r\n // при подтверждении возвращается 'delete'\r\n if (result === 'delete') {\r\n // готовим объект с запросами на удаление\r\n const sourcesObject: ObjectKeys = {};\r\n this.selected.forEach((item, index) => sourcesObject['obj' + index] = this.entityService.deleteObject(item));\r\n // ждем, когда выполнятся все запросы\r\n const subs = forkJoin(sourcesObject)\r\n .subscribe({\r\n next: () => {\r\n this.refreshEvent();\r\n this.notificationService.success('Выбранные записи удалены.');\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService?.error('Произошла ошибка при удалении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n });\r\n this.subscription.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription.add(subs2);\r\n }\r\n }\r\n }\r\n\r\n /** Событие обновления данных. */\r\n refreshEvent() {\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n /** Событие очистки фильтра. */\r\n clearEvent() {\r\n this.clearFilter$.next(null);\r\n this.clearFilter = {};\r\n }\r\n\r\n /** Изменение сообщения об удалении. */\r\n onRemovalMessageChange(message: string) {\r\n this.removalMessage = message;\r\n }\r\n\r\n /** Изменение заголовка страницы. */\r\n onPageTitleChange(title: string) {\r\n this.pageTitle = title;\r\n }\r\n\r\n openDialog(entityComponent: any, data: IEditDialogData<T>, dialog: any) {\r\n // create dialog config\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.disableClose = true;\r\n dialogConfig.autoFocus = true;\r\n dialogConfig.width = this.dialogEditWidth;\r\n dialogConfig.data = data;\r\n dialogConfig.panelClass = this.entityType.name + '-edit-dialog';\r\n // return dialog\r\n return dialog.open(entityComponent, dialogConfig);\r\n }\r\n\r\n openDialogRemoveConfirm(removalMessage: string): MatDialogRef<DialogComponent> | undefined {\r\n let message = 'Вы хотите удалить ';\r\n message += removalMessage ?\r\n removalMessage :\r\n this.allowMultiSelect ? `выбранные записи (${this.selected.length})?` : 'выбранную запись?';\r\n return this.dialog.open(DialogComponent, {\r\n width: this.dialogRemoveWidth,\r\n data: {\r\n id: 'delete',\r\n title: 'Подтверждение',\r\n message: message,\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Удалить'\r\n }\r\n });\r\n }\r\n\r\n // contextMenu: При щелчке ПКМ открыть в новой вкладке.\r\n protected onMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T, contextMenu: MatMenuTrigger) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\r\n contextMenu.closeMenu();\r\n // Converts the route into a string that can be used\r\n // with the window.open() function\r\n const url = this.router.serializeUrl(\r\n queryParamName && queryParamValue ?\r\n this.router.createUrlTree([baseUrl], { queryParams: { [queryParamName]: item[queryParamValue as keyof T] } })\r\n : this.router.createUrlTree([baseUrl])\r\n );\r\n window.open(url, '_blank');\r\n }\r\n };\r\n }\r\n\r\n // Action в таблице: При щелчке ПКМ открыть в новой вкладке.\r\n protected onActionMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\r\n // Converts the route into a string that can be used\r\n // with the window.open() function\r\n const url = this.router.serializeUrl(\r\n queryParamName && queryParamValue ?\r\n this.router.createUrlTree([baseUrl], { queryParams: { [queryParamName]: item[queryParamValue as keyof T] } })\r\n : this.router.createUrlTree([baseUrl])\r\n );\r\n window.open(url, '_blank');\r\n }\r\n };\r\n }\r\n\r\n protected dateToString(date: string | number | Date) {\r\n return date ? (new Date(date)).toLocaleString('ru-RU', { timeZone: 'Europe/Samara' }) : null; // MSK+01\r\n }\r\n\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { BaseClass } from './base-class';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport abstract class BaseServiceClass<T extends BaseClass> {\r\n abstract baseRoute: string;\r\n abstract entityType: any;\r\n\r\n protected countRoute = 'count';\r\n\r\n protected pageIndexParam = 'page';\r\n protected pageSizeParam = 'limit';\r\n protected sortColumnParam = 'column';\r\n protected directionParam = 'direction';\r\n\r\n protected http = inject(HttpClient);\r\n\r\n getObjects(): Observable<T[]> {\r\n return this.http.get<T[]>(this.baseRoute)\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n getObject(id: number): any {\r\n return this.http.get<T>(this.baseRoute + id)\r\n .pipe(map(data => new this.entityType(data).deserialize(data)));\r\n }\r\n\r\n getCount(): Observable<number> {\r\n return this.http.get<number>(this.baseRoute + this.countRoute);\r\n }\r\n\r\n getObjectsByPaging(pageIndex: number, pageSize: number, sortColumn: string, direction: string): Observable<T[]> {\r\n const params = this.getParams(pageIndex, pageSize, sortColumn, direction);\r\n return this.http.get<T[]>(this.baseRoute, { params })\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n newObject(entity: T): any {\r\n return this.http.post(this.baseRoute, entity);\r\n }\r\n\r\n editObject(entity: T): any {\r\n return this.http.put(this.baseRoute + entity.id, entity);\r\n }\r\n\r\n deleteObject(entity: T): any {\r\n return this.http.delete(this.baseRoute + entity.id);\r\n }\r\n\r\n protected getParams(pageIndex: number, pageSize: number, sortColumn: string, direction: string): HttpParams {\r\n let params = new HttpParams();\r\n if (pageIndex + 1)\r\n // переход от индекса к номеру страницы\r\n params = params.append(this.pageIndexParam, pageIndex + 1);\r\n if (pageSize)\r\n params = params.append(this.pageSizeParam, pageSize);\r\n if (sortColumn)\r\n params = params.append(this.sortColumnParam, sortColumn);\r\n if (direction)\r\n params = params.append(this.directionParam, direction);\r\n return params;\r\n }\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safe',\r\n standalone: true\r\n})\r\nexport class SafePipe implements PipeTransform {\r\n\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(url: string | SafeUrl | null | undefined) {\r\n if (!url) {\r\n return '';\r\n }\r\n\r\n // Проверяем, является ли значение уже объектом SafeUrl.\r\n // Объекты SafeUrl от DomSanitizer имеют скрытые свойства или метод toString(), \r\n // но самый надежный способ в Angular — проверить, что это не обычная строка.\r\n if (typeof url !== 'string') {\r\n return url; // Возвращаем как есть, так как это уже SafeUrl\r\n }\r\n return this.sanitizer.bypassSecurityTrustUrl(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'time'\r\n})\r\nexport class TimePipe implements PipeTransform {\r\n\r\n transform(value: number): string {\r\n // const hour = Math.abs(value) >= 60 ? Math.round(value / 60) + 'ч.' : '';\r\n // const minute = ' ' + Math.abs(value % 60) + 'м.';\r\n // return value === 0 ? '0' : hour + ' ' + minute;\r\n\r\n const hour = Math.abs(value) >= 60 ? Math.floor(Math.abs(value) / 60).toString().padStart(2,'0') : '00';\r\n const minute = Math.abs(value % 60).toString().padStart(2,'0');\r\n const time = hour + ':' + minute;\r\n return value < 0 ? '-' + time : time;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate'\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n // Usage:\r\n // {{ str | truncate:[20] }} // or\r\n // {{ str | truncate:[20, '...'] }} // or|\r\n transform(value: string, args: any[]): string {\r\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\r\n const trail = args.length > 1 ? args[1] : '...';\r\n return value.length > limit ? value.substring(0, limit) + trail : value;\r\n }\r\n\r\n}\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { MatAnchor } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { BaseNavBarMenuClass } from '../../base';\r\nimport { SafePipe } from '../../pipes';\r\nimport { DialogComponent } from '../dialog';\r\nimport { filter, take } from 'rxjs';\r\nimport { SafeUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'ngx-uik-navbar',\r\n templateUrl: 'navbar.html',\r\n styleUrls: ['./navbar.scss'],\r\n imports: [MatAnchor, MatIcon, MatTooltip, SafePipe],\r\n})\r\nexport class NavBarComponent extends BaseNavBarMenuClass {\r\n /** Видимость панели, когда loggedIn === false. */\r\n visibleOnLogout = input<boolean>(false);\r\n /** Видимость аватара. */\r\n visibleAvatar = input<boolean>(true);\r\n /** Видимость кнопки \"Выйти\". */\r\n visibleLogoutBtn = input<boolean>(true);\r\n\r\n /** Признак, что пользователь авторизован. */\r\n loggedIn = input<boolean>(false);\r\n /** ФИО пользователя. */\r\n fioUser = input<string>('');\r\n /** Всплывающая подсказка о пользователе. */\r\n userTooltip = input<string>('');\r\n /** URL аватара */\r\n avatarURL = input<string | SafeUrl>('');\r\n\r\n /** Нажата кнопка \"Выйти\". */\r\n logout = output<string>();\r\n\r\n private readonly dialog = inject(MatDialog);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n onLogout() {\r\n this.logout.emit(this.router.url);\r\n }\r\n\r\n openDialog(): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n width: '400px',\r\n data: {\r\n id: 'logout',\r\n title: 'Подтверждение',\r\n message: 'Вы хотите выйти?',\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Выйти',\r\n },\r\n });\r\n\r\n dialogRef\r\n .afterClosed()\r\n .pipe(\r\n take(1), // Берем только одно значение (когда закрылся)\r\n filter((id) => !!id), // Пропускаем дальше, только если id существует (нажали \"Выйти\")\r\n )\r\n .subscribe((id: any) => {\r\n if (id) {\r\n this.onLogout();\r\n }\r\n });\r\n }\r\n}\r\n","@if (visibleOnLogout() || loggedIn()) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if (visibleAvatar() && (loggedIn() === false || !avatarURL())) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && !!avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">Выйти <mat-icon>logout</mat-icon></a>\r\n }\r\n </nav>\r\n}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ngx-uik-not-found',\r\n templateUrl: './not-found.component.html',\r\n styleUrls: ['./not-found.component.css'],\r\n standalone: true\r\n})\r\nexport class NotFoundComponent {\r\n\r\n}\r\n","<div class=\"center\">\r\n <h3 class=\"mat-display-1\">Страница не найдена</h3>\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'ngx-uik-loader',\r\n template: `\r\n <div class=\"loading-indicator\" mat-dialog-content>\r\n <mat-progress-spinner mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </div>\r\n `,\r\n styles: [`\r\n /* Разместить по центру */\r\n .loading-indicator {\r\n position: fixed;\r\n z-index: 999;\r\n height: 2em;\r\n width: 2em;\r\n overflow: initial;\r\n margin: auto;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n\r\n /* Заблокировать оверлей */\r\n .loading-indicator:before {\r\n content: '';\r\n display: block;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0,0,0,0.3);\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatProgressSpinner]\r\n})\r\n\r\nexport class ProgressSpinnerComponent implements AfterViewInit {\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n\r\n ngAfterViewInit() {\r\n this.cdRef.detectChanges();\r\n }\r\n}\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { Component, effect, input, linkedSignal, OnDestroy, OnInit, output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule, MatOption } from '@angular/material/autocomplete';\r\nimport { MatError, MatFormField, MatHint, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\r\n\r\nimport { SelectItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-autocomplete-with-vs',\r\n templateUrl: './select-autocomplete-with-vs.component.html',\r\n styleUrl: './select-autocomplete-with-vs.component.css',\r\n imports: [FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatHint, MatError, MatOption, MatIcon,\r\n MatFormField, ScrollingModule, MatInput, MatLabel]\r\n})\r\nexport class BaseSelectAutocompleteWithVsComponent implements OnInit, OnDestroy {\r\n // https://stackblitz.com/edit/autocomplete-with-virtual-scroll-dc9u2g\r\n\r\n // Все элементы\r\n items = input<SelectItem[]>([]);\r\n // Выбранный элемент (входной параметр)\r\n selectedItemInput = input<SelectItem | undefined>(undefined);\r\n // Заголовок\r\n title = input<string>('');\r\n // Видимость\r\n isVisible = input<boolean>(true);\r\n // Обязательность\r\n isRequired = input<boolean>(false);\r\n // Доступность\r\n isDisabled = input<boolean>(false);\r\n // Доступность\r\n width = input<string>('200');\r\n\r\n // Выбранный элемент\r\n selectedItem = linkedSignal(() => this.selectedItemInput());\r\n // Событие изменения выбранного элемента\r\n selectedItemChange = output<string>();\r\n\r\n public height: string = '200px';\r\n // input элемент\r\n inputCtrl = new FormControl();\r\n // отфильтрованные (отображаемые) элементы\r\n filteredItems: SelectItem[] = [];\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n console.log('ITEMS =', this.items());\r\n //this.filteredItems = this.items();\r\n\r\n console.log('selectedItem =', this.selectedItemInput());\r\n if (this.items().length > 0) {\r\n console.log('filteredItems SET');\r\n this.setFileredItems(this.items());\r\n this.inputCtrl.setValue(this.selectedItemInput());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n // Listen for changes to the input\r\n const subs = this.inputCtrl.valueChanges\r\n .pipe(\r\n startWith(''),\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n // Note: If the option value is bound to object, after selecting the option\r\n // Note: the value will change from string to {}. We want to perform search\r\n // Note: only when the type is string (no match)\r\n //filter(q => typeof q === 'string'),\r\n //tap((v) => console.log('v=', v)),\r\n map((value) => {\r\n // Filter the options\r\n console.log('typeof value =', typeof value);\r\n\r\n if (typeof value === 'undefined') {\r\n this.setFileredItems(this.items());\r\n } else {\r\n if (typeof value !== 'object') {\r\n console.log('v1=', value);\r\n this.setFileredItems(this.items()\r\n .filter(option => option.viewValue.toLowerCase().includes(value.toLowerCase())));\r\n } else {\r\n // typeof value === 'object'\r\n console.log('v2=', value);\r\n if (value) {\r\n // this.predmet = value;\r\n this.setFileredItems(this.items()\r\n .filter((option) => option.viewValue.toLowerCase().includes(value.viewValue.toLowerCase())));\r\n console.log('v3=', value);\r\n } else {\r\n this.setFileredItems(this.items());\r\n console.log('v4=', value);\r\n }\r\n }\r\n }\r\n\r\n })\r\n )\r\n .subscribe();\r\n this.subscription.add(subs);\r\n\r\n if (this.isDisabled()) {\r\n this.inputCtrl.disable();\r\n } else {\r\n this.inputCtrl.enable();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onSelectedItemChange(item: any) {\r\n console.log(\"onSelectedItemChange, item=\", item);\r\n this.selectedItem.set(item);\r\n this.selectedItemChange.emit(item);\r\n }\r\n\r\n onClearClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.inputCtrl.setValue('');\r\n }\r\n\r\n displayWithFn(lookup: any) {\r\n return lookup ? lookup.viewValue : null;\r\n }\r\n\r\n private setFileredItems(items: SelectItem[]) {\r\n this.filteredItems = items;\r\n // Recompute how big the viewport should be.\r\n // eslint-disable-next-line no-magic-numbers\r\n if (items.length < 4) {\r\n // eslint-disable-next-line no-magic-numbers\r\n this.height = items.length * 50 + 'px';\r\n } else {\r\n this.height = '200px';\r\n }\r\n console.log('update filteredItems =', this.filteredItems);\r\n }\r\n}\r\n","@if (isVisible()) {\r\n <mat-form-field [style.width.px]=\"width()\">\r\n <mat-label>{{ title() }}</mat-label>\r\n <input type=\"text\"\r\n [placeholder]=title()\r\n aria-label=\"Number\"\r\n matInput\r\n (ngModelChange)=\"onSelectedItemChange($event)\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [required]=\"isRequired() ? 'required' : ''\"\r\n >\r\n @if (!isDisabled && selectedItem()) {\r\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClearClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWithFn\" showPanel=\"true\">\r\n <cdk-virtual-scroll-viewport class=\"autocomplete-test-viewport\" [style.height]=\"height\" itemSize=\"25\">\r\n <mat-option *cdkVirtualFor=\"let option of filteredItems\" [value]=\"option\" class=\"autocomplete-item\">\r\n {{option.viewValue}}\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n @if (inputCtrl.invalid) {\r\n <mat-error>Введите {{title()}}</mat-error>\r\n }\r\n @if (!inputCtrl.value) {\r\n <mat-hint>Начните вводить ...</mat-hint>\r\n }\r\n </mat-form-field>\r\n}","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\n\r\nimport { Component, effect, input, output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatOptgroup, MatOption } from '@angular/material/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatSelect } from '@angular/material/select';\r\n\r\nimport { SelectGroup } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-with-group',\r\n templateUrl: './select-with-group.component.html',\r\n styleUrls: ['./select-with-group.component.css'],\r\n imports: [FormsModule, ReactiveFormsModule, MatIcon, MatOption, MatOptgroup, MatSelect, MatFormField, MatLabel]\r\n})\r\nexport class BaseSelectWithGroupComponent {\r\n\r\n // Все группы\r\n groups = input<SelectGroup[]>([]);\r\n // Выбранные элементы, ключи (BaseSelectItem.value)\r\n selectedItems = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n control = new FormControl<number[]>([]);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.groups().length > 0) {\r\n this.control.setValue(this.selectedItems().map(i => Number(i)));\r\n }\r\n });\r\n }\r\n\r\n selectionChange($event: any) {\r\n this.selectedItemsChange.emit($event.value.map((i: number) => i.toString()));\r\n }\r\n\r\n onClearClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n // this.control.setValue('');\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"select-with-group\" appearance=\"fill\">\r\n <mat-label>{{ title() }}</mat-label>\r\n <mat-select [formControl]=\"control\" (selectionChange)=\"selectionChange($event)\" multiple>\r\n @for (group of groups(); track group) {\r\n <mat-optgroup [label]=\"group.name\">\r\n @for (item of group.items; track item) {\r\n <mat-option [value]=\"item.value\" >\r\n {{item.viewValue}}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }\r\n\r\n </mat-select>\r\n @if (control.value && control.value!.length > 0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClearClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { AfterViewInit, Component, OnDestroy, OnInit, effect, input, linkedSignal, output, viewChild } from '@angular/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\r\nimport {\r\n MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\r\n MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef,\r\n MatTable, MatTableDataSource, MatTableModule\r\n} from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { RouterLink } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { IColumnOptions } from './models/column-options.interface';\r\nimport { IContextMenuOptions } from './models/context-menu-options.interface';\r\nimport { IPageState, ISortState, ITableState } from './models/table-state';\r\n\r\n@Component({\r\n selector: 'ngx-uik-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n imports: [MatTable, MatSort, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCheckbox, MatCellDef, MatCell,\r\n MatSortHeader, MatIcon, RouterLink, MatNoDataRow, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow,\r\n MatMenuTrigger, MatMenu, MatMenuContent, MatDivider, MatMenuItem, MatPaginator, MatFooterRowDef, MatFooterRow,\r\n MatFooterCellDef, MatFooterCell, MatTableModule, MatTooltipModule, MatIconButton]\r\n})\r\nexport class TableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\r\n /** Отображаемые данные. */\r\n data = input<T[]>([]);\r\n /** Количество записей. */\r\n length = input<number>(0);\r\n /** Настройки колонок. */\r\n columnOptions = input<IColumnOptions<T>[]>([]);\r\n /** Состояние сортировки, пагинации. */\r\n tableState = input.required<ITableState>();\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = input<boolean>(false);\r\n /** Список элементов контекстного меню. */\r\n opt = input<IContextMenuOptions<T>[]>([]);\r\n /** Отправка события rowDoubleClicked (при двойном щелчке мышью) отключена. */\r\n rowDblClickedDisable = input<boolean>(false);\r\n /** Отображать строку с итогом. */\r\n footer = input<boolean>(false);\r\n\r\n /** Изменение страницы. */\r\n pageStateChange = output<IPageState>();\r\n /** Изменение сортировки. */\r\n sortStateChange = output<ISortState>();\r\n /** Изменение выбранных записей. */\r\n selectionChange = output<T[]>();\r\n /** Двойной щелчек ЛКМ*/\r\n rowDoubleClicked = output<T>();\r\n\r\n readonly sort = viewChild(MatSort);\r\n readonly paginator = viewChild(MatPaginator);\r\n readonly contextMenu = viewChild(MatMenuTrigger);\r\n\r\n pageState = linkedSignal<IPageState>(() => {\r\n return { pageIndex: this.tableState().pageIndex, pageSize: this.tableState().pageSize };\r\n });\r\n\r\n sortState = linkedSignal<ISortState>(() => {\r\n return { sortActive: this.tableState().sortActive, sortDirection: this.tableState().sortDirection };\r\n });\r\n\r\n /** Выбранная строка, для которого будет показываться меню при нажатии правой кнопки мыши. */\r\n itemForMenu?: T;\r\n /** Позиция в которой отображается контекстное меню. */\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n /** Источник данных для отображения. */\r\n dataSource = new MatTableDataSource<T>();\r\n\r\n /** Выбранные записи. */\r\n selection: SelectionModel<T> = new SelectionModel<T>();\r\n\r\n /** Список отображаемых колонок (формируется из @columnOptions). */\r\n displayedColumns?: string[];\r\n\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.dataSource.data = this.data();\r\n\r\n // сохранить выделенные строки, если они все еще есть в данных\r\n const selected = this.selection.selected;\r\n this.selection.clear();\r\n this.data().filter(v => selected.map(s => JSON.stringify(s)).includes(JSON.stringify(v))).map(d => {\r\n this.selection.select(d);\r\n });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.displayedColumns = ['select'].concat(this.columnOptions()?.filter(c => !c.hide).map((item) => item.name) || []);\r\n\r\n // пересоздаем, т.к. параметр allowMultiSelect появляется только сейчас\r\n this.selection = new SelectionModel<T>(this.allowMultiSelect());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // подписи элементов управления пагинатора (MatPaginatorIntl)\r\n const paginator = this.paginator();\r\n if (paginator) {\r\n paginator._intl.itemsPerPageLabel = 'Записей на странице';\r\n paginator._intl.firstPageLabel = 'Первая страница';\r\n paginator._intl.previousPageLabel = 'Предыдущая страница';\r\n paginator._intl.nextPageLabel = 'Следующая страница';\r\n paginator._intl.lastPageLabel = 'Последняя страница';\r\n\r\n // изменение пагинации\r\n const subs = paginator.page.subscribe(page => {\r\n const pageState = {\r\n pageIndex: page.pageIndex,\r\n pageSize: page.pageSize\r\n } as IPageState;\r\n this.pageState.set(pageState);\r\n this.pageStateChange.emit(pageState);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n // изменение сортировки\r\n const sortValue = this.sort();\r\n if (sortValue) {\r\n const subs = sortValue.sortChange\r\n .subscribe(sort => {\r\n const sortState = {\r\n sortActive: sort.active,\r\n sortDirection: sort.direction\r\n } as ISortState;\r\n this.sortState.set(sortState);\r\n this.sortStateChange.emit(sortState);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n // изменение выбранных записей\r\n if (this.selection) {\r\n const subs = this.selection.changed.subscribe(change => {\r\n this.selectionChange.emit(change.source.selected);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n }\r\n\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.dataSource.data.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n console.log(this.selection.isMultipleSelection());\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.dataSource.data.forEach(row => this.selection.select(row));\r\n }\r\n }\r\n\r\n /** При щелчке по строке. */\r\n onRowClicked(row: T) {\r\n // выделение строки при щелчке по строке\r\n if (this.selection.isSelected(row)) {\r\n this.selection.deselect(row);\r\n } else {\r\n this.selection.select(row);\r\n }\r\n }\r\n\r\n /** При двойном щелчке по строке. */\r\n onRowDblClicked(row: T) {\r\n // выделение строки при двойном щелчке по строке\r\n this.selection.clear();\r\n this.selection.select(row);\r\n if (!this.rowDblClickedDisable())\r\n this.rowDoubleClicked.emit(row);\r\n }\r\n\r\n /** При вызове контекстного меню. */\r\n onContextMenu(event: MouseEvent, itemForMenu: T | undefined) {\r\n if (this.opt() && this.opt().length === 0) {\r\n // если нет пунктов меню, то не показываем меню\r\n return;\r\n }\r\n event.preventDefault();\r\n this.itemForMenu = itemForMenu;\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n // как это (menuData) использовать в шаблоне не понятно, поэтому использую this.itemForMenu\r\n // https://www.concretepage.com/angular-material/passing-data-to-mat-menu-angular-material\r\n const contextMenu = this.contextMenu();\r\n if (contextMenu) {\r\n contextMenu.menuData = { itemForMenu };\r\n contextMenu.menu?.focusFirstItem('mouse');\r\n contextMenu.openMenu();\r\n }\r\n }\r\n\r\n getTotal(columnName: string) {\r\n const arr = this.dataSource.data\r\n .filter(t => typeof t[columnName as keyof T] === 'number')\r\n .map(t => t[columnName as keyof T]);\r\n if (arr.length === 0)\r\n return ''\r\n else\r\n return arr.reduce((acc, value) => acc + <number>value, 0);\r\n }\r\n}\r\n","<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 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 showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\nimport { ProgressSpinnerComponent } from '../shared';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class LoaderService {\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n private readonly overlay = inject(Overlay);\r\n\r\n public show() {\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create();\r\n }\r\n const spinnerOverlayPortal = new ComponentPortal(ProgressSpinnerComponent);\r\n // Исправление ошибки Expression has changed after it was checked\r\n setTimeout(() => {\r\n if (!this.overlayRef?.hasAttached()) {\r\n this.overlayRef?.attach(spinnerOverlayPortal);\r\n }\r\n });\r\n }\r\n\r\n public hide() {\r\n if (this.overlayRef) {\r\n this.overlayRef.detach();\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { API_NAME } from '@kuzntsv/uikit';\r\n\r\n@Injectable({\r\n providedIn: 'root' // Сервис будет доступен глобально во всем приложении\r\n})\r\nexport class SecureImageService {\r\n private readonly http = inject(HttpClient);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n /**\r\n * Загружает защищенное изображение и возвращает SafeUrl\r\n */\r\n getSecureUrl(relativeUrl: string | null | undefined, apiKey: string = 'default'): Observable<SafeUrl | string> {\r\n if (!relativeUrl) {\r\n return of('');\r\n }\r\n\r\n const context = new HttpContext().set(API_NAME, apiKey);\r\n\r\n return this.http.get(relativeUrl, { responseType: 'blob', context }).pipe(\r\n map((blob) => {\r\n const objectUrl = URL.createObjectURL(blob);\r\n return this.sanitizer.bypassSecurityTrustUrl(objectUrl);\r\n }),\r\n catchError((err) => {\r\n console.error(`[SecureImageService] Ошибка загрузки картинки с API \"${apiKey}\":`, err);\r\n return of(''); \r\n })\r\n );\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportService {\r\n\r\n // Экспорт в CSV\r\n exportCSV(data: any, filename = 'data', arrHeader: any, newHeaders: any) {\r\n const csvData = this.convertToCSV(data, arrHeader, newHeaders);\r\n console.log(csvData);\r\n const blob = new Blob(['\\ufeff' + csvData], { type: 'text/csv;charset=utf-8;' });\r\n const dwldLink = document.createElement('a');\r\n const url = URL.createObjectURL(blob);\r\n const isSafariBrowser = navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\r\n if (isSafariBrowser) { //if Safari open in new window to save file with random filename.\r\n dwldLink.setAttribute('target', '_blank');\r\n }\r\n dwldLink.setAttribute('href', url);\r\n dwldLink.setAttribute('download', filename + '.csv');\r\n dwldLink.style.visibility = 'hidden';\r\n document.body.appendChild(dwldLink);\r\n dwldLink.click();\r\n document.body.removeChild(dwldLink);\r\n }\r\n\r\n convertToCSV(objArray: any, headerList: any, newHeaders: any) {\r\n const array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;\r\n let str = '';\r\n let row = 'S.No,';\r\n for (const index in newHeaders) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n row += newHeaders[index] + ',';\r\n }\r\n }\r\n row = row.slice(0, -1);\r\n str += row + '\\r\\n';\r\n for (let i = 0; i < array.length; i++) {\r\n let line = (i + 1) + '';\r\n for (const index in headerList) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n const head = headerList[index];\r\n line += ',' + array[i][head];\r\n }\r\n }\r\n str += line + '\\r\\n';\r\n }\r\n return str;\r\n }\r\n\r\n}\r\n","import { Injectable, inject, NgZone } from \"@angular/core\";\r\nimport { Observable, ReplaySubject } from \"rxjs\";\r\n\r\nimport { SseUser } from \"./models/sse-user\";\r\nimport { Topic } from \"./models/topic\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SseService<T> {\r\n\r\n private zone = inject(NgZone);\r\n\r\n private eventSource: EventSource | null = null;\r\n private isConnected = false;\r\n\r\n constructor() { }\r\n\r\n createSseEventSource(baseUrl: string, user: SseUser, topic: Topic): Observable<T> {\r\n const subject = new ReplaySubject<T>(1);\r\n\r\n // Close any existing connection\r\n this.closeSseEventSource();\r\n\r\n const topicUri = topic.getTopic(baseUrl, user);\r\n // environment.sse_url\r\n this.eventSource = new EventSource(topicUri\r\n //, {withCredentials: true}\r\n );\r\n\r\n if (this.eventSource) {\r\n this.isConnected = true;\r\n\r\n // Listen for messages\r\n this.eventSource.onmessage = (event: MessageEvent) => {\r\n console.log(event);\r\n const messageData: T = JSON.parse(event.data);\r\n this.zone.run(() => {\r\n subject.next(messageData);\r\n });\r\n };\r\n this.eventSource.onopen = () => {\r\n console.log('SSE connection opened.');\r\n };\r\n // Process error\r\n this.eventSource.onerror = (error: any) => {\r\n console.error('SSE error:', error);\r\n this.reconnectOnError(baseUrl, user, topic, subject);\r\n };\r\n }\r\n return subject.asObservable();\r\n }\r\n\r\n private reconnectOnError(baseUrl: string, user: SseUser, topic: Topic, subject: ReplaySubject<T>): void {\r\n\r\n this.closeSseEventSource();\r\n if (this.isConnected) return; // Prevent duplicate connections\r\n\r\n console.log('Reconnecting to SSE in 1 second...');\r\n setTimeout(() => {\r\n this.zone.run(() => {\r\n this.createSseEventSource(baseUrl, user, topic).subscribe(subject);\r\n });\r\n }, 1000);\r\n }\r\n\r\n closeSseEventSource(): void {\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n this.eventSource = null;\r\n this.isConnected = false;\r\n console.log('SSE Connection closed');\r\n }\r\n }\r\n}","import { Component, inject, input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { finalize } from 'rxjs';\r\n\r\nimport { Authenticate } from '../../models/authenticate';\r\nimport { AuthService, UIKIT_NOTIFICATION_TOKEN } from '@kuzntsv/uikit';\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\nimport { PermitFormComponent } from '../permit-form/permit-form.component';\r\nimport { LoaderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-page',\r\n templateUrl: 'login-page.component.html',\r\n styleUrls: ['login-page.component.scss'],\r\n imports: [LoginFormComponent, PermitFormComponent],\r\n})\r\nexport class LoginPageComponent implements OnInit {\r\n pending: boolean = false;\r\n error: string = '';\r\n isKiosk: boolean = false;\r\n /**\r\n * Идентификатор АС получаем автоматически из ActivatedRoute Data!\r\n * (Для этого в настройках роутера должен быть включен withComponentInputBinding())\r\n */\r\n idCas = input<number>(0);\r\n\r\n private readonly authService = inject(AuthService);\r\n private readonly router = inject(Router);\r\n private readonly loaderService = inject(LoaderService);\r\n private readonly notificationService = inject(UIKIT_NOTIFICATION_TOKEN, {\r\n optional: true,\r\n });\r\n\r\n ngOnInit() {\r\n if (\r\n localStorage.getItem('id_human') ||\r\n localStorage.getItem('kiosk-keyboard-layout')\r\n ) {\r\n // this.isKiosk = true;\r\n }\r\n }\r\n\r\n onSubmit($event: Authenticate) {\r\n this.loaderService.show();\r\n this.pending = true;\r\n\r\n this.authService\r\n .login($event.username, $event.password, this.idCas())\r\n .pipe(\r\n // Очищаем состояние лоадеров ВСЕГДА (и при успехе, и при ошибке)\r\n finalize(() => {\r\n this.pending = false;\r\n this.loaderService.hide();\r\n }),\r\n )\r\n .subscribe({\r\n next: () => this.handleSuccessLogin(),\r\n error: (error) => {\r\n const errorMsg =\r\n error.error?.message || error.message || 'Ошибка при авторизации';\r\n this.notificationService?.error(errorMsg, 0);\r\n },\r\n });\r\n }\r\n\r\n onSubmitPermit($event: string) {\r\n const permit = $event;\r\n\r\n this.loaderService.show();\r\n this.pending = true;\r\n\r\n this.authService\r\n .loginByPermit(permit, this.idCas())\r\n .pipe(\r\n // Очищаем состояние лоадеров ВСЕГДА (и при успехе, и при ошибке)\r\n finalize(() => {\r\n this.pending = false;\r\n this.loaderService.hide();\r\n }),\r\n )\r\n .subscribe({\r\n next: () => this.handleSuccessLogin(),\r\n error: (error) => {\r\n const errorMsg =\r\n error.error?.message || error.message || 'Ошибка при авторизации';\r\n this.notificationService?.error(errorMsg, 0);\r\n },\r\n });\r\n }\r\n\r\n private handleSuccessLogin(): void {\r\n this.notificationService?.success('Успешная авторизация');\r\n\r\n // ЛОГИКА ВОЗВРАТА ПОСЛЕ УСПЕШНОГО ЛОГИНА\r\n if (this.router) {\r\n // Извлекаем returnUrl из текущего query-параметра текущего маршрута\r\n const currentUrlTree = this.router.parseUrl(this.router.url);\r\n const returnUrl = currentUrlTree.queryParamMap.get('returnUrl');\r\n\r\n if (returnUrl) {\r\n // Декодируем и перенаправляем пользователя туда, где он был\r\n this.router.navigateByUrl(decodeURIComponent(returnUrl));\r\n return;\r\n }\r\n\r\n // Если returnUrl нет, идем на главную\r\n this.router.navigate(['/']);\r\n }\r\n\r\n // Логика перенаправления обратно: достаем returnUrl из текущих query-параметров страницы логина\r\n const currentUrlTree = this.router.parseUrl(this.router.url);\r\n const returnUrl = currentUrlTree.queryParamMap.get('returnUrl');\r\n\r\n if (returnUrl) {\r\n this.router.navigateByUrl(decodeURIComponent(returnUrl));\r\n }\r\n {\r\n this.router.navigate(['/']); // дефолтный роут, если returnUrl нет\r\n }\r\n }\r\n}\r\n","@if (!isKiosk) {\r\n <ngx-uik-login-form\r\n (submitted)=\"onSubmit($event)\"\r\n [pending]=\"pending\"\r\n [errorMessage]=\"error\">\r\n </ngx-uik-login-form>\r\n }\r\n @if (isKiosk) {\r\n <ngx-uik-permit-form\r\n (submitted)=\"onSubmitPermit($event)\"\r\n >\r\n </ngx-uik-permit-form>\r\n }","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfRole]',\r\n standalone: true\r\n})\r\nexport class DisableIfRoleDirective {\r\n readonly forbiddenRoles = input<string[]>([], { alias: 'ngxUikDisableIfRole' });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n // Спрашиваем у сервиса, заблокирована ли данная конфигурация ролей\r\n const shouldDisable = this.roleService.hasForbiddenRole(this.forbiddenRoles());\r\n\r\n\r\n // 2. Безопасное управление атрибутом для любых элементов\r\n const nativeEl = this.el.nativeElement;\r\n \r\n if ('disabled' in nativeEl) {\r\n nativeEl.disabled = shouldDisable;\r\n } else {\r\n // Для элементов вроде <a>, у которых нет свойства disabled в DOM API\r\n if (shouldDisable) {\r\n nativeEl.setAttribute('disabled', 'true');\r\n } else {\r\n nativeEl.removeAttribute('disabled');\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfForbiddenRole]',\r\n standalone: true,\r\n})\r\nexport class HideIfForbiddenRoleDirective {\r\n readonly forbiddenRoles = input<string[]>([], {\r\n alias: 'ngxUikHideIfForbiddenRole',\r\n });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n // Элемент скрывается, если у пользователя есть запрещенная роль или передан маркер HIDE_ROLE_MARKER\r\n const shouldHide = this.roleService.hasForbiddenRole(\r\n this.forbiddenRoles(),\r\n );\r\n\r\n // Управляем отображением. Пустая строка возвращает дефолтный CSS-стиль элемента.\r\n this.el.nativeElement.style.display = shouldHide ? 'none' : '';\r\n });\r\n }\r\n}\r\n","import { Directive, effect, inject, input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[setValue]',\r\n standalone: true,\r\n})\r\nexport class SetValueDirective {\r\n readonly value = input<any>(null, { alias: 'setValue' });\r\n\r\n // 3. Используем опциональный inject, чтобы директива не падала, если формы нет\r\n private readonly ngControl = inject(NgControl, { optional: true });\r\n\r\n constructor() {\r\n effect(() => {\r\n // Эффект автоматически отслеживает изменение входного значения\r\n const val = this.value();\r\n\r\n // Безопасное приведение undefined к null для стандартизации значений в формах\r\n const normalizedValue = val === undefined ? null : val;\r\n\r\n // Используем проверку, так как на старте ngControl.control может быть еще не создан Angular-ом\r\n if (this.ngControl && this.ngControl.control) {\r\n this.ngControl.control.setValue(normalizedValue, { emitEvent: false });\r\n }\r\n });\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router } from '@angular/router';\r\nimport { AuthService } from '@kuzntsv/uikit';\r\n\r\nexport const authGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const authService = inject(AuthService);\r\n const router = inject(Router);\r\n\r\n const isLogin = authService.loggedIn();\r\n if (!isLogin) {\r\n console.log('state.url =', state.url);\r\n\r\n // Если не зарегистрирован вернуть в форму авторизации\r\n return router.createUrlTree(['/login'], { queryParams: { returnUrl: state.url } });\r\n }\r\n\r\n return isLogin;\r\n };\r\n};","import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';\r\n\r\nexport const redirectGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\r\n const externalUrl = route.data?.['externalUrl'];\r\n \r\n if (externalUrl) {\r\n window.location.href = externalUrl;\r\n }\r\n \r\n return true;\r\n};\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn } from '@angular/router';\r\nimport { RoleService } from '@kuzntsv/uikit';\r\n\r\n/**\r\n * Пускает на роут только тех пользователей, у которых есть роли из списка allowedRoles.\r\n * ADMIN всегда имеет доступ.\r\n */\r\nexport const roleGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const roleService = inject(RoleService);\r\n\r\n // Проверяем доступ на основе аргумента allowedRoles\r\n return roleService.hasAnyRole(allowedRoles);\r\n };\r\n};","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface LoggerConfig {\r\n isProduction: boolean;\r\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\r\n}\r\n\r\nexport const LOGGER_CONFIG = new InjectionToken<LoggerConfig>('LOGGER_CONFIG');\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { LOGGER_CONFIG } from './logger.config';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoggerService {\r\n public logPrefix: string = '';\r\n private isProduction: boolean;\r\n private readonly config = inject(LOGGER_CONFIG);\r\n\r\n constructor() {\r\n this.isProduction = this.config.isProduction;\r\n }\r\n\r\n log(message: string, ...args: any[]) {\r\n if (!this.isProduction) {\r\n // Prepend log prefix log string\r\n args.unshift(this.logPrefix + ' ');\r\n console.log(`[DEV LOG]: ${message}`, ...args);\r\n }else {\r\n console.log(`[PROD LOG]: ${message}`, ...args);\r\n }\r\n }\r\n\r\n error(message: string, ...args: any[]): void {\r\n console.error(`[ERROR]: ${message}`, ...args);\r\n }\r\n}\r\n\r\n\r\n\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { LOGGER_CONFIG, LoggerConfig } from './logger.config';\r\nimport { LoggerService } from './logger.service';\r\n\r\n\r\nexport function provideLogger(config: LoggerConfig): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: LOGGER_CONFIG, useValue: config },\r\n LoggerService\r\n ]);\r\n};\r\n","import { Deserializable } from './deserializable.model';\r\nimport { SecUserView } from './sec-user-view.model';\r\n\r\nexport class SecUser implements Deserializable {\r\n id: number = 0;\r\n login: string = '';\r\n fio: string = '';\r\n dept: number = 0;\r\n tabnum: number = 0;\r\n userView: SecUserView | undefined;\r\n\r\n public constructor(init: SecUser) {\r\n if (init) {\r\n Object.assign(this, init);\r\n } else {\r\n this.id = 0;\r\n this.login = '';\r\n this.dept = 0;\r\n this.tabnum = 0;\r\n this.fio = '';\r\n }\r\n }\r\n\r\n deserialize(input: any): this {\r\n Object.assign(this, input);\r\n return this;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of uikit\r\n */\r\n\r\nexport * from './auth';\r\nexport * from './base';\r\nexport * from './directives';\r\nexport * from './guards';\r\nexport * from './logger';\r\nexport * from './models';\r\nexport * from './pipes';\r\nexport * from './services';\r\nexport * from './shared';\r\nexport * from './types';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","startWith","i3","MatOption","MatFormField","MatLabel"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kuzntsv/uikit",
3
- "version": "1.0.19",
3
+ "version": "1.0.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.1.0",
6
6
  "@angular/core": "^21.1.0"
@@ -8,7 +8,6 @@ import { MatDialogRef, MatDialog } from '@angular/material/dialog';
8
8
  import { Observable, Subscription, Subject } from 'rxjs';
9
9
  import { Router, CanActivateFn } from '@angular/router';
10
10
  import { HttpClient, HttpParams } from '@angular/common/http';
11
- import * as _angular_platform_browser from '@angular/platform-browser';
12
11
  import { SafeUrl } from '@angular/platform-browser';
13
12
  import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
14
13
  import { SelectionModel } from '@angular/cdk/collections';
@@ -739,7 +738,7 @@ declare class SecUser implements Deserializable {
739
738
 
740
739
  declare class SafePipe implements PipeTransform {
741
740
  private readonly sanitizer;
742
- transform(url: string): _angular_platform_browser.SafeResourceUrl;
741
+ transform(url: string | SafeUrl | null | undefined): SafeUrl;
743
742
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SafePipe, never>;
744
743
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<SafePipe, "safe", true>;
745
744
  }
@@ -837,7 +836,7 @@ declare class NavBarComponent extends BaseNavBarMenuClass {
837
836
  /** Всплывающая подсказка о пользователе. */
838
837
  userTooltip: _angular_core.InputSignal<string>;
839
838
  /** URL аватара */
840
- avatarURL: _angular_core.InputSignal<string>;
839
+ avatarURL: _angular_core.InputSignal<string | SafeUrl>;
841
840
  /** Нажата кнопка "Выйти". */
842
841
  logout: _angular_core.OutputEmitterRef<string>;
843
842
  private readonly dialog;