@sftech/ng-shared 0.0.14 → 0.0.16

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.
@@ -92,11 +92,11 @@ class HeadMainFooterWithCanvasComponent {
92
92
  this.drawerRef.close(e);
93
93
  }
94
94
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HeadMainFooterWithCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
95
- 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 bg-gradient-to-b from-primary-50/40 via-white to-primary-50/40\">\r\n <p-toast/>\r\n <header class=\"p-3 bg-gradient-to-r from-primary-500 to-primary-900 text-white\">\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=\"flex-grow h-full my-0 \">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto h-full bg-white shadow-xl my-0 overflow-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-3 bg-gradient-to-r from-primary-900 to-primary-500 text-white text-sm\">\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 bg-white shadow-lg\">\r\n <div class=\"flex items-center justify-between px-4 pt-5 pb-5 border-b border-gray-200\">\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-4 mt-4\">\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"] }] });
95
+ 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 bg-gradient-to-b from-primary-50/40 via-white to-primary-50/40\">\r\n <p-toast/>\r\n <header class=\"p-3 bg-gradient-to-r from-primary-500 to-primary-900 text-white\">\r\n <div [style.max-width]=\"maxWidth\" class=\"w-full mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center w-full\">\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 w-full\">\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=\"flex-grow h-full my-0 \">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto h-full bg-white shadow-xl my-0 overflow-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-3 bg-gradient-to-r from-primary-900 to-primary-500 text-white text-sm\">\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 bg-white shadow-lg\">\r\n <div class=\"flex items-center justify-between px-4 pt-5 pb-5 border-b border-gray-200\">\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-4 mt-4\">\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"] }] });
96
96
  }
97
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: HeadMainFooterWithCanvasComponent, decorators: [{
98
98
  type: Component,
99
- 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 bg-gradient-to-b from-primary-50/40 via-white to-primary-50/40\">\r\n <p-toast/>\r\n <header class=\"p-3 bg-gradient-to-r from-primary-500 to-primary-900 text-white\">\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=\"flex-grow h-full my-0 \">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto h-full bg-white shadow-xl my-0 overflow-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-3 bg-gradient-to-r from-primary-900 to-primary-500 text-white text-sm\">\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 bg-white shadow-lg\">\r\n <div class=\"flex items-center justify-between px-4 pt-5 pb-5 border-b border-gray-200\">\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-4 mt-4\">\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}" }]
99
+ 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 bg-gradient-to-b from-primary-50/40 via-white to-primary-50/40\">\r\n <p-toast/>\r\n <header class=\"p-3 bg-gradient-to-r from-primary-500 to-primary-900 text-white\">\r\n <div [style.max-width]=\"maxWidth\" class=\"w-full mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center w-full\">\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 w-full\">\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=\"flex-grow h-full my-0 \">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto h-full bg-white shadow-xl my-0 overflow-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-3 bg-gradient-to-r from-primary-900 to-primary-500 text-white text-sm\">\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 bg-white shadow-lg\">\r\n <div class=\"flex items-center justify-between px-4 pt-5 pb-5 border-b border-gray-200\">\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-4 mt-4\">\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}" }]
100
100
  }], propDecorators: { title: [{
101
101
  type: Input
102
102
  }], maxWidth: [{
@@ -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/lib/ui/pages/not-permitted/not-permitted.component.ts","../../../../libs/ng-shared/src/lib/ui/pages/not-permitted/not-permitted.component.html","../../../../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 components: {\r\n fieldset: {\r\n background: '{gray.50}',\r\n borderColor: '{primary.50}',\r\n legendBorderColor: '{primary.50}',\r\n legendColor: '#000000',\r\n contentPadding: '0.75em 0 0 0',\r\n legendFontWeight: 'normal',\r\n },\r\n },\r\n});\r\n","import { faArrowLeft, faBars, faBrain, faBurger, faClose, faDatabase, faHexagonNodes, faHouseChimneyWindow, faLaptop, faPlus, faQuestion, faTrash, faWindowClose } 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 agent = faHexagonNodes;\r\n public static readonly back = faArrowLeft;\r\n public static readonly brain = faBrain;\r\n public static readonly close = faClose;\r\n public static readonly delete = faTrash;\r\n public static readonly database = faDatabase;\r\n public static readonly help = faQuestion;\r\n public static readonly menu = faBars;\r\n public static readonly unknown = faQuestion;\r\n public static readonly window = faLaptop;\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 bg-gradient-to-b from-primary-50/40 via-white to-primary-50/40\">\r\n <p-toast/>\r\n <header class=\"p-3 bg-gradient-to-r from-primary-500 to-primary-900 text-white\">\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=\"flex-grow h-full my-0 \">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto h-full bg-white shadow-xl my-0 overflow-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-3 bg-gradient-to-r from-primary-900 to-primary-500 text-white text-sm\">\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 bg-white shadow-lg\">\r\n <div class=\"flex items-center justify-between px-4 pt-5 pb-5 border-b border-gray-200\">\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-4 mt-4\">\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 { 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: [NgTemplateOutlet],\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<div class=\"flex flex-col\">\r\n <div id=\"dialog-body\" class=\"flex-grow overflow-auto\">\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 }\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).then((res) => {\r\n if (!res.ok) {\r\n throw new Error('Config load failed');\r\n }\r\n return res.json();\r\n });\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 detailModalHeaderText: string = 'Details';\r\n protected _modalComponent?: typeof BaseDisplayModalComponent = undefined;\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!, {\r\n inputValues: { id, canEdit: this.canEdit(), openedAsModal: true },\r\n focusOnShow: false,\r\n modal: true,\r\n dismissableMask: true,\r\n header: this.detailModalHeaderText,\r\n maximizable: true,\r\n closable: true,\r\n width: '40%',\r\n });\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 { Observable, catchError, map, of } from 'rxjs';\r\nimport { IAppConfig } from '../configuration/app-config.interface';\r\nimport { IApiResponse } from '../dtos/api-response.dto';\r\nimport { IBaseDbCreateDto } from '../dtos/base-db-create.dto';\r\nimport { IBaseDbResponseDto } from '../dtos/base-db-response.dto';\r\nimport { IBaseDbUpdateDto } from '../dtos/base-db-update.dto';\r\nimport { IOdataResponseDto } from '../dtos/odata-response.dto';\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\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 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 protected 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 protected 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 protected 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 protected 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","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sftech-not-permitted',\r\n imports: [CommonModule],\r\n templateUrl: './not-permitted.component.html',\r\n styleUrl: './not-permitted.component.css',\r\n})\r\nexport class NotPermittedComponent {}\r\n","<div class=\"min-h-screen flex flex-col items-center justify-center bg-gray-100\">\n <div class=\"bg-white shadow-md rounded-lg p-6 max-w-lg text-center border border-gray-200\">\n <h1 class=\"text-3xl font-semibold text-red-600 mb-4\">Zugriff verweigert</h1>\n <p class=\"text-lg text-gray-700 mb-6\">\n Du bist nicht berechtigt, auf diese Seite zuzugreifen.\n Bitte überprüfe deine Berechtigungen oder wende dich an den Administrator.\n </p>\n <a\n class=\"inline-block bg-blue-600 text-white font-medium px-6 py-2 rounded-md hover:bg-blue-700 transition\"\n href=\"/apps/frontend/public\"\n >\n Zur Startseite\n </a>\n </div>\n</div>\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/lib/ui/pages/not-permitted/not-permitted.component.ts","../../../../libs/ng-shared/src/lib/ui/pages/not-permitted/not-permitted.component.html","../../../../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 components: {\r\n fieldset: {\r\n background: '{gray.50}',\r\n borderColor: '{primary.50}',\r\n legendBorderColor: '{primary.50}',\r\n legendColor: '#000000',\r\n contentPadding: '0.75em 0 0 0',\r\n legendFontWeight: 'normal',\r\n },\r\n },\r\n});\r\n","import { faArrowLeft, faBars, faBrain, faBurger, faClose, faDatabase, faHexagonNodes, faHouseChimneyWindow, faLaptop, faPlus, faQuestion, faTrash, faWindowClose } 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 agent = faHexagonNodes;\r\n public static readonly back = faArrowLeft;\r\n public static readonly brain = faBrain;\r\n public static readonly close = faClose;\r\n public static readonly delete = faTrash;\r\n public static readonly database = faDatabase;\r\n public static readonly help = faQuestion;\r\n public static readonly menu = faBars;\r\n public static readonly unknown = faQuestion;\r\n public static readonly window = faLaptop;\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 bg-gradient-to-b from-primary-50/40 via-white to-primary-50/40\">\r\n <p-toast/>\r\n <header class=\"p-3 bg-gradient-to-r from-primary-500 to-primary-900 text-white\">\r\n <div [style.max-width]=\"maxWidth\" class=\"w-full mx-auto\">\r\n @if (hasDrawer) {\r\n <div class=\"flex items-center w-full\">\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 w-full\">\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=\"flex-grow h-full my-0 \">\r\n <div [style.max-width]=\"maxWidth\" class=\"mx-auto h-full bg-white shadow-xl my-0 overflow-auto\">\r\n <ng-container [ngTemplateOutlet]=\"main\"></ng-container>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"p-3 bg-gradient-to-r from-primary-900 to-primary-500 text-white text-sm\">\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 bg-white shadow-lg\">\r\n <div class=\"flex items-center justify-between px-4 pt-5 pb-5 border-b border-gray-200\">\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-4 mt-4\">\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 { 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: [NgTemplateOutlet],\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<div class=\"flex flex-col\">\r\n <div id=\"dialog-body\" class=\"flex-grow overflow-auto\">\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 }\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).then((res) => {\r\n if (!res.ok) {\r\n throw new Error('Config load failed');\r\n }\r\n return res.json();\r\n });\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 detailModalHeaderText: string = 'Details';\r\n protected _modalComponent?: typeof BaseDisplayModalComponent = undefined;\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!, {\r\n inputValues: { id, canEdit: this.canEdit(), openedAsModal: true },\r\n focusOnShow: false,\r\n modal: true,\r\n dismissableMask: true,\r\n header: this.detailModalHeaderText,\r\n maximizable: true,\r\n closable: true,\r\n width: '40%',\r\n });\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 { Observable, catchError, map, of } from 'rxjs';\r\nimport { IAppConfig } from '../configuration/app-config.interface';\r\nimport { IApiResponse } from '../dtos/api-response.dto';\r\nimport { IBaseDbCreateDto } from '../dtos/base-db-create.dto';\r\nimport { IBaseDbResponseDto } from '../dtos/base-db-response.dto';\r\nimport { IBaseDbUpdateDto } from '../dtos/base-db-update.dto';\r\nimport { IOdataResponseDto } from '../dtos/odata-response.dto';\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\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 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 protected 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 protected 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 protected 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 protected 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","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sftech-not-permitted',\r\n imports: [CommonModule],\r\n templateUrl: './not-permitted.component.html',\r\n styleUrl: './not-permitted.component.css',\r\n})\r\nexport class NotPermittedComponent {}\r\n","<div class=\"min-h-screen flex flex-col items-center justify-center bg-gray-100\">\n <div class=\"bg-white shadow-md rounded-lg p-6 max-w-lg text-center border border-gray-200\">\n <h1 class=\"text-3xl font-semibold text-red-600 mb-4\">Zugriff verweigert</h1>\n <p class=\"text-lg text-gray-700 mb-6\">\n Du bist nicht berechtigt, auf diese Seite zuzugreifen.\n Bitte überprüfe deine Berechtigungen oder wende dich an den Administrator.\n </p>\n <a\n class=\"inline-block bg-blue-600 text-white font-medium px-6 py-2 rounded-md hover:bg-blue-700 transition\"\n href=\"/apps/frontend/public\"\n >\n Zur Startseite\n </a>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sftech/ng-shared",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "dependencies": {
5
5
  "@fortawesome/angular-fontawesome": "^1.0.0",
6
6
  "@fortawesome/free-solid-svg-icons": "^6.7.2",