@sftech/ng-shared 0.0.8 → 0.0.10

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.
@@ -2,18 +2,18 @@ import { definePreset } from '@primeng/themes';
2
2
  import Aura from '@primeng/themes/aura';
3
3
  import { NgTemplateOutlet } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { EventEmitter, input, Output, Component, ViewChild, ContentChild, Input, model, signal, inject, effect } from '@angular/core';
5
+ import { EventEmitter, input, Output, Component, ViewChild, ContentChild, Input, inject, model, signal, effect } from '@angular/core';
6
6
  import { FaIconComponent } from '@fortawesome/angular-fontawesome';
7
7
  import { Button } from 'primeng/button';
8
8
  import { Drawer } from 'primeng/drawer';
9
9
  import { Toast } from 'primeng/toast';
10
- import { faClose, faTrash, faBars } from '@fortawesome/free-solid-svg-icons';
10
+ import { faPlus, faClose, faTrash, faQuestion, faBars } from '@fortawesome/free-solid-svg-icons';
11
11
  import { Ripple } from 'primeng/ripple';
12
12
  import { StyleClass } from 'primeng/styleclass';
13
13
  import { RouterLink, Router, ActivatedRoute } from '@angular/router';
14
- import { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';
14
+ import { DynamicDialogRef, DialogService } from 'primeng/dynamicdialog';
15
15
  import { MessageService } from 'primeng/api';
16
- import { switchMap, map, of, catchError } from 'rxjs';
16
+ import { map, of, catchError } from 'rxjs';
17
17
  import * as i1 from 'primeng/paginator';
18
18
  import { PaginatorModule } from 'primeng/paginator';
19
19
 
@@ -36,18 +36,20 @@ const SfTechPreset = definePreset(Aura, {
36
36
 
37
37
  // biome-ignore lint/complexity/noStaticOnlyClass: <explanation>
38
38
  class IconProvider {
39
+ static add = faPlus;
39
40
  static close = faClose;
40
41
  static delete = faTrash;
42
+ static help = faQuestion;
41
43
  static menu = faBars;
42
44
  }
43
45
 
44
46
  class SidebarNavigationComponent {
45
47
  closeDrawer = new EventEmitter();
46
48
  navigation = input([]);
47
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: SidebarNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: SidebarNavigationComponent, isStandalone: true, selector: "sftech-sidebar-navigation", inputs: { navigation: { classPropertyName: "navigation", publicName: "navigation", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeDrawer: "closeDrawer" }, ngImport: i0, template: "<ul class=\"list-none p-4 m-0\">\r\n @for (category of navigation(); track category) {\r\n <li>\r\n <div\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterFromClass=\"hidden\"\r\n enterActiveClass=\"animate-slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"animate-slideup\"\r\n class=\"py-2 flex items-center justify-between cursor-pointer p-ripple\"\r\n >\r\n @if (category.icon) {\r\n <fa-icon [icon]=\"category.icon\"></fa-icon>\r\n }\r\n <span class=\"font-bold\">{{ category.categoryName }}</span>\r\n </div>\r\n <ul class=\"list-none p-0 m-0 overflow-hidden\">\r\n @for (link of category.links; track link) {\r\n <li class=\"py-1\">\r\n <a [routerLink]=\"[link.routerLink]\" (click)=\"closeDrawer.emit()\" pRipple class=\"flex items-center cursor-pointer px-4 py-2.5 rounded-border hover:bg-primary-50 duration-150 transition-colors p-ripple\">\r\n @if (link.icon) {\r\n <fa-icon [icon]=\"link.icon\"></fa-icon>\r\n }\r\n <span class=\"font-medium\">{{ link.name}}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n </li>\r\n }\r\n</ul>", styles: [""], dependencies: [{ kind: "directive", type: Ripple, selector: "[pRipple]" }, { kind: "directive", type: StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
50
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: SidebarNavigationComponent, isStandalone: true, selector: "sftech-sidebar-navigation", inputs: { navigation: { classPropertyName: "navigation", publicName: "navigation", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeDrawer: "closeDrawer" }, ngImport: i0, template: "<ul class=\"list-none p-4 m-0\">\r\n @for (category of navigation(); track category) {\r\n <li>\r\n <div\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterFromClass=\"hidden\"\r\n enterActiveClass=\"animate-slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"animate-slideup\"\r\n class=\"py-2 flex items-center justify-between cursor-pointer p-ripple\"\r\n >\r\n @if (category.icon) {\r\n <fa-icon [icon]=\"category.icon\"></fa-icon>\r\n }\r\n <span class=\"font-bold\">{{ category.categoryName }}</span>\r\n </div>\r\n <ul class=\"list-none p-0 m-0 overflow-hidden\">\r\n @for (link of category.links; track link) {\r\n <li class=\"py-1\">\r\n <a [routerLink]=\"[link.routerLink]\" (click)=\"closeDrawer.emit()\" pRipple class=\"flex items-center cursor-pointer px-4 py-2.5 rounded-border hover:bg-primary-50 duration-150 transition-colors p-ripple\">\r\n @if (link.icon) {\r\n <fa-icon [icon]=\"link.icon\"></fa-icon>\r\n }\r\n <span class=\"font-medium\">{{ link.name}}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n </li>\r\n }\r\n</ul>", styles: [""], dependencies: [{ kind: "directive", type: Ripple, selector: "[pRipple]" }, { kind: "directive", type: StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
49
51
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: SidebarNavigationComponent, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarNavigationComponent, decorators: [{
51
53
  type: Component,
52
54
  args: [{ selector: 'sftech-sidebar-navigation', imports: [
53
55
  Ripple,
@@ -73,10 +75,10 @@ class HeadMainFooterWithCanvasComponent {
73
75
  closeCallback(e) {
74
76
  this.drawerRef.close(e);
75
77
  }
76
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HeadMainFooterWithCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: HeadMainFooterWithCanvasComponent, isStandalone: true, selector: "sftech-head-main-footer-with-canvas", inputs: { title: "title", maxWidth: "maxWidth", navigationItems: "navigationItems", hasDrawer: "hasDrawer" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "main", first: true, predicate: ["main"], descendants: true }, { propertyName: "footer", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "drawerRef", first: true, predicate: ["drawerRef"], descendants: true }], ngImport: i0, template: "<div class=\"h-screen flex flex-col justify-between\">\r\n <p-toast/>\r\n <header class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center\">\r\n <div class=\"flex-shrink\">\r\n <p-button (click)=\"drawerVisible = !drawerVisible\">\r\n <fa-icon [icon]=\"iconProvider.menu\"></fa-icon>\r\n </p-button>\r\n </div>\r\n <div class=\"ms-2\">\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n </div>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n </header>\r\n\r\n <main class=\"p-2 flex-grow overflow-auto\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </footer>\r\n</div>\r\n\r\n@if (hasDrawer) {\r\n <p-drawer #drawerRef [(visible)]=\"drawerVisible\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"flex items-center justify-between px-2 pt-4 shrink-0\">\r\n <span class=\"font-semibold text-2xl text-primary\">Menu</span>\r\n <span>\r\n <p-button type=\"button\" (click)=\"drawerVisible = false\" rounded=\"true\" outlined=\"true\"\r\n styleClass=\"h-9 w-9\"><fa-icon [icon]=\"iconProvider.close\"></fa-icon></p-button>\r\n </span>\r\n </div>\r\n <div class=\"overflow-y-auto px-2 mt-6\">\r\n <sftech-sidebar-navigation [navigation]=\"navigationItems\" (closeDrawer)=\"drawerVisible = false\"></sftech-sidebar-navigation>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: SidebarNavigationComponent, selector: "sftech-sidebar-navigation", inputs: ["navigation"], outputs: ["closeDrawer"] }] });
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HeadMainFooterWithCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: HeadMainFooterWithCanvasComponent, isStandalone: true, selector: "sftech-head-main-footer-with-canvas", inputs: { title: "title", maxWidth: "maxWidth", navigationItems: "navigationItems", hasDrawer: "hasDrawer" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "main", first: true, predicate: ["main"], descendants: true }, { propertyName: "footer", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "drawerRef", first: true, predicate: ["drawerRef"], descendants: true }], ngImport: i0, template: "<div class=\"h-screen flex flex-col justify-between\">\r\n <p-toast/>\r\n <header class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center\">\r\n <div class=\"flex-shrink\">\r\n <p-button (click)=\"drawerVisible = !drawerVisible\">\r\n <fa-icon [icon]=\"iconProvider.menu\"></fa-icon>\r\n </p-button>\r\n </div>\r\n <div class=\"ms-2\">\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n </div>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n </header>\r\n\r\n <main class=\"p-2 flex-grow overflow-auto\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </footer>\r\n</div>\r\n\r\n@if (hasDrawer) {\r\n <p-drawer #drawerRef [(visible)]=\"drawerVisible\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"flex items-center justify-between px-2 pt-4 shrink-0\">\r\n <span class=\"font-semibold text-2xl text-primary\">Menu</span>\r\n <span>\r\n <p-button type=\"button\" (click)=\"drawerVisible = false\" rounded=\"true\" outlined=\"true\"\r\n styleClass=\"h-9 w-9\"><fa-icon [icon]=\"iconProvider.close\"></fa-icon></p-button>\r\n </span>\r\n </div>\r\n <div class=\"overflow-y-auto px-2 mt-6\">\r\n <sftech-sidebar-navigation [navigation]=\"navigationItems\" (closeDrawer)=\"drawerVisible = false\"></sftech-sidebar-navigation>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: SidebarNavigationComponent, selector: "sftech-sidebar-navigation", inputs: ["navigation"], outputs: ["closeDrawer"] }] });
78
80
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HeadMainFooterWithCanvasComponent, decorators: [{
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HeadMainFooterWithCanvasComponent, decorators: [{
80
82
  type: Component,
81
83
  args: [{ selector: 'sftech-head-main-footer-with-canvas', imports: [NgTemplateOutlet, Button, Drawer, FaIconComponent, Toast, SidebarNavigationComponent], template: "<div class=\"h-screen flex flex-col justify-between\">\r\n <p-toast/>\r\n <header class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center\">\r\n <div class=\"flex-shrink\">\r\n <p-button (click)=\"drawerVisible = !drawerVisible\">\r\n <fa-icon [icon]=\"iconProvider.menu\"></fa-icon>\r\n </p-button>\r\n </div>\r\n <div class=\"ms-2\">\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n </div>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n </header>\r\n\r\n <main class=\"p-2 flex-grow overflow-auto\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </footer>\r\n</div>\r\n\r\n@if (hasDrawer) {\r\n <p-drawer #drawerRef [(visible)]=\"drawerVisible\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"flex items-center justify-between px-2 pt-4 shrink-0\">\r\n <span class=\"font-semibold text-2xl text-primary\">Menu</span>\r\n <span>\r\n <p-button type=\"button\" (click)=\"drawerVisible = false\" rounded=\"true\" outlined=\"true\"\r\n styleClass=\"h-9 w-9\"><fa-icon [icon]=\"iconProvider.close\"></fa-icon></p-button>\r\n </span>\r\n </div>\r\n <div class=\"overflow-y-auto px-2 mt-6\">\r\n <sftech-sidebar-navigation [navigation]=\"navigationItems\" (closeDrawer)=\"drawerVisible = false\"></sftech-sidebar-navigation>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}" }]
82
84
  }], propDecorators: { title: [{
@@ -111,14 +113,16 @@ class BaseDialogComponent {
111
113
  body = null;
112
114
  footer = null;
113
115
  iconProvider = IconProvider;
116
+ ref = inject(DynamicDialogRef);
114
117
  constructor() { }
115
- close() {
118
+ close(retVal = undefined) {
119
+ this.ref.close(retVal);
116
120
  this.closed.emit();
117
121
  }
118
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
119
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: BaseDialogComponent, isStandalone: true, selector: "sftech-base-dialog", inputs: { hasHeader: { classPropertyName: "hasHeader", publicName: "hasHeader", isSignal: true, isRequired: false, transformFunction: null }, hasFooter: { classPropertyName: "hasFooter", publicName: "hasFooter", isSignal: true, isRequired: false, transformFunction: null }, showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null }, headerText: { classPropertyName: "headerText", publicName: "headerText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "body", first: true, predicate: ["body"], descendants: true }, { propertyName: "footer", first: true, predicate: ["footer"], descendants: true }], ngImport: i0, template: "<!--<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '25rem' }\">-->\r\n<!-- <ng-template #header>-->\r\n<!-- <div class=\"inline-flex items-center justify-center gap-2\">-->\r\n<!-- <span class=\"font-bold whitespace-nowrap\">Amy Elsner</span>-->\r\n<!-- </div>-->\r\n<!-- </ng-template>-->\r\n<!-- <span class=\"text-surface-500 dark:text-surface-400 block mb-8\">Update your information.</span>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-4\">-->\r\n<!-- <label for=\"username\" class=\"font-semibold w-24\">Username</label>-->\r\n<!-- <input pInputText id=\"username\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-2\">-->\r\n<!-- <label for=\"email\" class=\"font-semibold w-24\">Email</label>-->\r\n<!-- <input pInputText id=\"email\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <ng-template #footer>-->\r\n<!-- <p-button label=\"Cancel\" [text]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- <p-button label=\"Save\" [outlined]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- </ng-template>-->\r\n<!--</p-dialog>-->\r\n\r\n@if (hasHeader()) {\r\n <div id=\"dialog-header\" class=\"flex justify-between mb-5\">\r\n <div class=\"header-content\">\r\n @if (headerText()) {\r\n <h1>{{ headerText() }}</h1>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n <div class=\"header-actions\">\r\n <p-button (onClick)=\"close()\">\r\n <fa-icon [icon]=\"iconProvider.close\"></fa-icon>\r\n </p-button>\r\n </div>\r\n </div>\r\n}\r\n<div id=\"dialog-body\">\r\n <ng-container [ngTemplateOutlet]=\"body\"></ng-container>\r\n</div>\r\n\r\n@if (hasFooter()) {\r\n <div id=\"dialog-footer\" class=\"flex justify-end mt-5\">\r\n <div id=\"footer-content\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </div>\r\n}", styles: [""], dependencies: [{ kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
122
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
123
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: BaseDialogComponent, isStandalone: true, selector: "sftech-base-dialog", inputs: { hasHeader: { classPropertyName: "hasHeader", publicName: "hasHeader", isSignal: true, isRequired: false, transformFunction: null }, hasFooter: { classPropertyName: "hasFooter", publicName: "hasFooter", isSignal: true, isRequired: false, transformFunction: null }, showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null }, headerText: { classPropertyName: "headerText", publicName: "headerText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "body", first: true, predicate: ["body"], descendants: true }, { propertyName: "footer", first: true, predicate: ["footer"], descendants: true }], ngImport: i0, template: "<!--<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '25rem' }\">-->\r\n<!-- <ng-template #header>-->\r\n<!-- <div class=\"inline-flex items-center justify-center gap-2\">-->\r\n<!-- <span class=\"font-bold whitespace-nowrap\">Amy Elsner</span>-->\r\n<!-- </div>-->\r\n<!-- </ng-template>-->\r\n<!-- <span class=\"text-surface-500 dark:text-surface-400 block mb-8\">Update your information.</span>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-4\">-->\r\n<!-- <label for=\"username\" class=\"font-semibold w-24\">Username</label>-->\r\n<!-- <input pInputText id=\"username\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-2\">-->\r\n<!-- <label for=\"email\" class=\"font-semibold w-24\">Email</label>-->\r\n<!-- <input pInputText id=\"email\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <ng-template #footer>-->\r\n<!-- <p-button label=\"Cancel\" [text]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- <p-button label=\"Save\" [outlined]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- </ng-template>-->\r\n<!--</p-dialog>-->\r\n\r\n@if (hasHeader()) {\r\n <div id=\"dialog-header\" class=\"flex justify-between mb-5\">\r\n <div class=\"header-content\">\r\n @if (headerText()) {\r\n <h1>{{ headerText() }}</h1>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n <div class=\"header-actions\">\r\n <p-button (onClick)=\"close()\">\r\n <fa-icon [icon]=\"iconProvider.close\"></fa-icon>\r\n </p-button>\r\n </div>\r\n </div>\r\n}\r\n<div id=\"dialog-body\">\r\n <ng-container [ngTemplateOutlet]=\"body\"></ng-container>\r\n</div>\r\n\r\n@if (hasFooter()) {\r\n <div id=\"dialog-footer\" class=\"flex justify-end mt-5\">\r\n <div id=\"footer-content\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </div>\r\n}", styles: [""], dependencies: [{ kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
120
124
  }
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseDialogComponent, decorators: [{
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseDialogComponent, decorators: [{
122
126
  type: Component,
123
127
  args: [{ selector: 'sftech-base-dialog', imports: [Button, NgTemplateOutlet, FaIconComponent], template: "<!--<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '25rem' }\">-->\r\n<!-- <ng-template #header>-->\r\n<!-- <div class=\"inline-flex items-center justify-center gap-2\">-->\r\n<!-- <span class=\"font-bold whitespace-nowrap\">Amy Elsner</span>-->\r\n<!-- </div>-->\r\n<!-- </ng-template>-->\r\n<!-- <span class=\"text-surface-500 dark:text-surface-400 block mb-8\">Update your information.</span>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-4\">-->\r\n<!-- <label for=\"username\" class=\"font-semibold w-24\">Username</label>-->\r\n<!-- <input pInputText id=\"username\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-2\">-->\r\n<!-- <label for=\"email\" class=\"font-semibold w-24\">Email</label>-->\r\n<!-- <input pInputText id=\"email\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <ng-template #footer>-->\r\n<!-- <p-button label=\"Cancel\" [text]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- <p-button label=\"Save\" [outlined]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- </ng-template>-->\r\n<!--</p-dialog>-->\r\n\r\n@if (hasHeader()) {\r\n <div id=\"dialog-header\" class=\"flex justify-between mb-5\">\r\n <div class=\"header-content\">\r\n @if (headerText()) {\r\n <h1>{{ headerText() }}</h1>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n <div class=\"header-actions\">\r\n <p-button (onClick)=\"close()\">\r\n <fa-icon [icon]=\"iconProvider.close\"></fa-icon>\r\n </p-button>\r\n </div>\r\n </div>\r\n}\r\n<div id=\"dialog-body\">\r\n <ng-container [ngTemplateOutlet]=\"body\"></ng-container>\r\n</div>\r\n\r\n@if (hasFooter()) {\r\n <div id=\"dialog-footer\" class=\"flex justify-end mt-5\">\r\n <div id=\"footer-content\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </div>\r\n}" }]
124
128
  }], ctorParameters: () => [], propDecorators: { closed: [{
@@ -421,9 +425,6 @@ class BaseListComponent {
421
425
  this._loadData();
422
426
  }
423
427
  openDisplay(id) {
424
- if (id === undefined) {
425
- return;
426
- }
427
428
  if (this.openDisplayAsModal()) {
428
429
  const modalRef = this.modalService.open(this._modalComponent, { inputValues: { id, canEdit: this.canEdit(), openedAsModal: true }, focusOnShow: false, modal: true, dismissableMask: true, width: '70%', contentStyle: { overflow: 'auto' } });
429
430
  modalRef.onClose.subscribe((result) => {
@@ -433,6 +434,9 @@ class BaseListComponent {
433
434
  if (index !== undefined && index >= 0) {
434
435
  data[index] = result.data;
435
436
  }
437
+ else {
438
+ data.push(result.data);
439
+ }
436
440
  return data;
437
441
  });
438
442
  }
@@ -461,27 +465,27 @@ class BaseListComponent {
461
465
  });
462
466
  });
463
467
  }
464
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
465
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.11", type: BaseListComponent, isStandalone: true, selector: "sftech-pages-base-list", inputs: { odata: { classPropertyName: "odata", publicName: "odata", isSignal: true, isRequired: false, transformFunction: null }, showPageTitle: { classPropertyName: "showPageTitle", publicName: "showPageTitle", isSignal: true, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, openDisplayAsModal: { classPropertyName: "openDisplayAsModal", publicName: "openDisplayAsModal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { odata: "odataChange" }, ngImport: i0, template: '<div></div>', isInline: true, styles: [""] });
468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: BaseListComponent, isStandalone: true, selector: "sftech-pages-base-list", inputs: { odata: { classPropertyName: "odata", publicName: "odata", isSignal: true, isRequired: false, transformFunction: null }, showPageTitle: { classPropertyName: "showPageTitle", publicName: "showPageTitle", isSignal: true, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, openDisplayAsModal: { classPropertyName: "openDisplayAsModal", publicName: "openDisplayAsModal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { odata: "odataChange" }, ngImport: i0, template: '<div></div>', isInline: true, styles: [""] });
466
470
  }
467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseListComponent, decorators: [{
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseListComponent, decorators: [{
468
472
  type: Component,
469
473
  args: [{ selector: 'sftech-pages-base-list', standalone: true, imports: [], template: '<div></div>' }]
470
474
  }], ctorParameters: () => [] });
471
475
 
472
- class BaseDisplayComponent {
476
+ class BaseDisplayComponent extends BaseDialogComponent {
473
477
  id;
474
478
  openedAsModal = false;
475
479
  canEdit = true;
476
480
  redirectAfterSave = true;
477
- ref = inject(DynamicDialogRef);
478
481
  form;
479
- model = signal(this.getNewModel());
480
- iconProvider = IconProvider;
482
+ model = signal(undefined);
483
+ isNew = signal(true);
481
484
  router = inject(Router);
482
485
  activatedRoute = inject(ActivatedRoute);
483
486
  toastr = inject(MessageService);
484
487
  constructor() {
488
+ super();
485
489
  effect(() => {
486
490
  if (this.model()) {
487
491
  this.form = this.initializeForm();
@@ -494,28 +498,28 @@ class BaseDisplayComponent {
494
498
  });
495
499
  }
496
500
  ngOnInit() {
497
- let obs;
498
501
  if (this.id) {
499
- obs = this._loadData(this.id);
502
+ this._loadData(this.id).subscribe((res) => {
503
+ if (res instanceof MappedApiError) {
504
+ this.toastr.add({ severity: 'error', detail: 'Beim Laden der Daten ist ein Fehler aufgetreten' });
505
+ throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Laden der Daten ist ein Fehler aufgetreten');
506
+ }
507
+ this.model.set(res.data);
508
+ this.isNew.set(false);
509
+ if (this.form) {
510
+ this.form.patchValue(this.model());
511
+ this.form.markAsUntouched();
512
+ }
513
+ });
500
514
  }
501
515
  else {
502
- obs = this.activatedRoute.params.pipe(switchMap((params) => {
503
- const id = parseInt(params['id']);
504
- this.id = id;
505
- return this._loadData(id);
506
- }));
507
- }
508
- obs.subscribe((res) => {
509
- if (res instanceof MappedApiError) {
510
- this.toastr.add({ severity: 'error', detail: 'Beim Laden der Daten ist ein Fehler aufgetreten' });
511
- throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Laden der Daten ist ein Fehler aufgetreten');
512
- }
513
- this.model.set(res.data);
516
+ this.model.set(this.getNewModel());
517
+ this.isNew.set(true);
514
518
  if (this.form) {
515
519
  this.form.patchValue(this.model());
516
520
  this.form.markAsUntouched();
517
521
  }
518
- });
522
+ }
519
523
  }
520
524
  async submitForm() {
521
525
  let obs;
@@ -581,13 +585,10 @@ class BaseDisplayComponent {
581
585
  mappedApiResponse.data = this.model();
582
586
  return of(mappedApiResponse);
583
587
  }
584
- close(retVal = { operation: 'aborted' }) {
585
- this.ref.close(retVal);
586
- }
587
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
588
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: BaseDisplayComponent, isStandalone: true, selector: "lib-core-base-display", inputs: { id: "id", openedAsModal: "openedAsModal", canEdit: "canEdit" }, ngImport: i0, template: '<div></div>', isInline: true, styles: [""] });
588
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
589
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: BaseDisplayComponent, isStandalone: true, selector: "lib-core-base-display", inputs: { id: "id", openedAsModal: "openedAsModal", canEdit: "canEdit" }, usesInheritance: true, ngImport: i0, template: '<div></div>', isInline: true, styles: [""] });
589
590
  }
590
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseDisplayComponent, decorators: [{
591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseDisplayComponent, decorators: [{
591
592
  type: Component,
592
593
  args: [{ selector: 'lib-core-base-display', standalone: true, imports: [], template: '<div></div>' }]
593
594
  }], ctorParameters: () => [], propDecorators: { id: [{
@@ -601,10 +602,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
601
602
  class BaseDisplayModalComponent {
602
603
  id;
603
604
  canEdit = true;
604
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseDisplayModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
605
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: BaseDisplayModalComponent, isStandalone: true, selector: "lib-prompt-display-modal", ngImport: i0, template: '', isInline: true, styles: [""] });
605
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseDisplayModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
606
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: BaseDisplayModalComponent, isStandalone: true, selector: "lib-prompt-display-modal", ngImport: i0, template: '', isInline: true, styles: [""] });
606
607
  }
607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: BaseDisplayModalComponent, decorators: [{
608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseDisplayModalComponent, decorators: [{
608
609
  type: Component,
609
610
  args: [{ selector: 'lib-prompt-display-modal', standalone: true, imports: [], template: '' }]
610
611
  }] });
@@ -612,10 +613,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
612
613
  class FormErrorDisplayComponent {
613
614
  control = input(undefined);
614
615
  label = input(undefined);
615
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FormErrorDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
616
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: FormErrorDisplayComponent, isStandalone: true, selector: "sftech-form-error-display", inputs: { control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (control()?.errors) {\r\n <div class=\"p-1 text-xs text-red-500\">\r\n @if (control()?.errors?.['required']) {\r\n <div>{{ label() }} ist ein Pflichtfeld.</div>\r\n }\r\n </div>\r\n}\r\n", styles: [""] });
616
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FormErrorDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
617
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: FormErrorDisplayComponent, isStandalone: true, selector: "sftech-form-error-display", inputs: { control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (control()?.errors) {\r\n <div class=\"p-1 text-xs text-red-500\">\r\n @if (control()?.errors?.['required']) {\r\n <div>{{ label() }} ist ein Pflichtfeld.</div>\r\n }\r\n </div>\r\n}\r\n", styles: [""] });
617
618
  }
618
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: FormErrorDisplayComponent, decorators: [{
619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FormErrorDisplayComponent, decorators: [{
619
620
  type: Component,
620
621
  args: [{ selector: 'sftech-form-error-display', standalone: true, imports: [], template: "@if (control()?.errors) {\r\n <div class=\"p-1 text-xs text-red-500\">\r\n @if (control()?.errors?.['required']) {\r\n <div>{{ label() }} ist ein Pflichtfeld.</div>\r\n }\r\n </div>\r\n}\r\n" }]
621
622
  }] });
@@ -670,10 +671,10 @@ class PaginatorComponent {
670
671
  this.pagination.pageSize = event.rows ?? 10;
671
672
  this.odataChanged.emit(this.pagination);
672
673
  }
673
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
674
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: PaginatorComponent, isStandalone: true, selector: "sftech-paginator", inputs: { pagination: "pagination" }, outputs: { odataChanged: "odataChanged" }, ngImport: i0, template: "<!--<nav aria-label=\"Table navigation\" class=\"flex items-center flex-wrap md:flex-row justify-between p-2 bg-gradient-to-b from-secondary_accent-500 to-secondary_accent-700\">-->\r\n<!-- <div-->\r\n<!-- class=\"font-normal text-white dark:text-gray-400 md:mb-0 block w-full md:inline md:w-auto\">Ergebnis-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ ((pagination.page - 1) * pagination.pageSize) + 1 }} - {{ pagination.totalPages === pagination.page ? pagination.totalElements : pagination.pageSize * pagination.page}}</span>-->\r\n<!-- von-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ pagination.totalElements }}</span></div>-->\r\n<!-- <ul class=\"inline-flex -space-x-px rtl:space-x-reverse text-sm h-8\">-->\r\n<!-- @for (pageNumber of pageNumbers(); track pageNumber) {-->\r\n<!-- <li>-->\r\n<!-- <a [class.rounded-s-lg]=\"pageNumber === 1\" [class.rounded-e-lg]=\"pageNumber === pagination.totalPages\"-->\r\n<!-- (click)=\"changePage(pageNumber)\"-->\r\n<!-- class=\"flex items-center justify-center px-3 h-8 leading-tight text-gray-500 bg-white border border-gray-300 hover:bg-gray-100 hover:text-gray-700 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\">{{ pageNumber }}</a>-->\r\n<!-- </li>-->\r\n<!-- }-->\r\n<!-- </ul>-->\r\n<!--</nav>-->\r\n\r\n\r\n\r\n\r\n<div class=\"card flex justify-center\">\r\n <p-paginator (onPageChange)=\"onPageChange($event)\" [first]=\"pagination.page - 1 \" [rows]=\"pagination.pageSize\" [totalRecords]=\"pagination.totalElements\" [rowsPerPageOptions]=\"[10, 20, 30]\" />\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i1.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }] });
674
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
675
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PaginatorComponent, isStandalone: true, selector: "sftech-paginator", inputs: { pagination: "pagination" }, outputs: { odataChanged: "odataChanged" }, ngImport: i0, template: "<!--<nav aria-label=\"Table navigation\" class=\"flex items-center flex-wrap md:flex-row justify-between p-2 bg-gradient-to-b from-secondary_accent-500 to-secondary_accent-700\">-->\r\n<!-- <div-->\r\n<!-- class=\"font-normal text-white dark:text-gray-400 md:mb-0 block w-full md:inline md:w-auto\">Ergebnis-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ ((pagination.page - 1) * pagination.pageSize) + 1 }} - {{ pagination.totalPages === pagination.page ? pagination.totalElements : pagination.pageSize * pagination.page}}</span>-->\r\n<!-- von-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ pagination.totalElements }}</span></div>-->\r\n<!-- <ul class=\"inline-flex -space-x-px rtl:space-x-reverse text-sm h-8\">-->\r\n<!-- @for (pageNumber of pageNumbers(); track pageNumber) {-->\r\n<!-- <li>-->\r\n<!-- <a [class.rounded-s-lg]=\"pageNumber === 1\" [class.rounded-e-lg]=\"pageNumber === pagination.totalPages\"-->\r\n<!-- (click)=\"changePage(pageNumber)\"-->\r\n<!-- class=\"flex items-center justify-center px-3 h-8 leading-tight text-gray-500 bg-white border border-gray-300 hover:bg-gray-100 hover:text-gray-700 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\">{{ pageNumber }}</a>-->\r\n<!-- </li>-->\r\n<!-- }-->\r\n<!-- </ul>-->\r\n<!--</nav>-->\r\n\r\n\r\n\r\n\r\n<div class=\"card flex justify-center\">\r\n <p-paginator (onPageChange)=\"onPageChange($event)\" [first]=\"pagination.page - 1 \" [rows]=\"pagination.pageSize\" [totalRecords]=\"pagination.totalElements\" [rowsPerPageOptions]=\"[10, 20, 30]\" />\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i1.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }] });
675
676
  }
676
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PaginatorComponent, decorators: [{
677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PaginatorComponent, decorators: [{
677
678
  type: Component,
678
679
  args: [{ selector: 'sftech-paginator', standalone: true, imports: [PaginatorModule], template: "<!--<nav aria-label=\"Table navigation\" class=\"flex items-center flex-wrap md:flex-row justify-between p-2 bg-gradient-to-b from-secondary_accent-500 to-secondary_accent-700\">-->\r\n<!-- <div-->\r\n<!-- class=\"font-normal text-white dark:text-gray-400 md:mb-0 block w-full md:inline md:w-auto\">Ergebnis-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ ((pagination.page - 1) * pagination.pageSize) + 1 }} - {{ pagination.totalPages === pagination.page ? pagination.totalElements : pagination.pageSize * pagination.page}}</span>-->\r\n<!-- von-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ pagination.totalElements }}</span></div>-->\r\n<!-- <ul class=\"inline-flex -space-x-px rtl:space-x-reverse text-sm h-8\">-->\r\n<!-- @for (pageNumber of pageNumbers(); track pageNumber) {-->\r\n<!-- <li>-->\r\n<!-- <a [class.rounded-s-lg]=\"pageNumber === 1\" [class.rounded-e-lg]=\"pageNumber === pagination.totalPages\"-->\r\n<!-- (click)=\"changePage(pageNumber)\"-->\r\n<!-- class=\"flex items-center justify-center px-3 h-8 leading-tight text-gray-500 bg-white border border-gray-300 hover:bg-gray-100 hover:text-gray-700 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\">{{ pageNumber }}</a>-->\r\n<!-- </li>-->\r\n<!-- }-->\r\n<!-- </ul>-->\r\n<!--</nav>-->\r\n\r\n\r\n\r\n\r\n<div class=\"card flex justify-center\">\r\n <p-paginator (onPageChange)=\"onPageChange($event)\" [first]=\"pagination.page - 1 \" [rows]=\"pagination.pageSize\" [totalRecords]=\"pagination.totalElements\" [rowsPerPageOptions]=\"[10, 20, 30]\" />\r\n</div>" }]
679
680
  }], propDecorators: { pagination: [{
@@ -1 +1 @@
1
- {"version":3,"file":"sftech-ng-shared.mjs","sources":["../../../../libs/ng-shared/src/lib/ui/styles/themes/sftech.preset.ts","../../../../libs/ng-shared/src/lib/providers/icon.provider.ts","../../../../libs/ng-shared/src/lib/ui/layouts/sidebar-navigation/sidebar-navigation.component.ts","../../../../libs/ng-shared/src/lib/ui/layouts/sidebar-navigation/sidebar-navigation.component.html","../../../../libs/ng-shared/src/lib/ui/layouts/head-main-footer-with-canvas/head-main-footer-with-canvas.component.ts","../../../../libs/ng-shared/src/lib/ui/layouts/head-main-footer-with-canvas/head-main-footer-with-canvas.component.html","../../../../libs/ng-shared/src/lib/ui/layouts/base-dialog/base-dialog.component.ts","../../../../libs/ng-shared/src/lib/ui/layouts/base-dialog/base-dialog.component.html","../../../../libs/ng-shared/src/lib/core/configuration/app-config.loader.ts","../../../../libs/ng-shared/src/lib/core/models/base-db.model.ts","../../../../libs/ng-shared/src/lib/core/models/mapped-api-response.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-pagination.model.ts","../../../../libs/ng-shared/src/lib/core/models/mapped-odata-response.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-expands.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-filter-collection.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-order.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/filter/filter.enums.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-filter.model.ts","../../../../libs/ng-shared/src/lib/components/pages/base-list.component.ts","../../../../libs/ng-shared/src/lib/components/pages/base-display/base-display.component.ts","../../../../libs/ng-shared/src/lib/components/pages/base-display/base-display-modal/base-display-modal.component.ts","../../../../libs/ng-shared/src/lib/components/forms/form-error-display/form-error-display.component.ts","../../../../libs/ng-shared/src/lib/components/forms/form-error-display/form-error-display.component.html","../../../../libs/ng-shared/src/lib/components/paginator/paginator.component.ts","../../../../libs/ng-shared/src/lib/components/paginator/paginator.component.html","../../../../libs/ng-shared/src/lib/core/services/base-db-api.service.ts","../../../../libs/ng-shared/src/sftech-ng-shared.ts"],"sourcesContent":["import { definePreset } from '@primeng/themes';\r\nimport Aura from '@primeng/themes/aura';\r\n\r\nexport const SfTechPreset = definePreset(Aura, {\r\n semantic: {\r\n primary: {\r\n 50: '#9ddcf5',\r\n 100: '#8bd5f2',\r\n 200: '#6bc8ef',\r\n 300: '#4abbe8',\r\n 400: '#2aa8e0',\r\n 500: '#0093d8',\r\n 600: '#0081c3',\r\n 700: '#0071a8',\r\n 800: '#00618c',\r\n 900: '#005272',\r\n },\r\n }\r\n});\r\n","import { faBars, faBurger, faClose, faTrash } from '@fortawesome/free-solid-svg-icons';\r\n\r\n// biome-ignore lint/complexity/noStaticOnlyClass: <explanation>\r\nexport class IconProvider {\r\n public static readonly close = faClose;\r\n public static readonly delete = faTrash;\r\n public static readonly menu = faBars;\r\n}\r\n","import {Component, EventEmitter, input, model, Output} from '@angular/core';\r\nimport {Ripple} from \"primeng/ripple\";\r\nimport {StyleClass} from \"primeng/styleclass\";\r\nimport {FaIconComponent} from \"@fortawesome/angular-fontawesome\";\r\nimport {RouterLink} from \"@angular/router\";\r\n\r\n@Component({\r\n selector: 'sftech-sidebar-navigation',\r\n imports: [\r\n Ripple,\r\n StyleClass,\r\n FaIconComponent,\r\n RouterLink\r\n ],\r\n templateUrl: './sidebar-navigation.component.html',\r\n styleUrl: './sidebar-navigation.component.css'\r\n})\r\nexport class SidebarNavigationComponent {\r\n @Output() closeDrawer = new EventEmitter<void>();\r\n public navigation = input<ISidebarNavigationCategory[]>([])\r\n}\r\n\r\nexport interface ISidebarNavigationCategory {\r\n categoryName: string,\r\n icon?: string,\r\n links: ISidebarNavigationLink[]\r\n}\r\n\r\nexport interface ISidebarNavigationLink {\r\n name: string,\r\n icon?: string,\r\n routerLink: string,\r\n}\r\n","<ul class=\"list-none p-4 m-0\">\r\n @for (category of navigation(); track category) {\r\n <li>\r\n <div\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterFromClass=\"hidden\"\r\n enterActiveClass=\"animate-slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"animate-slideup\"\r\n class=\"py-2 flex items-center justify-between cursor-pointer p-ripple\"\r\n >\r\n @if (category.icon) {\r\n <fa-icon [icon]=\"category.icon\"></fa-icon>\r\n }\r\n <span class=\"font-bold\">{{ category.categoryName }}</span>\r\n </div>\r\n <ul class=\"list-none p-0 m-0 overflow-hidden\">\r\n @for (link of category.links; track link) {\r\n <li class=\"py-1\">\r\n <a [routerLink]=\"[link.routerLink]\" (click)=\"closeDrawer.emit()\" pRipple class=\"flex items-center cursor-pointer px-4 py-2.5 rounded-border hover:bg-primary-50 duration-150 transition-colors p-ripple\">\r\n @if (link.icon) {\r\n <fa-icon [icon]=\"link.icon\"></fa-icon>\r\n }\r\n <span class=\"font-medium\">{{ link.name}}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n </li>\r\n }\r\n</ul>","import { NgTemplateOutlet } from '@angular/common';\r\nimport {Component, ContentChild, Input, model, TemplateRef, ViewChild} from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { Button } from 'primeng/button';\r\nimport { Drawer } from 'primeng/drawer';\r\nimport { Toast } from 'primeng/toast';\r\nimport { IconProvider } from '../../../providers/icon.provider';\r\nimport {\r\n ISidebarNavigationCategory,\r\n SidebarNavigationComponent\r\n} from \"../sidebar-navigation/sidebar-navigation.component\";\r\n\r\n@Component({\r\n selector: 'sftech-head-main-footer-with-canvas',\r\n imports: [NgTemplateOutlet, Button, Drawer, FaIconComponent, Toast, SidebarNavigationComponent],\r\n templateUrl: './head-main-footer-with-canvas.component.html',\r\n styleUrl: './head-main-footer-with-canvas.component.css',\r\n})\r\nexport class HeadMainFooterWithCanvasComponent {\r\n @Input() title = 'demo';\r\n @Input() maxWidth = '100%';\r\n @Input() navigationItems: ISidebarNavigationCategory[] = [];\r\n @Input() hasDrawer = true;\r\n protected drawerVisible = false;\r\n @ContentChild('header') public header: TemplateRef<unknown> | null = null;\r\n @ContentChild('main') public main: TemplateRef<unknown> | null = null;\r\n @ContentChild('footer') public footer: TemplateRef<unknown> | null = null;\r\n\r\n @ViewChild('drawerRef') drawerRef!: Drawer;\r\n\r\n protected iconProvider = IconProvider;\r\n\r\n closeCallback(e: Event): void {\r\n this.drawerRef.close(e);\r\n }\r\n}\r\n","<div class=\"h-screen flex flex-col justify-between\">\r\n <p-toast/>\r\n <header class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center\">\r\n <div class=\"flex-shrink\">\r\n <p-button (click)=\"drawerVisible = !drawerVisible\">\r\n <fa-icon [icon]=\"iconProvider.menu\"></fa-icon>\r\n </p-button>\r\n </div>\r\n <div class=\"ms-2\">\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n </div>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n </header>\r\n\r\n <main class=\"p-2 flex-grow overflow-auto\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </footer>\r\n</div>\r\n\r\n@if (hasDrawer) {\r\n <p-drawer #drawerRef [(visible)]=\"drawerVisible\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"flex items-center justify-between px-2 pt-4 shrink-0\">\r\n <span class=\"font-semibold text-2xl text-primary\">Menu</span>\r\n <span>\r\n <p-button type=\"button\" (click)=\"drawerVisible = false\" rounded=\"true\" outlined=\"true\"\r\n styleClass=\"h-9 w-9\"><fa-icon [icon]=\"iconProvider.close\"></fa-icon></p-button>\r\n </span>\r\n </div>\r\n <div class=\"overflow-y-auto px-2 mt-6\">\r\n <sftech-sidebar-navigation [navigation]=\"navigationItems\" (closeDrawer)=\"drawerVisible = false\"></sftech-sidebar-navigation>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, ContentChild, EventEmitter, Output, TemplateRef, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { Button } from 'primeng/button';\r\nimport {IconProvider} from \"../../../providers/icon.provider\";\r\n\r\n@Component({\r\n selector: 'sftech-base-dialog',\r\n imports: [Button, NgTemplateOutlet, FaIconComponent],\r\n templateUrl: './base-dialog.component.html',\r\n styleUrl: './base-dialog.component.css',\r\n})\r\nexport class BaseDialogComponent {\r\n public hasHeader = input<boolean>(true);\r\n public hasFooter = input<boolean>(true);\r\n public showButtons = input<boolean>(true);\r\n public headerText = input<string | undefined>(undefined);\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n @ContentChild('header') public header: TemplateRef<unknown> | null = null;\r\n @ContentChild('body') public body: TemplateRef<unknown> | null = null;\r\n @ContentChild('footer') public footer: TemplateRef<unknown> | null = null;\r\n\r\n public iconProvider = IconProvider;\r\n\r\n constructor() {}\r\n\r\n public close(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<!--<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '25rem' }\">-->\r\n<!-- <ng-template #header>-->\r\n<!-- <div class=\"inline-flex items-center justify-center gap-2\">-->\r\n<!-- <span class=\"font-bold whitespace-nowrap\">Amy Elsner</span>-->\r\n<!-- </div>-->\r\n<!-- </ng-template>-->\r\n<!-- <span class=\"text-surface-500 dark:text-surface-400 block mb-8\">Update your information.</span>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-4\">-->\r\n<!-- <label for=\"username\" class=\"font-semibold w-24\">Username</label>-->\r\n<!-- <input pInputText id=\"username\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-2\">-->\r\n<!-- <label for=\"email\" class=\"font-semibold w-24\">Email</label>-->\r\n<!-- <input pInputText id=\"email\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <ng-template #footer>-->\r\n<!-- <p-button label=\"Cancel\" [text]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- <p-button label=\"Save\" [outlined]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- </ng-template>-->\r\n<!--</p-dialog>-->\r\n\r\n@if (hasHeader()) {\r\n <div id=\"dialog-header\" class=\"flex justify-between mb-5\">\r\n <div class=\"header-content\">\r\n @if (headerText()) {\r\n <h1>{{ headerText() }}</h1>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n <div class=\"header-actions\">\r\n <p-button (onClick)=\"close()\">\r\n <fa-icon [icon]=\"iconProvider.close\"></fa-icon>\r\n </p-button>\r\n </div>\r\n </div>\r\n}\r\n<div id=\"dialog-body\">\r\n <ng-container [ngTemplateOutlet]=\"body\"></ng-container>\r\n</div>\r\n\r\n@if (hasFooter()) {\r\n <div id=\"dialog-footer\" class=\"flex justify-end mt-5\">\r\n <div id=\"footer-content\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </div>\r\n}","import {IAppConfig} from \"./app-config.interface\";\r\n\r\nexport async function loadConfig<TConfig extends IAppConfig>(configPath: string): Promise<TConfig> {\r\n return fetch(configPath)\r\n .then((res) => {\r\n if (!res.ok) throw new Error('Config load failed');\r\n return res.json();\r\n });\r\n}","import { IBaseDbResponseDto } from '../dtos/base-db-response.dto';\r\nimport { EFilterTypes } from './odata/filter/filter.enums';\r\n\r\nexport interface IBaseDbModel {\r\n id?: number;\r\n createdAt?: Date;\r\n\r\n propertiesToShow?: string[];\r\n propertyUINames?: Map<string, string>;\r\n\r\n getFilterTypeForProperty(propertyName: string): EFilterTypes | undefined;\r\n getUiNameForProperty(propertyName: string): string;\r\n}\r\n\r\nexport class BaseDbModel implements IBaseDbModel {\r\n public id?: number;\r\n public createdAt?: Date;\r\n\r\n public propertiesToShow: string[] = [];\r\n\r\n public propertyFilterType = new Map<string, EFilterTypes>();\r\n\r\n public propertyUINames = new Map<string, string>();\r\n\r\n public getUiNameForProperty(propertyName: string): string {\r\n return this.propertyUINames.get(propertyName) || propertyName;\r\n }\r\n public getFilterTypeForProperty(propertyName: string): EFilterTypes | undefined {\r\n return this.propertyFilterType.get(propertyName);\r\n }\r\n\r\n public getPropertyValue(propertyName: string): unknown {\r\n return this[propertyName as keyof this];\r\n }\r\n\r\n public static fromDto(dto: IBaseDbResponseDto): IBaseDbModel {\r\n const model = new this();\r\n return model.fromDto(dto);\r\n }\r\n\r\n public static fromDtos(dtos: IBaseDbResponseDto[]): IBaseDbModel[] {\r\n return dtos.map((dto) => this.fromDto(dto));\r\n }\r\n\r\n public fromDto(dto: IBaseDbResponseDto): IBaseDbModel {\r\n this.id = dto.id;\r\n this.createdAt = dto.createdAt;\r\n return this;\r\n }\r\n\r\n public fromDtos(dtos: IBaseDbResponseDto[]): IBaseDbModel[] {\r\n return dtos.map((dto) => this.fromDto(dto));\r\n }\r\n}\r\n","import { BaseDbModel } from './base-db.model';\r\n\r\nexport class MappedApiResponse<TModel extends BaseDbModel> {\r\n public status!: number;\r\n public data: TModel | TModel[] | undefined;\r\n public messages: string[] = [];\r\n public isError = false;\r\n}\r\n\r\nexport class MappedApiResponseRaw<TModel> {\r\n public status!: number;\r\n public data: TModel | undefined;\r\n public messages: string[] = [];\r\n public isError = false;\r\n}\r\n\r\nexport class MappedApiError {\r\n public status!: number;\r\n public data: undefined;\r\n public messages: string[] = [];\r\n public isError = true;\r\n}\r\n","import { IOdata } from './odata.interface';\r\nimport {IOdataResponsePaginationDto} from \"../../dtos/odata-response.dto\";\r\n\r\nexport class ODataPagination implements IOdata {\r\n public pageSize = 20;\r\n public totalPages = 0;\r\n public totalElements = 0;\r\n public page = 1;\r\n\r\n public static fromDto(dto: IOdataResponsePaginationDto): ODataPagination {\r\n const obj = new ODataPagination();\r\n obj.pageSize = dto.pageSize;\r\n obj.totalPages = dto.totalPages;\r\n obj.totalElements = dto.totalElements;\r\n obj.page = dto.page;\r\n return obj;\r\n }\r\n\r\n public toGetParameter(): string {\r\n let odataString = `$top=${this.pageSize}`;\r\n odataString += `&$skip=${(this.page - 1) * this.pageSize}`;\r\n return odataString;\r\n }\r\n}\r\n","import { BaseDbModel } from './base-db.model';\r\nimport { ODataPagination } from './odata/odata-pagination.model';\r\n\r\nexport class MappedOdataResponse<TModel extends BaseDbModel> {\r\n public status!: number;\r\n public data = new MappedOdataResponseData<TModel>();\r\n public messages: string[] = [];\r\n public isError!: boolean;\r\n}\r\n\r\nexport class MappedOdataResponseData<TModel extends BaseDbModel> {\r\n public items!: TModel[];\r\n public pagination = new ODataPagination();\r\n}\r\n","import { IOdata } from './odata.interface';\r\n\r\nexport class OdataExpands implements IOdata {\r\n public expands: string[] = [];\r\n\r\n public constructor(expands: string[] = []) {\r\n this.expands = expands;\r\n }\r\n\r\n public addField(field: string): void {\r\n this.expands.push(field);\r\n }\r\n\r\n public toGetParameter(): string {\r\n return this.expands.length > 0 ? `$expand=${this.expands.join(',')}` : '';\r\n }\r\n}\r\n","import { OdataFilter } from './odata-filter.model';\r\nimport { IOdata } from './odata.interface';\r\n\r\nexport enum FilterConcatenation {\r\n OR = ' or ',\r\n AND = ' and ',\r\n}\r\n\r\nexport class OdataFilterCollection implements IOdata {\r\n public andFilters: OdataFilter[] = [];\r\n\r\n // public orFilters: OdataFilter[] = [];\r\n\r\n public toGetParameter(): string {\r\n let odataString = '$filter=';\r\n const filters = this.andFilters.filter((x) => this._isFilterValid(x));\r\n if (filters.length === 0) {\r\n return '';\r\n }\r\n odataString += filters.map((x) => x.toGetParameter()).join(FilterConcatenation.AND);\r\n return odataString;\r\n }\r\n\r\n public addAnd(andFilter: OdataFilter): void {\r\n this.andFilters.push(andFilter);\r\n }\r\n\r\n public remove(field: string | undefined): void {\r\n const idx = this.andFilters.findIndex((f) => f.field === field);\r\n if (idx >= 0) {\r\n this.andFilters.splice(idx, 1);\r\n }\r\n }\r\n\r\n public hasValidFilters(): boolean {\r\n return this.andFilters.filter((f) => this._isFilterValid(f)).length > 0;\r\n }\r\n\r\n private _isFilterValid(filter: OdataFilter): boolean {\r\n return !(!filter.type || !filter.field || !filter.operator);\r\n }\r\n\r\n // public addOr(field: string, value: string | number | number[], filterType: EODataFilterTypes): void {\r\n // const filter = OdataFilterFactory.createFilter(filterType, field, value);\r\n // if (filter) {\r\n // this.orFilters.push(filter);\r\n // }\r\n // }\r\n}\r\n","import { IOdata } from './odata.interface';\r\n\r\nexport enum ESortDirection {\r\n ASC = 'asc',\r\n DESC = 'desc',\r\n}\r\n\r\nexport class ODataOrder implements IOdata {\r\n public column = 'id';\r\n public direction = ESortDirection.ASC;\r\n\r\n public toGetParameter(): string {\r\n return `$orderby=${this.column} ${this.direction}`;\r\n }\r\n}\r\n","import { OdataExpands } from './odata-expands.model';\r\nimport { OdataFilterCollection } from './odata-filter-collection.model';\r\nimport { ODataOrder } from './odata-order.model';\r\nimport { ODataPagination } from './odata-pagination.model';\r\nimport { IOdata } from './odata.interface';\r\n\r\nexport class OData implements IOdata {\r\n public pagination: ODataPagination = new ODataPagination();\r\n public filter = new OdataFilterCollection();\r\n public expands = new OdataExpands();\r\n public order = new ODataOrder();\r\n\r\n public toGetParameter(): string {\r\n let odataString = `odata?${this.pagination.toGetParameter()}`;\r\n if (this.filter.hasValidFilters()) {\r\n odataString += `&${this.filter.toGetParameter()}`;\r\n }\r\n if (this.order) {\r\n odataString += `&${this.order.toGetParameter()}`;\r\n }\r\n if (this.expands) {\r\n odataString += `&${this.expands.toGetParameter()}`;\r\n }\r\n return odataString;\r\n }\r\n}\r\n","export enum EFilterTypes {\n NUMERIC = 'numeric',\n STRING = 'string',\n DATE = 'date',\n TIME = 'time',\n PACE = 'pace',\n}\n\nexport enum EFilterOperator {\n EQUALS = '=',\n GREATER = '>',\n LESS = '<',\n GREATEREQUALS = '>=',\n LESSEQUALS = '<=',\n BETWEEN = 'zwischen',\n CONTAINS = 'enthält',\n}\n","import { EFilterOperator, EFilterTypes } from './filter/filter.enums';\r\nimport { IOdata } from './odata.interface';\r\n\r\nexport class OdataFilter implements IOdata {\r\n public constructor(\r\n public field?: string,\r\n public value?: string | number,\r\n public operator?: EFilterOperator,\r\n public type?: EFilterTypes,\r\n ) {}\r\n\r\n public toGetParameter(): string {\r\n if (!this.field || !this.operator || !this.type || !this.value) {\r\n return '';\r\n }\r\n switch (this.operator) {\r\n case EFilterOperator.CONTAINS:\r\n return `contains(${this.field},'${this.value}')`;\r\n default:\r\n return `${this.field} ${this._getODataOperator()} ${this._getTypeDependentValue()}`;\r\n }\r\n }\r\n\r\n public static availableOperators(type: EFilterTypes | undefined): EFilterOperator[] {\r\n switch (type) {\r\n case EFilterTypes.NUMERIC:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n case EFilterTypes.STRING:\r\n return [EFilterOperator.CONTAINS];\r\n case EFilterTypes.DATE:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n case EFilterTypes.TIME:\r\n case EFilterTypes.PACE:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n default:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n }\r\n }\r\n\r\n private _getTypeDependentValue(): string | number {\r\n if (this.type === EFilterTypes.STRING) {\r\n return `'${this.value}'`;\r\n }\r\n\r\n if (this.type === EFilterTypes.TIME) {\r\n if (!(this.value as string).includes(':')) {\r\n console.warn(this.value, 'not a valid time');\r\n return 0;\r\n }\r\n const minutesSeconds = (this.value as string).split(':');\r\n return parseInt(minutesSeconds[0], 10) * 60 + parseInt(minutesSeconds[1], 10);\r\n }\r\n\r\n return this.value!;\r\n }\r\n\r\n private _getODataOperator(): string {\r\n switch (this.operator) {\r\n case EFilterOperator.EQUALS:\r\n return 'eq';\r\n case EFilterOperator.LESS:\r\n return 'lt';\r\n case EFilterOperator.LESSEQUALS:\r\n return 'le';\r\n case EFilterOperator.GREATER:\r\n return 'gt';\r\n case EFilterOperator.GREATEREQUALS:\r\n return 'ge';\r\n case EFilterOperator.BETWEEN:\r\n return 'between';\r\n case EFilterOperator.CONTAINS:\r\n return 'contains';\r\n default:\r\n return 'eq';\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, inject, input, model, signal } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { BaseDbModel } from '../../core/models/base-db.model';\r\nimport { MappedApiError } from '../../core/models/mapped-api-response.model';\r\nimport { MappedOdataResponse } from '../../core/models/mapped-odata-response.model';\r\nimport { ODataPagination } from '../../core/models/odata/odata-pagination.model';\r\nimport { OData } from '../../core/models/odata/odata.model';\r\nimport { BaseDbApiService } from '../../core/services/base-db-api.service';\r\nimport {IBaseDbCreateDto} from \"../../core/dtos/base-db-create.dto\";\r\nimport {IBaseDbUpdateDto} from \"../../core/dtos/base-db-update.dto\";\r\nimport {IBaseDbResponseDto} from \"../../core/dtos/base-db-response.dto\";\r\nimport {BaseDisplayModalComponent} from \"./base-display/base-display-modal/base-display-modal.component\";\r\nimport {IDisplayModalReturnObject} from \"./base-display/base-display.component\";\r\n\r\n@Component({\r\n selector: 'sftech-pages-base-list',\r\n standalone: true,\r\n imports: [],\r\n template: '<div></div>',\r\n styles: '',\r\n})\r\nexport abstract class BaseListComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> implements OnInit {\r\n public odata = model<OData>(new OData());\r\n\r\n public showPageTitle = input<boolean>(true);\r\n public canEdit = input<boolean>(true);\r\n public openDisplayAsModal = input<boolean>(true);\r\n\r\n public data = signal<undefined | TDbModel[]>(undefined);\r\n\r\n protected router = inject(Router);\r\n\r\n private modalService = inject(DialogService);\r\n\r\n protected abstract _repo: BaseDbApiService<TDbModel, TCreateDto, TUpdateDto, TResponseDto>;\r\n protected abstract _route: string;\r\n protected abstract _modalComponent: typeof BaseDisplayModalComponent;\r\n protected abstract detailModalHeaderText: string;\r\n\r\n public constructor() {}\r\n\r\n public ngOnInit(): void {\r\n this._loadData();\r\n }\r\n\r\n public updatePagination($event: ODataPagination) {\r\n this.odata.update((odata) => {\r\n const odataNew = new OData();\r\n odataNew.pagination = $event;\r\n odataNew.filter = odata.filter;\r\n odataNew.order = odata.order;\r\n odataNew.expands = odata.expands;\r\n return odataNew;\r\n });\r\n this._loadData();\r\n }\r\n\r\n public openDisplay(id: number | undefined) {\r\n if (id === undefined) {\r\n return;\r\n }\r\n if (this.openDisplayAsModal()) {\r\n const modalRef = this.modalService.open(this._modalComponent, { inputValues: { id, canEdit: this.canEdit(), openedAsModal: true }, focusOnShow: false, modal: true, dismissableMask: true, width: '70%', contentStyle: { overflow: 'auto' } });\r\n modalRef.onClose.subscribe((result: IDisplayModalReturnObject) => {\r\n if (result) {\r\n this.data.update((data) => {\r\n const index = data?.findIndex((item) => item.id === result.id);\r\n if (index !== undefined && index >= 0) {\r\n data![index] = result.data! as TDbModel;\r\n }\r\n return data;\r\n });\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.router.navigate([this._route, id]);\r\n }\r\n\r\n private _loadData() {\r\n this._repo.odata(this.odata()).subscribe((response: MappedOdataResponse<TDbModel> | MappedApiError) => {\r\n if (response instanceof MappedApiError) {\r\n console.error(response);\r\n return;\r\n }\r\n this.data.set(response.data.items);\r\n if (!response.data) {\r\n return;\r\n }\r\n this.odata.update((odata) => {\r\n const odataNew = new OData();\r\n odataNew.pagination = response.data.pagination;\r\n odataNew.filter = odata.filter;\r\n odataNew.order = odata.order;\r\n odataNew.expands = odata.expands;\r\n return odataNew;\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, Input, OnInit, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { Observable, map, of, switchMap } from 'rxjs';\r\nimport { MappedApiError, MappedApiResponse } from '../../../core/models/mapped-api-response.model';\r\nimport {BaseDbModel, IBaseDbModel} from \"../../../core/models/base-db.model\";\r\nimport {IBaseDbCreateDto} from \"../../../core/dtos/base-db-create.dto\";\r\nimport {IBaseDbUpdateDto} from \"../../../core/dtos/base-db-update.dto\";\r\nimport {IBaseDbResponseDto} from \"../../../core/dtos/base-db-response.dto\";\r\nimport {IconProvider} from \"../../../providers/icon.provider\";\r\nimport {BaseDbApiService} from \"../../../core/services/base-db-api.service\";\r\n\r\n@Component({\r\n selector: 'lib-core-base-display',\r\n standalone: true,\r\n imports: [],\r\n template: '<div></div>',\r\n styles: '',\r\n})\r\nexport abstract class BaseDisplayComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> implements OnInit {\r\n @Input() public id: undefined | number;\r\n @Input() public openedAsModal = false;\r\n @Input() public canEdit = true;\r\n\r\n public redirectAfterSave = true;\r\n\r\n protected ref = inject(DynamicDialogRef);\r\n\r\n public form!: FormGroup;\r\n public model = signal<TDbModel>(this.getNewModel());\r\n public iconProvider = IconProvider;\r\n protected abstract _repo: BaseDbApiService<TDbModel, TCreateDto, TUpdateDto, TResponseDto>;\r\n protected abstract _route: string;\r\n protected router = inject(Router);\r\n protected activatedRoute = inject(ActivatedRoute);\r\n protected toastr = inject(MessageService);\r\n\r\n protected constructor() {\r\n effect(() => {\r\n if (this.model()) {\r\n this.form = this.initializeForm();\r\n if (!this.canEdit) {\r\n for (const control in this.form.controls) {\r\n this.form.controls[control].disable();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n let obs: Observable<MappedApiResponse<TDbModel>>;\r\n if (this.id) {\r\n obs = this._loadData(this.id!);\r\n } else {\r\n obs = this.activatedRoute.params.pipe(\r\n switchMap((params) => {\r\n const id = parseInt(params['id']);\r\n this.id = id;\r\n return this._loadData(id);\r\n }),\r\n );\r\n }\r\n obs.subscribe((res: MappedApiResponse<TDbModel> | MappedApiError) => {\r\n if (res instanceof MappedApiError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Laden der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Laden der Daten ist ein Fehler aufgetreten');\r\n }\r\n this.model.set(res.data as TDbModel);\r\n if (this.form) {\r\n this.form.patchValue(this.model());\r\n this.form.markAsUntouched();\r\n }\r\n });\r\n }\r\n\r\n public async submitForm(): Promise<void> {\r\n let obs: Observable<MappedApiResponse<TDbModel> | MappedApiError>;\r\n if (!this.form.valid) {\r\n return;\r\n }\r\n if (this.model().id) {\r\n const dto = this.mapFormToUpdateDto();\r\n obs = this._repo.update(this.model().id!, dto);\r\n } else {\r\n const dto = this.mapFormToCreateDto();\r\n obs = this._repo.insert(dto);\r\n }\r\n obs.subscribe((res) => {\r\n if (res.isError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Speichern der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Speichern der Daten ist ein Fehler aufgetreten');\r\n }\r\n this.model.set(res.data as TDbModel);\r\n this.toastr.add({ severity: 'success', detail: `Datensatz mit der Id '${this.model().id}' erfolgreich gespeichert` });\r\n if (this.redirectAfterSave) {\r\n this.goBack({ operation: this.model().id ? 'update' : 'create', id: this.model().id, data: res.data as IBaseDbModel });\r\n }\r\n });\r\n }\r\n\r\n public deleteData(): void {\r\n if (!this.model().id) {\r\n this.model.set(this.getNewModel());\r\n this.form.patchValue(this.model);\r\n return;\r\n }\r\n this._repo.delete(this.model().id!).subscribe((res) => {\r\n if (res.isError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Löschen der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Löschen der Daten ist ein Fehler aufgetreten');\r\n }\r\n this.toastr.add({ severity: 'success', detail: `Datensatz mit der Id '${this.model().id}' erfolgreich gelöscht` });\r\n this.goBack({ operation: 'delete', id: this.model().id });\r\n });\r\n }\r\n\r\n public getFormControl(property: string): FormControl | undefined {\r\n return this.form.get(property) as FormControl;\r\n }\r\n\r\n public goBack(retVal: IDisplayModalReturnObject = { operation: 'aborted' }): void {\r\n if (this.openedAsModal) {\r\n this.close(retVal);\r\n return;\r\n }\r\n this.router.navigate([this._route]);\r\n }\r\n\r\n private _loadData(id: number): Observable<MappedApiResponse<TDbModel>> {\r\n if (id) {\r\n return this._repo.get(id, true).pipe(\r\n map((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Laden der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Laden der Daten ist ein Fehler aufgetreten');\r\n }\r\n return res;\r\n }),\r\n );\r\n }\r\n const mappedApiResponse = new MappedApiResponse<TDbModel>();\r\n mappedApiResponse.data = this.model();\r\n return of(mappedApiResponse);\r\n }\r\n\r\n protected abstract initializeForm(): FormGroup;\r\n\r\n protected abstract getNewModel(): TDbModel;\r\n\r\n protected abstract mapFormToUpdateDto(): TUpdateDto;\r\n\r\n protected abstract mapFormToCreateDto(): TCreateDto;\r\n\r\n public close(retVal: IDisplayModalReturnObject = { operation: 'aborted' }): void {\r\n this.ref.close(retVal);\r\n }\r\n}\r\n\r\nexport interface IDisplayModalReturnObject {\r\n operation: 'create' | 'update' | 'delete' | 'aborted';\r\n data?: IBaseDbModel;\r\n id?: number;\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-prompt-display-modal',\r\n standalone: true,\r\n imports: [],\r\n template: '',\r\n styles: '',\r\n})\r\nexport class BaseDisplayModalComponent {\r\n public id!: number | undefined;\r\n public canEdit = true;\r\n}\r\n","import { Component, input } from '@angular/core';\nimport {AbstractControl, FormControl} from '@angular/forms';\n\n@Component({\n selector: 'sftech-form-error-display',\n standalone: true,\n imports: [],\n templateUrl: './form-error-display.component.html',\n styleUrl: './form-error-display.component.css',\n})\nexport class FormErrorDisplayComponent {\n public control = input<AbstractControl | undefined>(undefined);\n public label = input<string | undefined>(undefined);\n}\n","@if (control()?.errors) {\r\n <div class=\"p-1 text-xs text-red-500\">\r\n @if (control()?.errors?.['required']) {\r\n <div>{{ label() }} ist ein Pflichtfeld.</div>\r\n }\r\n </div>\r\n}\r\n","import { Component, EventEmitter, Input, Output, computed } from '@angular/core';\r\nimport { Paginator, PaginatorModule, PaginatorState } from 'primeng/paginator';\r\nimport { ODataPagination } from '../../core/models/odata/odata-pagination.model';\r\n\r\n@Component({\r\n selector: 'sftech-paginator',\r\n standalone: true,\r\n imports: [PaginatorModule],\r\n templateUrl: './paginator.component.html',\r\n styleUrl: './paginator.component.css',\r\n})\r\nexport class PaginatorComponent {\r\n @Input() pagination!: ODataPagination;\r\n @Output() public odataChanged = new EventEmitter<ODataPagination>();\r\n // public amountOfPageNumbersToShow = 5;\r\n // public pageNumbers = computed(() => {\r\n // const currentPage = this.pagination!.page;\r\n // const totalPages = this.pagination!.totalPages;\r\n //\r\n // if (totalPages <= this.amountOfPageNumbersToShow) {\r\n // // Wenn die Gesamtseiten kleiner als oder gleich der sichtbaren Seiten sind\r\n // return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n // }\r\n //\r\n // const pagination: number[] = []; // Immer mit 1 starten\r\n //\r\n // // Bereich in der Mitte berechnen\r\n // const middleCount = this.amountOfPageNumbersToShow - 2; // Plätze für Mitte (ohne 1 und x)\r\n // const half = Math.floor(middleCount / 2);\r\n //\r\n // let start = Math.max(2, currentPage - half); // Startpunkt der Mitte\r\n // let end = Math.min(totalPages - 1, currentPage + half); // Endpunkt der Mitte\r\n //\r\n // // Anpassen, falls die Mitte den Anfang oder das Ende überschreitet\r\n // if (end - start < middleCount - 1) {\r\n // if (start === 2) {\r\n // end = start + middleCount - 1;\r\n // } else if (end === totalPages - 1) {\r\n // start = end - middleCount + 1;\r\n // }\r\n // }\r\n //\r\n // // Mittlere Zahlen hinzufügen\r\n // for (let i = start; i <= end; i++) {\r\n // pagination.push(i);\r\n // }\r\n //\r\n // return pagination;\r\n // });\r\n //\r\n // public changePage(pageNumber: number) {\r\n // this.pagination.page = pageNumber;\r\n // this.odataChanged.emit(this.pagination);\r\n // }\r\n\r\n onPageChange(event: PaginatorState) {\r\n if (event.page !== undefined) {\r\n this.pagination.page = event.page + 1;\r\n }\r\n this.pagination.pageSize = event.rows ?? 10;\r\n this.odataChanged.emit(this.pagination);\r\n }\r\n}\r\n","<!--<nav aria-label=\"Table navigation\" class=\"flex items-center flex-wrap md:flex-row justify-between p-2 bg-gradient-to-b from-secondary_accent-500 to-secondary_accent-700\">-->\r\n<!-- <div-->\r\n<!-- class=\"font-normal text-white dark:text-gray-400 md:mb-0 block w-full md:inline md:w-auto\">Ergebnis-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ ((pagination.page - 1) * pagination.pageSize) + 1 }} - {{ pagination.totalPages === pagination.page ? pagination.totalElements : pagination.pageSize * pagination.page}}</span>-->\r\n<!-- von-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ pagination.totalElements }}</span></div>-->\r\n<!-- <ul class=\"inline-flex -space-x-px rtl:space-x-reverse text-sm h-8\">-->\r\n<!-- @for (pageNumber of pageNumbers(); track pageNumber) {-->\r\n<!-- <li>-->\r\n<!-- <a [class.rounded-s-lg]=\"pageNumber === 1\" [class.rounded-e-lg]=\"pageNumber === pagination.totalPages\"-->\r\n<!-- (click)=\"changePage(pageNumber)\"-->\r\n<!-- class=\"flex items-center justify-center px-3 h-8 leading-tight text-gray-500 bg-white border border-gray-300 hover:bg-gray-100 hover:text-gray-700 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\">{{ pageNumber }}</a>-->\r\n<!-- </li>-->\r\n<!-- }-->\r\n<!-- </ul>-->\r\n<!--</nav>-->\r\n\r\n\r\n\r\n\r\n<div class=\"card flex justify-center\">\r\n <p-paginator (onPageChange)=\"onPageChange($event)\" [first]=\"pagination.page - 1 \" [rows]=\"pagination.pageSize\" [totalRecords]=\"pagination.totalElements\" [rowsPerPageOptions]=\"[10, 20, 30]\" />\r\n</div>","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, catchError, map, of } from 'rxjs';\r\nimport { BaseDbModel } from '../models/base-db.model';\r\nimport { MappedApiError, MappedApiResponse } from '../models/mapped-api-response.model';\r\nimport { MappedOdataResponse } from '../models/mapped-odata-response.model';\r\nimport { ODataPagination } from '../models/odata/odata-pagination.model';\r\nimport { OData } from '../models/odata/odata.model';\r\nimport { IBaseDbCreateDto } from '../dtos/base-db-create.dto';\r\nimport {IBaseDbUpdateDto} from \"../dtos/base-db-update.dto\";\r\nimport { IBaseDbResponseDto } from '../dtos/base-db-response.dto';\r\nimport { IAppConfig } from '../configuration/app-config.interface';\r\nimport {IApiResponse} from \"../dtos/api-response.dto\";\r\nimport {IOdataResponseDto} from \"../dtos/odata-response.dto\";\r\n\r\nexport abstract class BaseDbApiService<TModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> {\r\n protected url!: string;\r\n\r\n constructor(\r\n protected readonly http: HttpClient,\r\n protected readonly config: IAppConfig,\r\n ) {}\r\n\r\n public get(id: number, detailed: boolean = false): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n let url = `${this.url}/${id}`;\r\n console.log(url)\r\n if (detailed) {\r\n url = `${url}/?detailed=${detailed}`;\r\n }\r\n return this.http.get<IApiResponse<TResponseDto>>(url).pipe(\r\n map((response: IApiResponse<TResponseDto>) => this._responseMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public getAll(): Observable<MappedOdataResponse<TModel> | MappedApiError> {\r\n const odata = new OData();\r\n return this.odata(odata);\r\n }\r\n\r\n public odata(odataQuery: OData): Observable<MappedOdataResponse<TModel> | MappedApiError> {\r\n return this.http.get<IApiResponse<IOdataResponseDto<TResponseDto>>>(`${this.url}/${odataQuery.toGetParameter()}`).pipe(\r\n map((response: IApiResponse<IOdataResponseDto<TResponseDto>>) => this._responseOdataMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public insert(dto: TCreateDto): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n return this.http.post<IApiResponse<TResponseDto>>(this.url, dto).pipe(\r\n map((response: IApiResponse<TResponseDto>) => this._responseMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public update(id: number, dto: TUpdateDto): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n return this.http.put<IApiResponse<TResponseDto>>(`${this.url}/${id}`, dto).pipe(\r\n map((response: IApiResponse<TResponseDto>) => this._responseMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public delete(id: number): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n return this.http.delete<IApiResponse<TResponseDto>>(`${this.url}/${id}`).pipe(\r\n map((response: IApiResponse<TResponseDto>) => {\r\n const apiReponse = new MappedApiResponse<TModel>();\r\n apiReponse.status = response.status;\r\n apiReponse.messages = response.messages ? response.messages : [];\r\n apiReponse.isError = false;\r\n return apiReponse;\r\n }),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n protected abstract getNewModel(): TModel;\r\n\r\n private _responseOdataMapping(response: IApiResponse<IOdataResponseDto<TResponseDto>>): MappedOdataResponse<TModel> {\r\n const odataResponse = new MappedOdataResponse<TModel>();\r\n odataResponse.data.items = this.getNewModel().fromDtos((response.data as IOdataResponseDto<TResponseDto>)?.items) as TModel[];\r\n odataResponse.data.pagination = ODataPagination.fromDto((response.data as IOdataResponseDto<TResponseDto>).pagination);\r\n return odataResponse;\r\n }\r\n\r\n private _responseMapping(response: IApiResponse<TResponseDto>): MappedApiResponse<TModel> | MappedApiError {\r\n if (![200, 201, 202].includes(response.status)) {\r\n return this._errorHandling(response.status, response.messages);\r\n }\r\n const apiResponse = new MappedApiResponse<TModel>();\r\n apiResponse.status = response.status;\r\n apiResponse.messages = response.messages ? response.messages : [];\r\n apiResponse.isError = false;\r\n\r\n let mappedData: TModel | TModel[] | undefined;\r\n\r\n if (Array.isArray(response.data)) {\r\n mappedData = this.getNewModel().fromDtos(response.data) as TModel[];\r\n } else {\r\n mappedData = this.getNewModel().fromDto(response.data as TResponseDto) as TModel;\r\n }\r\n\r\n apiResponse.data = mappedData;\r\n return apiResponse;\r\n }\r\n\r\n private _errorHandling(statusCode: number, messages: string[] | undefined) {\r\n const apiResponse = new MappedApiError();\r\n apiResponse.status = statusCode;\r\n apiResponse.messages = messages ? messages : [];\r\n apiResponse.isError = true;\r\n return apiResponse;\r\n }\r\n\r\n private _httpErrorToApiResponse(error: HttpErrorResponse) {\r\n const messages: string[] = [];\r\n if (error.message) {\r\n messages.push(error.message);\r\n }\r\n if (error.error?.messages) {\r\n messages.push(...error.error.messages);\r\n }\r\n return of(this._errorHandling(error.status, messages));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sftech-ng-shared.mjs","sources":["../../../../libs/ng-shared/src/lib/ui/styles/themes/sftech.preset.ts","../../../../libs/ng-shared/src/lib/providers/icon.provider.ts","../../../../libs/ng-shared/src/lib/ui/layouts/sidebar-navigation/sidebar-navigation.component.ts","../../../../libs/ng-shared/src/lib/ui/layouts/sidebar-navigation/sidebar-navigation.component.html","../../../../libs/ng-shared/src/lib/ui/layouts/head-main-footer-with-canvas/head-main-footer-with-canvas.component.ts","../../../../libs/ng-shared/src/lib/ui/layouts/head-main-footer-with-canvas/head-main-footer-with-canvas.component.html","../../../../libs/ng-shared/src/lib/ui/layouts/base-dialog/base-dialog.component.ts","../../../../libs/ng-shared/src/lib/ui/layouts/base-dialog/base-dialog.component.html","../../../../libs/ng-shared/src/lib/core/configuration/app-config.loader.ts","../../../../libs/ng-shared/src/lib/core/models/base-db.model.ts","../../../../libs/ng-shared/src/lib/core/models/mapped-api-response.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-pagination.model.ts","../../../../libs/ng-shared/src/lib/core/models/mapped-odata-response.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-expands.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-filter-collection.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-order.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata.model.ts","../../../../libs/ng-shared/src/lib/core/models/odata/filter/filter.enums.ts","../../../../libs/ng-shared/src/lib/core/models/odata/odata-filter.model.ts","../../../../libs/ng-shared/src/lib/components/pages/base-list.component.ts","../../../../libs/ng-shared/src/lib/components/pages/base-display/base-display.component.ts","../../../../libs/ng-shared/src/lib/components/pages/base-display/base-display-modal/base-display-modal.component.ts","../../../../libs/ng-shared/src/lib/components/forms/form-error-display/form-error-display.component.ts","../../../../libs/ng-shared/src/lib/components/forms/form-error-display/form-error-display.component.html","../../../../libs/ng-shared/src/lib/components/paginator/paginator.component.ts","../../../../libs/ng-shared/src/lib/components/paginator/paginator.component.html","../../../../libs/ng-shared/src/lib/core/services/base-db-api.service.ts","../../../../libs/ng-shared/src/sftech-ng-shared.ts"],"sourcesContent":["import { definePreset } from '@primeng/themes';\r\nimport Aura from '@primeng/themes/aura';\r\n\r\nexport const SfTechPreset = definePreset(Aura, {\r\n semantic: {\r\n primary: {\r\n 50: '#9ddcf5',\r\n 100: '#8bd5f2',\r\n 200: '#6bc8ef',\r\n 300: '#4abbe8',\r\n 400: '#2aa8e0',\r\n 500: '#0093d8',\r\n 600: '#0081c3',\r\n 700: '#0071a8',\r\n 800: '#00618c',\r\n 900: '#005272',\r\n },\r\n }\r\n});\r\n","import { faBars, faBurger, faClose, faPlus, faQuestion, faTrash } from '@fortawesome/free-solid-svg-icons';\r\n\r\n// biome-ignore lint/complexity/noStaticOnlyClass: <explanation>\r\nexport class IconProvider {\r\n public static readonly add = faPlus;\r\n public static readonly close = faClose;\r\n public static readonly delete = faTrash;\r\n public static readonly help = faQuestion;\r\n public static readonly menu = faBars;\r\n}\r\n","import {Component, EventEmitter, input, model, Output} from '@angular/core';\r\nimport {Ripple} from \"primeng/ripple\";\r\nimport {StyleClass} from \"primeng/styleclass\";\r\nimport {FaIconComponent} from \"@fortawesome/angular-fontawesome\";\r\nimport {RouterLink} from \"@angular/router\";\r\n\r\n@Component({\r\n selector: 'sftech-sidebar-navigation',\r\n imports: [\r\n Ripple,\r\n StyleClass,\r\n FaIconComponent,\r\n RouterLink\r\n ],\r\n templateUrl: './sidebar-navigation.component.html',\r\n styleUrl: './sidebar-navigation.component.css'\r\n})\r\nexport class SidebarNavigationComponent {\r\n @Output() closeDrawer = new EventEmitter<void>();\r\n public navigation = input<ISidebarNavigationCategory[]>([])\r\n}\r\n\r\nexport interface ISidebarNavigationCategory {\r\n categoryName: string,\r\n icon?: string,\r\n links: ISidebarNavigationLink[]\r\n}\r\n\r\nexport interface ISidebarNavigationLink {\r\n name: string,\r\n icon?: string,\r\n routerLink: string,\r\n}\r\n","<ul class=\"list-none p-4 m-0\">\r\n @for (category of navigation(); track category) {\r\n <li>\r\n <div\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterFromClass=\"hidden\"\r\n enterActiveClass=\"animate-slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"animate-slideup\"\r\n class=\"py-2 flex items-center justify-between cursor-pointer p-ripple\"\r\n >\r\n @if (category.icon) {\r\n <fa-icon [icon]=\"category.icon\"></fa-icon>\r\n }\r\n <span class=\"font-bold\">{{ category.categoryName }}</span>\r\n </div>\r\n <ul class=\"list-none p-0 m-0 overflow-hidden\">\r\n @for (link of category.links; track link) {\r\n <li class=\"py-1\">\r\n <a [routerLink]=\"[link.routerLink]\" (click)=\"closeDrawer.emit()\" pRipple class=\"flex items-center cursor-pointer px-4 py-2.5 rounded-border hover:bg-primary-50 duration-150 transition-colors p-ripple\">\r\n @if (link.icon) {\r\n <fa-icon [icon]=\"link.icon\"></fa-icon>\r\n }\r\n <span class=\"font-medium\">{{ link.name}}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n </li>\r\n }\r\n</ul>","import { NgTemplateOutlet } from '@angular/common';\r\nimport {Component, ContentChild, Input, model, TemplateRef, ViewChild} from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { Button } from 'primeng/button';\r\nimport { Drawer } from 'primeng/drawer';\r\nimport { Toast } from 'primeng/toast';\r\nimport { IconProvider } from '../../../providers/icon.provider';\r\nimport {\r\n ISidebarNavigationCategory,\r\n SidebarNavigationComponent\r\n} from \"../sidebar-navigation/sidebar-navigation.component\";\r\n\r\n@Component({\r\n selector: 'sftech-head-main-footer-with-canvas',\r\n imports: [NgTemplateOutlet, Button, Drawer, FaIconComponent, Toast, SidebarNavigationComponent],\r\n templateUrl: './head-main-footer-with-canvas.component.html',\r\n styleUrl: './head-main-footer-with-canvas.component.css',\r\n})\r\nexport class HeadMainFooterWithCanvasComponent {\r\n @Input() title = 'demo';\r\n @Input() maxWidth = '100%';\r\n @Input() navigationItems: ISidebarNavigationCategory[] = [];\r\n @Input() hasDrawer = true;\r\n protected drawerVisible = false;\r\n @ContentChild('header') public header: TemplateRef<unknown> | null = null;\r\n @ContentChild('main') public main: TemplateRef<unknown> | null = null;\r\n @ContentChild('footer') public footer: TemplateRef<unknown> | null = null;\r\n\r\n @ViewChild('drawerRef') drawerRef!: Drawer;\r\n\r\n protected iconProvider = IconProvider;\r\n\r\n closeCallback(e: Event): void {\r\n this.drawerRef.close(e);\r\n }\r\n}\r\n","<div class=\"h-screen flex flex-col justify-between\">\r\n <p-toast/>\r\n <header class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center\">\r\n <div class=\"flex-shrink\">\r\n <p-button (click)=\"drawerVisible = !drawerVisible\">\r\n <fa-icon [icon]=\"iconProvider.menu\"></fa-icon>\r\n </p-button>\r\n </div>\r\n <div class=\"ms-2\">\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n </div>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n </header>\r\n\r\n <main class=\"p-2 flex-grow overflow-auto\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-2 bg-primary-600\">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </footer>\r\n</div>\r\n\r\n@if (hasDrawer) {\r\n <p-drawer #drawerRef [(visible)]=\"drawerVisible\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"flex items-center justify-between px-2 pt-4 shrink-0\">\r\n <span class=\"font-semibold text-2xl text-primary\">Menu</span>\r\n <span>\r\n <p-button type=\"button\" (click)=\"drawerVisible = false\" rounded=\"true\" outlined=\"true\"\r\n styleClass=\"h-9 w-9\"><fa-icon [icon]=\"iconProvider.close\"></fa-icon></p-button>\r\n </span>\r\n </div>\r\n <div class=\"overflow-y-auto px-2 mt-6\">\r\n <sftech-sidebar-navigation [navigation]=\"navigationItems\" (closeDrawer)=\"drawerVisible = false\"></sftech-sidebar-navigation>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, ContentChild, EventEmitter, Output, TemplateRef, inject, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { Button } from 'primeng/button';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { IconProvider } from '../../../providers/icon.provider';\r\n\r\n@Component({\r\n selector: 'sftech-base-dialog',\r\n imports: [Button, NgTemplateOutlet, FaIconComponent],\r\n templateUrl: './base-dialog.component.html',\r\n styleUrl: './base-dialog.component.css',\r\n})\r\nexport class BaseDialogComponent {\r\n public hasHeader = input<boolean>(true);\r\n public hasFooter = input<boolean>(true);\r\n public showButtons = input<boolean>(true);\r\n public headerText = input<string | undefined>(undefined);\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n @ContentChild('header') public header: TemplateRef<unknown> | null = null;\r\n @ContentChild('body') public body: TemplateRef<unknown> | null = null;\r\n @ContentChild('footer') public footer: TemplateRef<unknown> | null = null;\r\n\r\n public iconProvider = IconProvider;\r\n\r\n protected ref = inject(DynamicDialogRef);\r\n\r\n constructor() {}\r\n\r\n public close(retVal: unknown = undefined): void {\r\n this.ref.close(retVal);\r\n this.closed.emit();\r\n }\r\n}\r\n","<!--<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [style]=\"{ width: '25rem' }\">-->\r\n<!-- <ng-template #header>-->\r\n<!-- <div class=\"inline-flex items-center justify-center gap-2\">-->\r\n<!-- <span class=\"font-bold whitespace-nowrap\">Amy Elsner</span>-->\r\n<!-- </div>-->\r\n<!-- </ng-template>-->\r\n<!-- <span class=\"text-surface-500 dark:text-surface-400 block mb-8\">Update your information.</span>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-4\">-->\r\n<!-- <label for=\"username\" class=\"font-semibold w-24\">Username</label>-->\r\n<!-- <input pInputText id=\"username\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <div class=\"flex items-center gap-4 mb-2\">-->\r\n<!-- <label for=\"email\" class=\"font-semibold w-24\">Email</label>-->\r\n<!-- <input pInputText id=\"email\" class=\"flex-auto\" autocomplete=\"off\" />-->\r\n<!-- </div>-->\r\n<!-- <ng-template #footer>-->\r\n<!-- <p-button label=\"Cancel\" [text]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- <p-button label=\"Save\" [outlined]=\"true\" severity=\"secondary\" (click)=\"visible = false\" />-->\r\n<!-- </ng-template>-->\r\n<!--</p-dialog>-->\r\n\r\n@if (hasHeader()) {\r\n <div id=\"dialog-header\" class=\"flex justify-between mb-5\">\r\n <div class=\"header-content\">\r\n @if (headerText()) {\r\n <h1>{{ headerText() }}</h1>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n }\r\n </div>\r\n <div class=\"header-actions\">\r\n <p-button (onClick)=\"close()\">\r\n <fa-icon [icon]=\"iconProvider.close\"></fa-icon>\r\n </p-button>\r\n </div>\r\n </div>\r\n}\r\n<div id=\"dialog-body\">\r\n <ng-container [ngTemplateOutlet]=\"body\"></ng-container>\r\n</div>\r\n\r\n@if (hasFooter()) {\r\n <div id=\"dialog-footer\" class=\"flex justify-end mt-5\">\r\n <div id=\"footer-content\">\r\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\r\n </div>\r\n </div>\r\n}","import {IAppConfig} from \"./app-config.interface\";\r\n\r\nexport async function loadConfig<TConfig extends IAppConfig>(configPath: string): Promise<TConfig> {\r\n return fetch(configPath)\r\n .then((res) => {\r\n if (!res.ok) throw new Error('Config load failed');\r\n return res.json();\r\n });\r\n}","import { IBaseDbResponseDto } from '../dtos/base-db-response.dto';\r\nimport { EFilterTypes } from './odata/filter/filter.enums';\r\n\r\nexport interface IBaseDbModel {\r\n id?: number;\r\n createdAt?: Date;\r\n\r\n propertiesToShow?: string[];\r\n propertyUINames?: Map<string, string>;\r\n\r\n getFilterTypeForProperty(propertyName: string): EFilterTypes | undefined;\r\n getUiNameForProperty(propertyName: string): string;\r\n}\r\n\r\nexport class BaseDbModel implements IBaseDbModel {\r\n public id?: number;\r\n public createdAt?: Date;\r\n\r\n public propertiesToShow: string[] = [];\r\n\r\n public propertyFilterType = new Map<string, EFilterTypes>();\r\n\r\n public propertyUINames = new Map<string, string>();\r\n\r\n public getUiNameForProperty(propertyName: string): string {\r\n return this.propertyUINames.get(propertyName) || propertyName;\r\n }\r\n public getFilterTypeForProperty(propertyName: string): EFilterTypes | undefined {\r\n return this.propertyFilterType.get(propertyName);\r\n }\r\n\r\n public getPropertyValue(propertyName: string): unknown {\r\n return this[propertyName as keyof this];\r\n }\r\n\r\n public static fromDto(dto: IBaseDbResponseDto): IBaseDbModel {\r\n const model = new this();\r\n return model.fromDto(dto);\r\n }\r\n\r\n public static fromDtos(dtos: IBaseDbResponseDto[]): IBaseDbModel[] {\r\n return dtos.map((dto) => this.fromDto(dto));\r\n }\r\n\r\n public fromDto(dto: IBaseDbResponseDto): IBaseDbModel {\r\n this.id = dto.id;\r\n this.createdAt = dto.createdAt;\r\n return this;\r\n }\r\n\r\n public fromDtos(dtos: IBaseDbResponseDto[]): IBaseDbModel[] {\r\n return dtos.map((dto) => this.fromDto(dto));\r\n }\r\n}\r\n","import { BaseDbModel } from './base-db.model';\r\n\r\nexport class MappedApiResponse<TModel extends BaseDbModel> {\r\n public status!: number;\r\n public data: TModel | TModel[] | undefined;\r\n public messages: string[] = [];\r\n public isError = false;\r\n}\r\n\r\nexport class MappedApiResponseRaw<TModel> {\r\n public status!: number;\r\n public data: TModel | undefined;\r\n public messages: string[] = [];\r\n public isError = false;\r\n}\r\n\r\nexport class MappedApiError {\r\n public status!: number;\r\n public data: undefined;\r\n public messages: string[] = [];\r\n public isError = true;\r\n}\r\n","import { IOdata } from './odata.interface';\r\nimport {IOdataResponsePaginationDto} from \"../../dtos/odata-response.dto\";\r\n\r\nexport class ODataPagination implements IOdata {\r\n public pageSize = 20;\r\n public totalPages = 0;\r\n public totalElements = 0;\r\n public page = 1;\r\n\r\n public static fromDto(dto: IOdataResponsePaginationDto): ODataPagination {\r\n const obj = new ODataPagination();\r\n obj.pageSize = dto.pageSize;\r\n obj.totalPages = dto.totalPages;\r\n obj.totalElements = dto.totalElements;\r\n obj.page = dto.page;\r\n return obj;\r\n }\r\n\r\n public toGetParameter(): string {\r\n let odataString = `$top=${this.pageSize}`;\r\n odataString += `&$skip=${(this.page - 1) * this.pageSize}`;\r\n return odataString;\r\n }\r\n}\r\n","import { BaseDbModel } from './base-db.model';\r\nimport { ODataPagination } from './odata/odata-pagination.model';\r\n\r\nexport class MappedOdataResponse<TModel extends BaseDbModel> {\r\n public status!: number;\r\n public data = new MappedOdataResponseData<TModel>();\r\n public messages: string[] = [];\r\n public isError!: boolean;\r\n}\r\n\r\nexport class MappedOdataResponseData<TModel extends BaseDbModel> {\r\n public items!: TModel[];\r\n public pagination = new ODataPagination();\r\n}\r\n","import { IOdata } from './odata.interface';\r\n\r\nexport class OdataExpands implements IOdata {\r\n public expands: string[] = [];\r\n\r\n public constructor(expands: string[] = []) {\r\n this.expands = expands;\r\n }\r\n\r\n public addField(field: string): void {\r\n this.expands.push(field);\r\n }\r\n\r\n public toGetParameter(): string {\r\n return this.expands.length > 0 ? `$expand=${this.expands.join(',')}` : '';\r\n }\r\n}\r\n","import { OdataFilter } from './odata-filter.model';\r\nimport { IOdata } from './odata.interface';\r\n\r\nexport enum FilterConcatenation {\r\n OR = ' or ',\r\n AND = ' and ',\r\n}\r\n\r\nexport class OdataFilterCollection implements IOdata {\r\n public andFilters: OdataFilter[] = [];\r\n\r\n // public orFilters: OdataFilter[] = [];\r\n\r\n public toGetParameter(): string {\r\n let odataString = '$filter=';\r\n const filters = this.andFilters.filter((x) => this._isFilterValid(x));\r\n if (filters.length === 0) {\r\n return '';\r\n }\r\n odataString += filters.map((x) => x.toGetParameter()).join(FilterConcatenation.AND);\r\n return odataString;\r\n }\r\n\r\n public addAnd(andFilter: OdataFilter): void {\r\n this.andFilters.push(andFilter);\r\n }\r\n\r\n public remove(field: string | undefined): void {\r\n const idx = this.andFilters.findIndex((f) => f.field === field);\r\n if (idx >= 0) {\r\n this.andFilters.splice(idx, 1);\r\n }\r\n }\r\n\r\n public hasValidFilters(): boolean {\r\n return this.andFilters.filter((f) => this._isFilterValid(f)).length > 0;\r\n }\r\n\r\n private _isFilterValid(filter: OdataFilter): boolean {\r\n return !(!filter.type || !filter.field || !filter.operator);\r\n }\r\n\r\n // public addOr(field: string, value: string | number | number[], filterType: EODataFilterTypes): void {\r\n // const filter = OdataFilterFactory.createFilter(filterType, field, value);\r\n // if (filter) {\r\n // this.orFilters.push(filter);\r\n // }\r\n // }\r\n}\r\n","import { IOdata } from './odata.interface';\r\n\r\nexport enum ESortDirection {\r\n ASC = 'asc',\r\n DESC = 'desc',\r\n}\r\n\r\nexport class ODataOrder implements IOdata {\r\n public column = 'id';\r\n public direction = ESortDirection.ASC;\r\n\r\n public toGetParameter(): string {\r\n return `$orderby=${this.column} ${this.direction}`;\r\n }\r\n}\r\n","import { OdataExpands } from './odata-expands.model';\r\nimport { OdataFilterCollection } from './odata-filter-collection.model';\r\nimport { ODataOrder } from './odata-order.model';\r\nimport { ODataPagination } from './odata-pagination.model';\r\nimport { IOdata } from './odata.interface';\r\n\r\nexport class OData implements IOdata {\r\n public pagination: ODataPagination = new ODataPagination();\r\n public filter = new OdataFilterCollection();\r\n public expands = new OdataExpands();\r\n public order = new ODataOrder();\r\n\r\n public toGetParameter(): string {\r\n let odataString = `odata?${this.pagination.toGetParameter()}`;\r\n if (this.filter.hasValidFilters()) {\r\n odataString += `&${this.filter.toGetParameter()}`;\r\n }\r\n if (this.order) {\r\n odataString += `&${this.order.toGetParameter()}`;\r\n }\r\n if (this.expands) {\r\n odataString += `&${this.expands.toGetParameter()}`;\r\n }\r\n return odataString;\r\n }\r\n}\r\n","export enum EFilterTypes {\n NUMERIC = 'numeric',\n STRING = 'string',\n DATE = 'date',\n TIME = 'time',\n PACE = 'pace',\n}\n\nexport enum EFilterOperator {\n EQUALS = '=',\n GREATER = '>',\n LESS = '<',\n GREATEREQUALS = '>=',\n LESSEQUALS = '<=',\n BETWEEN = 'zwischen',\n CONTAINS = 'enthält',\n}\n","import { EFilterOperator, EFilterTypes } from './filter/filter.enums';\r\nimport { IOdata } from './odata.interface';\r\n\r\nexport class OdataFilter implements IOdata {\r\n public constructor(\r\n public field?: string,\r\n public value?: string | number,\r\n public operator?: EFilterOperator,\r\n public type?: EFilterTypes,\r\n ) {}\r\n\r\n public toGetParameter(): string {\r\n if (!this.field || !this.operator || !this.type || !this.value) {\r\n return '';\r\n }\r\n switch (this.operator) {\r\n case EFilterOperator.CONTAINS:\r\n return `contains(${this.field},'${this.value}')`;\r\n default:\r\n return `${this.field} ${this._getODataOperator()} ${this._getTypeDependentValue()}`;\r\n }\r\n }\r\n\r\n public static availableOperators(type: EFilterTypes | undefined): EFilterOperator[] {\r\n switch (type) {\r\n case EFilterTypes.NUMERIC:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n case EFilterTypes.STRING:\r\n return [EFilterOperator.CONTAINS];\r\n case EFilterTypes.DATE:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n case EFilterTypes.TIME:\r\n case EFilterTypes.PACE:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n default:\r\n return [EFilterOperator.GREATER, EFilterOperator.GREATEREQUALS, EFilterOperator.BETWEEN, EFilterOperator.LESS, EFilterOperator.LESSEQUALS, EFilterOperator.EQUALS];\r\n }\r\n }\r\n\r\n private _getTypeDependentValue(): string | number {\r\n if (this.type === EFilterTypes.STRING) {\r\n return `'${this.value}'`;\r\n }\r\n\r\n if (this.type === EFilterTypes.TIME) {\r\n if (!(this.value as string).includes(':')) {\r\n console.warn(this.value, 'not a valid time');\r\n return 0;\r\n }\r\n const minutesSeconds = (this.value as string).split(':');\r\n return parseInt(minutesSeconds[0], 10) * 60 + parseInt(minutesSeconds[1], 10);\r\n }\r\n\r\n return this.value!;\r\n }\r\n\r\n private _getODataOperator(): string {\r\n switch (this.operator) {\r\n case EFilterOperator.EQUALS:\r\n return 'eq';\r\n case EFilterOperator.LESS:\r\n return 'lt';\r\n case EFilterOperator.LESSEQUALS:\r\n return 'le';\r\n case EFilterOperator.GREATER:\r\n return 'gt';\r\n case EFilterOperator.GREATEREQUALS:\r\n return 'ge';\r\n case EFilterOperator.BETWEEN:\r\n return 'between';\r\n case EFilterOperator.CONTAINS:\r\n return 'contains';\r\n default:\r\n return 'eq';\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, inject, input, model, signal } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { IBaseDbCreateDto } from '../../core/dtos/base-db-create.dto';\r\nimport { IBaseDbResponseDto } from '../../core/dtos/base-db-response.dto';\r\nimport { IBaseDbUpdateDto } from '../../core/dtos/base-db-update.dto';\r\nimport { BaseDbModel } from '../../core/models/base-db.model';\r\nimport { MappedApiError } from '../../core/models/mapped-api-response.model';\r\nimport { MappedOdataResponse } from '../../core/models/mapped-odata-response.model';\r\nimport { ODataPagination } from '../../core/models/odata/odata-pagination.model';\r\nimport { OData } from '../../core/models/odata/odata.model';\r\nimport { BaseDbApiService } from '../../core/services/base-db-api.service';\r\nimport { BaseDisplayModalComponent } from './base-display/base-display-modal/base-display-modal.component';\r\nimport { IDisplayModalReturnObject } from './base-display/base-display.component';\r\n\r\n@Component({\r\n selector: 'sftech-pages-base-list',\r\n standalone: true,\r\n imports: [],\r\n template: '<div></div>',\r\n styles: '',\r\n})\r\nexport abstract class BaseListComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> implements OnInit {\r\n public odata = model<OData>(new OData());\r\n\r\n public showPageTitle = input<boolean>(true);\r\n public canEdit = input<boolean>(true);\r\n public openDisplayAsModal = input<boolean>(true);\r\n\r\n public data = signal<undefined | TDbModel[]>(undefined);\r\n\r\n protected router = inject(Router);\r\n\r\n private modalService = inject(DialogService);\r\n\r\n protected abstract _repo: BaseDbApiService<TDbModel, TCreateDto, TUpdateDto, TResponseDto>;\r\n protected abstract _route: string;\r\n protected abstract _modalComponent: typeof BaseDisplayModalComponent;\r\n protected abstract detailModalHeaderText: string;\r\n\r\n public constructor() {}\r\n\r\n public ngOnInit(): void {\r\n this._loadData();\r\n }\r\n\r\n public updatePagination($event: ODataPagination) {\r\n this.odata.update((odata) => {\r\n const odataNew = new OData();\r\n odataNew.pagination = $event;\r\n odataNew.filter = odata.filter;\r\n odataNew.order = odata.order;\r\n odataNew.expands = odata.expands;\r\n return odataNew;\r\n });\r\n this._loadData();\r\n }\r\n\r\n public openDisplay(id?: number) {\r\n if (this.openDisplayAsModal()) {\r\n const modalRef = this.modalService.open(this._modalComponent, { inputValues: { id, canEdit: this.canEdit(), openedAsModal: true }, focusOnShow: false, modal: true, dismissableMask: true, width: '70%', contentStyle: { overflow: 'auto' } });\r\n modalRef.onClose.subscribe((result: IDisplayModalReturnObject) => {\r\n if (result) {\r\n this.data.update((data) => {\r\n const index = data?.findIndex((item) => item.id === result.id);\r\n if (index !== undefined && index >= 0) {\r\n data![index] = result.data! as TDbModel;\r\n } else {\r\n data!.push(result.data! as TDbModel);\r\n }\r\n return data;\r\n });\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.router.navigate([this._route, id]);\r\n }\r\n\r\n private _loadData() {\r\n this._repo.odata(this.odata()).subscribe((response: MappedOdataResponse<TDbModel> | MappedApiError) => {\r\n if (response instanceof MappedApiError) {\r\n console.error(response);\r\n return;\r\n }\r\n this.data.set(response.data.items);\r\n if (!response.data) {\r\n return;\r\n }\r\n this.odata.update((odata) => {\r\n const odataNew = new OData();\r\n odataNew.pagination = response.data.pagination;\r\n odataNew.filter = odata.filter;\r\n odataNew.order = odata.order;\r\n odataNew.expands = odata.expands;\r\n return odataNew;\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, Input, OnInit, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { Observable, map, of, switchMap } from 'rxjs';\r\nimport { IBaseDbCreateDto } from '../../../core/dtos/base-db-create.dto';\r\nimport { IBaseDbResponseDto } from '../../../core/dtos/base-db-response.dto';\r\nimport { IBaseDbUpdateDto } from '../../../core/dtos/base-db-update.dto';\r\nimport { BaseDbModel, IBaseDbModel } from '../../../core/models/base-db.model';\r\nimport { MappedApiError, MappedApiResponse } from '../../../core/models/mapped-api-response.model';\r\nimport { BaseDbApiService } from '../../../core/services/base-db-api.service';\r\nimport { IconProvider } from '../../../providers/icon.provider';\r\nimport { BaseDialogComponent } from '../../../ui/layouts/base-dialog/base-dialog.component';\r\n\r\n@Component({\r\n selector: 'lib-core-base-display',\r\n standalone: true,\r\n imports: [],\r\n template: '<div></div>',\r\n styles: '',\r\n})\r\nexport abstract class BaseDisplayComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> extends BaseDialogComponent implements OnInit {\r\n @Input() public id: undefined | number;\r\n @Input() public openedAsModal = false;\r\n @Input() public canEdit = true;\r\n\r\n public redirectAfterSave = true;\r\n\r\n public form!: FormGroup;\r\n public model = signal<TDbModel | undefined>(undefined);\r\n public isNew = signal<boolean>(true);\r\n protected abstract _repo: BaseDbApiService<TDbModel, TCreateDto, TUpdateDto, TResponseDto>;\r\n protected abstract _route: string;\r\n protected router = inject(Router);\r\n protected activatedRoute = inject(ActivatedRoute);\r\n protected toastr = inject(MessageService);\r\n\r\n protected constructor() {\r\n super();\r\n effect(() => {\r\n if (this.model()) {\r\n this.form = this.initializeForm();\r\n if (!this.canEdit) {\r\n for (const control in this.form.controls) {\r\n this.form.controls[control].disable();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (this.id) {\r\n this._loadData(this.id!).subscribe((res: MappedApiResponse<TDbModel> | MappedApiError) => {\r\n if (res instanceof MappedApiError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Laden der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Laden der Daten ist ein Fehler aufgetreten');\r\n }\r\n this.model.set(res.data as TDbModel);\r\n this.isNew.set(false);\r\n if (this.form) {\r\n this.form.patchValue(this.model()!);\r\n this.form.markAsUntouched();\r\n }\r\n });\r\n } else {\r\n this.model.set(this.getNewModel());\r\n this.isNew.set(true);\r\n if (this.form) {\r\n this.form.patchValue(this.model()!);\r\n this.form.markAsUntouched();\r\n }\r\n }\r\n }\r\n\r\n public async submitForm(): Promise<void> {\r\n let obs: Observable<MappedApiResponse<TDbModel> | MappedApiError>;\r\n if (!this.form.valid) {\r\n return;\r\n }\r\n if (this.model()!.id) {\r\n const dto = this.mapFormToUpdateDto();\r\n obs = this._repo.update(this.model()!.id!, dto);\r\n } else {\r\n const dto = this.mapFormToCreateDto();\r\n obs = this._repo.insert(dto);\r\n }\r\n obs.subscribe((res) => {\r\n if (res.isError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Speichern der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Speichern der Daten ist ein Fehler aufgetreten');\r\n }\r\n this.model.set(res.data as TDbModel);\r\n this.toastr.add({ severity: 'success', detail: `Datensatz mit der Id '${this.model()!.id}' erfolgreich gespeichert` });\r\n if (this.redirectAfterSave) {\r\n this.goBack({ operation: this.model()!.id ? 'update' : 'create', id: this.model()!.id, data: res.data as IBaseDbModel });\r\n }\r\n });\r\n }\r\n\r\n public deleteData(): void {\r\n if (!this.model()!.id) {\r\n this.model.set(this.getNewModel());\r\n this.form.patchValue(this.model);\r\n return;\r\n }\r\n this._repo.delete(this.model()!.id!).subscribe((res) => {\r\n if (res.isError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Löschen der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Löschen der Daten ist ein Fehler aufgetreten');\r\n }\r\n this.toastr.add({ severity: 'success', detail: `Datensatz mit der Id '${this.model()!.id}' erfolgreich gelöscht` });\r\n this.goBack({ operation: 'delete', id: this.model()!.id });\r\n });\r\n }\r\n\r\n public getFormControl(property: string): FormControl | undefined {\r\n return this.form.get(property) as FormControl;\r\n }\r\n\r\n public goBack(retVal: IDisplayModalReturnObject = { operation: 'aborted' }): void {\r\n if (this.openedAsModal) {\r\n this.close(retVal);\r\n return;\r\n }\r\n this.router.navigate([this._route]);\r\n }\r\n\r\n private _loadData(id: number): Observable<MappedApiResponse<TDbModel>> {\r\n if (id) {\r\n return this._repo.get(id, true).pipe(\r\n map((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.toastr.add({ severity: 'error', detail: 'Beim Laden der Daten ist ein Fehler aufgetreten' });\r\n throw new Error(res.messages ? res.messages.join(' | ') : 'Beim Laden der Daten ist ein Fehler aufgetreten');\r\n }\r\n return res;\r\n }),\r\n );\r\n }\r\n const mappedApiResponse = new MappedApiResponse<TDbModel>();\r\n mappedApiResponse.data = this.model();\r\n return of(mappedApiResponse);\r\n }\r\n\r\n protected abstract initializeForm(): FormGroup;\r\n\r\n protected abstract getNewModel(): TDbModel;\r\n\r\n protected abstract mapFormToUpdateDto(): TUpdateDto;\r\n\r\n protected abstract mapFormToCreateDto(): TCreateDto;\r\n}\r\n\r\nexport interface IDisplayModalReturnObject {\r\n operation: 'create' | 'update' | 'delete' | 'aborted';\r\n data?: IBaseDbModel;\r\n id?: number;\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-prompt-display-modal',\r\n standalone: true,\r\n imports: [],\r\n template: '',\r\n styles: '',\r\n})\r\nexport class BaseDisplayModalComponent {\r\n public id!: number | undefined;\r\n public canEdit = true;\r\n}\r\n","import { Component, input } from '@angular/core';\nimport {AbstractControl, FormControl} from '@angular/forms';\n\n@Component({\n selector: 'sftech-form-error-display',\n standalone: true,\n imports: [],\n templateUrl: './form-error-display.component.html',\n styleUrl: './form-error-display.component.css',\n})\nexport class FormErrorDisplayComponent {\n public control = input<AbstractControl | undefined>(undefined);\n public label = input<string | undefined>(undefined);\n}\n","@if (control()?.errors) {\r\n <div class=\"p-1 text-xs text-red-500\">\r\n @if (control()?.errors?.['required']) {\r\n <div>{{ label() }} ist ein Pflichtfeld.</div>\r\n }\r\n </div>\r\n}\r\n","import { Component, EventEmitter, Input, Output, computed } from '@angular/core';\r\nimport { Paginator, PaginatorModule, PaginatorState } from 'primeng/paginator';\r\nimport { ODataPagination } from '../../core/models/odata/odata-pagination.model';\r\n\r\n@Component({\r\n selector: 'sftech-paginator',\r\n standalone: true,\r\n imports: [PaginatorModule],\r\n templateUrl: './paginator.component.html',\r\n styleUrl: './paginator.component.css',\r\n})\r\nexport class PaginatorComponent {\r\n @Input() pagination!: ODataPagination;\r\n @Output() public odataChanged = new EventEmitter<ODataPagination>();\r\n // public amountOfPageNumbersToShow = 5;\r\n // public pageNumbers = computed(() => {\r\n // const currentPage = this.pagination!.page;\r\n // const totalPages = this.pagination!.totalPages;\r\n //\r\n // if (totalPages <= this.amountOfPageNumbersToShow) {\r\n // // Wenn die Gesamtseiten kleiner als oder gleich der sichtbaren Seiten sind\r\n // return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n // }\r\n //\r\n // const pagination: number[] = []; // Immer mit 1 starten\r\n //\r\n // // Bereich in der Mitte berechnen\r\n // const middleCount = this.amountOfPageNumbersToShow - 2; // Plätze für Mitte (ohne 1 und x)\r\n // const half = Math.floor(middleCount / 2);\r\n //\r\n // let start = Math.max(2, currentPage - half); // Startpunkt der Mitte\r\n // let end = Math.min(totalPages - 1, currentPage + half); // Endpunkt der Mitte\r\n //\r\n // // Anpassen, falls die Mitte den Anfang oder das Ende überschreitet\r\n // if (end - start < middleCount - 1) {\r\n // if (start === 2) {\r\n // end = start + middleCount - 1;\r\n // } else if (end === totalPages - 1) {\r\n // start = end - middleCount + 1;\r\n // }\r\n // }\r\n //\r\n // // Mittlere Zahlen hinzufügen\r\n // for (let i = start; i <= end; i++) {\r\n // pagination.push(i);\r\n // }\r\n //\r\n // return pagination;\r\n // });\r\n //\r\n // public changePage(pageNumber: number) {\r\n // this.pagination.page = pageNumber;\r\n // this.odataChanged.emit(this.pagination);\r\n // }\r\n\r\n onPageChange(event: PaginatorState) {\r\n if (event.page !== undefined) {\r\n this.pagination.page = event.page + 1;\r\n }\r\n this.pagination.pageSize = event.rows ?? 10;\r\n this.odataChanged.emit(this.pagination);\r\n }\r\n}\r\n","<!--<nav aria-label=\"Table navigation\" class=\"flex items-center flex-wrap md:flex-row justify-between p-2 bg-gradient-to-b from-secondary_accent-500 to-secondary_accent-700\">-->\r\n<!-- <div-->\r\n<!-- class=\"font-normal text-white dark:text-gray-400 md:mb-0 block w-full md:inline md:w-auto\">Ergebnis-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ ((pagination.page - 1) * pagination.pageSize) + 1 }} - {{ pagination.totalPages === pagination.page ? pagination.totalElements : pagination.pageSize * pagination.page}}</span>-->\r\n<!-- von-->\r\n<!-- <span class=\"font-semibold text-primary_accent-900 dark:text-white\">{{ pagination.totalElements }}</span></div>-->\r\n<!-- <ul class=\"inline-flex -space-x-px rtl:space-x-reverse text-sm h-8\">-->\r\n<!-- @for (pageNumber of pageNumbers(); track pageNumber) {-->\r\n<!-- <li>-->\r\n<!-- <a [class.rounded-s-lg]=\"pageNumber === 1\" [class.rounded-e-lg]=\"pageNumber === pagination.totalPages\"-->\r\n<!-- (click)=\"changePage(pageNumber)\"-->\r\n<!-- class=\"flex items-center justify-center px-3 h-8 leading-tight text-gray-500 bg-white border border-gray-300 hover:bg-gray-100 hover:text-gray-700 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\">{{ pageNumber }}</a>-->\r\n<!-- </li>-->\r\n<!-- }-->\r\n<!-- </ul>-->\r\n<!--</nav>-->\r\n\r\n\r\n\r\n\r\n<div class=\"card flex justify-center\">\r\n <p-paginator (onPageChange)=\"onPageChange($event)\" [first]=\"pagination.page - 1 \" [rows]=\"pagination.pageSize\" [totalRecords]=\"pagination.totalElements\" [rowsPerPageOptions]=\"[10, 20, 30]\" />\r\n</div>","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, catchError, map, of } from 'rxjs';\r\nimport { BaseDbModel } from '../models/base-db.model';\r\nimport { MappedApiError, MappedApiResponse } from '../models/mapped-api-response.model';\r\nimport { MappedOdataResponse } from '../models/mapped-odata-response.model';\r\nimport { ODataPagination } from '../models/odata/odata-pagination.model';\r\nimport { OData } from '../models/odata/odata.model';\r\nimport { IBaseDbCreateDto } from '../dtos/base-db-create.dto';\r\nimport {IBaseDbUpdateDto} from \"../dtos/base-db-update.dto\";\r\nimport { IBaseDbResponseDto } from '../dtos/base-db-response.dto';\r\nimport { IAppConfig } from '../configuration/app-config.interface';\r\nimport {IApiResponse} from \"../dtos/api-response.dto\";\r\nimport {IOdataResponseDto} from \"../dtos/odata-response.dto\";\r\n\r\nexport abstract class BaseDbApiService<TModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> {\r\n protected url!: string;\r\n\r\n constructor(\r\n protected readonly http: HttpClient,\r\n protected readonly config: IAppConfig,\r\n ) {}\r\n\r\n public get(id: number, detailed: boolean = false): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n let url = `${this.url}/${id}`;\r\n console.log(url)\r\n if (detailed) {\r\n url = `${url}/?detailed=${detailed}`;\r\n }\r\n return this.http.get<IApiResponse<TResponseDto>>(url).pipe(\r\n map((response: IApiResponse<TResponseDto>) => this._responseMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public getAll(): Observable<MappedOdataResponse<TModel> | MappedApiError> {\r\n const odata = new OData();\r\n return this.odata(odata);\r\n }\r\n\r\n public odata(odataQuery: OData): Observable<MappedOdataResponse<TModel> | MappedApiError> {\r\n return this.http.get<IApiResponse<IOdataResponseDto<TResponseDto>>>(`${this.url}/${odataQuery.toGetParameter()}`).pipe(\r\n map((response: IApiResponse<IOdataResponseDto<TResponseDto>>) => this._responseOdataMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public insert(dto: TCreateDto): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n return this.http.post<IApiResponse<TResponseDto>>(this.url, dto).pipe(\r\n map((response: IApiResponse<TResponseDto>) => this._responseMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public update(id: number, dto: TUpdateDto): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n return this.http.put<IApiResponse<TResponseDto>>(`${this.url}/${id}`, dto).pipe(\r\n map((response: IApiResponse<TResponseDto>) => this._responseMapping(response)),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n public delete(id: number): Observable<MappedApiResponse<TModel> | MappedApiError> {\r\n return this.http.delete<IApiResponse<TResponseDto>>(`${this.url}/${id}`).pipe(\r\n map((response: IApiResponse<TResponseDto>) => {\r\n const apiReponse = new MappedApiResponse<TModel>();\r\n apiReponse.status = response.status;\r\n apiReponse.messages = response.messages ? response.messages : [];\r\n apiReponse.isError = false;\r\n return apiReponse;\r\n }),\r\n catchError((error) => {\r\n return this._httpErrorToApiResponse(error);\r\n }),\r\n );\r\n }\r\n\r\n protected abstract getNewModel(): TModel;\r\n\r\n private _responseOdataMapping(response: IApiResponse<IOdataResponseDto<TResponseDto>>): MappedOdataResponse<TModel> {\r\n const odataResponse = new MappedOdataResponse<TModel>();\r\n odataResponse.data.items = this.getNewModel().fromDtos((response.data as IOdataResponseDto<TResponseDto>)?.items) as TModel[];\r\n odataResponse.data.pagination = ODataPagination.fromDto((response.data as IOdataResponseDto<TResponseDto>).pagination);\r\n return odataResponse;\r\n }\r\n\r\n private _responseMapping(response: IApiResponse<TResponseDto>): MappedApiResponse<TModel> | MappedApiError {\r\n if (![200, 201, 202].includes(response.status)) {\r\n return this._errorHandling(response.status, response.messages);\r\n }\r\n const apiResponse = new MappedApiResponse<TModel>();\r\n apiResponse.status = response.status;\r\n apiResponse.messages = response.messages ? response.messages : [];\r\n apiResponse.isError = false;\r\n\r\n let mappedData: TModel | TModel[] | undefined;\r\n\r\n if (Array.isArray(response.data)) {\r\n mappedData = this.getNewModel().fromDtos(response.data) as TModel[];\r\n } else {\r\n mappedData = this.getNewModel().fromDto(response.data as TResponseDto) as TModel;\r\n }\r\n\r\n apiResponse.data = mappedData;\r\n return apiResponse;\r\n }\r\n\r\n private _errorHandling(statusCode: number, messages: string[] | undefined) {\r\n const apiResponse = new MappedApiError();\r\n apiResponse.status = statusCode;\r\n apiResponse.messages = messages ? messages : [];\r\n apiResponse.isError = true;\r\n return apiResponse;\r\n }\r\n\r\n private _httpErrorToApiResponse(error: HttpErrorResponse) {\r\n const messages: string[] = [];\r\n if (error.message) {\r\n messages.push(error.message);\r\n }\r\n if (error.error?.messages) {\r\n messages.push(...error.error.messages);\r\n }\r\n return of(this._errorHandling(error.status, messages));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,23 +2,21 @@ import { OnInit } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { MessageService } from 'primeng/api';
5
- import { DynamicDialogRef } from 'primeng/dynamicdialog';
6
- import { BaseDbModel, IBaseDbModel } from "../../../core/models/base-db.model";
7
- import { IBaseDbCreateDto } from "../../../core/dtos/base-db-create.dto";
8
- import { IBaseDbUpdateDto } from "../../../core/dtos/base-db-update.dto";
9
- import { IBaseDbResponseDto } from "../../../core/dtos/base-db-response.dto";
10
- import { IconProvider } from "../../../providers/icon.provider";
11
- import { BaseDbApiService } from "../../../core/services/base-db-api.service";
5
+ import { IBaseDbCreateDto } from '../../../core/dtos/base-db-create.dto';
6
+ import { IBaseDbResponseDto } from '../../../core/dtos/base-db-response.dto';
7
+ import { IBaseDbUpdateDto } from '../../../core/dtos/base-db-update.dto';
8
+ import { BaseDbModel, IBaseDbModel } from '../../../core/models/base-db.model';
9
+ import { BaseDbApiService } from '../../../core/services/base-db-api.service';
10
+ import { BaseDialogComponent } from '../../../ui/layouts/base-dialog/base-dialog.component';
12
11
  import * as i0 from "@angular/core";
13
- export declare abstract class BaseDisplayComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> implements OnInit {
12
+ export declare abstract class BaseDisplayComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> extends BaseDialogComponent implements OnInit {
14
13
  id: undefined | number;
15
14
  openedAsModal: boolean;
16
15
  canEdit: boolean;
17
16
  redirectAfterSave: boolean;
18
- protected ref: DynamicDialogRef<any>;
19
17
  form: FormGroup;
20
- model: import("@angular/core").WritableSignal<TDbModel>;
21
- iconProvider: typeof IconProvider;
18
+ model: import("@angular/core").WritableSignal<TDbModel | undefined>;
19
+ isNew: import("@angular/core").WritableSignal<boolean>;
22
20
  protected abstract _repo: BaseDbApiService<TDbModel, TCreateDto, TUpdateDto, TResponseDto>;
23
21
  protected abstract _route: string;
24
22
  protected router: Router;
@@ -35,7 +33,6 @@ export declare abstract class BaseDisplayComponent<TDbModel extends BaseDbModel,
35
33
  protected abstract getNewModel(): TDbModel;
36
34
  protected abstract mapFormToUpdateDto(): TUpdateDto;
37
35
  protected abstract mapFormToCreateDto(): TCreateDto;
38
- close(retVal?: IDisplayModalReturnObject): void;
39
36
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseDisplayComponent<any, any, any, any>, never>;
40
37
  static ɵcmp: i0.ɵɵComponentDeclaration<BaseDisplayComponent<any, any, any, any>, "lib-core-base-display", never, { "id": { "alias": "id"; "required": false; }; "openedAsModal": { "alias": "openedAsModal"; "required": false; }; "canEdit": { "alias": "canEdit"; "required": false; }; }, {}, never, never, true, never>;
41
38
  }
@@ -1,13 +1,13 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
+ import { IBaseDbCreateDto } from '../../core/dtos/base-db-create.dto';
4
+ import { IBaseDbResponseDto } from '../../core/dtos/base-db-response.dto';
5
+ import { IBaseDbUpdateDto } from '../../core/dtos/base-db-update.dto';
3
6
  import { BaseDbModel } from '../../core/models/base-db.model';
4
7
  import { ODataPagination } from '../../core/models/odata/odata-pagination.model';
5
8
  import { OData } from '../../core/models/odata/odata.model';
6
9
  import { BaseDbApiService } from '../../core/services/base-db-api.service';
7
- import { IBaseDbCreateDto } from "../../core/dtos/base-db-create.dto";
8
- import { IBaseDbUpdateDto } from "../../core/dtos/base-db-update.dto";
9
- import { IBaseDbResponseDto } from "../../core/dtos/base-db-response.dto";
10
- import { BaseDisplayModalComponent } from "./base-display/base-display-modal/base-display-modal.component";
10
+ import { BaseDisplayModalComponent } from './base-display/base-display-modal/base-display-modal.component';
11
11
  import * as i0 from "@angular/core";
12
12
  export declare abstract class BaseListComponent<TDbModel extends BaseDbModel, TCreateDto extends IBaseDbCreateDto, TUpdateDto extends IBaseDbUpdateDto, TResponseDto extends IBaseDbResponseDto> implements OnInit {
13
13
  odata: import("@angular/core").ModelSignal<OData>;
@@ -24,7 +24,7 @@ export declare abstract class BaseListComponent<TDbModel extends BaseDbModel, TC
24
24
  constructor();
25
25
  ngOnInit(): void;
26
26
  updatePagination($event: ODataPagination): void;
27
- openDisplay(id: number | undefined): void;
27
+ openDisplay(id?: number): void;
28
28
  private _loadData;
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseListComponent<any, any, any, any>, never>;
30
30
  static ɵcmp: i0.ɵɵComponentDeclaration<BaseListComponent<any, any, any, any>, "sftech-pages-base-list", never, { "odata": { "alias": "odata"; "required": false; "isSignal": true; }; "showPageTitle": { "alias": "showPageTitle"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "openDisplayAsModal": { "alias": "openDisplayAsModal"; "required": false; "isSignal": true; }; }, { "odata": "odataChange"; }, never, never, true, never>;
@@ -1,5 +1,7 @@
1
1
  export declare class IconProvider {
2
+ static readonly add: import("@fortawesome/fontawesome-common-types").IconDefinition;
2
3
  static readonly close: import("@fortawesome/fontawesome-common-types").IconDefinition;
3
4
  static readonly delete: import("@fortawesome/fontawesome-common-types").IconDefinition;
5
+ static readonly help: import("@fortawesome/fontawesome-common-types").IconDefinition;
4
6
  static readonly menu: import("@fortawesome/fontawesome-common-types").IconDefinition;
5
7
  }
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter, TemplateRef } from '@angular/core';
2
- import { IconProvider } from "../../../providers/icon.provider";
2
+ import { DynamicDialogRef } from 'primeng/dynamicdialog';
3
+ import { IconProvider } from '../../../providers/icon.provider';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class BaseDialogComponent {
5
6
  hasHeader: import("@angular/core").InputSignal<boolean>;
@@ -11,8 +12,9 @@ export declare class BaseDialogComponent {
11
12
  body: TemplateRef<unknown> | null;
12
13
  footer: TemplateRef<unknown> | null;
13
14
  iconProvider: typeof IconProvider;
15
+ protected ref: DynamicDialogRef<any>;
14
16
  constructor();
15
- close(): void;
17
+ close(retVal?: unknown): void;
16
18
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseDialogComponent, never>;
17
19
  static ɵcmp: i0.ɵɵComponentDeclaration<BaseDialogComponent, "sftech-base-dialog", never, { "hasHeader": { "alias": "hasHeader"; "required": false; "isSignal": true; }; "hasFooter": { "alias": "hasFooter"; "required": false; "isSignal": true; }; "showButtons": { "alias": "showButtons"; "required": false; "isSignal": true; }; "headerText": { "alias": "headerText"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, ["header", "body", "footer"], never, true, never>;
18
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sftech/ng-shared",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "dependencies": {
5
5
  "@fortawesome/angular-fontawesome": "^1.0.0",
6
6
  "@fortawesome/free-solid-svg-icons": "^6.7.2",