@indigina/ui-kit 1.1.129 → 1.1.131

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.
Files changed (27) hide show
  1. package/fesm2022/indigina-ui-kit.mjs +786 -27
  2. package/fesm2022/indigina-ui-kit.mjs.map +1 -1
  3. package/lib/components/kit-navigation-menu/kit-navigation-menu.component.d.ts +4 -4
  4. package/lib/i18n/kit-translations.d.ts +2 -0
  5. package/lib/services/api/kit-settings-api/kit-settings-api.model.d.ts +9 -0
  6. package/lib/services/api/kit-settings-api/kit-settings-api.service.d.ts +14 -0
  7. package/lib/services/kit-translate/kit-translate.service.d.ts +9 -0
  8. package/lib/store/abstract-payload.action.d.ts +4 -0
  9. package/lib/store/store.const.d.ts +2 -0
  10. package/lib/store/store.model.d.ts +5 -0
  11. package/lib/token/kit-base-path.token.d.ts +2 -0
  12. package/lib/widgets/kit-grid-management/kit-grid-filters/kit-grid-filters.model.d.ts +18 -0
  13. package/lib/widgets/kit-grid-management/kit-grid-filters/kit-grid-filters.util.d.ts +3 -0
  14. package/lib/widgets/kit-grid-management/kit-grid-management.util.d.ts +3 -0
  15. package/lib/widgets/kit-grid-management/kit-grid-views/kit-grid-views-list/kit-grid-views-list.component.d.ts +50 -0
  16. package/lib/widgets/kit-grid-management/kit-grid-views/kit-grid-views-manager/kit-grid-views-manager.component.d.ts +25 -0
  17. package/lib/widgets/kit-grid-management/kit-grid-views/kit-grid-views-save/kit-grid-views-save.component.d.ts +38 -0
  18. package/lib/widgets/kit-grid-management/kit-grid-views/kit-grid-views.component.d.ts +38 -0
  19. package/lib/widgets/kit-grid-management/kit-grid-views/kit-grid-views.util.d.ts +13 -0
  20. package/lib/widgets/kit-grid-management/kit-grid-views/store/kit-grid-views.action.d.ts +23 -0
  21. package/lib/widgets/kit-grid-management/kit-grid-views/store/kit-grid-views.model.d.ts +33 -0
  22. package/lib/widgets/kit-grid-management/kit-grid-views/store/kit-grid-views.state.d.ts +25 -0
  23. package/lib/widgets/kit-grid-management/store/kit-grid.action.d.ts +25 -0
  24. package/lib/widgets/kit-grid-management/store/kit-grid.model.d.ts +18 -0
  25. package/lib/widgets/kit-grid-management/store/kit-grid.state.d.ts +18 -0
  26. package/package.json +1 -1
  27. package/public-api.d.ts +11 -0
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ChangeDetectionStrategy, Input, input, EventEmitter, ViewEncapsulation, Output, NgModule, effect, inject, ElementRef, NgZone, Renderer2, Directive, forwardRef, signal, TemplateRef, ContentChild, ViewChild, HostListener, Injectable, output, Host, Self, Inject, contentChildren, viewChild, ContentChildren, computed, contentChild } from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, Input, input, EventEmitter, ViewEncapsulation, Output, NgModule, effect, inject, ElementRef, NgZone, Renderer2, Directive, forwardRef, signal, TemplateRef, ContentChild, ViewChild, HostListener, Injectable, output, Host, Self, Inject, model, contentChildren, viewChild, ContentChildren, computed, contentChild, InjectionToken } from '@angular/core';
3
3
  import * as i1 from '@progress/kendo-angular-buttons';
4
4
  import { ButtonModule, ButtonGroupModule } from '@progress/kendo-angular-buttons';
5
5
  import * as i1$1 from '@angular/common';
6
- import { CommonModule, NgClass, DOCUMENT, NgTemplateOutlet, DatePipe } from '@angular/common';
6
+ import { CommonModule, NgClass, DOCUMENT, NgTemplateOutlet, DatePipe, TitleCasePipe, AsyncPipe } from '@angular/common';
7
7
  import * as i1$2 from '@progress/kendo-angular-label';
8
8
  import { LabelModule } from '@progress/kendo-angular-label';
9
9
  import { TooltipDirective, TooltipSettings } from '@progress/kendo-angular-tooltip';
@@ -23,15 +23,16 @@ import * as i1$6 from 'ngx-toastr';
23
23
  import { ToastrModule, TOAST_CONFIG, DefaultGlobalConfig } from 'ngx-toastr';
24
24
  import * as i1$7 from '@angular/router';
25
25
  import { RouterModule, NavigationEnd, RouterLink } from '@angular/router';
26
- import { BehaviorSubject, filter } from 'rxjs';
26
+ import { BehaviorSubject, filter, of, tap, map, combineLatest, combineLatestWith, distinctUntilChanged } from 'rxjs';
27
27
  import { v4 } from 'uuid';
28
28
  import * as i1$8 from '@progress/kendo-angular-dialog';
29
- import { KENDO_DIALOGS, DialogActionsComponent } from '@progress/kendo-angular-dialog';
29
+ import { KENDO_DIALOGS, DialogActionsComponent, DialogContentBase, DialogCloseResult } from '@progress/kendo-angular-dialog';
30
30
  export { DialogAction, DialogCloseResult, DialogContentBase, DialogRef } from '@progress/kendo-angular-dialog';
31
31
  import * as i1$9 from '@progress/kendo-angular-indicators';
32
32
  import { IndicatorsModule } from '@progress/kendo-angular-indicators';
33
33
  import * as i2$1 from '@progress/kendo-angular-upload';
34
34
  import { UploadModule } from '@progress/kendo-angular-upload';
35
+ import * as i1$b from '@angular/common/http';
35
36
  import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
36
37
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
37
38
  import initials from 'initials';
@@ -49,6 +50,14 @@ export { pdf } from '@progress/kendo-drawing';
49
50
  import * as i2$4 from '@progress/kendo-angular-sortable';
50
51
  import { KENDO_SORTABLE } from '@progress/kendo-angular-sortable';
51
52
  import { toODataString } from '@progress/kendo-data-query';
53
+ import * as i4 from '@ngx-translate/core';
54
+ import { TranslateModule } from '@ngx-translate/core';
55
+ import { __decorate } from 'tslib';
56
+ import * as i1$c from '@ngxs/store';
57
+ import { StateToken, Action, State, createSelector, Selector } from '@ngxs/store';
58
+ import { patch, append, removeItem, updateItem } from '@ngxs/store/operators';
59
+ import { signalSetFn, SIGNAL } from '@angular/core/primitives/signals';
60
+ import { StateReset } from 'ngxs-reset-plugin';
52
61
 
53
62
  var KitSvgIcon;
54
63
  (function (KitSvgIcon) {
@@ -4002,11 +4011,11 @@ class KitNavigationMenuComponent {
4002
4011
  /**
4003
4012
  * An items list which is going to be rendered as menu items
4004
4013
  */
4005
- this.menuItems = [];
4014
+ this.menuItems = model([]);
4006
4015
  /**
4007
4016
  * An items list which is going to be rendered as apps menu items
4008
4017
  */
4009
- this.appsMenuItems = [];
4018
+ this.appsMenuItems = input([]);
4010
4019
  this.logoPath = '';
4011
4020
  this.selectedItem = signal(null);
4012
4021
  this.selectedAppsItems = signal(null);
@@ -4017,16 +4026,16 @@ class KitNavigationMenuComponent {
4017
4026
  this.setExpandedStateOnRouterChange();
4018
4027
  }
4019
4028
  ngOnInit() {
4020
- this.updateNavigationState(this.menuItems, this.router.url);
4029
+ this.updateNavigationState(this.menuItems(), this.router.url);
4021
4030
  }
4022
4031
  handleClick(item) {
4023
- !item.items ? this.collapseAllItems(this.menuItems) : this.toggleItem(item);
4032
+ !item.items ? this.collapseAllItems(this.menuItems()) : this.toggleItem(item);
4024
4033
  this.selectedAppsItems.set(null);
4025
4034
  this.selectedItem.set(item);
4026
4035
  this.updateMenuState();
4027
4036
  }
4028
4037
  handleLogoClick() {
4029
- this.collapseAllItems(this.menuItems);
4038
+ this.collapseAllItems(this.menuItems());
4030
4039
  this.selectedAppsItems.set(null);
4031
4040
  this.selectedItem.set(null);
4032
4041
  this.updateMenuState();
@@ -4034,17 +4043,16 @@ class KitNavigationMenuComponent {
4034
4043
  onAppsMenuButtonClick() {
4035
4044
  if (this.selectedAppsItems() && !this.collapsed()) {
4036
4045
  this.selectedAppsItems.set(null);
4037
- this.collapseAllItems(this.menuItems);
4046
+ this.collapseAllItems(this.menuItems());
4038
4047
  }
4039
4048
  else {
4040
4049
  this.kitNavigationMenuService.setCollapsedState(false);
4041
- this.menuItems.forEach(item => item.expanded = false);
4042
- this.selectedAppsItems.set(this.appsMenuItems);
4050
+ this.selectedAppsItems.set(this.appsMenuItems());
4043
4051
  }
4044
4052
  this.updateMenuState();
4045
4053
  }
4046
4054
  setExpandedStateOnRouterChange() {
4047
- this.router.events.pipe(filter(event => event instanceof NavigationEnd), takeUntilDestroyed()).subscribe(() => this.updateNavigationState(this.menuItems, this.router.url));
4055
+ this.router.events.pipe(filter(event => event instanceof NavigationEnd), takeUntilDestroyed()).subscribe(() => this.updateNavigationState(this.menuItems(), this.router.url));
4048
4056
  }
4049
4057
  updateNavigationState(items, url) {
4050
4058
  const matchLink = (item) => !!(item.link && url.startsWith(item.link));
@@ -4057,7 +4065,6 @@ class KitNavigationMenuComponent {
4057
4065
  if (item.expanded) {
4058
4066
  this.selectedItem.set(item);
4059
4067
  this.selectedAppsItems.set(null);
4060
- this.kitNavigationMenuService.setCollapsedState(false);
4061
4068
  this.updateMenuState();
4062
4069
  }
4063
4070
  }
@@ -4067,30 +4074,27 @@ class KitNavigationMenuComponent {
4067
4074
  if (item.active) {
4068
4075
  this.selectedItem.set(item);
4069
4076
  this.selectedAppsItems.set(null);
4070
- this.kitNavigationMenuService.setCollapsedState(true);
4071
4077
  this.updateMenuState();
4072
4078
  }
4073
4079
  }
4074
4080
  });
4081
+ this.menuItems.set([...items]);
4075
4082
  }
4076
4083
  collapseAllItems(items) {
4077
4084
  this.kitNavigationMenuService.setCollapsedState(true);
4078
4085
  items.forEach(item => item.expanded = false);
4079
4086
  }
4080
4087
  toggleItem(item) {
4081
- if (this.collapsed() || item.expanded) {
4088
+ if (this.collapsed() || (!this.selectedAppsItems() && this.selectedItem() === item)) {
4082
4089
  this.kitNavigationMenuService.setCollapsedState(!this.collapsed());
4083
4090
  }
4084
- else {
4085
- this.menuItems.forEach(item => item.expanded = false);
4086
- }
4087
4091
  item.expanded = !item.expanded;
4088
4092
  }
4089
4093
  updateMenuState() {
4090
4094
  this.kitNavigationMenuService.setSelectedState(!!this.selectedItem()?.items, !!this.selectedAppsItems());
4091
4095
  }
4092
4096
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitNavigationMenuComponent, deps: [{ token: i1$7.Router }, { token: KitNavigationMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
4093
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: KitNavigationMenuComponent, isStandalone: false, selector: "kit-navigation-menu", inputs: { menuItems: "menuItems", appsMenuItems: "appsMenuItems", logoPath: "logoPath" }, ngImport: i0, template: "<div class=\"kit-navigation-menu\"\n [class.collapsed]=\"collapsed()\">\n <div class=\"main-panel\">\n @if (appsMenuItems.length > 1) {\n <button class=\"app-btn\"\n [class.active]=\"selectedAppsItems() && !collapsed()\"\n (click)=\"onAppsMenuButtonClick()\">\n <kit-svg-icon class=\"app-btn-icon\"\n [icon]=\"KitSvgIcon.FOUR_SQUARE\"\n ></kit-svg-icon>\n </button>\n }\n <div class=\"nav-list\">\n @for (item of menuItems; track item) {\n @if (item.items?.length) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n @if (item.link) {\n <a class=\"nav-link\"\n routerLinkActive=\"active\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [routerLink]=\"item?.link\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n }\n }\n }\n </div>\n </div>\n\n @if (!collapsed() && (selectedItem()?.items || selectedAppsItems())) {\n <kit-navigation-menu-submenu class=\"sub-panel\"\n [@widthExpandCollapseAnimation]\n [menuItem]=\"selectedItem()\"\n [appsMenuItems]=\"selectedAppsItems()\"\n [logoPath]=\"logoPath\"\n (logoClicked)=\"handleLogoClick()\"\n ></kit-navigation-menu-submenu>\n }\n\n <ng-template #linkIconTemplate let-item>\n <kit-svg-icon class=\"nav-link-icon\"\n [icon]=\"item.icon\"\n [ngClass]=\"item?.iconType ?? KitSvgIconType.FILL\"\n ></kit-svg-icon>\n </ng-template>\n</div>\n", styles: [".kit-navigation-menu{display:flex;height:100%}.kit-navigation-menu .app-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;border-radius:8px;cursor:pointer}.kit-navigation-menu .app-btn-icon{width:16px;height:16px;fill:var(--ui-kit-color-white);stroke:var(--ui-kit-color-white)}.kit-navigation-menu .app-btn:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .app-btn.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .main-panel{display:flex;flex-direction:column;padding:25px 10px;width:56px;box-sizing:border-box}.kit-navigation-menu .main-panel:has(.app-btn){gap:46px}.kit-navigation-menu .main-panel:has(.app-btn) .nav-list{margin-top:0}.kit-navigation-menu .sub-panel{display:block;width:200px;overflow:hidden}.kit-navigation-menu .nav-list{display:flex;flex-direction:column;gap:30px;margin-top:82px}.kit-navigation-menu .nav-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer}.kit-navigation-menu .nav-link:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .nav-link.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .nav-link-icon{display:block;width:16px;height:16px;flex-shrink:0}.kit-navigation-menu .nav-link-icon.fill{fill:var(--ui-kit-color-white);stroke:none}.kit-navigation-menu .nav-link-icon.stroke{fill:none;stroke:var(--ui-kit-color-white)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KitSvgIconComponent, selector: "kit-svg-icon", inputs: ["icon", "iconClass"] }, { kind: "directive", type: i1$7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$7.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: KitNavigationMenuSubmenuComponent, selector: "kit-navigation-menu-submenu", inputs: ["menuItem", "appsMenuItems", "logoPath"], outputs: ["logoClicked"] }, { kind: "directive", type: KitTooltipDirective, selector: "[kitTooltip]", inputs: ["kitTooltipPosition", "kitTooltipFilter", "kitTooltipTemplateRef", "kitTooltipVisible"] }], animations: [
4097
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: KitNavigationMenuComponent, isStandalone: false, selector: "kit-navigation-menu", inputs: { menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, appsMenuItems: { classPropertyName: "appsMenuItems", publicName: "appsMenuItems", isSignal: true, isRequired: false, transformFunction: null }, logoPath: { classPropertyName: "logoPath", publicName: "logoPath", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menuItems: "menuItemsChange" }, ngImport: i0, template: "<div class=\"kit-navigation-menu\"\n [class.collapsed]=\"collapsed()\">\n <div class=\"main-panel\">\n @if (appsMenuItems().length > 1) {\n <button class=\"app-btn\"\n [class.active]=\"selectedAppsItems() && !collapsed()\"\n (click)=\"onAppsMenuButtonClick()\">\n <kit-svg-icon class=\"app-btn-icon\"\n [icon]=\"KitSvgIcon.FOUR_SQUARE\"\n ></kit-svg-icon>\n </button>\n }\n <div class=\"nav-list\">\n @for (item of menuItems(); track $index) {\n @if (item.items?.length) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n @if (item.link) {\n <a class=\"nav-link\"\n routerLinkActive=\"active\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [routerLink]=\"item.link\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n }\n }\n }\n </div>\n </div>\n\n @if (!collapsed() && (selectedItem()?.items || selectedAppsItems())) {\n <kit-navigation-menu-submenu class=\"sub-panel\"\n [@widthExpandCollapseAnimation]\n [menuItem]=\"selectedItem()\"\n [appsMenuItems]=\"selectedAppsItems()\"\n [logoPath]=\"logoPath\"\n (logoClicked)=\"handleLogoClick()\"\n ></kit-navigation-menu-submenu>\n }\n\n <ng-template #linkIconTemplate let-item>\n <kit-svg-icon class=\"nav-link-icon\"\n [icon]=\"item.icon\"\n [ngClass]=\"item?.iconType ?? KitSvgIconType.FILL\"\n ></kit-svg-icon>\n </ng-template>\n</div>\n", styles: [".kit-navigation-menu{display:flex;height:100%}.kit-navigation-menu .app-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;border-radius:8px;cursor:pointer}.kit-navigation-menu .app-btn-icon{width:16px;height:16px;fill:var(--ui-kit-color-white);stroke:var(--ui-kit-color-white)}.kit-navigation-menu .app-btn:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .app-btn.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .main-panel{display:flex;flex-direction:column;padding:25px 10px;width:56px;box-sizing:border-box}.kit-navigation-menu .main-panel:has(.app-btn){gap:46px}.kit-navigation-menu .main-panel:has(.app-btn) .nav-list{margin-top:0}.kit-navigation-menu .sub-panel{display:block;width:200px;overflow:hidden}.kit-navigation-menu .nav-list{display:flex;flex-direction:column;gap:30px;margin-top:82px}.kit-navigation-menu .nav-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer}.kit-navigation-menu .nav-link:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .nav-link.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .nav-link-icon{display:block;width:16px;height:16px;flex-shrink:0}.kit-navigation-menu .nav-link-icon.fill{fill:var(--ui-kit-color-white);stroke:none}.kit-navigation-menu .nav-link-icon.stroke{fill:none;stroke:var(--ui-kit-color-white)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KitSvgIconComponent, selector: "kit-svg-icon", inputs: ["icon", "iconClass"] }, { kind: "directive", type: i1$7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$7.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: KitNavigationMenuSubmenuComponent, selector: "kit-navigation-menu-submenu", inputs: ["menuItem", "appsMenuItems", "logoPath"], outputs: ["logoClicked"] }, { kind: "directive", type: KitTooltipDirective, selector: "[kitTooltip]", inputs: ["kitTooltipPosition", "kitTooltipFilter", "kitTooltipTemplateRef", "kitTooltipVisible"] }], animations: [
4094
4098
  expandCollapseAnimation('width'),
4095
4099
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4096
4100
  }
@@ -4098,12 +4102,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
4098
4102
  type: Component,
4099
4103
  args: [{ selector: 'kit-navigation-menu', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
4100
4104
  expandCollapseAnimation('width'),
4101
- ], standalone: false, template: "<div class=\"kit-navigation-menu\"\n [class.collapsed]=\"collapsed()\">\n <div class=\"main-panel\">\n @if (appsMenuItems.length > 1) {\n <button class=\"app-btn\"\n [class.active]=\"selectedAppsItems() && !collapsed()\"\n (click)=\"onAppsMenuButtonClick()\">\n <kit-svg-icon class=\"app-btn-icon\"\n [icon]=\"KitSvgIcon.FOUR_SQUARE\"\n ></kit-svg-icon>\n </button>\n }\n <div class=\"nav-list\">\n @for (item of menuItems; track item) {\n @if (item.items?.length) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n @if (item.link) {\n <a class=\"nav-link\"\n routerLinkActive=\"active\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [routerLink]=\"item?.link\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n }\n }\n }\n </div>\n </div>\n\n @if (!collapsed() && (selectedItem()?.items || selectedAppsItems())) {\n <kit-navigation-menu-submenu class=\"sub-panel\"\n [@widthExpandCollapseAnimation]\n [menuItem]=\"selectedItem()\"\n [appsMenuItems]=\"selectedAppsItems()\"\n [logoPath]=\"logoPath\"\n (logoClicked)=\"handleLogoClick()\"\n ></kit-navigation-menu-submenu>\n }\n\n <ng-template #linkIconTemplate let-item>\n <kit-svg-icon class=\"nav-link-icon\"\n [icon]=\"item.icon\"\n [ngClass]=\"item?.iconType ?? KitSvgIconType.FILL\"\n ></kit-svg-icon>\n </ng-template>\n</div>\n", styles: [".kit-navigation-menu{display:flex;height:100%}.kit-navigation-menu .app-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;border-radius:8px;cursor:pointer}.kit-navigation-menu .app-btn-icon{width:16px;height:16px;fill:var(--ui-kit-color-white);stroke:var(--ui-kit-color-white)}.kit-navigation-menu .app-btn:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .app-btn.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .main-panel{display:flex;flex-direction:column;padding:25px 10px;width:56px;box-sizing:border-box}.kit-navigation-menu .main-panel:has(.app-btn){gap:46px}.kit-navigation-menu .main-panel:has(.app-btn) .nav-list{margin-top:0}.kit-navigation-menu .sub-panel{display:block;width:200px;overflow:hidden}.kit-navigation-menu .nav-list{display:flex;flex-direction:column;gap:30px;margin-top:82px}.kit-navigation-menu .nav-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer}.kit-navigation-menu .nav-link:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .nav-link.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .nav-link-icon{display:block;width:16px;height:16px;flex-shrink:0}.kit-navigation-menu .nav-link-icon.fill{fill:var(--ui-kit-color-white);stroke:none}.kit-navigation-menu .nav-link-icon.stroke{fill:none;stroke:var(--ui-kit-color-white)}\n"] }]
4102
- }], ctorParameters: () => [{ type: i1$7.Router }, { type: KitNavigationMenuService }], propDecorators: { menuItems: [{
4103
- type: Input
4104
- }], appsMenuItems: [{
4105
- type: Input
4106
- }], logoPath: [{
4105
+ ], standalone: false, template: "<div class=\"kit-navigation-menu\"\n [class.collapsed]=\"collapsed()\">\n <div class=\"main-panel\">\n @if (appsMenuItems().length > 1) {\n <button class=\"app-btn\"\n [class.active]=\"selectedAppsItems() && !collapsed()\"\n (click)=\"onAppsMenuButtonClick()\">\n <kit-svg-icon class=\"app-btn-icon\"\n [icon]=\"KitSvgIcon.FOUR_SQUARE\"\n ></kit-svg-icon>\n </button>\n }\n <div class=\"nav-list\">\n @for (item of menuItems(); track $index) {\n @if (item.items?.length) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n @if (item.link) {\n <a class=\"nav-link\"\n routerLinkActive=\"active\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [routerLink]=\"item.link\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n }\n }\n }\n </div>\n </div>\n\n @if (!collapsed() && (selectedItem()?.items || selectedAppsItems())) {\n <kit-navigation-menu-submenu class=\"sub-panel\"\n [@widthExpandCollapseAnimation]\n [menuItem]=\"selectedItem()\"\n [appsMenuItems]=\"selectedAppsItems()\"\n [logoPath]=\"logoPath\"\n (logoClicked)=\"handleLogoClick()\"\n ></kit-navigation-menu-submenu>\n }\n\n <ng-template #linkIconTemplate let-item>\n <kit-svg-icon class=\"nav-link-icon\"\n [icon]=\"item.icon\"\n [ngClass]=\"item?.iconType ?? KitSvgIconType.FILL\"\n ></kit-svg-icon>\n </ng-template>\n</div>\n", styles: [".kit-navigation-menu{display:flex;height:100%}.kit-navigation-menu .app-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;border-radius:8px;cursor:pointer}.kit-navigation-menu .app-btn-icon{width:16px;height:16px;fill:var(--ui-kit-color-white);stroke:var(--ui-kit-color-white)}.kit-navigation-menu .app-btn:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .app-btn.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .main-panel{display:flex;flex-direction:column;padding:25px 10px;width:56px;box-sizing:border-box}.kit-navigation-menu .main-panel:has(.app-btn){gap:46px}.kit-navigation-menu .main-panel:has(.app-btn) .nav-list{margin-top:0}.kit-navigation-menu .sub-panel{display:block;width:200px;overflow:hidden}.kit-navigation-menu .nav-list{display:flex;flex-direction:column;gap:30px;margin-top:82px}.kit-navigation-menu .nav-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer}.kit-navigation-menu .nav-link:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .nav-link.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .nav-link-icon{display:block;width:16px;height:16px;flex-shrink:0}.kit-navigation-menu .nav-link-icon.fill{fill:var(--ui-kit-color-white);stroke:none}.kit-navigation-menu .nav-link-icon.stroke{fill:none;stroke:var(--ui-kit-color-white)}\n"] }]
4106
+ }], ctorParameters: () => [{ type: i1$7.Router }, { type: KitNavigationMenuService }], propDecorators: { logoPath: [{
4107
4107
  type: Input
4108
4108
  }] } });
4109
4109
 
@@ -6348,11 +6348,770 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
6348
6348
 
6349
6349
  const kitDataStateToODataString = (state) => toODataString(state);
6350
6350
 
6351
+ const KIT_BASE_PATH = new InjectionToken('kitBasePath');
6352
+
6353
+ const kitTranslations = {
6354
+ en: {
6355
+ kit: {
6356
+ views: {
6357
+ save: 'Save',
6358
+ cancel: 'Cancel',
6359
+ apply: 'Apply',
6360
+ newView: 'New View',
6361
+ enterText: 'Enter Text',
6362
+ overrideMessage: 'Existing view will be overridden',
6363
+ invalidMessage: 'Special characters are not allowed',
6364
+ noUnsavedChanges: 'No unsaved changes',
6365
+ manageViews: 'Manage Views',
6366
+ views: 'Views',
6367
+ },
6368
+ },
6369
+ },
6370
+ };
6371
+
6372
+ class KitTranslateService {
6373
+ constructor(translateService) {
6374
+ this.translateService = translateService;
6375
+ }
6376
+ registerTranslations() {
6377
+ Object.keys(kitTranslations).forEach(lang => {
6378
+ this.translateService.setTranslation(lang, kitTranslations[lang], true);
6379
+ });
6380
+ }
6381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitTranslateService, deps: [{ token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6382
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitTranslateService, providedIn: 'root' }); }
6383
+ }
6384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitTranslateService, decorators: [{
6385
+ type: Injectable,
6386
+ args: [{
6387
+ providedIn: 'root',
6388
+ }]
6389
+ }], ctorParameters: () => [{ type: i4.TranslateService }] });
6390
+
6391
+ class AbstractPayloadAction {
6392
+ constructor(payload) {
6393
+ this.payload = payload;
6394
+ }
6395
+ }
6396
+
6397
+ class SetGridSkip extends AbstractPayloadAction {
6398
+ static { this.type = '[Grid] SetSkip'; }
6399
+ }
6400
+ class SetGridSort extends AbstractPayloadAction {
6401
+ static { this.type = '[Grid] SetSort'; }
6402
+ }
6403
+ class SetGridColumns extends AbstractPayloadAction {
6404
+ static { this.type = '[Grid] SetColumns'; }
6405
+ }
6406
+ class AddGridFilter extends AbstractPayloadAction {
6407
+ static { this.type = '[Grid] AddFilter'; }
6408
+ }
6409
+ class RemoveGridFilter extends AbstractPayloadAction {
6410
+ static { this.type = '[Grid] RemoveFilter'; }
6411
+ }
6412
+ class UpdateGridFilter extends AbstractPayloadAction {
6413
+ static { this.type = '[Grid] UpdateFilter'; }
6414
+ }
6415
+ class SetGridFilters extends AbstractPayloadAction {
6416
+ static { this.type = '[Grid] SetFilters'; }
6417
+ }
6418
+
6419
+ const KIT_GRID_STATE_TOKEN = new StateToken('grid');
6420
+ let KitGridState = class KitGridState {
6421
+ setGridSkip(ctx, action) {
6422
+ ctx.setState(patch({
6423
+ skip: action.payload,
6424
+ }));
6425
+ }
6426
+ setGridSort(ctx, action) {
6427
+ ctx.setState(patch({
6428
+ sort: action.payload,
6429
+ }));
6430
+ }
6431
+ setGridColumns(ctx, action) {
6432
+ ctx.setState(patch({
6433
+ columns: action.payload,
6434
+ }));
6435
+ }
6436
+ addGridFilter(ctx, action) {
6437
+ const items = ctx.getState().filter;
6438
+ return of(items).pipe(tap(() => ctx.setState(patch({
6439
+ filter: append([action.payload]),
6440
+ }))));
6441
+ }
6442
+ removeGridFilter(ctx, action) {
6443
+ const items = ctx.getState().filter;
6444
+ return of(items).pipe(tap(() => ctx.setState(patch({
6445
+ filter: removeItem(item => item.field === action.payload),
6446
+ }))));
6447
+ }
6448
+ updateGridFilter(ctx, action) {
6449
+ const items = ctx.getState().filter;
6450
+ return of(items).pipe(tap(() => ctx.setState(patch({
6451
+ filter: updateItem(item => item.field === action.payload.field, action.payload),
6452
+ }))));
6453
+ }
6454
+ setGridFilters(ctx, action) {
6455
+ return of(action.payload).pipe(tap(filters => ctx.setState(patch({
6456
+ filter: filters,
6457
+ }))));
6458
+ }
6459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridState, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6460
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridState }); }
6461
+ };
6462
+ __decorate([
6463
+ Action(SetGridSkip)
6464
+ ], KitGridState.prototype, "setGridSkip", null);
6465
+ __decorate([
6466
+ Action(SetGridSort)
6467
+ ], KitGridState.prototype, "setGridSort", null);
6468
+ __decorate([
6469
+ Action(SetGridColumns)
6470
+ ], KitGridState.prototype, "setGridColumns", null);
6471
+ __decorate([
6472
+ Action(AddGridFilter)
6473
+ ], KitGridState.prototype, "addGridFilter", null);
6474
+ __decorate([
6475
+ Action(RemoveGridFilter)
6476
+ ], KitGridState.prototype, "removeGridFilter", null);
6477
+ __decorate([
6478
+ Action(UpdateGridFilter)
6479
+ ], KitGridState.prototype, "updateGridFilter", null);
6480
+ __decorate([
6481
+ Action(SetGridFilters)
6482
+ ], KitGridState.prototype, "setGridFilters", null);
6483
+ KitGridState = __decorate([
6484
+ State({
6485
+ name: KIT_GRID_STATE_TOKEN,
6486
+ defaults: {
6487
+ skip: 0,
6488
+ sort: [],
6489
+ filter: [],
6490
+ columns: [],
6491
+ },
6492
+ })
6493
+ ], KitGridState);
6494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridState, decorators: [{
6495
+ type: Injectable
6496
+ }], propDecorators: { setGridSkip: [], setGridSort: [], setGridColumns: [], addGridFilter: [], removeGridFilter: [], updateGridFilter: [], setGridFilters: [] } });
6497
+
6498
+ const kitBuildGridColumn = (field, title, type, sortable = true, hidden = false, width, filterType) => ({
6499
+ field,
6500
+ title,
6501
+ sortable,
6502
+ hidden,
6503
+ width,
6504
+ filterType,
6505
+ type,
6506
+ });
6507
+
6508
+ var KitGridViewType;
6509
+ (function (KitGridViewType) {
6510
+ KitGridViewType["SYSTEM"] = "system";
6511
+ KitGridViewType["USER"] = "user";
6512
+ KitGridViewType["CONFIG"] = "config";
6513
+ })(KitGridViewType || (KitGridViewType = {}));
6514
+
6515
+ const filterDuplicateGridViews = (views) => views.filter((item, index, arr) => {
6516
+ const duplicateItems = arr.filter(i => i.title === item.title);
6517
+ return duplicateItems.length <= 1 || item.type !== KitGridViewType.SYSTEM;
6518
+ });
6519
+ const findGridViewByName = (views, name) => views.find(view => view.title === name && view.type === KitGridViewType.USER && !view.hidden) ??
6520
+ views.find(view => view.title === name && !view.hidden) ??
6521
+ null;
6522
+ const buildGridViewColumns = (columns) => columns.map(column => ({
6523
+ field: column.field,
6524
+ hidden: column.hidden,
6525
+ }));
6526
+ const hasOverriddenSystemView = (name, views) => views.some(item => item.type === KitGridViewType.SYSTEM && item.title === name);
6527
+ const buildGridColumns = (columns, viewColumns) => viewColumns.map(viewColumn => {
6528
+ const matchingColumn = columns.find(column => column.field === viewColumn.field);
6529
+ return matchingColumn && { ...matchingColumn, hidden: viewColumn.hidden } || null;
6530
+ }).filter(column => !!column);
6531
+ const navigateToView = (name, router, activatedRoute) => {
6532
+ const routePath = kitEncodeViewNameToUrl(name.toLowerCase());
6533
+ router.navigate([`../${routePath}`], { relativeTo: activatedRoute });
6534
+ };
6535
+ const kitEncodeViewNameToUrl = (name) => name.split(' ').join('-');
6536
+ const decodeViewNameFromUrl = (name) => name.split('-').join(' ');
6537
+ const isViewNameValid = (name) => {
6538
+ const specialChars = '!@#$%^&*()_+[]{}|;:,.<>?/~`-=';
6539
+ return [...specialChars].every(item => !name.includes(item));
6540
+ };
6541
+ const getInputMessage = (views, viewName) => {
6542
+ if (!isViewNameValid(viewName)) {
6543
+ return 'kit.views.invalidMessage';
6544
+ }
6545
+ const isViewExist = !!views.find(item => item.title === viewName);
6546
+ return isViewExist && 'kit.views.overrideMessage' || '';
6547
+ };
6548
+
6549
+ class FetchGridViews extends AbstractPayloadAction {
6550
+ static { this.type = '[GridViews] Fetch'; }
6551
+ }
6552
+ class AddGridView extends AbstractPayloadAction {
6553
+ static { this.type = '[GridView] Add'; }
6554
+ }
6555
+ class RemoveGridView extends AbstractPayloadAction {
6556
+ static { this.type = '[GridView] Remove'; }
6557
+ }
6558
+ class SetGridViews extends AbstractPayloadAction {
6559
+ static { this.type = '[GridViews] Set'; }
6560
+ }
6561
+ class FetchGridViewsConfig extends AbstractPayloadAction {
6562
+ static { this.type = '[GridViews] FetchConfig'; }
6563
+ }
6564
+ class UpdateGridViewsConfig extends AbstractPayloadAction {
6565
+ static { this.type = '[GridViews] UpdateConfig'; }
6566
+ }
6567
+ class SetSelectedView extends AbstractPayloadAction {
6568
+ static { this.type = '[GridViews] SetSelectedView'; }
6569
+ }
6570
+
6571
+ const apiResponseDefaultEntities = () => ({
6572
+ data: [],
6573
+ total: 0,
6574
+ loading: true,
6575
+ });
6576
+
6577
+ class KitSettingsApiService {
6578
+ constructor(httpClient, basePath) {
6579
+ this.httpClient = httpClient;
6580
+ this.basePath = basePath;
6581
+ }
6582
+ getSettingsByGroup(group) {
6583
+ const url = `${this.basePath}/users/me/settings/groups/${group}`;
6584
+ return this.httpClient.get(url);
6585
+ }
6586
+ setSettingByKey(key, settingValue) {
6587
+ const url = `${this.basePath}/users/me/settings/${key}`;
6588
+ return this.httpClient.put(url, settingValue);
6589
+ }
6590
+ deleteSettingByGroupAndKey(key, group) {
6591
+ const url = `${this.basePath}/users/me/settings/groups/${group}/${key}`;
6592
+ return this.httpClient.delete(url);
6593
+ }
6594
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitSettingsApiService, deps: [{ token: i1$b.HttpClient }, { token: KIT_BASE_PATH }], target: i0.ɵɵFactoryTarget.Injectable }); }
6595
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitSettingsApiService, providedIn: 'root' }); }
6596
+ }
6597
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitSettingsApiService, decorators: [{
6598
+ type: Injectable,
6599
+ args: [{
6600
+ providedIn: 'root',
6601
+ }]
6602
+ }], ctorParameters: () => [{ type: i1$b.HttpClient }, { type: undefined, decorators: [{
6603
+ type: Inject,
6604
+ args: [KIT_BASE_PATH]
6605
+ }] }] });
6606
+
6607
+ var KitGridViewsState_1;
6608
+ const KIT_GRID_VIEWS_STATE_TOKEN = new StateToken('gridViews');
6609
+ let KitGridViewsState = class KitGridViewsState {
6610
+ static { KitGridViewsState_1 = this; }
6611
+ constructor(settingsService) {
6612
+ this.settingsService = settingsService;
6613
+ }
6614
+ fetchGridViews(ctx, action) {
6615
+ return this.settingsService.getSettingsByGroup(action.payload.group).pipe(map(settings => settings.map(setting => ({
6616
+ title: setting.key,
6617
+ group: setting.group,
6618
+ type: KitGridViewType.USER,
6619
+ value: setting.value && JSON.parse(setting.value),
6620
+ }))), map(values => ([
6621
+ ...action.payload.defaultItems ?? [],
6622
+ ...values,
6623
+ ])), tap(data => ctx.setState(patch({
6624
+ loading: false,
6625
+ data: patch({
6626
+ views: data,
6627
+ }),
6628
+ }))));
6629
+ }
6630
+ addGridView(ctx, action) {
6631
+ const items = ctx.getState().data.views;
6632
+ const formattedPayload = { ...action.payload, title: action.payload.title.toLowerCase() };
6633
+ const { title, group, value } = formattedPayload;
6634
+ const settingValue = {
6635
+ group,
6636
+ value: JSON.stringify(value),
6637
+ };
6638
+ return this.settingsService.setSettingByKey(title, settingValue).pipe(tap(() => {
6639
+ const viewExists = items.some(item => this.hasUserView(item, title));
6640
+ ctx.setState(patch({
6641
+ data: patch({
6642
+ views: viewExists && updateItem(item => this.hasUserView(item, title), formattedPayload) || append([formattedPayload]),
6643
+ }),
6644
+ }));
6645
+ }));
6646
+ }
6647
+ removeGridView(ctx, action) {
6648
+ const { title, group } = action.payload;
6649
+ return this.settingsService.deleteSettingByGroupAndKey(title, group ?? '').pipe(tap(() => ctx.setState(patch({
6650
+ data: patch({
6651
+ views: removeItem(item => this.hasUserView(item, title)),
6652
+ }),
6653
+ }))));
6654
+ }
6655
+ setGridViews(ctx, action) {
6656
+ return of(action.payload).pipe(tap(() => ctx.setState(patch({
6657
+ data: patch({
6658
+ views: action.payload,
6659
+ }),
6660
+ }))));
6661
+ }
6662
+ fetchGridViewsConfig(ctx, action) {
6663
+ return this.settingsService.getSettingsByGroup(action.payload).pipe(map(settings => settings.map(setting => ({
6664
+ title: setting.key,
6665
+ group: setting.group,
6666
+ type: KitGridViewType.CONFIG,
6667
+ value: setting.value && JSON.parse(setting.value),
6668
+ }))), tap(values => ctx.setState(patch({
6669
+ data: patch({
6670
+ config: values[0],
6671
+ }),
6672
+ }))));
6673
+ }
6674
+ updateGridViewsConfig(ctx, action) {
6675
+ const { title, group, value } = action.payload;
6676
+ const settingValue = {
6677
+ group,
6678
+ value: JSON.stringify(value),
6679
+ };
6680
+ return this.settingsService.setSettingByKey(title, settingValue).pipe(tap(() => ctx.setState(patch({
6681
+ data: patch({
6682
+ config: action.payload,
6683
+ }),
6684
+ }))));
6685
+ }
6686
+ setSelectedView(ctx, action) {
6687
+ return of(action.payload).pipe(tap(() => ctx.setState(patch({
6688
+ data: patch({
6689
+ selectedView: action.payload,
6690
+ }),
6691
+ }))));
6692
+ }
6693
+ static getViews() {
6694
+ return createSelector([KitGridViewsState_1], (gridViewsState) => {
6695
+ const views = gridViewsState?.data?.views ?? [];
6696
+ const viewsConfig = gridViewsState?.data?.config?.value?.config ?? null;
6697
+ if (!viewsConfig) {
6698
+ return views;
6699
+ }
6700
+ const areViewsEqual = (firstView, secondView) => firstView.title === secondView.title && firstView.type === secondView.type;
6701
+ const updatedViews = views.map(view => {
6702
+ const configItem = viewsConfig.find(item => areViewsEqual(item, view)) ?? null;
6703
+ return configItem && { ...view, hidden: configItem.hidden } || view;
6704
+ });
6705
+ const existingViews = updatedViews.filter(view => viewsConfig.some(config => areViewsEqual(config, view)));
6706
+ const newViews = updatedViews.filter(view => !viewsConfig.some(config => areViewsEqual(config, view)));
6707
+ return [
6708
+ ...existingViews.sort((a, b) => viewsConfig.findIndex(c => areViewsEqual(c, a)) - viewsConfig.findIndex(c => areViewsEqual(c, b))),
6709
+ ...newViews,
6710
+ ];
6711
+ });
6712
+ }
6713
+ hasUserView(item, title) {
6714
+ return item.type === KitGridViewType.USER && item.title === title;
6715
+ }
6716
+ static selectedView(state) {
6717
+ return state.data.selectedView;
6718
+ }
6719
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsState, deps: [{ token: KitSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6720
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsState }); }
6721
+ };
6722
+ __decorate([
6723
+ Action(FetchGridViews)
6724
+ ], KitGridViewsState.prototype, "fetchGridViews", null);
6725
+ __decorate([
6726
+ Action(AddGridView)
6727
+ ], KitGridViewsState.prototype, "addGridView", null);
6728
+ __decorate([
6729
+ Action(RemoveGridView)
6730
+ ], KitGridViewsState.prototype, "removeGridView", null);
6731
+ __decorate([
6732
+ Action(SetGridViews)
6733
+ ], KitGridViewsState.prototype, "setGridViews", null);
6734
+ __decorate([
6735
+ Action(FetchGridViewsConfig)
6736
+ ], KitGridViewsState.prototype, "fetchGridViewsConfig", null);
6737
+ __decorate([
6738
+ Action(UpdateGridViewsConfig)
6739
+ ], KitGridViewsState.prototype, "updateGridViewsConfig", null);
6740
+ __decorate([
6741
+ Action(SetSelectedView)
6742
+ ], KitGridViewsState.prototype, "setSelectedView", null);
6743
+ __decorate([
6744
+ Selector()
6745
+ ], KitGridViewsState, "selectedView", null);
6746
+ KitGridViewsState = KitGridViewsState_1 = __decorate([
6747
+ State({
6748
+ name: KIT_GRID_VIEWS_STATE_TOKEN,
6749
+ defaults: apiResponseDefaultEntities(),
6750
+ })
6751
+ ], KitGridViewsState);
6752
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsState, decorators: [{
6753
+ type: Injectable
6754
+ }], ctorParameters: () => [{ type: KitSettingsApiService }], propDecorators: { fetchGridViews: [], addGridView: [], removeGridView: [], setGridViews: [], fetchGridViewsConfig: [], updateGridViewsConfig: [], setSelectedView: [] } });
6755
+
6756
+ class KitGridViewsManagerComponent extends DialogContentBase {
6757
+ constructor(store, dialog) {
6758
+ super(dialog);
6759
+ this.store = store;
6760
+ this.dialog = dialog;
6761
+ this.configGroup = input.required();
6762
+ this.items = signal(this.store.selectSnapshot(KitGridViewsState.getViews()) ?? []);
6763
+ this.kitButtonKind = KitButtonKind;
6764
+ this.kitButtonType = KitButtonType;
6765
+ this.kitSvgIcon = KitSvgIcon;
6766
+ this.kitSvgIconType = KitSvgIconType;
6767
+ }
6768
+ applyChanges() {
6769
+ const existingViews = this.store.selectSnapshot(KIT_GRID_VIEWS_STATE_TOKEN).data.views;
6770
+ const viewsToRemove = existingViews
6771
+ .filter(view => !this.items()
6772
+ .some(item => item.title === view.title && item.type === view.type));
6773
+ const viewsToSave = this.items().map(({ value, ...item }) => item);
6774
+ const viewConfig = {
6775
+ title: this.configGroup(),
6776
+ group: this.configGroup(),
6777
+ type: KitGridViewType.CONFIG,
6778
+ value: {
6779
+ config: viewsToSave,
6780
+ },
6781
+ };
6782
+ this.store.dispatch([
6783
+ ...viewsToRemove.map(view => new RemoveGridView(view)),
6784
+ new SetGridViews(this.items()),
6785
+ new UpdateGridViewsConfig(viewConfig),
6786
+ ]).subscribe(() => this.dialog.close(true));
6787
+ }
6788
+ close() {
6789
+ this.dialog.close();
6790
+ }
6791
+ onColumnVisibilityChange(event, view) {
6792
+ this.items.update(items => items
6793
+ .map(item => (item.title === view.title && item.type === view.type) && { ...item, hidden: !event } || item));
6794
+ }
6795
+ isSystemView(item) {
6796
+ return item.type === KitGridViewType.SYSTEM;
6797
+ }
6798
+ onViewRemove(view) {
6799
+ this.items.update(items => items.filter(item => item.title !== view.title || item.type === KitGridViewType.SYSTEM));
6800
+ }
6801
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsManagerComponent, deps: [{ token: i1$c.Store }, { token: i1$8.DialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
6802
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: KitGridViewsManagerComponent, isStandalone: true, selector: "kit-grid-views-manager", inputs: { configGroup: { classPropertyName: "configGroup", publicName: "configGroup", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"kit-grid-views-manager\">\n <kit-sortable itemClass=\"item\"\n activeItemClass=\"item active\"\n [columnCount]=\"2\"\n [items]=\"items()\">\n <ng-template let-item>\n <div class=\"item-wrapper\"\n [ngClass]=\"item.type\">\n <kit-svg-icon class=\"item-icon-menu\"\n [ngClass]=\"{ hidden: item.hidden }\"\n [icon]=\"kitSvgIcon.MENU\"\n ></kit-svg-icon>\n @if (item.hidden) {\n <kit-svg-icon class=\"item-icon-checkbox hidden\"\n [icon]=\"kitSvgIcon.EYE_CLOSE\"\n (click)=\"onColumnVisibilityChange(true, item)\"\n ></kit-svg-icon>\n } @else {\n <kit-svg-icon class=\"item-icon-checkbox\"\n [ngClass]=\"{ disabled: isSystemView(item) }\"\n [icon]=\"kitSvgIcon.EYE_OPEN\"\n (click)=\"onColumnVisibilityChange(false, item)\"\n ></kit-svg-icon>\n }\n <div class=\"item-label\">\n <kit-truncate-text>{{ item.title | titlecase }}</kit-truncate-text>\n </div>\n @if (isSystemView(item)) {\n <kit-svg-icon class=\"item-icon-system\"\n [icon]=\"kitSvgIcon.GLOBAL\"\n ></kit-svg-icon>\n }\n <kit-button [disabled]=\"isSystemView(item)\"\n [type]=\"kitButtonType.LINK\"\n [kind]=\"kitButtonKind.SMALL\"\n [icon]=\"kitSvgIcon.CIRCLE_MINUS\"\n [iconType]=\"kitSvgIconType.STROKE\"\n (clicked)=\"onViewRemove(item)\"\n ></kit-button>\n </div>\n </ng-template>\n </kit-sortable>\n\n <kit-dialog-actions>\n <kit-button [label]=\"'kit.views.cancel' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [type]=\"kitButtonType.GHOST\"\n (clicked)=\"close()\"\n ></kit-button>\n <kit-button [label]=\"'kit.views.apply' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n (clicked)=\"applyChanges()\"\n ></kit-button>\n </kit-dialog-actions>\n</div>\n", styles: [".kit-grid-views-manager{width:452px}.kit-grid-views-manager ::ng-deep .kit-sortable{margin:0 -24px;column-gap:0;column-rule:1px solid var(--color-grey-6)}.kit-grid-views-manager ::ng-deep .item{margin-bottom:8px;padding:8px 25px;min-width:250px;border-radius:8px;box-sizing:border-box;cursor:pointer}.kit-grid-views-manager ::ng-deep .item-wrapper{display:flex;align-items:center;gap:8px}.kit-grid-views-manager ::ng-deep .item .system .item-label{color:var(--color-blue-4)}.kit-grid-views-manager ::ng-deep .item .system .item-icon-system{stroke:var(--color-blue-4)}.kit-grid-views-manager ::ng-deep .item:hover .item-icon{fill:var(--color-hover)}.kit-grid-views-manager ::ng-deep .item-label{flex:1;color:var(--color-grey-4);font-size:14px;font-weight:400;line-height:22px;max-width:110px}.kit-grid-views-manager ::ng-deep .item-icon-menu{margin-right:8px;width:12px;height:12px;fill:var(--color-main)}.kit-grid-views-manager ::ng-deep .item-icon-menu.hidden{fill:var(--color-grey-8)}.kit-grid-views-manager ::ng-deep .item-icon-checkbox{width:18px;height:18px;fill:var(--color-main)}.kit-grid-views-manager ::ng-deep .item-icon-checkbox.disabled{cursor:none;pointer-events:none}.kit-grid-views-manager ::ng-deep .item-icon-checkbox.disabled,.kit-grid-views-manager ::ng-deep .item-icon-checkbox.hidden{fill:var(--color-grey-8)}.kit-grid-views-manager ::ng-deep .item-icon-system{width:18px;height:18px;stroke:var(--color-grey-8);fill:none}.kit-grid-views-manager ::ng-deep .item.active{box-shadow:4px 4px 8px #0003;background:var(--ui-kit-color-white)}.kit-grid-views-manager ::ng-deep .item.active .item-icon{fill:var(--color-main)}\n"], dependencies: [{ kind: "ngmodule", type: KitButtonModule }, { kind: "component", type: KitButtonComponent, selector: "kit-button", inputs: ["disabled", "label", "type", "icon", "iconType", "kind", "state", "iconPosition", "buttonClass", "active"], outputs: ["clicked"] }, { kind: "component", type: KitSortableComponent, selector: "kit-sortable", inputs: ["items", "columnCount", "itemClass", "activeItemClass"] }, { kind: "ngmodule", type: KitSvgIconModule }, { kind: "component", type: KitSvgIconComponent, selector: "kit-svg-icon", inputs: ["icon", "iconClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: KitDialogActionsComponent, selector: "kit-dialog-actions" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "component", type: KitTruncateTextComponent, selector: "kit-truncate-text" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6803
+ }
6804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsManagerComponent, decorators: [{
6805
+ type: Component,
6806
+ args: [{ selector: 'kit-grid-views-manager', imports: [
6807
+ KitButtonModule,
6808
+ KitSortableComponent,
6809
+ KitSvgIconModule,
6810
+ TranslateModule,
6811
+ NgClass,
6812
+ KitDialogActionsComponent,
6813
+ TitleCasePipe,
6814
+ KitTruncateTextComponent,
6815
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kit-grid-views-manager\">\n <kit-sortable itemClass=\"item\"\n activeItemClass=\"item active\"\n [columnCount]=\"2\"\n [items]=\"items()\">\n <ng-template let-item>\n <div class=\"item-wrapper\"\n [ngClass]=\"item.type\">\n <kit-svg-icon class=\"item-icon-menu\"\n [ngClass]=\"{ hidden: item.hidden }\"\n [icon]=\"kitSvgIcon.MENU\"\n ></kit-svg-icon>\n @if (item.hidden) {\n <kit-svg-icon class=\"item-icon-checkbox hidden\"\n [icon]=\"kitSvgIcon.EYE_CLOSE\"\n (click)=\"onColumnVisibilityChange(true, item)\"\n ></kit-svg-icon>\n } @else {\n <kit-svg-icon class=\"item-icon-checkbox\"\n [ngClass]=\"{ disabled: isSystemView(item) }\"\n [icon]=\"kitSvgIcon.EYE_OPEN\"\n (click)=\"onColumnVisibilityChange(false, item)\"\n ></kit-svg-icon>\n }\n <div class=\"item-label\">\n <kit-truncate-text>{{ item.title | titlecase }}</kit-truncate-text>\n </div>\n @if (isSystemView(item)) {\n <kit-svg-icon class=\"item-icon-system\"\n [icon]=\"kitSvgIcon.GLOBAL\"\n ></kit-svg-icon>\n }\n <kit-button [disabled]=\"isSystemView(item)\"\n [type]=\"kitButtonType.LINK\"\n [kind]=\"kitButtonKind.SMALL\"\n [icon]=\"kitSvgIcon.CIRCLE_MINUS\"\n [iconType]=\"kitSvgIconType.STROKE\"\n (clicked)=\"onViewRemove(item)\"\n ></kit-button>\n </div>\n </ng-template>\n </kit-sortable>\n\n <kit-dialog-actions>\n <kit-button [label]=\"'kit.views.cancel' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [type]=\"kitButtonType.GHOST\"\n (clicked)=\"close()\"\n ></kit-button>\n <kit-button [label]=\"'kit.views.apply' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n (clicked)=\"applyChanges()\"\n ></kit-button>\n </kit-dialog-actions>\n</div>\n", styles: [".kit-grid-views-manager{width:452px}.kit-grid-views-manager ::ng-deep .kit-sortable{margin:0 -24px;column-gap:0;column-rule:1px solid var(--color-grey-6)}.kit-grid-views-manager ::ng-deep .item{margin-bottom:8px;padding:8px 25px;min-width:250px;border-radius:8px;box-sizing:border-box;cursor:pointer}.kit-grid-views-manager ::ng-deep .item-wrapper{display:flex;align-items:center;gap:8px}.kit-grid-views-manager ::ng-deep .item .system .item-label{color:var(--color-blue-4)}.kit-grid-views-manager ::ng-deep .item .system .item-icon-system{stroke:var(--color-blue-4)}.kit-grid-views-manager ::ng-deep .item:hover .item-icon{fill:var(--color-hover)}.kit-grid-views-manager ::ng-deep .item-label{flex:1;color:var(--color-grey-4);font-size:14px;font-weight:400;line-height:22px;max-width:110px}.kit-grid-views-manager ::ng-deep .item-icon-menu{margin-right:8px;width:12px;height:12px;fill:var(--color-main)}.kit-grid-views-manager ::ng-deep .item-icon-menu.hidden{fill:var(--color-grey-8)}.kit-grid-views-manager ::ng-deep .item-icon-checkbox{width:18px;height:18px;fill:var(--color-main)}.kit-grid-views-manager ::ng-deep .item-icon-checkbox.disabled{cursor:none;pointer-events:none}.kit-grid-views-manager ::ng-deep .item-icon-checkbox.disabled,.kit-grid-views-manager ::ng-deep .item-icon-checkbox.hidden{fill:var(--color-grey-8)}.kit-grid-views-manager ::ng-deep .item-icon-system{width:18px;height:18px;stroke:var(--color-grey-8);fill:none}.kit-grid-views-manager ::ng-deep .item.active{box-shadow:4px 4px 8px #0003;background:var(--ui-kit-color-white)}.kit-grid-views-manager ::ng-deep .item.active .item-icon{fill:var(--color-main)}\n"] }]
6816
+ }], ctorParameters: () => [{ type: i1$c.Store }, { type: i1$8.DialogRef }] });
6817
+
6818
+ class KitGridViewsListComponent {
6819
+ constructor(activatedRoute, router, store, kitDialogService, translateService, viewContainerRef) {
6820
+ this.activatedRoute = activatedRoute;
6821
+ this.router = router;
6822
+ this.store = store;
6823
+ this.kitDialogService = kitDialogService;
6824
+ this.translateService = translateService;
6825
+ this.viewContainerRef = viewContainerRef;
6826
+ this.viewGroup = input.required();
6827
+ this.viewConfigGroup = input.required();
6828
+ this.views = input.required();
6829
+ this.defaultColumns = input.required();
6830
+ this.defaultSorting = input.required();
6831
+ this.defaultViewName = input.required();
6832
+ this.anchor = viewChild.required('toggleButton', { read: ElementRef });
6833
+ this.popup = viewChild('popup', { read: KitPopupComponent });
6834
+ this.viewName = signal('');
6835
+ this.createViewPopupVisible = signal(false);
6836
+ this.kitButtonType = KitButtonType;
6837
+ this.kitButtonKind = KitButtonKind;
6838
+ this.kitSvgIcon = KitSvgIcon;
6839
+ this.kitSvgIconType = KitSvgIconType;
6840
+ this.kitButtonIconPosition = KitButtonIconPosition;
6841
+ this.gridViewType = KitGridViewType;
6842
+ this.kitTextboxState = KitTextboxState;
6843
+ this.selectedView = this.store.selectSignal(KitGridViewsState.selectedView);
6844
+ }
6845
+ get isViewNameValid() {
6846
+ return isViewNameValid(this.viewName());
6847
+ }
6848
+ get inputMessage() {
6849
+ const infoMessage = getInputMessage(this.views(), this.viewName().toLowerCase());
6850
+ return infoMessage && this.translateService.instant(infoMessage) || '';
6851
+ }
6852
+ onViewSelect(item) {
6853
+ navigateToView(item.title, this.router, this.activatedRoute);
6854
+ this.popup()?.close();
6855
+ this.store.dispatch(new SetSelectedView(item));
6856
+ }
6857
+ newViewToggle(visible) {
6858
+ this.viewName.set('');
6859
+ setTimeout(() => this.createViewPopupVisible.set(visible));
6860
+ }
6861
+ onPopupToggle() {
6862
+ this.viewName.set('');
6863
+ this.createViewPopupVisible.set(false);
6864
+ this.popup()?.toggle();
6865
+ }
6866
+ onViewCreate() {
6867
+ const view = {
6868
+ title: this.viewName(),
6869
+ group: this.viewGroup(),
6870
+ type: KitGridViewType.USER,
6871
+ value: {
6872
+ filter: [],
6873
+ sort: this.defaultSorting(),
6874
+ columns: this.defaultColumns(),
6875
+ },
6876
+ };
6877
+ this.store.dispatch(new AddGridView(view)).subscribe(() => {
6878
+ navigateToView(this.viewName().toLowerCase(), this.router, this.activatedRoute);
6879
+ this.viewName.set('');
6880
+ this.popup()?.close();
6881
+ this.store.dispatch(new SetSelectedView(view));
6882
+ });
6883
+ }
6884
+ openViewsManagerModal() {
6885
+ this.popup()?.close();
6886
+ this.kitDialogService.openDialog({
6887
+ title: this.translateService.instant('kit.views.views'),
6888
+ content: KitGridViewsManagerComponent,
6889
+ appendTo: this.viewContainerRef,
6890
+ });
6891
+ signalSetFn(this.kitDialogService.dialogInstance.configGroup[SIGNAL], this.viewConfigGroup());
6892
+ this.kitDialogService.dialogRef?.result.pipe(filter(result => !(result instanceof DialogCloseResult))).subscribe(() => this.handleViewChange());
6893
+ }
6894
+ handleViewChange() {
6895
+ const view = findGridViewByName(this.views(), this.selectedView()?.title ?? '');
6896
+ return view
6897
+ ? this.store.dispatch(new SetSelectedView(view))
6898
+ : navigateToView(this.defaultViewName(), this.router, this.activatedRoute);
6899
+ }
6900
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsListComponent, deps: [{ token: i1$7.ActivatedRoute }, { token: i1$7.Router }, { token: i1$c.Store }, { token: KitDialogService }, { token: i4.TranslateService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
6901
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: KitGridViewsListComponent, isStandalone: true, selector: "kit-grid-views-list", inputs: { viewGroup: { classPropertyName: "viewGroup", publicName: "viewGroup", isSignal: true, isRequired: true, transformFunction: null }, viewConfigGroup: { classPropertyName: "viewConfigGroup", publicName: "viewConfigGroup", isSignal: true, isRequired: true, transformFunction: null }, views: { classPropertyName: "views", publicName: "views", isSignal: true, isRequired: true, transformFunction: null }, defaultColumns: { classPropertyName: "defaultColumns", publicName: "defaultColumns", isSignal: true, isRequired: true, transformFunction: null }, defaultSorting: { classPropertyName: "defaultSorting", publicName: "defaultSorting", isSignal: true, isRequired: true, transformFunction: null }, defaultViewName: { classPropertyName: "defaultViewName", publicName: "defaultViewName", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["toggleButton"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "popup", first: true, predicate: ["popup"], descendants: true, read: KitPopupComponent, isSignal: true }], ngImport: i0, template: "<kit-button #toggleButton\n [label]=\"(selectedView()?.title ?? '') | titlecase\"\n [type]=\"kitButtonType.GHOST\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [icon]=\"kitSvgIcon.CHEVRON_DOWN\"\n [iconType]=\"kitSvgIconType.STROKE\"\n [active]=\"popup.isPopupOpen\"\n (clicked)=\"onPopupToggle()\"\n></kit-button>\n\n<kit-popup #popup\n popupClass=\"kit-grid-views-list\"\n [anchor]=\"anchor()\"\n [content]=\"content\">\n</kit-popup>\n\n<ng-template #content>\n @if (!createViewPopupVisible()) {\n <div class=\"view\">\n <div class=\"views-list\">\n @for (item of views(); track item) {\n @if (!item.hidden) {\n <div class=\"views-item\"\n [ngClass]=\"item.type\"\n [class.active]=\"item.title === selectedView()?.title && item.type === selectedView()?.type\"\n (click)=\"onViewSelect(item)\">\n <kit-svg-icon class=\"view-icon\"\n [icon]=\"item.type === gridViewType.SYSTEM && kitSvgIcon.GLOBAL || kitSvgIcon.USER\"\n ></kit-svg-icon>\n <div class=\"item-name\">{{ item.title | titlecase }}</div>\n <kit-svg-icon class=\"check-icon\"\n [icon]=\"kitSvgIcon.CHECK\"\n ></kit-svg-icon>\n </div>\n }\n }\n </div>\n <div class=\"popup-action\">\n <kit-button [label]=\"'kit.views.newView' | translate\"\n [type]=\"kitButtonType.TEXT\"\n [kind]=\"kitButtonKind.SMALL\"\n [icon]=\"kitSvgIcon.PLUS\"\n [iconPosition]=\"kitButtonIconPosition.LEADING\"\n (clicked)=\"newViewToggle(true)\"\n ></kit-button>\n <kit-button [label]=\"'kit.views.manageViews' | translate\"\n [type]=\"kitButtonType.TEXT\"\n [kind]=\"kitButtonKind.SMALL\"\n [icon]=\"kitSvgIcon.PLUS\"\n [iconPosition]=\"kitButtonIconPosition.LEADING\"\n [disabled]=\"views().length < 2\"\n (clicked)=\"openViewsManagerModal()\"\n ></kit-button>\n </div>\n </div>\n } @else {\n <div class=\"new-view\">\n <kit-textbox [defaultValue]=\"viewName()\"\n [placeholder]=\"'kit.views.enterText' | translate\"\n [state]=\"isViewNameValid && kitTextboxState.DEFAULT || kitTextboxState.ERROR\"\n [messageText]=\"inputMessage\"\n (changed)=\"viewName.set($event)\"\n ></kit-textbox>\n <div class=\"new-view-action\">\n <kit-button [label]=\"'kit.views.cancel' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [type]=\"kitButtonType.GHOST\"\n (clicked)=\"newViewToggle(false)\"\n ></kit-button>\n <kit-button [label]=\"'kit.views.save' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [disabled]=\"!viewName() || !isViewNameValid\"\n (clicked)=\"onViewCreate()\"\n ></kit-button>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["::ng-deep .kit-grid-views-list{width:408px}::ng-deep .kit-grid-views-list .views-list{display:flex;flex-direction:column;margin-bottom:12px;max-height:300px;overflow:auto}::ng-deep .kit-grid-views-list .views-item{display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:14px;font-weight:400;line-height:20px;border-radius:4px;cursor:pointer}::ng-deep .kit-grid-views-list .views-item.system{color:var(--color-blue-4)}::ng-deep .kit-grid-views-list .views-item.system .view-icon{stroke:var(--color-blue-4);fill:none}::ng-deep .kit-grid-views-list .views-item.user{color:var(--color-grey-4)}::ng-deep .kit-grid-views-list .views-item.user .view-icon{fill:var(--color-grey-8);stroke:none}::ng-deep .kit-grid-views-list .views-item.user:hover{color:var(--color-main)}::ng-deep .kit-grid-views-list .views-item.user:hover .view-icon{fill:var(--color-main)}::ng-deep .kit-grid-views-list .views-item:hover{background:var(--color-grey-3)}::ng-deep .kit-grid-views-list .views-item.active{background-color:var(--color-grey-3)}::ng-deep .kit-grid-views-list .views-item.active .check-icon{display:block}::ng-deep .kit-grid-views-list .views-item.active.system .check-icon{stroke:var(--color-blue-4)}::ng-deep .kit-grid-views-list .views-item .item-name{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .kit-grid-views-list .views-item .check-icon{display:none;flex-shrink:0;width:14px;height:14px;fill:none;stroke:var(--color-main)}::ng-deep .kit-grid-views-list .views-item .view-icon{width:16px;height:16px}::ng-deep .kit-grid-views-list .popup-action{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--color-grey-6)}::ng-deep .kit-grid-views-list .new-view{display:flex;flex-direction:column;gap:15px}::ng-deep .kit-grid-views-list .new-view-action{display:flex;align-items:center;justify-content:space-between;padding-top:15px;border-top:1px solid var(--color-grey-6)}\n"], dependencies: [{ kind: "ngmodule", type: KitButtonModule }, { kind: "component", type: KitButtonComponent, selector: "kit-button", inputs: ["disabled", "label", "type", "icon", "iconType", "kind", "state", "iconPosition", "buttonClass", "active"], outputs: ["clicked"] }, { kind: "component", type: KitPopupComponent, selector: "kit-popup", inputs: ["anchor", "content", "closeOnOutsideClick", "showFooter", "cancelButtonLabel", "applyButtonLabel", "isApplyButtonDisabled", "positionMode", "popupClass", "closePopupOnCancel"], outputs: ["onCancel", "onApply", "onOpen", "onClose"] }, { kind: "ngmodule", type: KitSvgIconModule }, { kind: "component", type: KitSvgIconComponent, selector: "kit-svg-icon", inputs: ["icon", "iconClass"] }, { kind: "ngmodule", type: KitTextboxModule }, { kind: "component", type: KitTextboxComponent, selector: "kit-textbox", inputs: ["placeholder", "label", "defaultValue", "messageIcon", "messageText", "disabled", "maxlength", "state", "size", "icon"], outputs: ["blured", "changed"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6902
+ }
6903
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsListComponent, decorators: [{
6904
+ type: Component,
6905
+ args: [{ selector: 'kit-grid-views-list', imports: [
6906
+ KitButtonModule,
6907
+ KitPopupComponent,
6908
+ KitSvgIconModule,
6909
+ KitTextboxModule,
6910
+ TranslateModule,
6911
+ NgClass,
6912
+ TitleCasePipe,
6913
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<kit-button #toggleButton\n [label]=\"(selectedView()?.title ?? '') | titlecase\"\n [type]=\"kitButtonType.GHOST\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [icon]=\"kitSvgIcon.CHEVRON_DOWN\"\n [iconType]=\"kitSvgIconType.STROKE\"\n [active]=\"popup.isPopupOpen\"\n (clicked)=\"onPopupToggle()\"\n></kit-button>\n\n<kit-popup #popup\n popupClass=\"kit-grid-views-list\"\n [anchor]=\"anchor()\"\n [content]=\"content\">\n</kit-popup>\n\n<ng-template #content>\n @if (!createViewPopupVisible()) {\n <div class=\"view\">\n <div class=\"views-list\">\n @for (item of views(); track item) {\n @if (!item.hidden) {\n <div class=\"views-item\"\n [ngClass]=\"item.type\"\n [class.active]=\"item.title === selectedView()?.title && item.type === selectedView()?.type\"\n (click)=\"onViewSelect(item)\">\n <kit-svg-icon class=\"view-icon\"\n [icon]=\"item.type === gridViewType.SYSTEM && kitSvgIcon.GLOBAL || kitSvgIcon.USER\"\n ></kit-svg-icon>\n <div class=\"item-name\">{{ item.title | titlecase }}</div>\n <kit-svg-icon class=\"check-icon\"\n [icon]=\"kitSvgIcon.CHECK\"\n ></kit-svg-icon>\n </div>\n }\n }\n </div>\n <div class=\"popup-action\">\n <kit-button [label]=\"'kit.views.newView' | translate\"\n [type]=\"kitButtonType.TEXT\"\n [kind]=\"kitButtonKind.SMALL\"\n [icon]=\"kitSvgIcon.PLUS\"\n [iconPosition]=\"kitButtonIconPosition.LEADING\"\n (clicked)=\"newViewToggle(true)\"\n ></kit-button>\n <kit-button [label]=\"'kit.views.manageViews' | translate\"\n [type]=\"kitButtonType.TEXT\"\n [kind]=\"kitButtonKind.SMALL\"\n [icon]=\"kitSvgIcon.PLUS\"\n [iconPosition]=\"kitButtonIconPosition.LEADING\"\n [disabled]=\"views().length < 2\"\n (clicked)=\"openViewsManagerModal()\"\n ></kit-button>\n </div>\n </div>\n } @else {\n <div class=\"new-view\">\n <kit-textbox [defaultValue]=\"viewName()\"\n [placeholder]=\"'kit.views.enterText' | translate\"\n [state]=\"isViewNameValid && kitTextboxState.DEFAULT || kitTextboxState.ERROR\"\n [messageText]=\"inputMessage\"\n (changed)=\"viewName.set($event)\"\n ></kit-textbox>\n <div class=\"new-view-action\">\n <kit-button [label]=\"'kit.views.cancel' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [type]=\"kitButtonType.GHOST\"\n (clicked)=\"newViewToggle(false)\"\n ></kit-button>\n <kit-button [label]=\"'kit.views.save' | translate\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [disabled]=\"!viewName() || !isViewNameValid\"\n (clicked)=\"onViewCreate()\"\n ></kit-button>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["::ng-deep .kit-grid-views-list{width:408px}::ng-deep .kit-grid-views-list .views-list{display:flex;flex-direction:column;margin-bottom:12px;max-height:300px;overflow:auto}::ng-deep .kit-grid-views-list .views-item{display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:14px;font-weight:400;line-height:20px;border-radius:4px;cursor:pointer}::ng-deep .kit-grid-views-list .views-item.system{color:var(--color-blue-4)}::ng-deep .kit-grid-views-list .views-item.system .view-icon{stroke:var(--color-blue-4);fill:none}::ng-deep .kit-grid-views-list .views-item.user{color:var(--color-grey-4)}::ng-deep .kit-grid-views-list .views-item.user .view-icon{fill:var(--color-grey-8);stroke:none}::ng-deep .kit-grid-views-list .views-item.user:hover{color:var(--color-main)}::ng-deep .kit-grid-views-list .views-item.user:hover .view-icon{fill:var(--color-main)}::ng-deep .kit-grid-views-list .views-item:hover{background:var(--color-grey-3)}::ng-deep .kit-grid-views-list .views-item.active{background-color:var(--color-grey-3)}::ng-deep .kit-grid-views-list .views-item.active .check-icon{display:block}::ng-deep .kit-grid-views-list .views-item.active.system .check-icon{stroke:var(--color-blue-4)}::ng-deep .kit-grid-views-list .views-item .item-name{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .kit-grid-views-list .views-item .check-icon{display:none;flex-shrink:0;width:14px;height:14px;fill:none;stroke:var(--color-main)}::ng-deep .kit-grid-views-list .views-item .view-icon{width:16px;height:16px}::ng-deep .kit-grid-views-list .popup-action{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--color-grey-6)}::ng-deep .kit-grid-views-list .new-view{display:flex;flex-direction:column;gap:15px}::ng-deep .kit-grid-views-list .new-view-action{display:flex;align-items:center;justify-content:space-between;padding-top:15px;border-top:1px solid var(--color-grey-6)}\n"] }]
6914
+ }], ctorParameters: () => [{ type: i1$7.ActivatedRoute }, { type: i1$7.Router }, { type: i1$c.Store }, { type: KitDialogService }, { type: i4.TranslateService }, { type: i0.ViewContainerRef }] });
6915
+
6916
+ var KitFilterType;
6917
+ (function (KitFilterType) {
6918
+ KitFilterType["CHECKBOX"] = "checkbox";
6919
+ KitFilterType["DATE"] = "date";
6920
+ KitFilterType["TEXT"] = "text";
6921
+ })(KitFilterType || (KitFilterType = {}));
6922
+
6923
+ const convertFilterStringDate = (filters) => filters.map(filter => {
6924
+ return filter.type === KitFilterType.DATE && filter.value?.filters && {
6925
+ ...filter,
6926
+ value: {
6927
+ ...filter.value,
6928
+ filters: filter.value.filters.map(item => ({
6929
+ ...item,
6930
+ value: item.value && new Date(item.value) || item.value,
6931
+ })),
6932
+ },
6933
+ } || filter;
6934
+ });
6935
+ const removeReadonlyPropertyFromFilters = (filters) => filters.map(({ readonly, ...item }) => item);
6936
+
6937
+ class KitGridViewsSaveComponent {
6938
+ constructor(store, router, activatedRoute, translateService) {
6939
+ this.store = store;
6940
+ this.router = router;
6941
+ this.activatedRoute = activatedRoute;
6942
+ this.translateService = translateService;
6943
+ this.viewGroup = input.required();
6944
+ this.views = input.required();
6945
+ this.viewsAutocompleteItems = input.required();
6946
+ this.anchor = viewChild.required('toggleButton', { read: ElementRef });
6947
+ this.popup = viewChild('popup', { read: KitPopupComponent });
6948
+ this.viewName = signal('');
6949
+ this.kitButtonKind = KitButtonKind;
6950
+ this.kitSvgIcon = KitSvgIcon;
6951
+ this.kitButtonIconPosition = KitButtonIconPosition;
6952
+ this.kitTooltipPosition = KitTooltipPosition;
6953
+ this.hasUnsavedChanges = signal(false);
6954
+ this.selectedView = this.store.selectSignal(KitGridViewsState.selectedView);
6955
+ }
6956
+ get isViewNameValid() {
6957
+ return isViewNameValid(this.viewName());
6958
+ }
6959
+ get inputMessage() {
6960
+ const infoMessage = getInputMessage(this.views(), this.viewName());
6961
+ return infoMessage && this.translateService.instant(infoMessage) || '';
6962
+ }
6963
+ ngOnInit() {
6964
+ this.store.select(KIT_GRID_STATE_TOKEN).pipe(filter(({ columns }) => !!columns.length)).subscribe(({ filter, sort, columns }) => {
6965
+ const selectedViewState = {
6966
+ filter: this.selectedView()?.value?.filter,
6967
+ sort: this.selectedView()?.value?.sort,
6968
+ columns: buildGridViewColumns(this.selectedView()?.value?.columns ?? []),
6969
+ };
6970
+ const currentViewState = {
6971
+ filter,
6972
+ sort,
6973
+ columns: buildGridViewColumns(columns),
6974
+ };
6975
+ this.hasUnsavedChanges.set(JSON.stringify(selectedViewState) !== JSON.stringify(currentViewState));
6976
+ });
6977
+ }
6978
+ onPopupToggle() {
6979
+ this.viewName.set('');
6980
+ this.popup()?.toggle();
6981
+ }
6982
+ onViewSave() {
6983
+ const { filter, sort, columns } = this.store.selectSnapshot(KIT_GRID_STATE_TOKEN);
6984
+ const views = this.store.selectSnapshot(KIT_GRID_VIEWS_STATE_TOKEN).data.views;
6985
+ const view = {
6986
+ title: this.viewName(),
6987
+ group: this.viewGroup(),
6988
+ type: KitGridViewType.USER,
6989
+ value: {
6990
+ filter: hasOverriddenSystemView(this.viewName(), views) && filter || removeReadonlyPropertyFromFilters(filter),
6991
+ sort,
6992
+ columns: buildGridViewColumns(columns),
6993
+ },
6994
+ };
6995
+ this.store.dispatch(new AddGridView(view)).subscribe(() => {
6996
+ this.hasUnsavedChanges.set(false);
6997
+ navigateToView(this.viewName(), this.router, this.activatedRoute);
6998
+ this.viewName.set('');
6999
+ this.popup()?.close();
7000
+ this.store.dispatch(new SetSelectedView(view));
7001
+ });
7002
+ }
7003
+ onValueChange(value) {
7004
+ if (!value) {
7005
+ return;
7006
+ }
7007
+ this.viewName.set(value);
7008
+ }
7009
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsSaveComponent, deps: [{ token: i1$c.Store }, { token: i1$7.Router }, { token: i1$7.ActivatedRoute }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
7010
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.4", type: KitGridViewsSaveComponent, isStandalone: true, selector: "kit-grid-views-save", inputs: { viewGroup: { classPropertyName: "viewGroup", publicName: "viewGroup", isSignal: true, isRequired: true, transformFunction: null }, views: { classPropertyName: "views", publicName: "views", isSignal: true, isRequired: true, transformFunction: null }, viewsAutocompleteItems: { classPropertyName: "viewsAutocompleteItems", publicName: "viewsAutocompleteItems", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["toggleButton"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "popup", first: true, predicate: ["popup"], descendants: true, read: KitPopupComponent, isSignal: true }], ngImport: i0, template: "<kit-button #toggleButton\n kitTooltip\n class=\"grid-views-save-btn\"\n kitTooltipFilter=\".grid-views-save-btn\"\n [kitTooltipPosition]=\"kitTooltipPosition.TOP\"\n [title]=\"hasUnsavedChanges() ? '' : ('kit.views.noUnsavedChanges' | translate)\"\n [label]=\"'kit.views.save' | translate\"\n [active]=\"popup.isPopupOpen\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [icon]=\"kitSvgIcon.DISKETTE\"\n [iconPosition]=\"kitButtonIconPosition.LEADING\"\n [disabled]=\"!hasUnsavedChanges()\"\n (clicked)=\"onPopupToggle()\"\n></kit-button>\n\n<kit-popup #popup\n popupClass=\"grid-views-save\"\n [anchor]=\"anchor()\"\n [content]=\"content\"\n [showFooter]=\"true\"\n [applyButtonLabel]=\"'kit.views.save' | translate\"\n [cancelButtonLabel]=\"'kit.views.cancel' | translate\"\n [isApplyButtonDisabled]=\"!viewName() || !isViewNameValid\"\n (onApply)=\"onViewSave()\">\n</kit-popup>\n\n<ng-template #content>\n <kit-autocomplete [placeholder]=\"'kit.views.enterText' | translate\"\n [allowCustom]=\"true\"\n [items]=\"viewsAutocompleteItems() ?? []\"\n [closePopupIfDataNotFound]=\"true\"\n [invalid]=\"!isViewNameValid\"\n [messageText]=\"inputMessage\"\n (filterChanged)=\"onValueChange($event)\"\n (valueChanged)=\"viewName.set($event)\"\n (selectionChanged)=\"onValueChange($event)\"\n ></kit-autocomplete>\n</ng-template>\n", styles: ["::ng-deep .grid-views-save{display:flex;flex-direction:column;width:344px}::ng-deep .grid-views-save .k-popup .footer{margin-top:30px;padding-top:30px}\n"], dependencies: [{ kind: "ngmodule", type: KitButtonModule }, { kind: "component", type: KitButtonComponent, selector: "kit-button", inputs: ["disabled", "label", "type", "icon", "iconType", "kind", "state", "iconPosition", "buttonClass", "active"], outputs: ["clicked"] }, { kind: "component", type: KitPopupComponent, selector: "kit-popup", inputs: ["anchor", "content", "closeOnOutsideClick", "showFooter", "cancelButtonLabel", "applyButtonLabel", "isApplyButtonDisabled", "positionMode", "popupClass", "closePopupOnCancel"], outputs: ["onCancel", "onApply", "onOpen", "onClose"] }, { kind: "ngmodule", type: KitAutocompleteModule }, { kind: "component", type: KitAutocompleteComponent, selector: "kit-autocomplete", inputs: ["label", "placeholder", "items", "selectedValue", "disabled", "loaderVisible", "messageIcon", "messageText", "invalid", "allowCustom", "closePopupIfDataNotFound"], outputs: ["filterChanged", "valueChanged", "selectionChanged", "blured", "focused"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: KitTooltipDirective, selector: "[kitTooltip]", inputs: ["kitTooltipPosition", "kitTooltipFilter", "kitTooltipTemplateRef", "kitTooltipVisible"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7011
+ }
7012
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsSaveComponent, decorators: [{
7013
+ type: Component,
7014
+ args: [{ selector: 'kit-grid-views-save', imports: [
7015
+ KitButtonModule,
7016
+ KitPopupComponent,
7017
+ KitAutocompleteModule,
7018
+ TranslateModule,
7019
+ KitTooltipDirective,
7020
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<kit-button #toggleButton\n kitTooltip\n class=\"grid-views-save-btn\"\n kitTooltipFilter=\".grid-views-save-btn\"\n [kitTooltipPosition]=\"kitTooltipPosition.TOP\"\n [title]=\"hasUnsavedChanges() ? '' : ('kit.views.noUnsavedChanges' | translate)\"\n [label]=\"'kit.views.save' | translate\"\n [active]=\"popup.isPopupOpen\"\n [kind]=\"kitButtonKind.MEDIUM\"\n [icon]=\"kitSvgIcon.DISKETTE\"\n [iconPosition]=\"kitButtonIconPosition.LEADING\"\n [disabled]=\"!hasUnsavedChanges()\"\n (clicked)=\"onPopupToggle()\"\n></kit-button>\n\n<kit-popup #popup\n popupClass=\"grid-views-save\"\n [anchor]=\"anchor()\"\n [content]=\"content\"\n [showFooter]=\"true\"\n [applyButtonLabel]=\"'kit.views.save' | translate\"\n [cancelButtonLabel]=\"'kit.views.cancel' | translate\"\n [isApplyButtonDisabled]=\"!viewName() || !isViewNameValid\"\n (onApply)=\"onViewSave()\">\n</kit-popup>\n\n<ng-template #content>\n <kit-autocomplete [placeholder]=\"'kit.views.enterText' | translate\"\n [allowCustom]=\"true\"\n [items]=\"viewsAutocompleteItems() ?? []\"\n [closePopupIfDataNotFound]=\"true\"\n [invalid]=\"!isViewNameValid\"\n [messageText]=\"inputMessage\"\n (filterChanged)=\"onValueChange($event)\"\n (valueChanged)=\"viewName.set($event)\"\n (selectionChanged)=\"onValueChange($event)\"\n ></kit-autocomplete>\n</ng-template>\n", styles: ["::ng-deep .grid-views-save{display:flex;flex-direction:column;width:344px}::ng-deep .grid-views-save .k-popup .footer{margin-top:30px;padding-top:30px}\n"] }]
7021
+ }], ctorParameters: () => [{ type: i1$c.Store }, { type: i1$7.Router }, { type: i1$7.ActivatedRoute }, { type: i4.TranslateService }] });
7022
+
7023
+ class KitGridViewsComponent {
7024
+ constructor(store, activatedRoute, router, destroyRef, titleCasePipe) {
7025
+ this.store = store;
7026
+ this.activatedRoute = activatedRoute;
7027
+ this.router = router;
7028
+ this.destroyRef = destroyRef;
7029
+ this.titleCasePipe = titleCasePipe;
7030
+ this.viewGroup = input.required();
7031
+ this.viewConfigGroup = input.required();
7032
+ this.defaultColumns = input.required();
7033
+ this.defaultViewName = input.required();
7034
+ this.defaultSorting = input.required();
7035
+ this.systemViews = input.required();
7036
+ this.viewChanged = new EventEmitter();
7037
+ this.currentViewName$ = combineLatest([
7038
+ this.activatedRoute.params.pipe(map(params => params['view'] && decodeViewNameFromUrl(params['view']))),
7039
+ this.activatedRoute.data.pipe(map(data => data['view'])),
7040
+ ]).pipe(map(([viewParam, viewData,]) => viewParam ?? viewData));
7041
+ this.viewsState$ = this.store.select(KIT_GRID_VIEWS_STATE_TOKEN);
7042
+ this.views$ = this.store.select(KitGridViewsState.getViews());
7043
+ this.viewsAutocompleteItems$ = this.views$.pipe(map(views => filterDuplicateGridViews(views)), map(views => views.map(({ title }) => ({
7044
+ text: this.titleCasePipe.transform(title),
7045
+ value: title,
7046
+ }))));
7047
+ }
7048
+ ngOnInit() {
7049
+ this.fetchViews();
7050
+ this.handleViewOnRouteChange();
7051
+ this.store.select(KitGridViewsState.selectedView).subscribe(view => {
7052
+ view && this.updateGridState(view);
7053
+ });
7054
+ }
7055
+ ngOnDestroy() {
7056
+ this.store.dispatch(new StateReset(KitGridViewsState));
7057
+ }
7058
+ fetchViews() {
7059
+ this.store.dispatch([
7060
+ new FetchGridViews({
7061
+ group: this.viewGroup(),
7062
+ defaultItems: this.systemViews(),
7063
+ }),
7064
+ new FetchGridViewsConfig(this.viewConfigGroup()),
7065
+ ]);
7066
+ }
7067
+ handleViewOnRouteChange() {
7068
+ this.currentViewName$.pipe(combineLatestWith(this.views$), filter(([_, views,]) => !!views.length), distinctUntilChanged(([prevViewName], [currViewName]) => prevViewName === currViewName), takeUntilDestroyed(this.destroyRef)).subscribe(([viewName, views,]) => this.handleViewChange(viewName, views));
7069
+ }
7070
+ handleViewChange(viewName, views) {
7071
+ if (viewName !== viewName.toLowerCase()) {
7072
+ return navigateToView(viewName, this.router, this.activatedRoute);
7073
+ }
7074
+ const currentView = findGridViewByName(views, viewName);
7075
+ if (!currentView) {
7076
+ navigateToView(this.defaultViewName(), this.router, this.activatedRoute);
7077
+ return;
7078
+ }
7079
+ if (!this.store.selectSnapshot(KitGridViewsState.selectedView)) {
7080
+ this.store.dispatch(new SetSelectedView(currentView));
7081
+ }
7082
+ }
7083
+ updateGridState(view) {
7084
+ this.store.dispatch([
7085
+ new SetGridSort(view?.value?.sort ?? this.defaultSorting()),
7086
+ new SetGridFilters(convertFilterStringDate(view?.value?.filter ?? [])),
7087
+ new SetGridColumns(buildGridColumns(this.defaultColumns(), view?.value?.columns ?? this.defaultColumns())),
7088
+ new SetGridSkip(0),
7089
+ ]).subscribe(() => this.viewChanged.emit());
7090
+ }
7091
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsComponent, deps: [{ token: i1$c.Store }, { token: i1$7.ActivatedRoute }, { token: i1$7.Router }, { token: i0.DestroyRef }, { token: i1$1.TitleCasePipe }], target: i0.ɵɵFactoryTarget.Component }); }
7092
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: KitGridViewsComponent, isStandalone: true, selector: "kit-grid-views", inputs: { viewGroup: { classPropertyName: "viewGroup", publicName: "viewGroup", isSignal: true, isRequired: true, transformFunction: null }, viewConfigGroup: { classPropertyName: "viewConfigGroup", publicName: "viewConfigGroup", isSignal: true, isRequired: true, transformFunction: null }, defaultColumns: { classPropertyName: "defaultColumns", publicName: "defaultColumns", isSignal: true, isRequired: true, transformFunction: null }, defaultViewName: { classPropertyName: "defaultViewName", publicName: "defaultViewName", isSignal: true, isRequired: true, transformFunction: null }, defaultSorting: { classPropertyName: "defaultSorting", publicName: "defaultSorting", isSignal: true, isRequired: true, transformFunction: null }, systemViews: { classPropertyName: "systemViews", publicName: "systemViews", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { viewChanged: "viewChanged" }, providers: [
7093
+ TitleCasePipe,
7094
+ ], ngImport: i0, template: "<div class=\"kit-grid-views\">\n @if (viewsState$ | async; as viewsState) {\n @if (!viewsState.loading) {\n @if (views$ | async; as views) {\n <kit-grid-views-list [viewGroup]=\"viewGroup()\"\n [viewConfigGroup]=\"viewConfigGroup()\"\n [views]=\"views\"\n [defaultColumns]=\"defaultColumns()\"\n [defaultViewName]=\"defaultViewName()\"\n [defaultSorting]=\"defaultSorting()\"\n ></kit-grid-views-list>\n\n <kit-grid-views-save [viewGroup]=\"viewGroup()\"\n [views]=\"views\"\n [viewsAutocompleteItems]=\"viewsAutocompleteItems$ | async\"\n ></kit-grid-views-save>\n }\n } @else {\n <kit-skeleton [width]=\"200\"\n [height]=\"32\"\n ></kit-skeleton>\n }\n }\n</div>\n", styles: [".kit-grid-views{display:flex;align-items:center;gap:16px}.kit-grid-views .popup-content{display:flex;flex-direction:column;width:296px}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: KitGridViewsListComponent, selector: "kit-grid-views-list", inputs: ["viewGroup", "viewConfigGroup", "views", "defaultColumns", "defaultSorting", "defaultViewName"] }, { kind: "ngmodule", type: KitSkeletonModule }, { kind: "component", type: KitSkeletonComponent, selector: "kit-skeleton", inputs: ["width", "height", "shape", "animation"] }, { kind: "component", type: KitGridViewsSaveComponent, selector: "kit-grid-views-save", inputs: ["viewGroup", "views", "viewsAutocompleteItems"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7095
+ }
7096
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: KitGridViewsComponent, decorators: [{
7097
+ type: Component,
7098
+ args: [{ selector: 'kit-grid-views', imports: [
7099
+ AsyncPipe,
7100
+ KitGridViewsListComponent,
7101
+ KitSkeletonModule,
7102
+ KitGridViewsSaveComponent,
7103
+ ], providers: [
7104
+ TitleCasePipe,
7105
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kit-grid-views\">\n @if (viewsState$ | async; as viewsState) {\n @if (!viewsState.loading) {\n @if (views$ | async; as views) {\n <kit-grid-views-list [viewGroup]=\"viewGroup()\"\n [viewConfigGroup]=\"viewConfigGroup()\"\n [views]=\"views\"\n [defaultColumns]=\"defaultColumns()\"\n [defaultViewName]=\"defaultViewName()\"\n [defaultSorting]=\"defaultSorting()\"\n ></kit-grid-views-list>\n\n <kit-grid-views-save [viewGroup]=\"viewGroup()\"\n [views]=\"views\"\n [viewsAutocompleteItems]=\"viewsAutocompleteItems$ | async\"\n ></kit-grid-views-save>\n }\n } @else {\n <kit-skeleton [width]=\"200\"\n [height]=\"32\"\n ></kit-skeleton>\n }\n }\n</div>\n", styles: [".kit-grid-views{display:flex;align-items:center;gap:16px}.kit-grid-views .popup-content{display:flex;flex-direction:column;width:296px}\n"] }]
7106
+ }], ctorParameters: () => [{ type: i1$c.Store }, { type: i1$7.ActivatedRoute }, { type: i1$7.Router }, { type: i0.DestroyRef }, { type: i1$1.TitleCasePipe }], propDecorators: { viewChanged: [{
7107
+ type: Output
7108
+ }] } });
7109
+
6351
7110
  // KitButton
6352
7111
 
6353
7112
  /**
6354
7113
  * Generated bundle index. Do not edit.
6355
7114
  */
6356
7115
 
6357
- export { AbstractKitCtaPanelConfirmationComponent, KitAutocompleteComponent, KitAutocompleteDirective, KitAutocompleteModule, KitAvatarComponent, KitAvatarModule, KitAvatarSize, KitBadgeDirective, KitBadgeTheme, KitBreadcrumbsComponent, KitBreadcrumbsModule, KitButtonComponent, KitButtonIconPosition, KitButtonKind, KitButtonModule, KitButtonState, KitButtonType, KitCardComponent, KitCardModule, KitCardTheme, KitCheckboxComponent, KitCheckboxModule, KitCheckboxState, KitCollapsedListComponent, KitCopyTextComponent, KitCopyTextModule, KitCtaPanelAbstractConfirmationComponent, KitCtaPanelAbstractConfirmationModule, KitCtaPanelActionComponent, KitCtaPanelActionModule, KitCtaPanelConfirmationComponent, KitCtaPanelConfirmationModule, KitCtaPanelItemComponent, KitCtaPanelItemModule, KitCtaPanelItemType, KitDataFieldComponent, KitDataFieldState, KitDatepickerComponent, KitDatepickerModule, KitDaterangeComponent, KitDaterangeModule, KitDaterangeType, KitDatetimepickerComponent, KitDatetimepickerModule, KitDialogActionsComponent, KitDialogComponent, KitDialogService, KitDropdownComponent, KitDropdownModule, KitDropdownSize, KitEmptySectionComponent, KitEntitySectionComponent, KitEntitySectionContainerComponent, KitEntityTitleComponent, KitEntityTitleModule, KitFileCardComponent, KitFileCardMessagesComponent, KitFileCardModule, KitFileUploadComponent, KitFileUploadModule, KitFilterLogic, KitFilterOperator, KitGridCellTemplateDirective, KitGridColumnComponent, KitGridComponent, KitGridDetailTemplateDirective, KitGridModule, KitGridSortSettingsMode, KitInputLabelComponent, KitInputLabelModule, KitInputMessageComponent, KitInputMessageModule, KitLoaderComponent, KitLoaderModule, KitLocationStepperComponent, KitLocationStepperModule, KitMultiselectComponent, KitMultiselectModule, KitNavigationMenuComponent, KitNavigationMenuModule, KitNavigationMenuService, KitNavigationMenuSubmenuComponent, KitNavigationTabsComponent, KitNavigationTabsModule, KitNavigationTabsType, KitNoteComponent, KitNoteModule, KitNotificationComponent, KitNotificationService, KitNotificationType, KitNumericTextboxComponent, KitNumericTextboxModule, KitNumericTextboxState, KitPermissionDirective, KitPermissionModule, KitPillComponent, KitPillTheme, KitPillType, KitPopupAlignHorizontal, KitPopupAlignVertical, KitPopupComponent, KitPopupPositionMode, KitProfileMenuComponent, KitQueryParamsName, KitQueryParamsService, KitRadioButtonComponent, KitRadioButtonModule, KitRadioButtonType, KitScrollNavigationComponent, KitScrollNavigationSectionComponent, KitSearchBarComponent, KitSearchBarModule, KitShipmentCard, KitSkeletonAnimation, KitSkeletonComponent, KitSkeletonModule, KitSkeletonShape, KitSortDirection, KitSortableComponent, KitSvgIcon, KitSvgIconComponent, KitSvgIconModule, KitSvgIconType, KitSvgSpriteComponent, KitSvgSpriteModule, KitSwitchComponent, KitSwitchMode, KitSwitchModule, KitSwitchState, KitTabComponent, KitTabContentDirective, KitTabsComponent, KitTabsModule, KitTabsSize, KitTabsType, KitTextLabelComponent, KitTextLabelModule, KitTextLabelState, KitTextareaAutoresizeDirective, KitTextareaComponent, KitTextareaModule, KitTextareaState, KitTextboxComponent, KitTextboxModule, KitTextboxSize, KitTextboxState, KitTileLayoutComponent, KitTileLayoutItemComponent, KitTileLayoutModule, KitTimelineCardComponent, KitTimelineComponent, KitTimelineTheme, KitTimelineType, KitTimepickerComponent, KitTimepickerModule, KitTitleTemplateDirective, KitToastrModule, KitToastrPosition, KitToastrService, KitToastrType, KitToggleComponent, KitToggleModule, KitTooltipDirective, KitTooltipPosition, KitTruncateTextComponent, KitUnitsTextboxComponent, KitUnitsTextboxDropdownPosition, KitUnitsTextboxModule, KitUnitsTextboxType, buildRandomUUID, kitDataStateToODataString };
7116
+ export { AbstractKitCtaPanelConfirmationComponent, AddGridFilter, KIT_BASE_PATH, KIT_GRID_STATE_TOKEN, KitAutocompleteComponent, KitAutocompleteDirective, KitAutocompleteModule, KitAvatarComponent, KitAvatarModule, KitAvatarSize, KitBadgeDirective, KitBadgeTheme, KitBreadcrumbsComponent, KitBreadcrumbsModule, KitButtonComponent, KitButtonIconPosition, KitButtonKind, KitButtonModule, KitButtonState, KitButtonType, KitCardComponent, KitCardModule, KitCardTheme, KitCheckboxComponent, KitCheckboxModule, KitCheckboxState, KitCollapsedListComponent, KitCopyTextComponent, KitCopyTextModule, KitCtaPanelAbstractConfirmationComponent, KitCtaPanelAbstractConfirmationModule, KitCtaPanelActionComponent, KitCtaPanelActionModule, KitCtaPanelConfirmationComponent, KitCtaPanelConfirmationModule, KitCtaPanelItemComponent, KitCtaPanelItemModule, KitCtaPanelItemType, KitDataFieldComponent, KitDataFieldState, KitDatepickerComponent, KitDatepickerModule, KitDaterangeComponent, KitDaterangeModule, KitDaterangeType, KitDatetimepickerComponent, KitDatetimepickerModule, KitDialogActionsComponent, KitDialogComponent, KitDialogService, KitDropdownComponent, KitDropdownModule, KitDropdownSize, KitEmptySectionComponent, KitEntitySectionComponent, KitEntitySectionContainerComponent, KitEntityTitleComponent, KitEntityTitleModule, KitFileCardComponent, KitFileCardMessagesComponent, KitFileCardModule, KitFileUploadComponent, KitFileUploadModule, KitFilterLogic, KitFilterOperator, KitFilterType, KitGridCellTemplateDirective, KitGridColumnComponent, KitGridComponent, KitGridDetailTemplateDirective, KitGridModule, KitGridSortSettingsMode, KitGridState, KitGridViewType, KitGridViewsComponent, KitGridViewsState, KitInputLabelComponent, KitInputLabelModule, KitInputMessageComponent, KitInputMessageModule, KitLoaderComponent, KitLoaderModule, KitLocationStepperComponent, KitLocationStepperModule, KitMultiselectComponent, KitMultiselectModule, KitNavigationMenuComponent, KitNavigationMenuModule, KitNavigationMenuService, KitNavigationMenuSubmenuComponent, KitNavigationTabsComponent, KitNavigationTabsModule, KitNavigationTabsType, KitNoteComponent, KitNoteModule, KitNotificationComponent, KitNotificationService, KitNotificationType, KitNumericTextboxComponent, KitNumericTextboxModule, KitNumericTextboxState, KitPermissionDirective, KitPermissionModule, KitPillComponent, KitPillTheme, KitPillType, KitPopupAlignHorizontal, KitPopupAlignVertical, KitPopupComponent, KitPopupPositionMode, KitProfileMenuComponent, KitQueryParamsName, KitQueryParamsService, KitRadioButtonComponent, KitRadioButtonModule, KitRadioButtonType, KitScrollNavigationComponent, KitScrollNavigationSectionComponent, KitSearchBarComponent, KitSearchBarModule, KitShipmentCard, KitSkeletonAnimation, KitSkeletonComponent, KitSkeletonModule, KitSkeletonShape, KitSortDirection, KitSortableComponent, KitSvgIcon, KitSvgIconComponent, KitSvgIconModule, KitSvgIconType, KitSvgSpriteComponent, KitSvgSpriteModule, KitSwitchComponent, KitSwitchMode, KitSwitchModule, KitSwitchState, KitTabComponent, KitTabContentDirective, KitTabsComponent, KitTabsModule, KitTabsSize, KitTabsType, KitTextLabelComponent, KitTextLabelModule, KitTextLabelState, KitTextareaAutoresizeDirective, KitTextareaComponent, KitTextareaModule, KitTextareaState, KitTextboxComponent, KitTextboxModule, KitTextboxSize, KitTextboxState, KitTileLayoutComponent, KitTileLayoutItemComponent, KitTileLayoutModule, KitTimelineCardComponent, KitTimelineComponent, KitTimelineTheme, KitTimelineType, KitTimepickerComponent, KitTimepickerModule, KitTitleTemplateDirective, KitToastrModule, KitToastrPosition, KitToastrService, KitToastrType, KitToggleComponent, KitToggleModule, KitTooltipDirective, KitTooltipPosition, KitTranslateService, KitTruncateTextComponent, KitUnitsTextboxComponent, KitUnitsTextboxDropdownPosition, KitUnitsTextboxModule, KitUnitsTextboxType, RemoveGridFilter, SetGridColumns, SetGridSkip, SetGridSort, UpdateGridFilter, buildRandomUUID, kitBuildGridColumn, kitDataStateToODataString, kitEncodeViewNameToUrl };
6358
7117
  //# sourceMappingURL=indigina-ui-kit.mjs.map