@lenne.tech/ng-base 17.0.1 → 18.1.1
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.
- package/base-cms/pages/base-cms/base-cms.component.d.ts +1 -1
- package/base-cms/public-api.d.ts +0 -1
- package/base-components/components/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/base-components/components/change-password/change-password.component.d.ts +1 -1
- package/base-components/components/checkbox/checkbox.component.d.ts +1 -1
- package/base-components/components/delete-account/delete-account.component.d.ts +1 -1
- package/base-components/components/fab-button/fab-button.component.d.ts +1 -1
- package/base-components/components/input/input.component.d.ts +1 -1
- package/base-components/components/model-form/model-form-base.component.d.ts +1 -1
- package/base-components/components/model-form/model-form.component.d.ts +1 -1
- package/base-components/components/model-form-sub/model-form-sub.component.d.ts +1 -1
- package/base-components/components/model-table/model-table.component.d.ts +1 -1
- package/base-components/components/refence-input/refence-input.component.d.ts +1 -1
- package/base-components/components/select/select.component.d.ts +1 -1
- package/base-components/components/skeleton-loader/skeleton-loader.component.d.ts +1 -1
- package/base-components/components/tags/tags.component.d.ts +1 -1
- package/base-components/components/textarea/textarea.component.d.ts +1 -1
- package/base-components/components/toast/toast.component.d.ts +1 -1
- package/base-components/components/upload-image/upload-image.component.d.ts +1 -1
- package/base-components/directives/back-button.directive.d.ts +1 -1
- package/base-components/directives/context-menu.directive.d.ts +1 -1
- package/base-components/directives/sort.directive.d.ts +1 -1
- package/base-components/directives/stop-propagation.directive.d.ts +1 -1
- package/base-components/pipes/ellipses.pipe.d.ts +1 -1
- package/base-components/public-api.d.ts +0 -1
- package/base-prototype/pages/email-verification/email-verification.component.d.ts +1 -1
- package/base-prototype/pages/forgot-password/forgot-password.component.d.ts +1 -1
- package/base-prototype/pages/login/login.component.d.ts +1 -1
- package/base-prototype/pages/profile/profile.component.d.ts +1 -1
- package/base-prototype/pages/register/register.component.d.ts +2 -2
- package/base-prototype/pages/set-password/set-password.component.d.ts +1 -1
- package/base-prototype/public-api.d.ts +0 -1
- package/esm2022/base-cms/pages/base-cms/base-cms.component.mjs +14 -8
- package/esm2022/base-cms/public-api.mjs +1 -3
- package/esm2022/base-components/components/breadcrumb/breadcrumb.component.mjs +10 -7
- package/esm2022/base-components/components/change-password/change-password.component.mjs +11 -9
- package/esm2022/base-components/components/checkbox/checkbox.component.mjs +10 -6
- package/esm2022/base-components/components/delete-account/delete-account.component.mjs +5 -6
- package/esm2022/base-components/components/fab-button/fab-button.component.mjs +11 -7
- package/esm2022/base-components/components/input/input.component.mjs +10 -6
- package/esm2022/base-components/components/loading-bar/loading-bar.component.mjs +5 -6
- package/esm2022/base-components/components/model-form/model-form-base.component.mjs +5 -4
- package/esm2022/base-components/components/model-form/model-form.component.mjs +17 -10
- package/esm2022/base-components/components/model-form-sub/model-form-sub.component.mjs +20 -13
- package/esm2022/base-components/components/model-table/model-table.component.mjs +23 -14
- package/esm2022/base-components/components/refence-input/refence-input.component.mjs +13 -7
- package/esm2022/base-components/components/select/select.component.mjs +10 -6
- package/esm2022/base-components/components/skeleton-loader/skeleton-loader.component.mjs +8 -6
- package/esm2022/base-components/components/tags/tags.component.mjs +11 -7
- package/esm2022/base-components/components/textarea/textarea.component.mjs +10 -6
- package/esm2022/base-components/components/toast/toast.component.mjs +7 -6
- package/esm2022/base-components/components/upload-image/upload-image.component.mjs +13 -9
- package/esm2022/base-components/directives/back-button.directive.mjs +5 -4
- package/esm2022/base-components/directives/context-menu.directive.mjs +5 -4
- package/esm2022/base-components/directives/sort.directive.mjs +5 -4
- package/esm2022/base-components/directives/stop-propagation.directive.mjs +5 -4
- package/esm2022/base-components/pipes/ellipses.pipe.mjs +5 -4
- package/esm2022/base-components/public-api.mjs +1 -3
- package/esm2022/base-prototype/pages/email-verification/email-verification.component.mjs +5 -6
- package/esm2022/base-prototype/pages/forgot-password/forgot-password.component.mjs +12 -8
- package/esm2022/base-prototype/pages/login/login.component.mjs +12 -8
- package/esm2022/base-prototype/pages/profile/profile.component.mjs +8 -6
- package/esm2022/base-prototype/pages/register/register.component.mjs +14 -9
- package/esm2022/base-prototype/pages/set-password/set-password.component.mjs +11 -9
- package/esm2022/base-prototype/public-api.mjs +1 -3
- package/esm2022/shared/classes/basic-user.class.mjs +1 -1
- package/esm2022/shared/classes/graphql-meta.class.mjs +1 -1
- package/esm2022/shared/classes/helper.class.mjs +1 -1
- package/esm2022/shared/classes/sort.class.mjs +1 -1
- package/esm2022/shared/classes/standard.class.mjs +1 -1
- package/esm2022/shared/functions/ws-client.function.mjs +1 -1
- package/esm2022/shared/services/auth.service.mjs +4 -4
- package/esm2022/shared/services/breadcrumb.service.mjs +4 -4
- package/esm2022/shared/services/cms.service.mjs +4 -4
- package/esm2022/shared/services/file.service.mjs +4 -4
- package/esm2022/shared/services/forms.service.mjs +4 -4
- package/esm2022/shared/services/graphql-meta.service.mjs +4 -4
- package/esm2022/shared/services/graphql-plus.service.mjs +4 -4
- package/esm2022/shared/services/graphql.service.mjs +7 -7
- package/esm2022/shared/services/image.service.mjs +4 -4
- package/esm2022/shared/services/loader.service.mjs +4 -4
- package/esm2022/shared/services/navigation.service.mjs +4 -4
- package/esm2022/shared/services/scroll.service.mjs +4 -4
- package/esm2022/shared/services/storage.service.mjs +4 -4
- package/esm2022/shared/services/toast.service.mjs +4 -4
- package/esm2022/shared/services/user.service.mjs +3 -3
- package/esm2022/shared/services/ws.service.mjs +3 -3
- package/esm2022/shared/validators/match.validator.mjs +1 -1
- package/esm2022/src/base.module.mjs +7 -40
- package/esm2022/src/decorators/auto-unsubscribe.decorator.mjs +1 -1
- package/esm2022/src/directives/lazy-load.directive.mjs +5 -4
- package/esm2022/src/directives/match-height.directive.mjs +5 -4
- package/esm2022/src/directives/resizable.directive.mjs +5 -4
- package/esm2022/src/factories/apollo-options.factory.mjs +1 -1
- package/esm2022/src/functions/extract-files.function.mjs +1 -1
- package/esm2022/src/guards/auth.guard.mjs +4 -4
- package/esm2022/src/guards/can-deactivate.guard.mjs +3 -3
- package/esm2022/src/guards/logout.guard.mjs +4 -4
- package/esm2022/src/pipes/date-ago.pipe.mjs +5 -4
- package/esm2022/src/pipes/safe-html.pipe.mjs +5 -5
- package/esm2022/src/services/fullscreen.service.mjs +4 -4
- package/esm2022/src/services/seo.service.mjs +4 -4
- package/esm2022/src/services/theme.service.mjs +4 -4
- package/fesm2022/lenne.tech-ng-base-base-cms.mjs +16 -93
- package/fesm2022/lenne.tech-ng-base-base-cms.mjs.map +1 -1
- package/fesm2022/lenne.tech-ng-base-base-components.mjs +668 -697
- package/fesm2022/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2022/lenne.tech-ng-base-base-prototype.mjs +48 -74
- package/fesm2022/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
- package/fesm2022/lenne.tech-ng-base-shared.mjs +51 -51
- package/fesm2022/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2022/lenne.tech-ng-base.mjs +199 -223
- package/fesm2022/lenne.tech-ng-base.mjs.map +1 -1
- package/package.json +12 -12
- package/src/base.module.d.ts +2 -8
- package/src/directives/lazy-load.directive.d.ts +1 -1
- package/src/directives/match-height.directive.d.ts +1 -1
- package/src/directives/resizable.directive.d.ts +1 -1
- package/src/pipes/date-ago.pipe.d.ts +1 -1
- package/src/pipes/safe-html.pipe.d.ts +1 -1
- package/base-cms/base-cms-routing.module.d.ts +0 -7
- package/base-cms/base-cms.module.d.ts +0 -26
- package/base-components/base-components.module.d.ts +0 -32
- package/base-prototype/base-prototype.module.d.ts +0 -17
- package/esm2022/base-cms/base-cms-routing.module.mjs +0 -32
- package/esm2022/base-cms/base-cms.module.mjs +0 -60
- package/esm2022/base-components/base-components.module.mjs +0 -122
- package/esm2022/base-prototype/base-prototype.module.mjs +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lenne.tech-ng-base-base-components.mjs","sources":["../../../projects/ng-base/base-components/components/input/input.component.ts","../../../projects/ng-base/base-components/components/input/input.component.html","../../../projects/ng-base/base-components/components/select/select.component.ts","../../../projects/ng-base/base-components/components/select/select.component.html","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.ts","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.html","../../../projects/ng-base/base-components/components/textarea/textarea.component.ts","../../../projects/ng-base/base-components/components/textarea/textarea.component.html","../../../projects/ng-base/base-components/components/toast/toast.component.ts","../../../projects/ng-base/base-components/components/toast/toast.component.html","../../../projects/ng-base/base-components/components/tags/tags.component.ts","../../../projects/ng-base/base-components/components/tags/tags.component.html","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.ts","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.html","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.ts","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.html","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.ts","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.html","../../../projects/ng-base/base-components/directives/sort.directive.ts","../../../projects/ng-base/base-components/directives/context-menu.directive.ts","../../../projects/ng-base/base-components/directives/stop-propagation.directive.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.html","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.ts","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.html","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.ts","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.html","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.ts","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.html","../../../projects/ng-base/base-components/components/model-form/model-form.component.ts","../../../projects/ng-base/base-components/components/model-form/model-form.component.html","../../../projects/ng-base/base-components/pipes/ellipses.pipe.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.html","../../../projects/ng-base/base-components/components/change-password/change-password.component.ts","../../../projects/ng-base/base-components/components/change-password/change-password.component.html","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.ts","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.html","../../../projects/ng-base/base-components/directives/back-button.directive.ts","../../../projects/ng-base/base-components/base-components.module.ts","../../../projects/ng-base/base-components/components/model-form/model-form-base.component.ts","../../../projects/ng-base/base-components/public-api.ts","../../../projects/ng-base/base-components/lenne.tech-ng-base-base-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'base-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n})\nexport class InputComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() type = 'text';\n @Input() required = false;\n @Input() eyeButton = false;\n @Input() objectPath = '';\n\n @Output() enter = new EventEmitter();\n\n /**\n * If the control has a value, emit the enter event\n */\n enterEvent() {\n if (this.control?.value) {\n this.enter.emit();\n }\n }\n\n /**\n * Switch input type\n */\n togglePasswordType() {\n if (this.type === 'password') {\n this.type = 'text';\n } else {\n this.type = 'password';\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\" *ngIf=\"infoText\"></i>\n </div>\n <div class=\"input-group\">\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n [attr.data-cy]=\"name\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine gültige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passwörter müssen überein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein, ein Großbustabe, ein Kleinbuchstabe, eine Zahl\n und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\ninterface Option {\n text: string;\n value: string | number;\n}\n\n@Component({\n selector: 'base-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n})\nexport class SelectComponent implements OnInit {\n @ViewChild('select') select: ElementRef;\n\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() objectPath = '';\n @Input() control: any;\n @Input() tabIndex?: number;\n @Input() required = false;\n @Input() multiple = false;\n @Input() search = false;\n @Input() options: Option[] = [];\n\n ngOnInit() {\n if (this.multiple) {\n this.select.nativeElement.setAttribute('multiple', true);\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\" *ngIf=\"infoText\"></i>\n </div>\n <select\n #select\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [attr.data-live-search]=\"search\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" disabled selected>{{ placeholder }}</option>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.text }}\n </option>\n </select>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n})\nexport class CheckboxComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() value: string | number;\n @Input() control: any;\n @Input() required = false;\n @Input() objectPath = '';\n}\n","<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'base-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class TextareaComponent implements OnChanges {\n @ViewChild('textarea') textarea: ElementRef;\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() control: any;\n @Input() rows = 5;\n @Input() required = false;\n @Input() autoHeight = true;\n @Input() tabIndex?: number;\n @Input() objectPath = '';\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['control'] && this.autoHeight) {\n setTimeout(() => {\n this.adjustInitHeight();\n }, 350);\n }\n }\n\n adjustInitHeight() {\n if (!this.textarea || !this.autoHeight) {\n return;\n }\n\n this.textarea.nativeElement.style.cssText = 'height:auto;';\n this.textarea.nativeElement.style.cssText = 'height:' + (this.textarea.nativeElement.scrollHeight + 5) + 'px';\n }\n\n adjustHeight(event) {\n if (!this.autoHeight) {\n return;\n }\n\n setTimeout(() => {\n event.target.style.cssText = 'height:auto;';\n // for box-sizing other than \"content-box\" use:\n // el.style.cssText = '-moz-box-sizing:content-box';\n event.target.style.cssText = 'height:' + (event.target.scrollHeight + 5) + 'px';\n }, 0);\n }\n}\n","<div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\" *ngIf=\"infoText\"></i>\n </div>\n\n <textarea\n #textarea\n class=\"form-control\"\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [rows]=\"rows\"\n (input)=\"adjustHeight($event)\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n ></textarea>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { animate, query, style, transition, trigger } from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { Toast, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\n\nconst toastAnimation = trigger('toastAnimation', [\n transition('* <=> *', [\n query(\n ':enter',\n [style({ transform: 'translateX({{ x }})' }), animate('200ms ease-in', style({ transform: 'translateX(0%)' }))],\n { optional: true }\n ),\n query(':leave', animate('200ms ease-in', style({ transform: 'translateX({{ x }})' })), { optional: true }),\n ]),\n]);\n\n@Component({\n selector: 'base-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [toastAnimation],\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n toasts: Toast[] = [];\n ToastType = ToastType;\n subscriptions = new Subscription();\n @Input() position: 'top-right' | 'bottom-right' | 'bottom-left' | 'top-left' = 'bottom-right';\n\n constructor(private toastService: ToastService) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n this.toastService.toastsAsObservable.subscribe({\n next: (value) => {\n this.toasts = value;\n },\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n getDefaultTitle(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Irgendetwas ist schiefgelaufen';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Achtung';\n case ToastType.SUCCESS:\n return 'Erfolgreich';\n }\n }\n\n getDefaultDescription(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Sollte das Problem länger bestehen bleiben, dann wenden Sie sich bitte\\n' + ' an den Support.';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Warning';\n case ToastType.SUCCESS:\n return 'Die Änderungen wurden erfolgreich gespeichert.';\n }\n }\n\n reload() {\n location.reload();\n }\n}\n","<div\n class=\"toast-container position-fixed\"\n [ngClass]=\"position\"\n [@toastAnimation]=\"{ value: toasts.length, params: { x: position.includes('left') ? '-100%' : '100%' } }\"\n>\n <div\n class=\"toast show\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n *ngFor=\"let toast of toasts\"\n [ngClass]=\"toast.type\"\n >\n <div class=\"toast-header\">\n <strong class=\"me-auto\">{{ toast?.title ?? getDefaultTitle(toast) }}</strong>\n <button type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\">\n {{ toast?.description ?? getDefaultDescription(toast) }}\n\n <div class=\"mt-2\" *ngIf=\"toast?.errorCode\">\n <code>ERROR: {{ toast.errorCode }}</code>\n </div>\n\n <div class=\"mt-2\" *ngIf=\"toast.type === ToastType.ERROR\">\n <a class=\"color-secondary\" href=\"#\" (click)=\"reload()\">Seite neu laden</a>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormControl, ValidatorFn } from '@angular/forms';\n\n@Component({\n selector: 'base-tags',\n templateUrl: './tags.component.html',\n styleUrls: ['./tags.component.scss'],\n})\nexport class TagsComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() options?: { text: string; value: string }[];\n @Input() custom = true;\n @Input() removeByKey = true;\n @Input() required = false;\n @Input() objectPath = '';\n @Input() validators: ValidatorFn[] = [];\n inputValue = '';\n selectedElement: HTMLElement;\n\n /**\n * Convert id into text field\n */\n getReadableTag(tag: string) {\n if (this.control?.value && this.options) {\n const foundElement = this.options.find((e) => e.value === tag);\n\n if (foundElement) {\n return foundElement.text;\n } else {\n return tag;\n }\n } else {\n return tag;\n }\n }\n\n /**\n * Listen to enter keys\n *\n * @param event\n */\n enterKey(event: any): void {\n this.selectedElement = event.target;\n\n if (this.removeByKey && event.code === 'Backspace' && !this.inputValue) {\n this.removeTag();\n return;\n } else {\n if (event.code === 'Comma' || event.code === 'Space' || event.code === 'Enter') {\n this.addTag(this.inputValue);\n }\n }\n }\n\n /**\n * Add new tag\n *\n * @param tag\n * @param reset\n * @param isOption\n */\n addTag(tag: string, reset = true, isOption = false): void {\n if (tag.endsWith(',') || tag.endsWith(' ')) {\n tag = tag.slice(0, -1);\n }\n\n const temp = new FormControl(tag, this.validators);\n this.control.setErrors({ ...this.control.errors, ...temp.errors });\n\n if (temp.invalid) {\n return;\n }\n\n // Check if user copy string into input\n if (tag.split(' ').length > 1 && !isOption) {\n const tags = tag.split(' ');\n\n for (let i = 0; i < tags.length; i++) {\n this.addTag(tags[i], i + 1 === tags.length);\n }\n\n return;\n }\n\n // Check if user copy string into input\n if (tag.split(',').length > 1 && !isOption) {\n const tags = tag.split(',');\n\n for (let i = 0; i < tags.length; i++) {\n this.addTag(tags[i], i + 1 === tags.length);\n }\n\n return;\n }\n\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.text === tag);\n }\n\n if (!this.custom && !foundOption) {\n return;\n }\n\n this.selectedElement = null;\n\n if (!this.control.value) {\n this.control.setValue([]);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setValue([foundOption.value]);\n if (reset) {\n this.inputValue = '';\n }\n this.control.setErrors(null);\n return;\n }\n\n if (\n tag.length > 0 &&\n this.control.value &&\n !this.control.value.some((item: string) => item === foundOption.value)\n ) {\n this.control.setValue([...this.control.value, foundOption.value]);\n if (reset) {\n this.inputValue = '';\n }\n this.control.setErrors(null);\n }\n\n if (this.control.value.some((item: string) => item === foundOption.value)) {\n if (reset) {\n this.inputValue = '';\n }\n }\n }\n\n /**\n * Remove tag\n *\n * @param tag\n */\n removeTag(tag?: string): void {\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.value === tag);\n }\n\n this.control.markAsTouched();\n if (foundOption) {\n this.control.setValue(this.control.value?.filter((item: string) => item !== foundOption.value));\n } else if (this.control.value) {\n this.control.value.splice(-1);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setErrors({ ...this.control.errors, required: true });\n }\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): { text: string; value: string }[] {\n return this.options\n ? this.options.filter(\n (e) => (!this.inputValue || e?.text?.includes(this.inputValue)) && !this.control.value?.includes(e.value)\n )\n : [];\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.control.setErrors(null);\n this.selectedElement = event.target;\n } else {\n if (this.inputValue) {\n this.addTag(this.inputValue);\n }\n\n this.control.markAsTouched();\n\n setTimeout(() => {\n if (this.options && this.inputValue) {\n if (this.options.find((e) => e.text === this.inputValue)) {\n this.addTag(this.inputValue);\n this.control.setErrors(null);\n } else {\n this.inputValue = '';\n }\n }\n\n if (!this.control.value || this.control.value?.length === 0) {\n this.control.setErrors({ ...this.control.errors, required: true });\n }\n\n this.selectedElement = null;\n }, 250);\n }\n }\n}\n","<div class=\"form-group position-relative\" *ngIf=\"control\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\" *ngIf=\"infoText\"></i>\n </div>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ getReadableTag(tag) }}\n <span (click)=\"removeTag(tag)\" data-cy=\"input-tags-item-remove\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n [attr.data-cy]=\"'input-tags-field'\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option?.text, true, true)\">\n {{ option?.text }}\n </div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['invalidReference'] && inputValue\">\n {{ inputValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte gib eine gültige E-Mail Adresse ein.</div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { LoaderService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-loading-bar',\n templateUrl: './loading-bar.component.html',\n styleUrls: ['./loading-bar.component.scss'],\n})\nexport class LoadingBarComponent implements OnInit, OnDestroy {\n @Input() manuallyLoading = false;\n loading = false;\n subscription = new Subscription();\n\n constructor(\n private ngZone: NgZone,\n private changeDetectorRef: ChangeDetectorRef,\n private loaderService: LoaderService\n ) {}\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription.add(\n this.loaderService.isLoading.subscribe((value) => {\n this.loading = value;\n this.changeDetectorRef.detectChanges();\n })\n );\n });\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n}\n","<div class=\"slider\" *ngIf=\"loading || manuallyLoading\">\n <div class=\"line\"></div>\n <div class=\"subline inc\"></div>\n <div class=\"subline dec\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { SkeletonType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-skeleton-loader',\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss'],\n})\nexport class SkeletonLoaderComponent {\n @Input() type!: SkeletonType;\n @Input() count = 1;\n @Input() size = 18;\n\n convertToArray(value): any {\n if (!value) {\n return [];\n }\n const res = [];\n\n for (let i = 0; i < value; i++) {\n res.push(i);\n }\n\n return res;\n }\n}\n","<ng-container *ngIf=\"type\" [ngSwitch]=\"type\">\n <div *ngSwitchCase=\"'LINE'\">\n <div class=\"line-loader-wrapper\">\n <div class=\"line-loader\" *ngFor=\"let key of convertToArray(count)\"></div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'RECTANGLE'\">\n <div class=\"line-rectangle\" [ngStyle]=\"{ height: size + 'px' }\"></div>\n </div>\n\n <div *ngSwitchCase=\"'AVATAR'\">\n <div class=\"line-avatar\" [ngStyle]=\"{ height: size + 'px', width: size + 'px' }\"></div>\n </div>\n</ng-container>\n","import { Component } from '@angular/core';\nimport { Breadcrumb, BreadcrumbService } from '@lenne.tech/ng-base/shared';\n\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'base-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n})\nexport class BreadcrumbComponent {\n breadcrumbs$: Observable<Breadcrumb[]>;\n\n constructor(private readonly breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = breadcrumbService.breadcrumbsObservable;\n }\n}\n","<ul class=\"pt-3\">\n <li *ngFor=\"let breadcrumb of breadcrumbs$ | async\">\n <a [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n </li>\n</ul>\n","import { Directive, ElementRef, EventEmitter, HostListener, Inject, Input, Output, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Sort } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseSort]',\n})\nexport class SortDirective {\n @Input() baseSort: Array<any>;\n @Output() baseSorted = new EventEmitter<Array<any>>();\n constructor(private renderer: Renderer2, private targetElem: ElementRef, @Inject(DOCUMENT) document: Document) {}\n\n /**\n * Sorts columns on click\n */\n @HostListener('click')\n sortColumn(): void {\n const items = document.getElementsByTagName('th');\n for (let i = 0; i < items.length; i++) {\n items[i].classList.remove('asc');\n items[i].classList.remove('desc');\n }\n\n const sort = new Sort();\n\n const elem = this.targetElem.nativeElement;\n\n const order = elem.getAttribute('data-order');\n\n const type = elem.getAttribute('data-type');\n\n const property = elem.getAttribute('data-name');\n if (order === 'desc') {\n this.baseSorted.emit([...this.baseSort].sort(sort.startSort(property, order, type)));\n elem.setAttribute('data-order', 'asc');\n elem.classList.remove('desc');\n elem.classList.add('asc');\n } else {\n this.baseSorted.emit([...this.baseSort].sort(sort.startSort(property, order, type)));\n elem.setAttribute('data-order', 'desc');\n elem.classList.remove('asc');\n elem.classList.add('desc');\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Output } from '@angular/core';\n\n/**\n * Directive vor context menu\n * See https://stackblitz.com/edit/angular-custom-context-menu\n */\n@Directive({\n selector: '[ltContextMenu]',\n exportAs: 'contextMenuData',\n})\nexport class ContextMenuDirective implements OnInit {\n @Input() contextMenuData?: any;\n @Input() ltContextMenu: HTMLElement;\n @Input() xGap = 0;\n @Input() yGap = 0;\n @Input() overflowSpace = 10;\n @Input() selectors = '*';\n @Output() clickedElement: Element = null;\n previousDisplayStatus: string = null;\n\n constructor(private el: ElementRef) {}\n\n ngOnInit() {\n if (this.ltContextMenu) {\n this.previousDisplayStatus = this.ltContextMenu.style.display;\n }\n\n // Add a click listener to the window,\n // so that we can close the context menu on left click\n window.addEventListener('click', () => {\n this.showContextMenu(null, false);\n });\n\n // Close context menu when escape is pressed\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Escape') {\n this.showContextMenu(null, false);\n }\n });\n\n // Add an event listener to listen to the 'contextmenu' event\n this.el.nativeElement.addEventListener('contextmenu', (e) => {\n // Prevent the default context menu to popup\n if (e.preventDefault) {\n e.preventDefault();\n }\n // Shows our own context menu\n this.showContextMenu(e, true);\n });\n }\n\n // Shows or hides our custom context menu, which is specified as a input\n showContextMenu(event, show: boolean) {\n const cm = this.ltContextMenu;\n if (cm) {\n // Try to open context menu\n if (show && event && event instanceof MouseEvent) {\n // Get valid clicked structureElement\n const clickedElement = (event?.target as HTMLElement)?.closest(this.selectors);\n if (clickedElement) {\n this.clickedElement = clickedElement;\n\n setTimeout(() => {\n // Set display status\n cm.style.display = 'block';\n\n // Calculate top position\n let top = event.y + this.yGap;\n if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {\n top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;\n }\n\n // Calculate left position\n let left = event.x + this.xGap;\n if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {\n left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;\n }\n\n // Set position\n cm.style.top = top + 'px';\n cm.style.left = left + 'px';\n\n // Show\n cm.style.opacity = '1.0';\n cm.style['pointer-events'] = 'auto';\n }, 1);\n\n return;\n }\n }\n\n // Close context menu\n this.clickedElement = null;\n if (this.previousDisplayStatus) {\n cm.style.display = this.previousDisplayStatus;\n }\n cm.style.opacity = '0.01';\n cm.style['pointer-events'] = 'none';\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n/**\n * Stops propagation of click events\n * Inspired by https://stackoverflow.com/a/41001184\n */\n@Directive({\n selector: '[baseStopPropagation]',\n})\nexport class StopPropagationDirective {\n @HostListener('click', ['$event'])\n public onClick(event: any): void {\n event.stopPropagation();\n }\n}\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AuthService,\n CompressOptions,\n CroppingOptions,\n FileService,\n ToastService,\n ToastType,\n} from '@lenne.tech/ng-base/shared';\nimport { ImageCroppedEvent } from 'ngx-image-cropper';\n\n@Component({\n selector: 'base-upload-image',\n templateUrl: './upload-image.component.html',\n styleUrls: ['./upload-image.component.scss'],\n})\nexport class UploadImageComponent implements OnInit {\n @ViewChild('fileInput') fileInput: ElementRef;\n\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() supportText = 'Supports: JPEG, JPG, PNG';\n @Input() required = false;\n @Input() defaultDragText = 'Drag & Drop';\n @Input() defaultReleaseText = 'Release to Upload';\n @Input() preButtonText = 'or';\n @Input() buttonText = 'browse';\n @Input() validExtensions = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp'];\n @Input() control: any;\n @Input() url = 'http://localhost:3000';\n @Input() uploadPath = '/files/upload';\n @Input() deletePath = '/files/';\n @Input() path = '/files/';\n @Input() compressOptions: CompressOptions;\n @Input() maxSize: number;\n @Input() uploadDirectly = false;\n @Input() croppingImage = false;\n @Input() croppingOptions: CroppingOptions;\n @Input() objectPath: string;\n @Input() mode: 'file' | 'base64' = 'file';\n\n @Output() imageUploaded = new EventEmitter();\n @Output() imageDeleted = new EventEmitter();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null; base64: string | null }>();\n\n dragActive = false;\n dragText = 'Drag & Drop';\n selectedFile: File;\n croppedFile: File;\n fileUrl: string;\n loading = false;\n croppedInProgress = false;\n fileEvent: any;\n cOptions: CroppingOptions;\n\n constructor(\n private httpClient: HttpClient,\n private authService: AuthService,\n private fileService: FileService,\n private toastService: ToastService\n ) {}\n\n ngOnInit() {\n // Set default options for cropping\n this.cOptions = {\n maintainAspectRatio: true,\n aspectRatio: 4 / 3,\n onlyScaleDown: false,\n imageQuality: 92,\n autoCrop: true,\n alignImage: 'center',\n format: 'jpeg',\n ...this.croppingOptions,\n };\n }\n\n /**\n * The dragOver function is called when the user drags a file over the dropzone. It prevents the default action of the\n * event, and sets the dragText to 'Release to Upload' and the dragActive to true\n *\n * @param event - any - This is the event that is triggered when the user drags a file over the dropzone.\n */\n dragOver(event: any) {\n event.preventDefault();\n this.dragText = this.defaultReleaseText;\n this.dragActive = true;\n }\n\n /**\n * When the user drags a file over the drop zone, the dragActive variable is set to true, which will change the color of\n * the drop zone to green\n *\n * @param event - The event object that is passed to the dragLeave event.\n */\n dragLeave(event: any) {\n this.dragText = this.defaultDragText;\n this.dragActive = false;\n }\n\n /**\n * The function takes an event as a parameter, prevents the default action of the event, sets the URL of the image to the\n * file that was dragged and dropped, sets the text of the drag and drop area to the default text, and sets the\n * dragActive variable to false\n *\n * @param event - any - This is the event that is triggered when the user drags and drops a file.\n */\n drop(event: any) {\n event.preventDefault();\n this.fileInput.nativeElement.files = event.dataTransfer.files;\n const e = new Event('change');\n this.fileInput.nativeElement.dispatchEvent(e);\n\n this.dragText = 'Drag & Drop';\n this.dragActive = false;\n }\n\n /**\n * It takes a file as an argument, checks if the file type is valid, and if it is, it creates a new FileReader object,\n * sets the onload function to set the fileUrl to the result of the fileReader, sets the selectedFile to the file, and\n * calls the upload function\n *\n * @param file - any - this is the file that is selected by the user.\n */\n setUrl(file: File) {\n const fileReader = new FileReader();\n fileReader.onload = (result) => {\n this.loading = true;\n this.fileUrl = fileReader.result as string;\n this.selectedFile = file;\n this.upload();\n };\n fileReader.readAsDataURL(file);\n }\n\n checkFile(file: File) {\n if (this.maxSize && file.size > this.maxSize) {\n this.toastService.show(\n {\n id: 'image-invalid-size',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description:\n 'Die Datei ist zu groß. Die Datei darf nicht größer als ' +\n (this.maxSize / (1024 * 1024)).toFixed(2) +\n 'MB sein.',\n },\n 3500\n );\n return false;\n } else {\n if (this.validExtensions.includes(file?.type)) {\n return true;\n } else {\n this.toastService.show(\n {\n id: 'image-invalid-format',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description: 'Das Format der Datei wird nicht unterstützt.',\n },\n 3500\n );\n return false;\n }\n }\n }\n\n /**\n * The function takes an event as an argument, and then sets the url of the file to the first file in the event's\n * target's files array\n *\n * @param event - any - The event that is triggered when the user selects a file.\n */\n selectFile(event: any) {\n if (!this.checkFile(event.target.files[0])) {\n return;\n }\n\n if (this.croppingImage) {\n this.croppedInProgress = true;\n this.fileEvent = event;\n } else {\n this.setUrl(event.target.files[0]);\n }\n }\n\n /**\n * We create a new FormData object, append the selected file to it, and then send it to the server\n */\n async upload() {\n // Prepare file data\n let file = this.selectedFile;\n if (this.compressOptions) {\n file = await this.fileService.compress(file, this.compressOptions);\n }\n const fileData = {\n field: this.objectPath ? this.objectPath + '.' + this.id : this.id,\n file,\n base64: await this.getBase64(file),\n };\n\n // Emit file data\n this.fileChanged.emit(fileData);\n\n // Set control value and upload directly if required\n if (this.uploadDirectly) {\n const result = await this.fileService.upload(this.url, this.uploadPath, this.selectedFile);\n if (result?.id) {\n this.control.setValue(result.id);\n this.imageUploaded.emit(result.id);\n }\n } else {\n this.control.setValue(this.mode === 'base64' ? fileData.base64 : this.selectedFile);\n }\n\n // Final processes\n this.control.markAsTouched();\n this.loading = false;\n }\n\n /**\n * It deletes the file from the server and sets the selectedFile and fileUrl to null\n *\n * @param [id] - The id of the file to delete.\n */\n async deleteFile(id?: string) {\n if (!this.uploadDirectly) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.control.markAsTouched();\n this.fileChanged.emit({\n field: this.objectPath ? this.objectPath + '.' + this.id : this.id,\n file: null,\n base64: null,\n });\n return;\n }\n\n this.loading = true;\n this.selectedFile = null;\n this.fileUrl = null;\n\n if (id) {\n const result = await this.fileService.delete(this.url, this.deletePath, id);\n if (result) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.imageDeleted.emit();\n this.loading = false;\n }\n }\n }\n\n /**\n * Convert a file into a BASE64 encoded string\n */\n protected getBase64(file): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (!file) {\n return resolve(null);\n }\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n if (!reader.result) {\n return reject(new Error('Conversion failed'));\n }\n resolve(reader.result.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n }\n\n base64ToFile(base64: string, fileName: string, fileType: string): Promise<File> {\n return new Promise<File>((resolve, reject) => {\n fetch(base64)\n .then((res) => res.blob())\n .then(\n (blob) => {\n resolve(new File([blob], fileName, { type: fileType }));\n },\n (err) => {\n reject(err);\n }\n );\n });\n }\n\n async imageCropped($event: ImageCroppedEvent, fileEvent: any) {\n const file = fileEvent.target.files[0];\n this.croppedFile = await this.base64ToFile($event.base64, file.name, file.type);\n }\n\n finishedCropping() {\n this.fileEvent = null;\n this.setUrl(this.croppedFile);\n this.croppedInProgress = false;\n this.croppedFile = null;\n }\n\n loadImageFailed() {\n this.toastService.show(\n {\n id: 'image-invalid-cropped',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description:\n 'Es ist ein Fehler aufgetreten. Bitte probieren Sie es später erneut oder wenden Sie sich an den Support.',\n },\n 3500\n );\n }\n}\n","<div class=\"form-group mt-3\" [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\" *ngIf=\"infoText\"></i>\n </div>\n\n <div\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n class=\"drag-area\"\n (dragover)=\"dragOver($event)\"\n (dragleave)=\"dragLeave($event)\"\n (drop)=\"drop($event)\"\n [ngClass]=\"{ active: dragActive, pointer: !loading, 'is-invalid': control?.invalid && control?.touched }\"\n (click)=\"!croppedInProgress && !loading && fileInput.click()\"\n >\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"selectedFile && !fileEvent && !croppedInProgress && !loading\">\n <img [src]=\"fileUrl\" *ngIf=\"selectedFile\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile()\" baseStopPropagation>Löschen</button>\n </ng-container>\n\n <ng-container *ngIf=\"control?.value && !fileEvent && !selectedFile && !loading && !croppedInProgress\">\n <img [src]=\"control?.value.startsWith('data:') ? control?.value : url + path + control?.value\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile(control?.value)\" baseStopPropagation>\n Löschen\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"!selectedFile && !control?.value && !loading && !fileEvent\">\n <div class=\"icon\">\n <i class=\"bi bi-images\"></i>\n </div>\n\n <span class=\"header\">{{ dragText }}</span>\n <span class=\"header\"\n >{{ preButtonText }}\n <span class=\"button\" (click)=\"fileInput.click()\" baseStopPropagation>{{ buttonText }}</span></span\n >\n <span class=\"support\" [innerText]=\"supportText\"></span>\n </ng-container>\n\n <input type=\"file\" (change)=\"selectFile($event)\" [attr.accept]=\"validExtensions?.join(',')\" hidden #fileInput />\n\n <ng-container *ngIf=\"croppedInProgress && fileEvent\">\n <image-cropper\n [imageChangedEvent]=\"fileEvent\"\n [maintainAspectRatio]=\"cOptions.maintainAspectRatio\"\n [aspectRatio]=\"cOptions.aspectRatio\"\n [alignImage]=\"cOptions.alignImage\"\n [resizeToWidth]=\"cOptions.resizeToWidth\"\n [resizeToHeight]=\"cOptions.resizeToHeight\"\n [autoCrop]=\"cOptions.autoCrop\"\n [imageQuality]=\"cOptions.imageQuality\"\n [onlyScaleDown]=\"cOptions.onlyScaleDown\"\n [format]=\"cOptions.format\"\n (imageCropped)=\"imageCropped($event, fileEvent)\"\n (loadImageFailed)=\"loadImageFailed()\"\n ></image-cropper>\n <button class=\"btn btn-primary mt-2\" type=\"button\" (click)=\"finishedCropping()\" baseStopPropagation>\n Zuschneiden\n </button>\n </ng-container>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { GraphQLRequestType, GraphQLService, SortOrderEnum } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-refence-input',\n templateUrl: './refence-input.component.html',\n styleUrls: ['./refence-input.component.scss'],\n})\nexport class RefenceInputComponent implements OnInit, OnDestroy {\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() isList = false;\n @Input() search = true;\n @Input() useParamAsArg = false;\n @Input() param: string;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() required = false;\n @Input() method = 'find';\n @Input() fields = ['id', 'name'];\n @Input() valueField = 'id';\n @Input() objectPath = '';\n @Input() nameField: string[] | string = 'name';\n @Input() creationLink = '';\n objects: any[] = [];\n currentValue: any;\n optionsForTagInput = [];\n selectedElement: HTMLElement;\n subscription = new Subscription();\n\n constructor(private graphQLService: GraphQLService, private router: Router) {}\n\n async ngOnInit() {\n this.getReferences();\n\n this.subscription.add(\n this.control.valueChanges.subscribe(() => {\n if (!this.currentValue) {\n this.setValue();\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Open creation link for new reference if enabled\n */\n openLink() {\n this.router.navigate([this.creationLink]);\n }\n\n /**\n * It gets the references from the GraphQL server and sets the value of the select\n */\n getReferences() {\n const fields = [...this.fields];\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!fields.includes(field)) {\n fields.push(field);\n }\n }\n } else {\n if (!fields.includes(this.nameField)) {\n fields.push(this.nameField);\n }\n }\n\n let args;\n if (!this.useParamAsArg) {\n args = { sort: [{ field: fields.includes('name') ? 'name' : fields[0], order: SortOrderEnum.ASC }] };\n } else {\n args = {\n id: this.param,\n sort: [{ field: fields.includes('name') ? 'name' : fields[0], order: SortOrderEnum.ASC }],\n };\n }\n\n this.graphQLService\n .graphQl(this.method, {\n fields,\n arguments: args,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe(async (result) => {\n if (result) {\n this.objects = result;\n this.setObjectsAsOptions();\n\n if (!this.currentValue) {\n this.setValue();\n }\n }\n });\n }\n\n /**\n * If the current value is not valid, set the control to an invalid state\n */\n checkValidReference() {\n if (!this.currentValue) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue('');\n this.control.setErrors(null);\n return;\n }\n\n const foundElement = this.objects.find((e) => this.checkForNameFields(e));\n if (!foundElement) {\n this.control.setValue(null);\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setErrors({ invalidReference: true });\n } else {\n this.control.setErrors(null);\n }\n }\n\n /**\n * If the user presses the enter key, mark the control as touched\n */\n enterKey(event) {\n this.selectedElement = event.target;\n this.control.markAsTouched();\n }\n\n /**\n * If the control has a value and the objects array is not empty, then find the object in the array that has the same\n * value as the control's value and set the currentValue to the textField of that object. If the control has a value but\n * the objects array is empty, then set the currentValue to the control's value\n */\n setValue() {\n if (this.control?.value && this.objects?.length > 0) {\n if (this.control?.value?.id) {\n this.control.setValue(this.control.value.id);\n }\n\n const foundElement = this.objects.find((e) => e[this.valueField] === this.control.value);\n if (foundElement) {\n this.currentValue = this.prepareNameField(foundElement);\n }\n }\n }\n\n /**\n * It sets the value of the control to the id of the selected option\n */\n set(id: string) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue(id);\n this.setValue();\n this.selectedElement = null;\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): any[] {\n return this.objects\n ? this.objects.filter(\n (e) => (!this.currentValue || this.checkForNameFields(e)) && !this.control?.value?.includes(e?.value)\n )\n : [];\n }\n\n /**\n * It takes an array of objects and returns an array of objects with the text and value fields specified\n */\n setObjectsAsOptions() {\n this.optionsForTagInput = this.objects.map((e) => {\n return {\n text: this.prepareNameField(e),\n value: e[this.valueField],\n };\n });\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.selectedElement = event.target;\n } else {\n this.checkValidReference();\n setTimeout(() => {\n this.selectedElement = null;\n }, 250);\n }\n }\n\n /**\n * Prepare string function if name fields is an array\n */\n prepareNameField(object: any) {\n let result;\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!result) {\n result = object[field];\n } else if (object[field]) {\n result = result + ' ' + object[field];\n }\n }\n } else {\n result = object[this.nameField];\n }\n\n return result;\n }\n\n /**\n * Check function if name fields is an array\n */\n checkForNameFields(object: any) {\n if (Array.isArray(this.nameField)) {\n let result = false;\n\n for (const field of this.nameField) {\n const check = object[field].includes(this.currentValue);\n if (check) {\n result = check;\n }\n }\n\n return result;\n } else {\n return object[this.nameField]?.includes(this.currentValue);\n }\n }\n}\n","<ng-container *ngIf=\"!isList\">\n <div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\" *ngIf=\"infoText\"></i>\n </div>\n\n <div class=\"position-relative\" *ngIf=\"search\">\n <div class=\"d-flex flex-row\">\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-control\"\n [(ngModel)]=\"currentValue\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (keyup)=\"enterKey($event)\"\n />\n <button class=\"btn btn-primary\" (click)=\"openLink()\" *ngIf=\"creationLink\">Erstellen</button>\n </div>\n <div class=\"options\" *ngIf=\"objects && selectedElement\">\n <div class=\"option-item\" *ngFor=\"let object of filterOptions()\" (click)=\"set(object[valueField])\">\n {{ prepareNameField(object) }}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!search\">\n <div class=\"d-flex flex-row\">\n <select\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" selected>{{ placeholder }}</option>\n <option *ngFor=\"let object of objects\" [ngValue]=\"object[valueField]\">\n {{ prepareNameField(object) }}\n </option>\n </select>\n <button class=\"btn btn-primary\" (click)=\"openLink()\" *ngIf=\"creationLink\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"d-block invalid-feedback m-2\"\n *ngIf=\"control?.invalid && (control?.dirty || control?.touched) && !selectedElement\"\n >\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['invalidReference'] && currentValue\">\n {{ currentValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passwörter müssen überein stimmen.</div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isList\">\n <base-tags\n [id]=\"id\"\n [label]=\"label\"\n [name]=\"name\"\n [control]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [custom]=\"false\"\n [options]=\"optionsForTagInput\"\n ></base-tags>\n</ng-container>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { AuthService, BasicUser, CMSFieldConfig, GraphQLType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-model-form-sub',\n templateUrl: './model-form-sub.component.html',\n styleUrls: ['./model-form-sub.component.scss'],\n})\nexport class ModelFormSubComponent implements OnInit {\n @Input() id: string;\n @Input() parentKey: string;\n @Input() fields: Record<string, GraphQLType>;\n @Input() form: any;\n @Input() config: { [key: string]: CMSFieldConfig };\n\n @Output() imageChanged = new EventEmitter<string>();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null; base64: string | null }>();\n\n keys: string[] = [];\n user: BasicUser;\n objectPath: string;\n\n constructor(private authService: AuthService) {}\n\n ngOnInit(): void {\n // Get keys\n const unsortedKeys = Object.keys(this.fields);\n\n // Sort keys by config order\n this.keys = unsortedKeys.sort((a, b) => {\n return (\n (this.config[a]?.order ? this.config[a]?.order : 99) - (this.config[b]?.order ? this.config[b]?.order : 99)\n );\n });\n\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n\n if (this.parentKey) {\n if (!this.objectPath) {\n this.objectPath = this.parentKey;\n } else {\n this.objectPath = this.objectPath + '.' + this.parentKey;\n }\n }\n }\n\n /**\n * If the field has fields, return true, otherwise return false.\n */\n checkFieldHasFields(field: GraphQLType) {\n return Object.keys(field.fields)?.length !== 0;\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the new string\n *\n * @param value - The string that you want to capitalize the first letter of.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n /**\n * It takes an array of values and returns an array of objects with a value and text property\n *\n * @param values - any[] - the array of values that you want to convert to a selectable list\n * @param config\n * @returns An array of objects with a value and text property.\n */\n prepareEnumForSelect(values: any[], config = {}) {\n return values\n .filter((i) => {\n return !(config && config[i]?.roles && !this.user.hasAllRoles(config[i]?.roles));\n })\n .map((e) => {\n return {\n value: e,\n text: config && config[e]?.text ? config[e].text : e,\n };\n });\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n}\n","<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [parentKey]=\"key\"\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n (imageChanged)=\"imageChanged.emit($event)\"\n (fileChanged)=\"fileChanged.emit($event)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert auswählen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n [objectPath]=\"objectPath\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [validators]=\"config[key]?.validators\"\n [objectPath]=\"objectPath\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterstützte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [croppingOptions]=\"config[key]?.croppingOptions\"\n [croppingImage]=\"config[key]?.croppingImage\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n [objectPath]=\"objectPath\"\n [mode]=\"config[key]?.imageMode || 'base64'\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Upload'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [supportText]=\"config[key]?.supportText || 'Unterstützte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [objectPath]=\"objectPath\"\n [mode]=\"'file'\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [isList]=\"fields[key]?.isList\"\n [useParamAsArg]=\"config[key]?.useParamAsArg ?? false\"\n [param]=\"id\"\n [search]=\"config[key]?.searchable ?? true\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert auswählen'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.requestFields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [creationLink]=\"config[key]?.creationLink || ''\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n","import { Component, EventEmitter, Input } from '@angular/core';\n\nexport interface Button {\n icon: string;\n color: string;\n routerLink?: string;\n event?: EventEmitter<boolean>;\n method?: string;\n}\n\n@Component({\n selector: 'base-fab-button',\n templateUrl: './fab-button.component.html',\n styleUrls: ['./fab-button.component.scss'],\n})\nexport class FabButtonComponent {\n @Input() fabIcon = 'bi-list';\n @Input() buttons: Button[];\n toggle = false;\n}\n","<div class=\"fab-container\" [ngClass]=\"{ 'fab-container-active': toggle }\">\n <div class=\"fab shadow\">\n <div class=\"fab-content\" (click)=\"toggle = !toggle\">\n <i class=\"bi bi-x-lg\" *ngIf=\"toggle\"></i>\n <i class=\"bi\" *ngIf=\"!toggle\" [ngClass]=\"fabIcon\"></i>\n </div>\n </div>\n <div\n class=\"sub-button shadow\"\n *ngFor=\"let button of buttons\"\n (click)=\"button.event.emit(true); toggle = !toggle\"\n [ngStyle]=\"{ backgroundColor: button.color }\"\n >\n <a [routerLink]=\"button.routerLink\">\n <i class=\"bi\" [ngClass]=\"button.icon\"></i>\n </a>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n AuthService,\n BasicUser,\n CMSFieldConfig,\n CmsService,\n FileService,\n FormsService,\n fullEmail,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n GraphQLType,\n IGraphQLTypeCollection,\n ToastService,\n ToastType,\n} from '@lenne.tech/ng-base/shared';\nimport { AbstractControl, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Button } from '../fab-button/fab-button.component';\n\n/**\n * ModelFormComponent\n *\n * Hint for handling extensions of this component in project:\n * If you want to use complete custom services and methods, extend ModelFormBaseComponent instead of ModelFormComponent\n */\n@Component({\n selector: 'base-model-form',\n templateUrl: './model-form.component.html',\n styleUrls: ['./model-form.component.scss'],\n})\nexport class ModelFormComponent implements OnInit, OnChanges {\n @Input() modelName: string;\n @Input() label: string;\n @Input() id: string | null;\n @Input() delete = true;\n @Input() onlyUpdateMode = false;\n @Input() duplicate = false;\n @Input() logging = false;\n @Input() config: { [key: string]: CMSFieldConfig };\n @Input() showFavButton = true;\n\n @Output() finished = new EventEmitter();\n\n meta: GraphQLMeta;\n form: UntypedFormGroup;\n _loading = false;\n fields: Record<string, GraphQLType>;\n operation: string;\n keys: string[] = [];\n user: BasicUser;\n object: any;\n fabButtons: Button[] = [];\n fileChanges: [{ field: string; file: File | null }];\n\n set loading(value: boolean) {\n if (!value) {\n setTimeout(() => {\n this._loading = value;\n }, 400);\n } else {\n this._loading = value;\n }\n }\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private formsService: FormsService,\n private authService: AuthService,\n private router: Router,\n private route: ActivatedRoute,\n private cmsService: CmsService,\n private toastService: ToastService,\n private fileService: FileService\n ) {}\n\n ngOnInit(): void {\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n });\n\n this.initFabActions();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Reinit form for new model or load and patch form with new id\n if (changes['modelName'] || changes['id']) {\n this.init();\n }\n }\n\n /**\n * > If the model name and metadata are present, set the operation to update or create, get the fields from the\n * metadata, create the form, and if the value is present, patch the form with the value\n */\n init(id?: string) {\n if (id) {\n this.id = id;\n }\n\n if (!this.id && this.onlyUpdateMode) {\n return;\n }\n\n if (this.modelName && this.meta) {\n this.operation = this.id ? 'update' : 'create';\n\n if (this.logging) {\n console.log('ModelFormComponent::init->operation', this.operation);\n console.log(\n 'ModelFormComponent::init->meta.getArgs',\n this.operation + this.capitalizeFirstLetter(this.modelName)\n );\n }\n\n this.fields = this.meta.getArgs(this.operation + this.capitalizeFirstLetter(this.modelName), {\n type: GraphQLRequestType.MUTATION,\n }).fields;\n this.fields = this.fields['input'].fields as any;\n this.keys = Object.keys(this.fields);\n\n if (this.logging) {\n console.log('ModelFormComponent::init->id', this.id);\n console.log('ModelFormComponent::init->fields', this.fields);\n console.log('ModelFormComponent::init->keys', this.keys);\n }\n\n this.form = this.createForm(this.fields);\n\n if (this.id) {\n this.getObjectById(this.id);\n }\n }\n }\n\n /**\n * It takes a key as an argument, and returns an array of keys from the sub-object\n */\n getKeysFromSubObject(key: string) {\n return Object.keys(this.fields[key]);\n }\n\n /**\n * It takes an id, and then calls the graphQLService to get the object from the database\n *\n * @param id - The id of the object to be loaded\n */\n getObjectById(id: string) {\n if (!id) {\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->id', id);\n console.log('ModelFormComponent::getObjectById->requestFields', this.createRequestObject(this.fields));\n }\n\n this.graphQLService\n .graphQl('get' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id },\n fields: this.createRequestObject(this.fields),\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (response) => {\n if (this.logging) {\n console.log('ModelFormComponent::get->value', response);\n }\n\n this.object = response;\n this.form.patchValue({ ...{}, ...response });\n\n // Process patchFields for reference input\n for (const [key, value] of Object.entries(this.fields)) {\n if (\n this.nestedObject(key, this.fields)?.type === 'DateTime' ||\n this.nestedObject(key, this.config)?.type === 'DateTime'\n ) {\n this.form.get(key).patchValue(this.formatDate(this.nestedObject(key, response)));\n }\n\n // If it not an array\n if (\n this.nestedObject(key, this.config)?.type === 'Reference' &&\n !this.nestedObject(key, this.fields)?.isList\n ) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(\n response[\n this.nestedObject(key, this.config)?.patchField\n ? this.nestedObject(key, this.config)?.patchField\n : key\n ]?.id\n );\n }\n }\n\n // If value is an array\n if (\n this.nestedObject(key, this.config)?.type === 'Reference' &&\n this.nestedObject(key, this.fields)?.isList\n ) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(\n response[\n this.nestedObject(key, this.config)?.patchField\n ? this.nestedObject(key, this.config)?.patchField\n : key\n ]?.map((e) => e?.id)\n );\n }\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->patchedForm', this.form);\n }\n },\n error: (err) => {\n console.error('Error on load object', err);\n this.finished.emit(null);\n },\n });\n }\n\n /**\n * It takes a GraphQL type collection and returns an array of strings and objects\n *\n * @param fields - IGraphQLTypeCollection - This is the object that is returned from the\n * introspection query.\n * @returns An array of strings and objects.\n */\n createRequestObject(fields: IGraphQLTypeCollection) {\n const requestFields: any = [];\n\n for (const [key, value] of Object.entries(fields)) {\n if (this.config[key]?.exclude !== undefined && this.config[key]?.exclude) {\n continue;\n }\n\n if (Object.keys(fields[key]?.fields)?.length === 0) {\n if (this.config[key]?.type !== 'Reference') {\n requestFields.push(key);\n } else {\n requestFields.push({ [this.config[key]?.patchField ? this.config[key]?.patchField : key]: ['id'] });\n }\n } else {\n const subkeys = this.createRequestObject(fields[key].fields as IGraphQLTypeCollection);\n const resultObject = {};\n resultObject[key] = subkeys;\n requestFields.push(resultObject);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createRequestObject->requestFields', requestFields);\n }\n\n return requestFields;\n }\n\n /**\n * It takes a collection of GraphQL types and creates a form group with a form control for each type\n *\n * @param fields - IGraphQLTypeCollection\n * @param parents\n */\n createForm(fields: IGraphQLTypeCollection, parents: any[] = []) {\n const group: any = {};\n let internParents = [...[], ...parents];\n\n for (const [key, value] of Object.entries(fields)) {\n if (Object.keys(value?.fields)?.length === 0) {\n group[key] = new UntypedFormControl(\n null,\n this.processValidators(\n this.nestedObject(internParents.length ? internParents.join('.') + '.' + key : key, this.config),\n value\n )\n );\n } else {\n internParents.push(key);\n group[key] = this.createForm(fields[key].fields as IGraphQLTypeCollection, internParents);\n internParents = [];\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createForm->group', group);\n }\n\n return new UntypedFormGroup(group);\n }\n\n /**\n * Process form validators for control\n */\n processValidators(config: any, value: IGraphQLTypeCollection | GraphQLType) {\n const validators = [];\n\n if (config) {\n if (config?.required !== undefined ? config?.required : value.isRequired) {\n validators.push(Validators.required);\n }\n\n if (config?.type === 'Email') {\n validators.push(fullEmail());\n }\n\n if (config?.type === 'Password') {\n validators.push(Validators.minLength(6));\n }\n\n if (typeof config?.min === 'number') {\n validators.push(Validators.min(config.min));\n }\n\n if (typeof config?.max === 'number') {\n validators.push(Validators.max(config.max));\n }\n\n if (Array.isArray(config?.validators)) {\n validators.push(...config?.validators);\n }\n }\n\n return validators;\n }\n\n /**\n * It calls the graphQLService to delete the object with the id of the object that is currently being edited\n */\n deleteObject() {\n this.cmsService.deleteObject(this.id, this.modelName).then(() => {\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich gelöscht.',\n });\n this.finished.emit(null);\n });\n }\n\n /**\n * It sends a GraphQL mutation to the server to duplicate the object\n */\n async duplicateObject() {\n this.cmsService.duplicateObject(this.id, this.modelName).then(async (value) => {\n if (value?.id) {\n await this.router.navigate(['../'], { relativeTo: this.route });\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich dupliziert.',\n });\n } else {\n this.finished.emit(null);\n }\n });\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n *\n * @param value - The string to capitalize.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n\n /**\n * It takes the key of the form control that has changed, gets the value of that form control, creates an object with the\n * key and value, and then sends that object to the GraphQL server to update the database\n */\n imageChanged(key: string) {\n const data = {};\n data[key] = this.form.get(key).value;\n\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->body', data);\n }\n\n if (this.id) {\n try {\n this.graphQLService\n .graphQl('update' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id: this.id, input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->success', value);\n }\n },\n });\n } catch (e) {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->error', e);\n }\n }\n }\n }\n\n /**\n * It takes the form, validates it, and then sends it to the GraphQL server\n *\n * @returns The id of the newly created or updated object.\n */\n submit(secret = false) {\n return new Promise(async (resolve, reject) => {\n if (!secret) {\n this.loading = true;\n }\n\n if (this.form.invalid && !secret) {\n this.formsService.validateAllFormFields(this.form as any);\n this.formsService.scrollToInvalidControl(this.form);\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.operation === 'update' && !this.id) {\n console.error('ID is missing for update!');\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->formValue', this.form.value);\n }\n\n // Prepare data for server request\n let data = Object.assign({}, this.form.value);\n data = this.prepareDataForRequest(this.config, this.fields, data);\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->valueToGraphql', data);\n console.log('ModelFormComponent::submit->fileChanges', this.fileChanges);\n }\n\n if (this.fileChanges?.length) {\n for (const fileChange of this.fileChanges) {\n const key = fileChange.field;\n const config = this.nestedObject(key, this.config);\n\n if (fileChange.file) {\n // Upload\n const value = this.form.get(key).value;\n\n // Check if file is an ID or a base64 string\n if (typeof value === 'string') {\n // Delete if ID\n if (!this.form.get(key).value?.startsWith('data:')) {\n const deleteResult = await this.fileService.delete(\n this.nestedObject(key, this.config)?.url,\n this.nestedObject(key, this.config)?.deletePath || '/files/',\n this.nestedObject(key, this.object)\n );\n\n if (deleteResult) {\n this.nestedObject(key, data, '');\n }\n }\n\n const uploadResult = await this.fileService.upload(\n this.nestedObject(key, this.config)?.url,\n this.nestedObject(key, this.config)?.uploadPath || '/files/upload',\n fileChange.file\n );\n\n if (uploadResult?.id) {\n this.nestedObject(key, data, uploadResult.id);\n }\n } else if (config?.imageMode && config?.imageMode !== 'file') {\n // Delete\n const result = await this.fileService.delete(\n config?.url,\n this.nestedObject(key, this.config)?.deletePath || '/files/',\n this.nestedObject(key, this.object)\n );\n\n if (result) {\n this.nestedObject(key, data, '');\n }\n }\n }\n }\n }\n\n this.graphQLService\n .graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {\n arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (!secret) {\n this.loading = false;\n this.finished.emit(null);\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description:\n this.label + ' wurde erfolgreich ' + (this.operation === 'create' ? 'erstellt.' : 'aktualisiert.'),\n });\n }\n\n resolve(value);\n },\n error: (err) => {\n if (!secret) {\n console.error('Failed on ' + this.operation, err);\n this.loading = false;\n\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.ERROR,\n description:\n 'Beim ' +\n (this.operation === 'create' ? 'erstellen' : 'aktualisieren') +\n ' von ' +\n this.label +\n ' ist etwas schiefgelaufen.',\n });\n }\n\n reject();\n },\n });\n });\n }\n\n /**\n * Prepare data for server\n */\n prepareDataForRequest(config, fieldsConfig, data) {\n if (!data) {\n return data;\n }\n\n for (const [key, value] of Object.entries(data)) {\n if ((this.fields[key]?.type === 'DateTime' || this.config[key]?.type === 'DateTime') && value === '') {\n data[key] = null;\n continue;\n }\n\n if ((config[key]?.roles ? !this.user.hasAllRoles(config[key]?.roles) : false) || config[key]?.exclude) {\n delete data[key];\n continue;\n }\n\n if (value && typeof value === 'object' && !Array.isArray(value) && this.fields[key]?.type !== 'Upload') {\n data[key] = Object.keys(data[key])\n .filter((k) => data[key][k] != null)\n .reduce((a, k) => ({ ...a, [k]: data[key][k] }), {});\n\n if (Object.keys(data[key])?.length === 0) {\n if (this.logging) {\n console.log('Object is empty from result');\n }\n data[key] = null;\n }\n }\n\n // Set type for graphql method\n if (fieldsConfig[key]?.type === 'Float') {\n if (value) {\n data[key] = Number(value);\n } else {\n data[key] = null;\n }\n }\n\n if (fieldsConfig[key]?.fields && Object.keys(fieldsConfig[key]?.fields).length > 0) {\n data[key] = this.prepareDataForRequest(config[key]?.fields, fieldsConfig[key]?.fields, data[key]);\n }\n }\n\n return data;\n }\n\n /**\n * Init fab buttons for mobile devices\n */\n initFabActions() {\n const saveEvent = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-check-lg', color: 'var(--bs-success)', event: saveEvent });\n saveEvent.subscribe(() => this.submit(false));\n\n if (this.duplicate && this.operation === 'update') {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });\n event.subscribe(() => this.duplicateObject());\n }\n\n if (this.operation === 'update' && this.delete) {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });\n event.subscribe(() => this.deleteObject());\n }\n }\n\n /**\n * Set file changes for process\n */\n processFileChanges(event: { field: string; file: File | null; base64: string | null }) {\n const index = this.fileChanges?.findIndex((e) => e.field === event.field);\n\n if (index !== undefined && index !== -1) {\n this.fileChanges[index] = event;\n } else if (this.fileChanges) {\n this.fileChanges.push(event);\n } else {\n this.fileChanges = [event];\n }\n }\n\n private formatDate(date) {\n if (!date) {\n return null;\n }\n const newDate = new Date(date);\n return newDate.toISOString().substring(0, 16);\n }\n\n private nestedObject(key: string, nestedObject: any, value?: any) {\n const props = key.split('.');\n let result: any = nestedObject;\n\n for (let i = 0; i < props.length; i++) {\n if (value && i === props.length - 1) {\n result[props[i]] = value;\n return result[props[i]];\n }\n\n result =\n result[props[i]]?.fields && Object.keys(result[props[i]]?.fields)?.length > 0\n ? result[props[i]]?.fields\n : result[props[i]];\n }\n\n return result;\n }\n}\n","<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [id]=\"id\"\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n (fileChanged)=\"processFileChanges($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">Löschen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Truncate string with ellipses\n */\n@Pipe({\n name: 'baseEllipses',\n})\nexport class EllipsesPipe implements PipeTransform {\n transform(value: string, limit: number): string {\n if (!value) {\n return null;\n }\n\n return value.length > limit ? value.substring(0, limit) + '...' : value;\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n CMSFieldConfig,\n CMSModelConfig,\n CmsService,\n CMSTableField,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n GraphQLType,\n ScrollService,\n StorageService,\n ToastService,\n ToastType,\n} from '@lenne.tech/ng-base/shared';\nimport { FormControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-model-table',\n templateUrl: './model-table.component.html',\n styleUrls: ['./model-table.component.scss'],\n})\nexport class ModelTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @Input() modelName: string;\n @Input() objectId: string;\n @Input() createMode = false;\n @Input() logging = false;\n @Input() create = true;\n @Input() update = true;\n @Input() delete = true;\n @Input() import = true;\n @Input() export = true;\n @Input() duplicate = true;\n @Input() modelConfig: CMSModelConfig = null;\n @Input() config: { [key: string]: CMSFieldConfig };\n @Input() showFavButton = false;\n\n @Output() idSelected = new EventEmitter<string>();\n @Output() createModeChanged = new EventEmitter<boolean>();\n\n @ViewChild('customFormTemplate', { read: ViewContainerRef }) customFormTemplate: ViewContainerRef;\n\n uniqueField = 'id';\n tableFields: CMSTableField = {\n id: { label: 'ID' },\n name: { label: 'Name' },\n title: { label: 'Titel' },\n description: { label: 'Beschreibung' },\n email: { label: 'E-Mail' },\n createdAt: { label: 'Erstellt am', dateFormat: 'dd.MM.YYYY HH:mm' },\n updatedAt: { label: 'Bearbeitet am', dateFormat: 'dd.MM.YYYY HH:mm' },\n };\n meta!: GraphQLMeta;\n objects: any[] = [];\n availableFields: string[] = [];\n id = '';\n queryName: string = null;\n camelModelName: string;\n possibleFields: Record<string, GraphQLType> = {};\n componentRef: ComponentRef<any> = undefined;\n\n totalCount: number;\n selectedPageIndex = 0;\n pages = [];\n pageItemsLimitControl = new FormControl(25);\n pageOptions = [\n {\n text: '25',\n value: 25,\n },\n {\n text: '50',\n value: 50,\n },\n {\n text: '75',\n value: 75,\n },\n {\n text: '100',\n value: 100,\n },\n {\n text: '200',\n value: 200,\n },\n ];\n subscription = new Subscription();\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private cmsService: CmsService,\n private toastService: ToastService,\n private scrollService: ScrollService,\n private storageService: StorageService\n ) {}\n\n ngAfterViewInit() {\n // Needed time out to prevent ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.integrateCustomFormComponent();\n }, 10);\n }\n\n ngOnInit(): void {\n const pageItemsLimit = this.storageService.load('pageItemsLimit');\n this.pageItemsLimitControl.setValue(pageItemsLimit ? pageItemsLimit : 25, { onlySelf: true, emitEvent: false });\n\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n\n if (this.objectId) {\n this.id = this.objectId;\n\n // Needed time out for rerender\n setTimeout(() => {\n this.integrateCustomFormComponent();\n }, 10);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['modelName'] && this.meta) {\n this.init();\n }\n\n if (changes['objectId'] && this.meta) {\n if (this.id !== this.objectId) {\n if (this.logging) {\n console.log('ModelTableComponent::ngOnChanges->selectedId', this.id);\n }\n\n this.id = this.objectId;\n }\n }\n\n this.setChangesInComponentRef();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * We're using the `meta` service to get the fields that are available for the `find` query for the model we're working\n * with. We're then using that information to populate the `availableFields` array\n */\n async init() {\n this.availableFields = [];\n this.pages = [];\n this.totalCount = null;\n this.camelModelName = this.kebabToCamelCase(this.modelName);\n\n // Set query name\n if (!this.modelConfig?.queryName) {\n this.queryName = 'findAndCount' + this.capitalizeFirstLetter(this.camelModelName) + 's';\n } else {\n this.queryName = this.modelConfig?.queryName;\n }\n\n if (this.modelConfig?.tableFields) {\n this.tableFields = this.modelConfig.tableFields;\n }\n\n if (this.logging) {\n console.log('ModelTableComponent::init->modelName', this.modelName);\n console.log('ModelTableComponent::init->camelModelName', this.camelModelName);\n console.log('ModelTableComponent::init->queryName', this.queryName);\n console.log('ModelTableComponent::init->tableFields', this.tableFields);\n }\n\n this.possibleFields = this.meta.getFields(this.queryName).fields;\n let keys;\n if (this.possibleFields?.items && Object.keys(this.possibleFields?.items?.fields).length > 0) {\n keys = Object.keys(this.possibleFields.items.fields);\n } else {\n keys = Object.keys(this.possibleFields);\n }\n\n const tableFieldKeys = Object.keys(this.tableFields);\n tableFieldKeys?.forEach((field) => {\n if (keys.includes(field)) {\n this.availableFields.push(field);\n }\n });\n\n if (this.logging) {\n console.log('ModelTableComponent::init->possibleFields', this.possibleFields);\n console.log('ModelTableComponent::init->keys', keys);\n console.log('ModelTableComponent::init->availableFields', this.availableFields);\n }\n\n this.selectedPageIndex = this.storageService.load('pageIndex') ? this.storageService.load('pageIndex') : 0;\n this.objects = await this.loadObjects(this.availableFields, 0, this.pageItemsLimitControl.value);\n this.subscribeToPageItems();\n }\n\n subscribeToPageItems() {\n this.subscription.add(\n this.pageItemsLimitControl.valueChanges.subscribe({\n next: async (value) => {\n this.selectedPageIndex = 0;\n this.storageService.save('pageIndex', this.selectedPageIndex);\n this.objects = await this.loadObjects(this.availableFields, 0, value);\n this.storageService.save('pageItemsLimit', value);\n },\n })\n );\n }\n\n integrateCustomFormComponent() {\n if (!this.customFormTemplate || this.componentRef) {\n return;\n }\n\n const customComponent = this.modelConfig?.customTemplateComponent;\n if (customComponent) {\n this.componentRef = this.customFormTemplate?.createComponent<any>(customComponent);\n this.setChangesInComponentRef();\n this.componentRef.instance.finished.subscribe(() => {\n this.selectId('');\n });\n }\n }\n\n setChangesInComponentRef() {\n if (this.componentRef) {\n const data = {\n config: this.config,\n delete: this.delete,\n duplicate: this.duplicate,\n id: this.id,\n label: this.modelConfig?.label,\n logging: this.logging,\n modelName: this.camelModelName,\n showFavButton: this.showFavButton,\n };\n\n for (const [key, value] of Object.entries(data)) {\n this.componentRef.setInput(key, value);\n }\n }\n }\n\n /**\n * When the user clicks the \"Create New\" button, the createModeChanged event is emitted, which is then handled by the\n * parent component\n */\n createNewObject() {\n this.createMode = true;\n this.createModeChanged.emit(true);\n }\n\n /**\n * It loads the objects from the database and stores them in the objects variable\n *\n * @param fields - string[] - The fields you want to load from the database.\n * @param skip\n * @param limit\n */\n loadObjects(fields: string[], skip = 0, limit = 25): Promise<any[]> {\n return new Promise<any[]>((resolve, reject) => {\n const requestFields = [...fields];\n const idInFields = requestFields.find((e) => e === 'id');\n\n if (!idInFields) {\n requestFields.push('id');\n }\n\n const isFindAndCount = this.queryName.includes('findAndCount');\n\n this.graphQLService\n .graphQl(this.queryName, {\n arguments: {\n limit: isFindAndCount ? limit : null,\n skip: isFindAndCount ? skip : null,\n },\n fields: isFindAndCount ? ['totalCount', { items: requestFields }] : requestFields,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (value) => {\n let items;\n if (this.logging) {\n console.log('ModelTableComponent::loadObjects->value', value);\n }\n\n if (value?.totalCount >= 0) {\n items = value.items;\n this.totalCount = value.totalCount;\n this.pages = [];\n let numbers = 0;\n\n while (numbers < this.totalCount) {\n this.pages.push({\n skip: numbers,\n limit: this.pageItemsLimitControl.value,\n });\n\n numbers = numbers + this.pageItemsLimitControl.value;\n }\n\n const loadedIndex = this.storageService.load('pageIndex');\n if (loadedIndex) {\n if (loadedIndex > this.pages.length) {\n this.selectedPageIndex = 0;\n this.storageService.save('pageIndex');\n }\n }\n } else {\n items = value;\n }\n\n resolve(items);\n },\n error: (err) => {\n console.log('Error on loading objects', err);\n reject(err);\n },\n });\n });\n }\n\n /**\n * If the update property is true, then set the selectedId property to the id of the object passed in, and emit the\n * selectedId property\n */\n selectId(object: any) {\n if (!object) {\n this.createMode = false;\n this.createModeChanged.emit(false);\n }\n\n if (this.update) {\n this.id = object['id'];\n this.idSelected.emit(this.id);\n }\n }\n\n openNewTab(object: any) {\n window.open(location.href + '/' + object['id'], '_blank');\n }\n\n /**\n * It calls the duplicateObject function in the cmsService, passing in the id of the object to be duplicated and the\n * modelName of the object\n */\n async duplicateObject(id: string) {\n await this.cmsService.duplicateObject(id, this.camelModelName);\n this.selectedPageIndex = this.storageService.load('pageIndex') ? this.storageService.load('pageIndex') : 0;\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n\n /**\n * It calls the deleteObject function in the cmsService, passing in the id of the object to delete and the name of the\n * model\n */\n async deleteObject(id: string) {\n await this.cmsService.deleteObject(id, this.camelModelName);\n this.selectedPageIndex = this.storageService.load('pageIndex') ? this.storageService.load('pageIndex') : 0;\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * Kebab to camel case string\n */\n kebabToCamelCase(str: string) {\n return str.replace(/-./g, (match) => match[1].toUpperCase());\n }\n\n /**\n * Import objects from json file\n */\n processImport(event) {\n // Create a new FileReader() object\n const reader = new FileReader();\n\n // Setup the callback event to run when the file is read\n reader.onload = async (readerEvent) => {\n let jsonResult = JSON.parse(readerEvent.target.result as any);\n\n if (!Array.isArray(jsonResult)) {\n jsonResult = [jsonResult];\n }\n\n for (let i = 0; i < jsonResult.length; i++) {\n try {\n this.graphQLService\n .graphQl('create' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { input: jsonResult[i] },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: async () => {\n this.toastService.show({\n id: this.modelName + '-' + i + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: 'Element ' + (i + 1) + ' von ' + jsonResult.length + ' erfolgreich importiert.',\n });\n\n if (i === jsonResult.length - 1) {\n this.selectedPageIndex = this.storageService.load('pageIndex')\n ? this.storageService.load('pageIndex')\n : 0;\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n },\n error: () => {\n this.toastService.show({\n id: this.modelName + '-' + i + '-error',\n type: ToastType.ERROR,\n title: 'Error',\n description: 'Element ' + (i + 1) + ' von ' + jsonResult.length + ' konnte nicht importiert werden.',\n });\n },\n });\n } catch (e) {\n this.toastService.show({\n id: this.modelName + '-' + i + '-error',\n type: ToastType.ERROR,\n title: 'Error',\n description: 'Element ' + (i + 1) + ' von ' + jsonResult.length + ' konnte nicht importiert werden.',\n });\n }\n }\n };\n\n // Read the file\n reader.readAsText(event.target.files[0]);\n }\n\n /**\n * Export objects as json\n */\n async processExport() {\n const keys = this.getAllKeys();\n const items = await this.loadObjects(\n keys,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n const data = JSON.stringify(items);\n const blob = new Blob([data], { type: 'text/json;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', this.modelName + 's.json');\n document.body.appendChild(link);\n link.click();\n }\n\n /**\n * Get all keys for request to export objects as json\n */\n getAllKeys() {\n const items = [];\n for (const [key, value] of Object.entries(this.possibleFields)) {\n if (!this.possibleFields[key].fields || Object.keys(this.possibleFields[key].fields).length === 0) {\n items.push(key);\n }\n }\n\n return items;\n }\n\n async selectPage(i: number) {\n if (!this.pages[i]) {\n return;\n }\n\n this.selectedPageIndex = i;\n await this.scrollService.scrollTo('model-table-top');\n this.storageService.save('pageIndex', this.selectedPageIndex);\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n}\n","<div *ngIf=\"!id && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-2 mb-lg-4\">\n <h2 id=\"model-table-top\" class=\"mb-0\" *ngIf=\"modelName\">\n {{\n modelConfig?.plural\n ? modelConfig?.plural\n : modelConfig?.label\n ? modelConfig?.label\n : capitalizeFirstLetter(camelModelName) + 's'\n }}\n </h2>\n <div class=\"d-flex align-items-center d-none d-lg-block\">\n <input #importFile type=\"file\" accept=\".json\" class=\"d-none\" (change)=\"processImport($event)\" />\n <div class=\"btn-group me-4\" *ngIf=\"import || export\">\n <i\n class=\"bi bi-three-dots-vertical\"\n id=\"settingsDropdown\"\n type=\"button\"\n data-bs-toggle=\"dropdown\"\n data-bs-auto-close=\"true\"\n aria-expanded=\"false\"\n ></i>\n <ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"settingsDropdown\">\n <li><a class=\"dropdown-item cursor-pointer\" *ngIf=\"export\" (click)=\"processExport()\">Export</a></li>\n <li><a class=\"dropdown-item cursor-pointer\" *ngIf=\"import\" (click)=\"importFile.click()\"> Import </a></li>\n </ul>\n </div>\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"totalCount >= 0\">\n <nav class=\"d-flex row\">\n <div class=\"col-12 col-md-2\"></div>\n <ul class=\"pagination justify-content-center col-12 col-md-8\">\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex - 1)\"\n aria-label=\"Previous\"\n [ngClass]=\"{ disabled: selectedPageIndex - 1 > 0 }\"\n >\n <span aria-hidden=\"true\">«</span>\n </a>\n </li>\n <li class=\"page-item\" *ngFor=\"let page of pages; let i = index\">\n <a class=\"page-link\" [ngClass]=\"{ active: selectedPageIndex === i }\" (click)=\"selectPage(i)\">{{ i + 1 }}</a>\n </li>\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex + 1)\"\n aria-label=\"Next\"\n [ngClass]=\"{ disabled: pages[selectedPageIndex + 1] }\"\n >\n <span aria-hidden=\"true\">»</span>\n </a>\n </li>\n </ul>\n\n <div class=\"col-12 col-md-2\">\n <base-select [options]=\"pageOptions\" [control]=\"pageItemsLimitControl\"></base-select>\n </div>\n </nav>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white d-none d-lg-table\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n (baseSorted)=\"objects = $event\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date : tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses : 60 }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"d-flex d-lg-none flex-column flex-grow-1\">\n <div class=\"table-card\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <div class=\"table-card-entry\" *ngFor=\"let field of availableFields; let i = index\" (click)=\"selectId(object)\">\n <b *ngIf=\"i > 0\"\n >{{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}:</b\n >\n <p [ngClass]=\"{ 'table-card-entry-first': i === 0 }\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date : tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses : 60 }}\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"totalCount >= 0\">\n <nav class=\"d-flex row\">\n <div class=\"col-12 col-md-2\"></div>\n <ul class=\"pagination justify-content-center col-12 col-md-8\">\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex - 1)\"\n aria-label=\"Previous\"\n [ngClass]=\"{ disabled: selectedPageIndex - 1 > 0 }\"\n >\n <span aria-hidden=\"true\">«</span>\n </a>\n </li>\n <li class=\"page-item\" *ngFor=\"let page of pages; let i = index\">\n <a class=\"page-link\" [ngClass]=\"{ active: selectedPageIndex === i }\" (click)=\"selectPage(i)\">{{ i + 1 }}</a>\n </li>\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex + 1)\"\n aria-label=\"Next\"\n [ngClass]=\"{ disabled: pages[selectedPageIndex + 1] }\"\n >\n <span aria-hidden=\"true\">»</span>\n </a>\n </li>\n </ul>\n\n <div class=\"col-12 col-md-2\">\n <base-select [options]=\"pageOptions\" [control]=\"pageItemsLimitControl\"></base-select>\n </div>\n </nav>\n </div>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" (click)=\"openNewTab({ id: contextMenuData.clickedElement?.id })\">\n In neuen Tab öffnen\n </div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n Löschen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"id || createMode\">\n <button class=\"d-none d-lg-block btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zurück</button>\n <base-model-form\n *ngIf=\"!modelConfig?.customTemplateComponent\"\n [modelName]=\"camelModelName\"\n [label]=\"modelConfig?.label\"\n [config]=\"config\"\n [logging]=\"logging\"\n [id]=\"id\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n [showFavButton]=\"showFavButton\"\n ></base-model-form>\n <ng-template *ngIf=\"modelConfig?.customTemplateComponent\" #customFormTemplate></ng-template>\n</div>\n\n<div class=\"responsive-action-button d-block d-lg-none\">\n <base-fab-button\n [fabIcon]=\"'bi-plus'\"\n (click)=\"createNewObject()\"\n *ngIf=\"!(id || createMode) && showFavButton\"\n ></base-fab-button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n AuthService,\n FormsService,\n securePasswordValidator,\n ToastService,\n ToastType,\n UserService,\n Validation,\n} from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss'],\n})\nexport class ChangePasswordComponent implements OnInit {\n form: FormGroup;\n loading = false;\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create password change form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n current: new FormControl<string>('', [Validators.required]),\n password: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n },\n Validation.match('password', 'passwordConfirm') as any\n );\n }\n\n /**\n * Submit form and change password of user\n */\n submit() {\n this.loading = true;\n this.userService\n .login({\n email: this.authService.currentUser.email,\n password: this.form.get('current').value,\n })\n .subscribe({\n next: () => {\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.changePassword(this.authService.currentUser.id, this.form.get('password').value).subscribe({\n next: (response) => {\n if (response) {\n this.form.reset();\n this.toastService.show({\n id: 'password-change-success',\n title: 'Erfolgreich',\n description: 'Passwort wurde erfolgreich geändert.',\n type: ToastType.SUCCESS,\n });\n }\n\n this.loading = false;\n },\n error: () => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n },\n error: () => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen. Falsches Passwort.',\n type: ToastType.ERROR,\n errorCode: '401',\n });\n },\n });\n }\n}\n","<h3>Passwort ändern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'Aktuelles Passwort'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('current')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Neues Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Neues Passwort bestätigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"3\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort ändern</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</form>\n","import { Component, Input } from '@angular/core';\nimport { AuthService, ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-delete-account',\n templateUrl: './delete-account.component.html',\n styleUrls: ['./delete-account.component.scss'],\n})\nexport class DeleteAccountComponent {\n @Input() description =\n 'Mit dem Löschen Deines Kontos werden alle persönlichen Daten sofort gelöscht und sind nicht wiederherstellbar.';\n loading = false;\n\n constructor(\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService,\n private router: Router\n ) {}\n\n deleteAccount() {\n this.loading = true;\n\n if (!confirm('Willst Du wirklich ein Konto unwiderruflich löschen?')) {\n this.loading = false;\n return;\n }\n\n this.userService.delete(this.authService.currentUser.id).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'delete-user-success',\n title: 'Erfolgreich',\n description: 'Dein Konto wurde erfolgreich gelöscht.',\n type: ToastType.SUCCESS,\n });\n }\n this.authService.logout();\n this.router.navigate(['/']);\n\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'delete-user-error',\n title: 'Fehlgeschlagen',\n description: 'Konto löschen ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<div>\n <h3>Konto löschen</h3>\n\n <p>{{ description }}</p>\n\n <div class=\"d-flex justify-content-end mt-3\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"deleteAccount()\" *ngIf=\"!loading\">Konto löschen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</div>\n","import { Directive, HostListener } from '@angular/core';\nimport { NavigationService } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseBackButton]',\n})\nexport class BackButtonDirective {\n constructor(private navigation: NavigationService) {}\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { InputComponent } from './components/input/input.component';\nimport { SelectComponent } from './components/select/select.component';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { TextareaComponent } from './components/textarea/textarea.component';\nimport { ToastComponent } from './components/toast/toast.component';\nimport { TagsComponent } from './components/tags/tags.component';\nimport { LoadingBarComponent } from './components/loading-bar/loading-bar.component';\nimport { SkeletonLoaderComponent } from './components/skeleton-loader/skeleton-loader.component';\nimport { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component';\nimport { ModelTableComponent } from './components/model-table/model-table.component';\nimport { ModelFormComponent } from './components/model-form/model-form.component';\nimport { ModelFormSubComponent } from './components/model-form-sub/model-form-sub.component';\nimport { UploadImageComponent } from './components/upload-image/upload-image.component';\nimport { RefenceInputComponent } from './components/refence-input/refence-input.component';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { DeleteAccountComponent } from './components/delete-account/delete-account.component';\nimport { FabButtonComponent } from './components/fab-button/fab-button.component';\n\nimport { BackButtonDirective } from './directives/back-button.directive';\nimport { SortDirective } from './directives/sort.directive';\nimport { ContextMenuDirective } from './directives/context-menu.directive';\nimport { StopPropagationDirective } from './directives/stop-propagation.directive';\n\nimport { EllipsesPipe } from './pipes/ellipses.pipe';\n\nimport { RouterModule } from '@angular/router';\nimport { ImageCropperModule } from 'ngx-image-cropper';\n\n// Modules\nconst imports = [FormsModule, ReactiveFormsModule, CommonModule, RouterModule, ImageCropperModule];\n\n// Imported and exported elements\nconst elements = [\n // Directives\n SortDirective,\n BackButtonDirective,\n ContextMenuDirective,\n StopPropagationDirective,\n\n // Components\n InputComponent,\n SelectComponent,\n CheckboxComponent,\n TextareaComponent,\n ToastComponent,\n TagsComponent,\n LoadingBarComponent,\n SkeletonLoaderComponent,\n BreadcrumbComponent,\n ModelFormComponent,\n ModelTableComponent,\n ModelFormSubComponent,\n UploadImageComponent,\n RefenceInputComponent,\n ChangePasswordComponent,\n DeleteAccountComponent,\n FabButtonComponent,\n\n // Pipes\n EllipsesPipe,\n];\n\n@NgModule({\n declarations: elements,\n imports,\n exports: elements,\n})\nexport class BaseComponentsModule {}\n","import { CMSFieldConfig, CmsService, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { Button } from '../fab-button/fab-button.component';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n/**\n * Abstract Component for inputs and outputs only\n *\n * Hint for handling extensions of this component in project:\n * If you want to use complete custom services and methods, extend ModelFormComponent instead of ModelFormBaseComponent\n */\n@Component({\n template: '',\n})\nexport abstract class ModelFormBaseComponent implements OnInit {\n @Input() modelName: string;\n @Input() label: string;\n @Input() id: string | null;\n @Input() delete = true;\n @Input() onlyUpdateMode = false;\n @Input() duplicate = false;\n @Input() logging = false;\n @Input() config: { [key: string]: CMSFieldConfig } = null;\n @Input() showFavButton = true;\n\n @Output() finished = new EventEmitter();\n\n fabButtons: Button[] = [];\n operation: string;\n\n protected constructor(\n protected cmsService: CmsService,\n protected toastService: ToastService,\n protected router: Router,\n protected route: ActivatedRoute\n ) {}\n\n ngOnInit() {\n this.initFabActions();\n }\n\n /**\n * Init fab buttons for mobile devices\n */\n initFabActions() {\n const saveEvent = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-check-lg', color: 'var(--bs-success)', event: saveEvent });\n saveEvent.subscribe(() => this.submit());\n\n if (this.duplicate && this.operation === 'update') {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });\n event.subscribe(() => this.duplicateObject());\n }\n\n if (this.operation === 'update' && this.delete) {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });\n event.subscribe(() => this.deleteObject());\n }\n }\n\n submit() {}\n\n /**\n * It calls the graphQLService to delete the object with the id of the object that is currently being edited\n */\n deleteObject() {\n this.cmsService.deleteObject(this.id, this.modelName).then(() => {\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich gelöscht.',\n });\n this.finished.emit(null);\n });\n }\n\n /**\n * It sends a GraphQL mutation to the server to duplicate the object\n */\n async duplicateObject() {\n this.cmsService.duplicateObject(this.id, this.modelName).then(async (value) => {\n if (value?.id) {\n await this.router.navigate(['../'], { relativeTo: this.route });\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich dupliziert.',\n });\n } else {\n this.finished.emit(null);\n }\n });\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n *\n * @param value - The string to capitalize.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n\n formatDate(date) {\n if (!date) {\n return null;\n }\n const newDate = new Date(date);\n return newDate.toISOString().substring(0, 16);\n }\n}\n","/**\n * Exports for public API\n */\n\n// Module\nexport * from './base-components.module';\n\n// Directives\nexport * from './directives/sort.directive';\nexport * from './directives/back-button.directive';\nexport * from './directives/context-menu.directive';\nexport * from './directives/stop-propagation.directive';\n\n// Pipes\nexport * from './pipes/ellipses.pipe';\n\n// Components\nexport * from './components/input/input.component';\nexport * from './components/select/select.component';\nexport * from './components/checkbox/checkbox.component';\nexport * from './components/textarea/textarea.component';\nexport * from './components/tags/tags.component';\nexport * from './components/toast/toast.component';\nexport * from './components/loading-bar/loading-bar.component';\nexport * from './components/skeleton-loader/skeleton-loader.component';\nexport * from './components/breadcrumb/breadcrumb.component';\nexport * from './components/model-form/model-form.component';\nexport * from './components/model-form/model-form-base.component';\nexport * from './components/model-table/model-table.component';\nexport * from './components/model-form-sub/model-form-sub.component';\nexport * from './components/upload-image/upload-image.component';\nexport * from './components/refence-input/refence-input.component';\nexport * from './components/change-password/change-password.component';\nexport * from './components/delete-account/delete-account.component';\nexport * from './components/fab-button/fab-button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i5.StopPropagationDirective","i4","i5.TagsComponent","i3.InputComponent","i4.SelectComponent","i5.CheckboxComponent","i6.TextareaComponent","i7.TagsComponent","i8.UploadImageComponent","i9.RefenceInputComponent","i5.ModelFormSubComponent","i6.FabButtonComponent","i3.SortDirective","i4.ContextMenuDirective","i5.SelectComponent","i6.ModelFormComponent","i7.FabButtonComponent","i8.EllipsesPipe","i4.InputComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lenne.tech-ng-base-base-components.mjs","sources":["../../../projects/ng-base/base-components/directives/sort.directive.ts","../../../projects/ng-base/base-components/directives/back-button.directive.ts","../../../projects/ng-base/base-components/directives/context-menu.directive.ts","../../../projects/ng-base/base-components/directives/stop-propagation.directive.ts","../../../projects/ng-base/base-components/pipes/ellipses.pipe.ts","../../../projects/ng-base/base-components/components/input/input.component.ts","../../../projects/ng-base/base-components/components/input/input.component.html","../../../projects/ng-base/base-components/components/select/select.component.ts","../../../projects/ng-base/base-components/components/select/select.component.html","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.ts","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.html","../../../projects/ng-base/base-components/components/textarea/textarea.component.ts","../../../projects/ng-base/base-components/components/textarea/textarea.component.html","../../../projects/ng-base/base-components/components/tags/tags.component.ts","../../../projects/ng-base/base-components/components/tags/tags.component.html","../../../projects/ng-base/base-components/components/toast/toast.component.ts","../../../projects/ng-base/base-components/components/toast/toast.component.html","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.ts","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.html","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.ts","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.html","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.ts","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.html","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.ts","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.html","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.html","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.ts","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.html","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.ts","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.html","../../../projects/ng-base/base-components/components/model-form/model-form.component.ts","../../../projects/ng-base/base-components/components/model-form/model-form.component.html","../../../projects/ng-base/base-components/components/model-form/model-form-base.component.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.html","../../../projects/ng-base/base-components/components/change-password/change-password.component.ts","../../../projects/ng-base/base-components/components/change-password/change-password.component.html","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.ts","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.html","../../../projects/ng-base/base-components/public-api.ts","../../../projects/ng-base/base-components/lenne.tech-ng-base-base-components.ts"],"sourcesContent":["import { Directive, ElementRef, EventEmitter, HostListener, Inject, Input, Output, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Sort } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseSort]',\n standalone: true,\n})\nexport class SortDirective {\n @Input() baseSort: Array<any>;\n @Output() baseSorted = new EventEmitter<Array<any>>();\n constructor(private renderer: Renderer2, private targetElem: ElementRef, @Inject(DOCUMENT) document: Document) {}\n\n /**\n * Sorts columns on click\n */\n @HostListener('click')\n sortColumn(): void {\n const items = document.getElementsByTagName('th');\n for (let i = 0; i < items.length; i++) {\n items[i].classList.remove('asc');\n items[i].classList.remove('desc');\n }\n\n const sort = new Sort();\n\n const elem = this.targetElem.nativeElement;\n\n const order = elem.getAttribute('data-order');\n\n const type = elem.getAttribute('data-type');\n\n const property = elem.getAttribute('data-name');\n if (order === 'desc') {\n this.baseSorted.emit([...this.baseSort].sort(sort.startSort(property, order, type)));\n elem.setAttribute('data-order', 'asc');\n elem.classList.remove('desc');\n elem.classList.add('asc');\n } else {\n this.baseSorted.emit([...this.baseSort].sort(sort.startSort(property, order, type)));\n elem.setAttribute('data-order', 'desc');\n elem.classList.remove('asc');\n elem.classList.add('desc');\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { NavigationService } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseBackButton]',\n standalone: true,\n})\nexport class BackButtonDirective {\n constructor(private navigation: NavigationService) {}\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Output } from '@angular/core';\n\n/**\n * Directive vor context menu\n * See https://stackblitz.com/edit/angular-custom-context-menu\n */\n@Directive({\n selector: '[ltContextMenu]',\n exportAs: 'contextMenuData',\n standalone: true,\n})\nexport class ContextMenuDirective implements OnInit {\n @Input() contextMenuData?: any;\n @Input() ltContextMenu: HTMLElement;\n @Input() xGap = 0;\n @Input() yGap = 0;\n @Input() overflowSpace = 10;\n @Input() selectors = '*';\n @Output() clickedElement: Element = null;\n previousDisplayStatus: string = null;\n\n constructor(private el: ElementRef) {}\n\n ngOnInit() {\n if (this.ltContextMenu) {\n this.previousDisplayStatus = this.ltContextMenu.style.display;\n }\n\n // Add a click listener to the window,\n // so that we can close the context menu on left click\n window.addEventListener('click', () => {\n this.showContextMenu(null, false);\n });\n\n // Close context menu when escape is pressed\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Escape') {\n this.showContextMenu(null, false);\n }\n });\n\n // Add an event listener to listen to the 'contextmenu' event\n this.el.nativeElement.addEventListener('contextmenu', (e) => {\n // Prevent the default context menu to popup\n if (e.preventDefault) {\n e.preventDefault();\n }\n // Shows our own context menu\n this.showContextMenu(e, true);\n });\n }\n\n // Shows or hides our custom context menu, which is specified as a input\n showContextMenu(event, show: boolean) {\n const cm = this.ltContextMenu;\n if (cm) {\n // Try to open context menu\n if (show && event && event instanceof MouseEvent) {\n // Get valid clicked structureElement\n const clickedElement = (event?.target as HTMLElement)?.closest(this.selectors);\n if (clickedElement) {\n this.clickedElement = clickedElement;\n\n setTimeout(() => {\n // Set display status\n cm.style.display = 'block';\n\n // Calculate top position\n let top = event.y + this.yGap;\n if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {\n top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;\n }\n\n // Calculate left position\n let left = event.x + this.xGap;\n if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {\n left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;\n }\n\n // Set position\n cm.style.top = top + 'px';\n cm.style.left = left + 'px';\n\n // Show\n cm.style.opacity = '1.0';\n cm.style['pointer-events'] = 'auto';\n }, 1);\n\n return;\n }\n }\n\n // Close context menu\n this.clickedElement = null;\n if (this.previousDisplayStatus) {\n cm.style.display = this.previousDisplayStatus;\n }\n cm.style.opacity = '0.01';\n cm.style['pointer-events'] = 'none';\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n/**\n * Stops propagation of click events\n * Inspired by https://stackoverflow.com/a/41001184\n */\n@Directive({\n selector: '[baseStopPropagation]',\n standalone: true,\n})\nexport class StopPropagationDirective {\n @HostListener('click', ['$event'])\n public onClick(event: any): void {\n event.stopPropagation();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Truncate string with ellipses\n */\n@Pipe({\n name: 'baseEllipses',\n standalone: true,\n})\nexport class EllipsesPipe implements PipeTransform {\n transform(value: string, limit: number): string {\n if (!value) {\n return null;\n }\n\n return value.length > limit ? value.substring(0, limit) + '...' : value;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'base-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass\n ]\n})\nexport class InputComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() type = 'text';\n @Input() required = false;\n @Input() eyeButton = false;\n @Input() objectPath = '';\n\n @Output() enter = new EventEmitter();\n\n /**\n * If the control has a value, emit the enter event\n */\n enterEvent() {\n if (this.control?.value) {\n this.enter.emit();\n }\n }\n\n /**\n * Switch input type\n */\n togglePasswordType() {\n if (this.type === 'password') {\n this.type = 'text';\n } else {\n this.type = 'password';\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">{{ label }}</label>\n }\n @if (infoText) {\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\"></i>\n }\n </div>\n <div class=\"input-group\">\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n [attr.data-cy]=\"name\"\n />\n @if (eyeButton) {\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n >\n @if (type === 'password') {\n <i class=\"bi bi-eye\"></i>\n }\n @if (type === 'text') {\n <i class=\"bi bi-eye-slash\"></i>\n }\n </button>\n }\n\n @if (control?.invalid && (control?.dirty || control?.touched)) {\n <div class=\"invalid-feedback m-2\">\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n @if (control?.errors?.['minlength']) {\n <div>\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['maxlength']) {\n <div>\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['email']) {\n <div>Bitte eine gültige E-Mail Adresse angeben.</div>\n }\n @if (control?.errors?.['pattern'] && type === 'tel') {\n <div>Bitte eine gültige Telefonnummer angeben.</div>\n }\n @if (control?.errors?.['invalidEmail']) {\n <div>Bitte eine gültige E-Mail Adresse angeben.</div>\n }\n @if (control?.errors?.['matching']) {\n <div>Die Passwörter müssen überein stimmen.</div>\n }\n @if (control?.errors?.['invalidSecurePassword']) {\n <div>\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein, ein Großbustabe, ein Kleinbuchstabe, eine Zahl\n und ein Sonderzeichen enthalten.\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\ninterface Option {\n text: string;\n value: string | number;\n}\n\n@Component({\n selector: 'base-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n ReactiveFormsModule,\n ]\n})\nexport class SelectComponent implements OnInit {\n @ViewChild('select') select: ElementRef;\n\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() objectPath = '';\n @Input() control: any;\n @Input() tabIndex?: number;\n @Input() required = false;\n @Input() multiple = false;\n @Input() search = false;\n @Input() options: Option[] = [];\n\n ngOnInit() {\n if (this.multiple) {\n this.select.nativeElement.setAttribute('multiple', true);\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">{{ label }}</label>\n }\n @if (infoText) {\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\"></i>\n }\n </div>\n <select\n #select\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [attr.data-live-search]=\"search\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" disabled selected>{{ placeholder }}</option>\n @for (option of options; track option) {\n <option [ngValue]=\"option.value\">\n {{ option.text }}\n </option>\n }\n </select>\n\n @if (control?.invalid && (control?.dirty || control?.touched)) {\n <div class=\"invalid-feedback m-2\">\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n @if (control?.errors?.['minlength']) {\n <div>\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['maxlength']) {\n <div>\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['email']) {\n <div>Bitte eine gültige E-Mail Adresse angeben.</div>\n }\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'base-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgClass\n ]\n})\nexport class CheckboxComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() value: string | number;\n @Input() control: any;\n @Input() required = false;\n @Input() objectPath = '';\n}\n","<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n @if (label) {\n {{ label }}\n }\n <ng-content></ng-content>\n </label>\n\n @if (control?.invalid && (control?.dirty || control?.touched)) {\n <div class=\"invalid-feedback ms-0 m-2\">\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n </div>\n }\n</div>\n","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'base-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n ReactiveFormsModule\n ]\n})\nexport class TextareaComponent implements OnChanges {\n @ViewChild('textarea') textarea: ElementRef;\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() control: any;\n @Input() rows = 5;\n @Input() required = false;\n @Input() autoHeight = true;\n @Input() tabIndex?: number;\n @Input() objectPath = '';\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['control'] && this.autoHeight) {\n setTimeout(() => {\n this.adjustInitHeight();\n }, 350);\n }\n }\n\n adjustInitHeight() {\n if (!this.textarea || !this.autoHeight) {\n return;\n }\n\n this.textarea.nativeElement.style.cssText = 'height:auto;';\n this.textarea.nativeElement.style.cssText = 'height:' + (this.textarea.nativeElement.scrollHeight + 5) + 'px';\n }\n\n adjustHeight(event) {\n if (!this.autoHeight) {\n return;\n }\n\n setTimeout(() => {\n event.target.style.cssText = 'height:auto;';\n // for box-sizing other than \"content-box\" use:\n // el.style.cssText = '-moz-box-sizing:content-box';\n event.target.style.cssText = 'height:' + (event.target.scrollHeight + 5) + 'px';\n }, 0);\n }\n}\n","<div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">{{ label }}</label>\n }\n @if (infoText) {\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\"></i>\n }\n </div>\n\n <textarea\n #textarea\n class=\"form-control\"\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [rows]=\"rows\"\n (input)=\"adjustHeight($event)\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n ></textarea>\n\n @if (control?.invalid && (control?.dirty || control?.touched)) {\n <div class=\"invalid-feedback m-2\">\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n @if (control?.errors?.['minlength']) {\n <div>\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['maxlength']) {\n <div>\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n }\n </div>\n }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule, ValidatorFn } from '@angular/forms';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'base-tags',\n templateUrl: './tags.component.html',\n styleUrls: ['./tags.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n ReactiveFormsModule,\n FormsModule\n ]\n})\nexport class TagsComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() options?: { text: string; value: string }[];\n @Input() custom = true;\n @Input() removeByKey = true;\n @Input() required = false;\n @Input() objectPath = '';\n @Input() validators: ValidatorFn[] = [];\n inputValue = '';\n selectedElement: HTMLElement;\n\n /**\n * Convert id into text field\n */\n getReadableTag(tag: string) {\n if (this.control?.value && this.options) {\n const foundElement = this.options.find((e) => e.value === tag);\n\n if (foundElement) {\n return foundElement.text;\n } else {\n return tag;\n }\n } else {\n return tag;\n }\n }\n\n /**\n * Listen to enter keys\n *\n * @param event\n */\n enterKey(event: any): void {\n this.selectedElement = event.target;\n\n if (this.removeByKey && event.code === 'Backspace' && !this.inputValue) {\n this.removeTag();\n return;\n } else {\n if (event.code === 'Comma' || event.code === 'Space' || event.code === 'Enter') {\n this.addTag(this.inputValue);\n }\n }\n }\n\n /**\n * Add new tag\n *\n * @param tag\n * @param reset\n * @param isOption\n */\n addTag(tag: string, reset = true, isOption = false): void {\n if (tag.endsWith(',') || tag.endsWith(' ')) {\n tag = tag.slice(0, -1);\n }\n\n const temp = new FormControl(tag, this.validators);\n this.control.setErrors({ ...this.control.errors, ...temp.errors });\n\n if (temp.invalid) {\n return;\n }\n\n // Check if user copy string into input\n if (tag.split(' ').length > 1 && !isOption) {\n const tags = tag.split(' ');\n\n for (let i = 0; i < tags.length; i++) {\n this.addTag(tags[i], i + 1 === tags.length);\n }\n\n return;\n }\n\n // Check if user copy string into input\n if (tag.split(',').length > 1 && !isOption) {\n const tags = tag.split(',');\n\n for (let i = 0; i < tags.length; i++) {\n this.addTag(tags[i], i + 1 === tags.length);\n }\n\n return;\n }\n\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.text === tag);\n }\n\n if (!this.custom && !foundOption) {\n return;\n }\n\n this.selectedElement = null;\n\n if (!this.control.value) {\n this.control.setValue([]);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setValue([foundOption.value]);\n if (reset) {\n this.inputValue = '';\n }\n this.control.setErrors(null);\n return;\n }\n\n if (\n tag.length > 0 &&\n this.control.value &&\n !this.control.value.some((item: string) => item === foundOption.value)\n ) {\n this.control.setValue([...this.control.value, foundOption.value]);\n if (reset) {\n this.inputValue = '';\n }\n this.control.setErrors(null);\n }\n\n if (this.control.value.some((item: string) => item === foundOption.value)) {\n if (reset) {\n this.inputValue = '';\n }\n }\n }\n\n /**\n * Remove tag\n *\n * @param tag\n */\n removeTag(tag?: string): void {\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.value === tag);\n }\n\n this.control.markAsTouched();\n if (foundOption) {\n this.control.setValue(this.control.value?.filter((item: string) => item !== foundOption.value));\n } else if (this.control.value) {\n this.control.value.splice(-1);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setErrors({ ...this.control.errors, required: true });\n }\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): { text: string; value: string }[] {\n return this.options\n ? this.options.filter(\n (e) => (!this.inputValue || e?.text?.includes(this.inputValue)) && !this.control.value?.includes(e.value)\n )\n : [];\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.control.setErrors(null);\n this.selectedElement = event.target;\n } else {\n if (this.inputValue) {\n this.addTag(this.inputValue);\n }\n\n this.control.markAsTouched();\n\n setTimeout(() => {\n if (this.options && this.inputValue) {\n if (this.options.find((e) => e.text === this.inputValue)) {\n this.addTag(this.inputValue);\n this.control.setErrors(null);\n } else {\n this.inputValue = '';\n }\n }\n\n if (!this.control.value || this.control.value?.length === 0) {\n this.control.setErrors({ ...this.control.errors, required: true });\n }\n\n this.selectedElement = null;\n }, 250);\n }\n }\n}\n","@if (control) {\n <div class=\"form-group position-relative\">\n <div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">{{ label }}</label>\n }\n @if (infoText) {\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\"></i>\n }\n </div>\n @if (control?.value) {\n <div class=\"tag-wrapper\">\n @for (tag of control?.value; track tag) {\n <div class=\"tag\">\n {{ getReadableTag(tag) }}\n <span (click)=\"removeTag(tag)\" data-cy=\"input-tags-item-remove\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n }\n </div>\n }\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n [attr.data-cy]=\"'input-tags-field'\"\n />\n @if (options && selectedElement) {\n <div class=\"tag-options\">\n @for (option of filterOptions(); track option) {\n <div class=\"tag-option-item\" (click)=\"addTag(option?.text, true, true)\">\n {{ option?.text }}\n </div>\n }\n </div>\n }\n @if (control?.invalid && (control?.dirty || control?.touched)) {\n <div class=\"invalid-feedback m-2\">\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n @if (control?.errors?.['invalidReference'] && inputValue) {\n <div>\n {{ inputValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n }\n @if (control?.errors?.['email']) {\n <div>Bitte gib eine gültige E-Mail Adresse ein.</div>\n }\n </div>\n }\n </div>\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { animate, query, style, transition, trigger } from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { Toast, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\nimport { NgClass } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\nconst toastAnimation = trigger('toastAnimation', [\n transition('* <=> *', [\n query(\n ':enter',\n [style({ transform: 'translateX({{ x }})' }), animate('200ms ease-in', style({ transform: 'translateX(0%)' }))],\n { optional: true },\n ),\n query(':leave', animate('200ms ease-in', style({ transform: 'translateX({{ x }})' })), { optional: true }),\n ]),\n]);\n\n@Component({\n selector: 'base-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [toastAnimation],\n standalone: true,\n imports: [NgClass, BrowserAnimationsModule],\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n toasts: Toast[] = [];\n ToastType = ToastType;\n subscriptions = new Subscription();\n @Input() position: 'top-right' | 'bottom-right' | 'bottom-left' | 'top-left' = 'bottom-right';\n\n constructor(private toastService: ToastService) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n this.toastService.toastsAsObservable.subscribe({\n next: (value) => {\n this.toasts = value;\n },\n }),\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n getDefaultTitle(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Irgendetwas ist schiefgelaufen';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Achtung';\n case ToastType.SUCCESS:\n return 'Erfolgreich';\n }\n }\n\n getDefaultDescription(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Sollte das Problem länger bestehen bleiben, dann wenden Sie sich bitte\\n' + ' an den Support.';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Warning';\n case ToastType.SUCCESS:\n return 'Die Änderungen wurden erfolgreich gespeichert.';\n }\n }\n\n reload() {\n location.reload();\n }\n}\n","<div\n class=\"toast-container position-fixed\"\n [ngClass]=\"position\"\n [@toastAnimation]=\"{ value: toasts.length, params: { x: position.includes('left') ? '-100%' : '100%' } }\"\n >\n @for (toast of toasts; track toast) {\n <div\n class=\"toast show\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [ngClass]=\"toast.type\"\n >\n <div class=\"toast-header\">\n <strong class=\"me-auto\">{{ toast?.title ?? getDefaultTitle(toast) }}</strong>\n <button type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\">\n {{ toast?.description ?? getDefaultDescription(toast) }}\n @if (toast?.errorCode) {\n <div class=\"mt-2\">\n <code>ERROR: {{ toast.errorCode }}</code>\n </div>\n }\n @if (toast.type === ToastType.ERROR) {\n <div class=\"mt-2\">\n <a class=\"color-secondary\" href=\"#\" (click)=\"reload()\">Seite neu laden</a>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { LoaderService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-loading-bar',\n templateUrl: './loading-bar.component.html',\n styleUrls: ['./loading-bar.component.scss'],\n})\nexport class LoadingBarComponent implements OnInit, OnDestroy {\n @Input() manuallyLoading = false;\n loading = false;\n subscription = new Subscription();\n\n constructor(\n private ngZone: NgZone,\n private changeDetectorRef: ChangeDetectorRef,\n private loaderService: LoaderService\n ) {}\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription.add(\n this.loaderService.isLoading.subscribe((value) => {\n this.loading = value;\n this.changeDetectorRef.detectChanges();\n })\n );\n });\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n}\n","@if (loading || manuallyLoading) {\n <div class=\"slider\">\n <div class=\"line\"></div>\n <div class=\"subline inc\"></div>\n <div class=\"subline dec\"></div>\n </div>\n}\n","import { Component, Input } from '@angular/core';\nimport { SkeletonType } from '@lenne.tech/ng-base/shared';\nimport { NgStyle } from '@angular/common';\n\n@Component({\n selector: 'base-skeleton-loader',\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss'],\n standalone: true,\n imports: [\n NgStyle\n ]\n})\nexport class SkeletonLoaderComponent {\n @Input() type!: SkeletonType;\n @Input() count = 1;\n @Input() size = 18;\n\n convertToArray(value): any {\n if (!value) {\n return [];\n }\n const res = [];\n\n for (let i = 0; i < value; i++) {\n res.push(i);\n }\n\n return res;\n }\n}\n","@if (type) {\n @switch (type) {\n @case ('LINE') {\n <div>\n <div class=\"line-loader-wrapper\">\n @for (key of convertToArray(count); track key) {\n <div class=\"line-loader\"></div>\n }\n </div>\n </div>\n }\n @case ('RECTANGLE') {\n <div>\n <div class=\"line-rectangle\" [ngStyle]=\"{ height: size + 'px' }\"></div>\n </div>\n }\n @case ('AVATAR') {\n <div>\n <div class=\"line-avatar\" [ngStyle]=\"{ height: size + 'px', width: size + 'px' }\"></div>\n </div>\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { Breadcrumb, BreadcrumbService } from '@lenne.tech/ng-base/shared';\n\nimport { Observable } from 'rxjs';\nimport { RouterLink } from '@angular/router';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'base-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n standalone: true,\n imports: [\n RouterLink,\n AsyncPipe\n ]\n})\nexport class BreadcrumbComponent {\n breadcrumbs$: Observable<Breadcrumb[]>;\n\n constructor(private readonly breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = breadcrumbService.breadcrumbsObservable;\n }\n}\n","<ul class=\"pt-3\">\n @for (breadcrumb of breadcrumbs$ | async; track breadcrumb) {\n <li>\n <a [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n </li>\n }\n</ul>\n","import { Component, EventEmitter, Input } from '@angular/core';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { RouterLink } from '@angular/router';\n\nexport interface Button {\n icon: string;\n color: string;\n routerLink?: string;\n event?: EventEmitter<boolean>;\n method?: string;\n}\n\n@Component({\n selector: 'base-fab-button',\n templateUrl: './fab-button.component.html',\n styleUrls: ['./fab-button.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n NgStyle,\n RouterLink\n ]\n})\nexport class FabButtonComponent {\n @Input() fabIcon = 'bi-list';\n @Input() buttons: Button[];\n toggle = false;\n}\n","<div class=\"fab-container\" [ngClass]=\"{ 'fab-container-active': toggle }\">\n <div class=\"fab shadow\">\n <div class=\"fab-content\" (click)=\"toggle = !toggle\">\n @if (toggle) {\n <i class=\"bi bi-x-lg\"></i>\n }\n @if (!toggle) {\n <i class=\"bi\" [ngClass]=\"fabIcon\"></i>\n }\n </div>\n </div>\n @for (button of buttons; track button) {\n <div\n class=\"sub-button shadow\"\n (click)=\"button.event.emit(true); toggle = !toggle\"\n [ngStyle]=\"{ backgroundColor: button.color }\"\n >\n <a [routerLink]=\"button.routerLink\">\n <i class=\"bi\" [ngClass]=\"button.icon\"></i>\n </a>\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AuthService,\n CompressOptions,\n CroppingOptions,\n FileService,\n ToastService,\n ToastType\n} from '@lenne.tech/ng-base/shared';\nimport { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper';\nimport { NgClass } from '@angular/common';\nimport { StopPropagationDirective } from '../../directives/stop-propagation.directive';\n\n@Component({\n selector: 'base-upload-image',\n templateUrl: './upload-image.component.html',\n styleUrls: ['./upload-image.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n ImageCropperComponent,\n StopPropagationDirective\n ]\n})\nexport class UploadImageComponent implements OnInit {\n @ViewChild('fileInput') fileInput: ElementRef;\n\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() supportText = 'Supports: JPEG, JPG, PNG';\n @Input() required = false;\n @Input() defaultDragText = 'Drag & Drop';\n @Input() defaultReleaseText = 'Release to Upload';\n @Input() preButtonText = 'or';\n @Input() buttonText = 'browse';\n @Input() validExtensions = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp'];\n @Input() control: any;\n @Input() url = 'http://localhost:3000';\n @Input() uploadPath = '/files/upload';\n @Input() deletePath = '/files/';\n @Input() path = '/files/';\n @Input() compressOptions: CompressOptions;\n @Input() maxSize: number;\n @Input() uploadDirectly = false;\n @Input() croppingImage = false;\n @Input() croppingOptions: CroppingOptions;\n @Input() objectPath: string;\n @Input() mode: 'file' | 'base64' = 'file';\n\n @Output() imageUploaded = new EventEmitter();\n @Output() imageDeleted = new EventEmitter();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null; base64: string | null }>();\n\n dragActive = false;\n dragText = 'Drag & Drop';\n selectedFile: File;\n croppedFile: File;\n fileUrl: string;\n loading = false;\n croppedInProgress = false;\n fileEvent: any;\n cOptions: CroppingOptions;\n\n constructor(\n private httpClient: HttpClient,\n private authService: AuthService,\n private fileService: FileService,\n private toastService: ToastService\n ) {}\n\n ngOnInit() {\n // Set default options for cropping\n this.cOptions = {\n maintainAspectRatio: true,\n aspectRatio: 4 / 3,\n onlyScaleDown: false,\n imageQuality: 92,\n autoCrop: true,\n alignImage: 'center',\n format: 'jpeg',\n ...this.croppingOptions,\n };\n }\n\n /**\n * The dragOver function is called when the user drags a file over the dropzone. It prevents the default action of the\n * event, and sets the dragText to 'Release to Upload' and the dragActive to true\n *\n * @param event - any - This is the event that is triggered when the user drags a file over the dropzone.\n */\n dragOver(event: any) {\n event.preventDefault();\n this.dragText = this.defaultReleaseText;\n this.dragActive = true;\n }\n\n /**\n * When the user drags a file over the drop zone, the dragActive variable is set to true, which will change the color of\n * the drop zone to green\n *\n * @param event - The event object that is passed to the dragLeave event.\n */\n dragLeave(event: any) {\n this.dragText = this.defaultDragText;\n this.dragActive = false;\n }\n\n /**\n * The function takes an event as a parameter, prevents the default action of the event, sets the URL of the image to the\n * file that was dragged and dropped, sets the text of the drag and drop area to the default text, and sets the\n * dragActive variable to false\n *\n * @param event - any - This is the event that is triggered when the user drags and drops a file.\n */\n drop(event: any) {\n event.preventDefault();\n this.fileInput.nativeElement.files = event.dataTransfer.files;\n const e = new Event('change');\n this.fileInput.nativeElement.dispatchEvent(e);\n\n this.dragText = 'Drag & Drop';\n this.dragActive = false;\n }\n\n /**\n * It takes a file as an argument, checks if the file type is valid, and if it is, it creates a new FileReader object,\n * sets the onload function to set the fileUrl to the result of the fileReader, sets the selectedFile to the file, and\n * calls the upload function\n *\n * @param file - any - this is the file that is selected by the user.\n */\n setUrl(file: File) {\n const fileReader = new FileReader();\n fileReader.onload = (result) => {\n this.loading = true;\n this.fileUrl = fileReader.result as string;\n this.selectedFile = file;\n this.upload();\n };\n fileReader.readAsDataURL(file);\n }\n\n checkFile(file: File) {\n if (this.maxSize && file.size > this.maxSize) {\n this.toastService.show(\n {\n id: 'image-invalid-size',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description:\n 'Die Datei ist zu groß. Die Datei darf nicht größer als ' +\n (this.maxSize / (1024 * 1024)).toFixed(2) +\n 'MB sein.',\n },\n 3500\n );\n return false;\n } else {\n if (this.validExtensions.includes(file?.type)) {\n return true;\n } else {\n this.toastService.show(\n {\n id: 'image-invalid-format',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description: 'Das Format der Datei wird nicht unterstützt.',\n },\n 3500\n );\n return false;\n }\n }\n }\n\n /**\n * The function takes an event as an argument, and then sets the url of the file to the first file in the event's\n * target's files array\n *\n * @param event - any - The event that is triggered when the user selects a file.\n */\n selectFile(event: any) {\n if (!this.checkFile(event.target.files[0])) {\n return;\n }\n\n if (this.croppingImage) {\n this.croppedInProgress = true;\n this.fileEvent = event;\n } else {\n this.setUrl(event.target.files[0]);\n }\n }\n\n /**\n * We create a new FormData object, append the selected file to it, and then send it to the server\n */\n async upload() {\n // Prepare file data\n let file = this.selectedFile;\n if (this.compressOptions) {\n file = await this.fileService.compress(file, this.compressOptions);\n }\n const fileData = {\n field: this.objectPath ? this.objectPath + '.' + this.id : this.id,\n file,\n base64: await this.getBase64(file),\n };\n\n // Emit file data\n this.fileChanged.emit(fileData);\n\n // Set control value and upload directly if required\n if (this.uploadDirectly) {\n const result = await this.fileService.upload(this.url, this.uploadPath, this.selectedFile);\n if (result?.id) {\n this.control.setValue(result.id);\n this.imageUploaded.emit(result.id);\n }\n } else {\n this.control.setValue(this.mode === 'base64' ? fileData.base64 : this.selectedFile);\n }\n\n // Final processes\n this.control.markAsTouched();\n this.loading = false;\n }\n\n /**\n * It deletes the file from the server and sets the selectedFile and fileUrl to null\n *\n * @param [id] - The id of the file to delete.\n */\n async deleteFile(id?: string) {\n if (!this.uploadDirectly) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.control.markAsTouched();\n this.fileChanged.emit({\n field: this.objectPath ? this.objectPath + '.' + this.id : this.id,\n file: null,\n base64: null,\n });\n return;\n }\n\n this.loading = true;\n this.selectedFile = null;\n this.fileUrl = null;\n\n if (id) {\n const result = await this.fileService.delete(this.url, this.deletePath, id);\n if (result) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.imageDeleted.emit();\n this.loading = false;\n }\n }\n }\n\n /**\n * Convert a file into a BASE64 encoded string\n */\n protected getBase64(file): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (!file) {\n return resolve(null);\n }\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n if (!reader.result) {\n return reject(new Error('Conversion failed'));\n }\n resolve(reader.result.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n }\n\n base64ToFile(base64: string, fileName: string, fileType: string): Promise<File> {\n return new Promise<File>((resolve, reject) => {\n fetch(base64)\n .then((res) => res.blob())\n .then(\n (blob) => {\n resolve(new File([blob], fileName, { type: fileType }));\n },\n (err) => {\n reject(err);\n }\n );\n });\n }\n\n async imageCropped($event: ImageCroppedEvent, fileEvent: any) {\n const file = fileEvent.target.files[0];\n this.croppedFile = await this.base64ToFile($event.base64, file.name, file.type);\n }\n\n finishedCropping() {\n this.fileEvent = null;\n this.setUrl(this.croppedFile);\n this.croppedInProgress = false;\n this.croppedFile = null;\n }\n\n loadImageFailed() {\n this.toastService.show(\n {\n id: 'image-invalid-cropped',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description:\n 'Es ist ein Fehler aufgetreten. Bitte probieren Sie es später erneut oder wenden Sie sich an den Support.',\n },\n 3500\n );\n }\n}\n","<div class=\"form-group mt-3\" [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\">\n <div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">{{ label }}</label>\n }\n @if (infoText) {\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\"></i>\n }\n </div>\n\n <div\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n class=\"drag-area\"\n (dragover)=\"dragOver($event)\"\n (dragleave)=\"dragLeave($event)\"\n (drop)=\"drop($event)\"\n [ngClass]=\"{ active: dragActive, pointer: !loading, 'is-invalid': control?.invalid && control?.touched }\"\n (click)=\"!croppedInProgress && !loading && fileInput.click()\"\n >\n @if (loading) {\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n }\n\n @if (selectedFile && !fileEvent && !croppedInProgress && !loading) {\n @if (selectedFile) {\n <img [src]=\"fileUrl\" />\n }\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile()\" baseStopPropagation>Löschen</button>\n }\n\n @if (control?.value && !fileEvent && !selectedFile && !loading && !croppedInProgress) {\n <img [src]=\"control?.value.startsWith('data:') ? control?.value : url + path + control?.value\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile(control?.value)\" baseStopPropagation>\n Löschen\n </button>\n }\n\n @if (!selectedFile && !control?.value && !loading && !fileEvent) {\n <div class=\"icon\">\n <i class=\"bi bi-images\"></i>\n </div>\n <span class=\"header\">{{ dragText }}</span>\n <span class=\"header\"\n >{{ preButtonText }}\n <span class=\"button\" (click)=\"fileInput.click()\" baseStopPropagation>{{ buttonText }}</span></span\n >\n <span class=\"support\" [innerText]=\"supportText\"></span>\n }\n\n <input type=\"file\" (change)=\"selectFile($event)\" [attr.accept]=\"validExtensions?.join(',')\" hidden #fileInput />\n\n @if (croppedInProgress && fileEvent) {\n <image-cropper\n [imageChangedEvent]=\"fileEvent\"\n [maintainAspectRatio]=\"cOptions.maintainAspectRatio\"\n [aspectRatio]=\"cOptions.aspectRatio\"\n [alignImage]=\"cOptions.alignImage\"\n [resizeToWidth]=\"cOptions.resizeToWidth\"\n [resizeToHeight]=\"cOptions.resizeToHeight\"\n [autoCrop]=\"cOptions.autoCrop\"\n [imageQuality]=\"cOptions.imageQuality\"\n [onlyScaleDown]=\"cOptions.onlyScaleDown\"\n [format]=\"cOptions.format\"\n (imageCropped)=\"imageCropped($event, fileEvent)\"\n (loadImageFailed)=\"loadImageFailed()\"\n ></image-cropper>\n <button class=\"btn btn-primary mt-2\" type=\"button\" (click)=\"finishedCropping()\" baseStopPropagation>\n Zuschneiden\n </button>\n }\n </div>\n\n @if (control?.invalid && (control?.dirty || control?.touched)) {\n <div class=\"invalid-feedback m-2\">\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n </div>\n }\n </div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { GraphQLRequestType, GraphQLService, SortOrderEnum } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { NgClass } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TagsComponent } from '../tags/tags.component';\n\n@Component({\n selector: 'base-refence-input',\n templateUrl: './refence-input.component.html',\n styleUrls: ['./refence-input.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n ReactiveFormsModule,\n FormsModule,\n TagsComponent\n ]\n})\nexport class RefenceInputComponent implements OnInit, OnDestroy {\n @Input() id: string;\n @Input() name: string;\n @Input() infoText: string;\n @Input() label?: string;\n @Input() isList = false;\n @Input() search = true;\n @Input() useParamAsArg = false;\n @Input() param: string;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() required = false;\n @Input() method = 'find';\n @Input() fields = ['id', 'name'];\n @Input() valueField = 'id';\n @Input() objectPath = '';\n @Input() nameField: string[] | string = 'name';\n @Input() creationLink = '';\n objects: any[] = [];\n currentValue: any;\n optionsForTagInput = [];\n selectedElement: HTMLElement;\n subscription = new Subscription();\n\n constructor(private graphQLService: GraphQLService, private router: Router) {}\n\n async ngOnInit() {\n this.getReferences();\n\n this.subscription.add(\n this.control.valueChanges.subscribe(() => {\n if (!this.currentValue) {\n this.setValue();\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Open creation link for new reference if enabled\n */\n openLink() {\n this.router.navigate([this.creationLink]);\n }\n\n /**\n * It gets the references from the GraphQL server and sets the value of the select\n */\n getReferences() {\n const fields = [...this.fields];\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!fields.includes(field)) {\n fields.push(field);\n }\n }\n } else {\n if (!fields.includes(this.nameField)) {\n fields.push(this.nameField);\n }\n }\n\n let args;\n if (!this.useParamAsArg) {\n args = { sort: [{ field: fields.includes('name') ? 'name' : fields[0], order: SortOrderEnum.ASC }] };\n } else {\n args = {\n id: this.param,\n sort: [{ field: fields.includes('name') ? 'name' : fields[0], order: SortOrderEnum.ASC }],\n };\n }\n\n this.graphQLService\n .graphQl(this.method, {\n fields,\n arguments: args,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe(async (result) => {\n if (result) {\n this.objects = result;\n this.setObjectsAsOptions();\n\n if (!this.currentValue) {\n this.setValue();\n }\n }\n });\n }\n\n /**\n * If the current value is not valid, set the control to an invalid state\n */\n checkValidReference() {\n if (!this.currentValue) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue('');\n this.control.setErrors(null);\n return;\n }\n\n const foundElement = this.objects.find((e) => this.checkForNameFields(e));\n if (!foundElement) {\n this.control.setValue(null);\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setErrors({ invalidReference: true });\n } else {\n this.control.setErrors(null);\n }\n }\n\n /**\n * If the user presses the enter key, mark the control as touched\n */\n enterKey(event) {\n this.selectedElement = event.target;\n this.control.markAsTouched();\n }\n\n /**\n * If the control has a value and the objects array is not empty, then find the object in the array that has the same\n * value as the control's value and set the currentValue to the textField of that object. If the control has a value but\n * the objects array is empty, then set the currentValue to the control's value\n */\n setValue() {\n if (this.control?.value && this.objects?.length > 0) {\n if (this.control?.value?.id) {\n this.control.setValue(this.control.value.id);\n }\n\n const foundElement = this.objects.find((e) => e[this.valueField] === this.control.value);\n if (foundElement) {\n this.currentValue = this.prepareNameField(foundElement);\n }\n }\n }\n\n /**\n * It sets the value of the control to the id of the selected option\n */\n set(id: string) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue(id);\n this.setValue();\n this.selectedElement = null;\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): any[] {\n return this.objects\n ? this.objects.filter(\n (e) => (!this.currentValue || this.checkForNameFields(e)) && !this.control?.value?.includes(e?.value)\n )\n : [];\n }\n\n /**\n * It takes an array of objects and returns an array of objects with the text and value fields specified\n */\n setObjectsAsOptions() {\n this.optionsForTagInput = this.objects.map((e) => {\n return {\n text: this.prepareNameField(e),\n value: e[this.valueField],\n };\n });\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.selectedElement = event.target;\n } else {\n this.checkValidReference();\n setTimeout(() => {\n this.selectedElement = null;\n }, 250);\n }\n }\n\n /**\n * Prepare string function if name fields is an array\n */\n prepareNameField(object: any) {\n let result;\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!result) {\n result = object[field];\n } else if (object[field]) {\n result = result + ' ' + object[field];\n }\n }\n } else {\n result = object[this.nameField];\n }\n\n return result;\n }\n\n /**\n * Check function if name fields is an array\n */\n checkForNameFields(object: any) {\n if (Array.isArray(this.nameField)) {\n let result = false;\n\n for (const field of this.nameField) {\n const check = object[field].includes(this.currentValue);\n if (check) {\n result = check;\n }\n }\n\n return result;\n } else {\n return object[this.nameField]?.includes(this.currentValue);\n }\n }\n}\n","@if (!isList) {\n <div class=\"form-group mb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">{{ label }}</label>\n }\n @if (infoText) {\n <i class=\"bi bi-info-circle\" [ngbTooltip]=\"infoText\" placement=\"start\"></i>\n }\n </div>\n @if (search) {\n <div class=\"position-relative\">\n <div class=\"d-flex flex-row\">\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-control\"\n [(ngModel)]=\"currentValue\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (keyup)=\"enterKey($event)\"\n />\n @if (creationLink) {\n <button class=\"btn btn-primary\" (click)=\"openLink()\">Erstellen</button>\n }\n </div>\n @if (objects && selectedElement) {\n <div class=\"options\">\n @for (object of filterOptions(); track object) {\n <div class=\"option-item\" (click)=\"set(object[valueField])\">\n {{ prepareNameField(object) }}\n </div>\n }\n </div>\n }\n </div>\n }\n @if (!search) {\n <div>\n <div class=\"d-flex flex-row\">\n <select\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" selected>{{ placeholder }}</option>\n @for (object of objects; track object) {\n <option [ngValue]=\"object[valueField]\">\n {{ prepareNameField(object) }}\n </option>\n }\n </select>\n @if (creationLink) {\n <button class=\"btn btn-primary\" (click)=\"openLink()\">Erstellen</button>\n }\n </div>\n </div>\n }\n @if (control?.invalid && (control?.dirty || control?.touched) && !selectedElement) {\n <div\n class=\"d-block invalid-feedback m-2\"\n >\n @if (control?.errors?.['required']) {\n <div>Dieses Feld ist ein Pflichtfeld.</div>\n }\n @if (control?.errors?.['invalidReference'] && currentValue) {\n <div>\n {{ currentValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n }\n @if (control?.errors?.['minlength']) {\n <div>\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['maxlength']) {\n <div>\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n }\n @if (control?.errors?.['email']) {\n <div>Bitte eine gültige E-Mail Adresse angeben.</div>\n }\n @if (control?.errors?.['matching']) {\n <div>Die Passwörter müssen überein stimmen.</div>\n }\n </div>\n }\n </div>\n}\n\n@if (isList) {\n <base-tags\n [id]=\"id\"\n [label]=\"label\"\n [name]=\"name\"\n [control]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [custom]=\"false\"\n [options]=\"optionsForTagInput\"\n ></base-tags>\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { AuthService, BasicUser, CMSFieldConfig, GraphQLType } from '@lenne.tech/ng-base/shared';\nimport { InputComponent } from '../input/input.component';\nimport { SelectComponent } from '../select/select.component';\nimport { TagsComponent } from '../tags/tags.component';\nimport { UploadImageComponent } from '../upload-image/upload-image.component';\nimport { RefenceInputComponent } from '../refence-input/refence-input.component';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\nimport { TextareaComponent } from '../textarea/textarea.component';\n\n@Component({\n selector: 'base-model-form-sub',\n templateUrl: './model-form-sub.component.html',\n styleUrls: ['./model-form-sub.component.scss'],\n standalone: true,\n imports: [\n InputComponent,\n SelectComponent,\n TagsComponent,\n UploadImageComponent,\n RefenceInputComponent,\n CheckboxComponent,\n TextareaComponent\n ]\n})\nexport class ModelFormSubComponent implements OnInit {\n @Input() id: string;\n @Input() parentKey: string;\n @Input() fields: Record<string, GraphQLType>;\n @Input() form: any;\n @Input() config: { [key: string]: CMSFieldConfig };\n\n @Output() imageChanged = new EventEmitter<string>();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null; base64: string | null }>();\n\n keys: string[] = [];\n user: BasicUser;\n objectPath: string;\n\n constructor(private authService: AuthService) {}\n\n ngOnInit(): void {\n // Get keys\n const unsortedKeys = Object.keys(this.fields);\n\n // Sort keys by config order\n this.keys = unsortedKeys.sort((a, b) => {\n return (\n (this.config[a]?.order ? this.config[a]?.order : 99) - (this.config[b]?.order ? this.config[b]?.order : 99)\n );\n });\n\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n\n if (this.parentKey) {\n if (!this.objectPath) {\n this.objectPath = this.parentKey;\n } else {\n this.objectPath = this.objectPath + '.' + this.parentKey;\n }\n }\n }\n\n /**\n * If the field has fields, return true, otherwise return false.\n */\n checkFieldHasFields(field: GraphQLType) {\n return Object.keys(field.fields)?.length !== 0;\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the new string\n *\n * @param value - The string that you want to capitalize the first letter of.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n /**\n * It takes an array of values and returns an array of objects with a value and text property\n *\n * @param values - any[] - the array of values that you want to convert to a selectable list\n * @param config\n * @returns An array of objects with a value and text property.\n */\n prepareEnumForSelect(values: any[], config = {}) {\n return values\n .filter((i) => {\n return !(config && config[i]?.roles && !this.user.hasAllRoles(config[i]?.roles));\n })\n .map((e) => {\n return {\n value: e,\n text: config && config[e]?.text ? config[e].text : e,\n };\n });\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n}\n","@for (key of keys; track key) {\n <div class=\"mt-3\">\n @if (checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)) {\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [parentKey]=\"key\"\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n (imageChanged)=\"imageChanged.emit($event)\"\n (fileChanged)=\"fileChanged.emit($event)\"\n ></base-model-form-sub>\n </fieldset>\n }\n @if (!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)) {\n @if (fields[key]?.isEnum && !config[key]?.exclude) {\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert auswählen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n [objectPath]=\"objectPath\"\n ></base-select>\n }\n @if (!fields[key]?.isEnum && !config[key]?.exclude) {\n @switch (config[key]?.type ? config[key]?.type : fields[key]?.type) {\n @case ('String') {\n @if (fields[key]?.isList && !config[key]?.exclude) {\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [validators]=\"config[key]?.validators\"\n [objectPath]=\"objectPath\"\n ></base-tags>\n }\n @if (!fields[key]?.isList && !config[key]?.exclude) {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n }\n @case ('Image') {\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterstützte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [croppingOptions]=\"config[key]?.croppingOptions\"\n [croppingImage]=\"config[key]?.croppingImage\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n [objectPath]=\"objectPath\"\n [mode]=\"config[key]?.imageMode || 'base64'\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n }\n @case ('Upload') {\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [supportText]=\"config[key]?.supportText || 'Unterstützte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [objectPath]=\"objectPath\"\n [mode]=\"'file'\"\n ></base-upload-image>\n }\n @case ('Reference') {\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [isList]=\"fields[key]?.isList\"\n [useParamAsArg]=\"config[key]?.useParamAsArg ?? false\"\n [param]=\"id\"\n [search]=\"config[key]?.searchable ?? true\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert auswählen'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.requestFields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [creationLink]=\"config[key]?.creationLink || ''\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-refence-input>\n }\n @case ('Boolean') {\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-checkbox>\n }\n @case ('LongText') {\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-textarea>\n }\n @case ('Float') {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n @case ('Password') {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n @case ('Color') {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n @case ('URL') {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n @case ('Email') {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n @case ('DateTime') {\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [infoText]=\"config[key]?.infoText ? config[key].infoText : null\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [objectPath]=\"objectPath\"\n ></base-input>\n }\n }\n }\n }\n </div>\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n AuthService,\n BasicUser,\n CMSFieldConfig,\n CmsService,\n FileService,\n FormsService,\n fullEmail,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n GraphQLType,\n IGraphQLTypeCollection,\n ToastService,\n ToastType\n} from '@lenne.tech/ng-base/shared';\nimport { AbstractControl, ReactiveFormsModule, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { Button, FabButtonComponent } from '../fab-button/fab-button.component';\nimport { ModelFormSubComponent } from '../model-form-sub/model-form-sub.component';\nimport { NgClass } from '@angular/common';\n\n/**\n * ModelFormComponent\n *\n * Hint for handling extensions of this component in project:\n * If you want to use complete custom services and methods, extend ModelFormBaseComponent instead of ModelFormComponent\n */\n@Component({\n selector: 'base-model-form',\n templateUrl: './model-form.component.html',\n styleUrls: ['./model-form.component.scss'],\n standalone: true,\n imports: [\n RouterLink,\n ReactiveFormsModule,\n ModelFormSubComponent,\n NgClass,\n FabButtonComponent\n ]\n})\nexport class ModelFormComponent implements OnInit, OnChanges {\n @Input() modelName: string;\n @Input() label: string;\n @Input() id: string | null;\n @Input() delete = true;\n @Input() onlyUpdateMode = false;\n @Input() duplicate = false;\n @Input() logging = false;\n @Input() config: { [key: string]: CMSFieldConfig };\n @Input() showFavButton = true;\n\n @Output() finished = new EventEmitter();\n\n meta: GraphQLMeta;\n form: UntypedFormGroup;\n _loading = false;\n fields: Record<string, GraphQLType>;\n operation: string;\n keys: string[] = [];\n user: BasicUser;\n object: any;\n fabButtons: Button[] = [];\n fileChanges: [{ field: string; file: File | null }];\n\n set loading(value: boolean) {\n if (!value) {\n setTimeout(() => {\n this._loading = value;\n }, 400);\n } else {\n this._loading = value;\n }\n }\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private formsService: FormsService,\n private authService: AuthService,\n private router: Router,\n private route: ActivatedRoute,\n private cmsService: CmsService,\n private toastService: ToastService,\n private fileService: FileService\n ) {}\n\n ngOnInit(): void {\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n });\n\n this.initFabActions();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Reinit form for new model or load and patch form with new id\n if (changes['modelName'] || changes['id']) {\n this.init();\n }\n }\n\n /**\n * > If the model name and metadata are present, set the operation to update or create, get the fields from the\n * metadata, create the form, and if the value is present, patch the form with the value\n */\n init(id?: string) {\n if (id) {\n this.id = id;\n }\n\n if (!this.id && this.onlyUpdateMode) {\n return;\n }\n\n if (this.modelName && this.meta) {\n this.operation = this.id ? 'update' : 'create';\n\n if (this.logging) {\n console.log('ModelFormComponent::init->operation', this.operation);\n console.log(\n 'ModelFormComponent::init->meta.getArgs',\n this.operation + this.capitalizeFirstLetter(this.modelName)\n );\n }\n\n this.fields = this.meta.getArgs(this.operation + this.capitalizeFirstLetter(this.modelName), {\n type: GraphQLRequestType.MUTATION,\n }).fields;\n this.fields = this.fields['input'].fields as any;\n this.keys = Object.keys(this.fields);\n\n if (this.logging) {\n console.log('ModelFormComponent::init->id', this.id);\n console.log('ModelFormComponent::init->fields', this.fields);\n console.log('ModelFormComponent::init->keys', this.keys);\n }\n\n this.form = this.createForm(this.fields);\n\n if (this.id) {\n this.getObjectById(this.id);\n }\n }\n }\n\n /**\n * It takes a key as an argument, and returns an array of keys from the sub-object\n */\n getKeysFromSubObject(key: string) {\n return Object.keys(this.fields[key]);\n }\n\n /**\n * It takes an id, and then calls the graphQLService to get the object from the database\n *\n * @param id - The id of the object to be loaded\n */\n getObjectById(id: string) {\n if (!id) {\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->id', id);\n console.log('ModelFormComponent::getObjectById->requestFields', this.createRequestObject(this.fields));\n }\n\n this.graphQLService\n .graphQl('get' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id },\n fields: this.createRequestObject(this.fields),\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (response) => {\n if (this.logging) {\n console.log('ModelFormComponent::get->value', response);\n }\n\n this.object = response;\n this.form.patchValue({ ...{}, ...response });\n\n // Process patchFields for reference input\n for (const [key, value] of Object.entries(this.fields)) {\n if (\n this.nestedObject(key, this.fields)?.type === 'DateTime' ||\n this.nestedObject(key, this.config)?.type === 'DateTime'\n ) {\n this.form.get(key).patchValue(this.formatDate(this.nestedObject(key, response)));\n }\n\n // If it not an array\n if (\n this.nestedObject(key, this.config)?.type === 'Reference' &&\n !this.nestedObject(key, this.fields)?.isList\n ) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(\n response[\n this.nestedObject(key, this.config)?.patchField\n ? this.nestedObject(key, this.config)?.patchField\n : key\n ]?.id\n );\n }\n }\n\n // If value is an array\n if (\n this.nestedObject(key, this.config)?.type === 'Reference' &&\n this.nestedObject(key, this.fields)?.isList\n ) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(\n response[\n this.nestedObject(key, this.config)?.patchField\n ? this.nestedObject(key, this.config)?.patchField\n : key\n ]?.map((e) => e?.id)\n );\n }\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->patchedForm', this.form);\n }\n },\n error: (err) => {\n console.error('Error on load object', err);\n this.finished.emit(null);\n },\n });\n }\n\n /**\n * It takes a GraphQL type collection and returns an array of strings and objects\n *\n * @param fields - IGraphQLTypeCollection - This is the object that is returned from the\n * introspection query.\n * @returns An array of strings and objects.\n */\n createRequestObject(fields: IGraphQLTypeCollection) {\n const requestFields: any = [];\n\n for (const [key, value] of Object.entries(fields)) {\n if (this.config[key]?.exclude !== undefined && this.config[key]?.exclude) {\n continue;\n }\n\n if (Object.keys(fields[key]?.fields)?.length === 0) {\n if (this.config[key]?.type !== 'Reference') {\n requestFields.push(key);\n } else {\n requestFields.push({ [this.config[key]?.patchField ? this.config[key]?.patchField : key]: ['id'] });\n }\n } else {\n const subkeys = this.createRequestObject(fields[key].fields as IGraphQLTypeCollection);\n const resultObject = {};\n resultObject[key] = subkeys;\n requestFields.push(resultObject);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createRequestObject->requestFields', requestFields);\n }\n\n return requestFields;\n }\n\n /**\n * It takes a collection of GraphQL types and creates a form group with a form control for each type\n *\n * @param fields - IGraphQLTypeCollection\n * @param parents\n */\n createForm(fields: IGraphQLTypeCollection, parents: any[] = []) {\n const group: any = {};\n let internParents = [...[], ...parents];\n\n for (const [key, value] of Object.entries(fields)) {\n if (Object.keys(value?.fields)?.length === 0) {\n group[key] = new UntypedFormControl(\n null,\n this.processValidators(\n this.nestedObject(internParents.length ? internParents.join('.') + '.' + key : key, this.config),\n value\n )\n );\n } else {\n internParents.push(key);\n group[key] = this.createForm(fields[key].fields as IGraphQLTypeCollection, internParents);\n internParents = [];\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createForm->group', group);\n }\n\n return new UntypedFormGroup(group);\n }\n\n /**\n * Process form validators for control\n */\n processValidators(config: any, value: IGraphQLTypeCollection | GraphQLType) {\n const validators = [];\n\n if (config) {\n if (config?.required !== undefined ? config?.required : value.isRequired) {\n validators.push(Validators.required);\n }\n\n if (config?.type === 'Email') {\n validators.push(fullEmail());\n }\n\n if (config?.type === 'Password') {\n validators.push(Validators.minLength(6));\n }\n\n if (typeof config?.min === 'number') {\n validators.push(Validators.min(config.min));\n }\n\n if (typeof config?.max === 'number') {\n validators.push(Validators.max(config.max));\n }\n\n if (Array.isArray(config?.validators)) {\n validators.push(...config?.validators);\n }\n }\n\n return validators;\n }\n\n /**\n * It calls the graphQLService to delete the object with the id of the object that is currently being edited\n */\n deleteObject() {\n this.cmsService.deleteObject(this.id, this.modelName).then(() => {\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich gelöscht.',\n });\n this.finished.emit(null);\n });\n }\n\n /**\n * It sends a GraphQL mutation to the server to duplicate the object\n */\n async duplicateObject() {\n this.cmsService.duplicateObject(this.id, this.modelName).then(async (value) => {\n if (value?.id) {\n await this.router.navigate(['../'], { relativeTo: this.route });\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich dupliziert.',\n });\n } else {\n this.finished.emit(null);\n }\n });\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n *\n * @param value - The string to capitalize.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n\n /**\n * It takes the key of the form control that has changed, gets the value of that form control, creates an object with the\n * key and value, and then sends that object to the GraphQL server to update the database\n */\n imageChanged(key: string) {\n const data = {};\n data[key] = this.form.get(key).value;\n\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->body', data);\n }\n\n if (this.id) {\n try {\n this.graphQLService\n .graphQl('update' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id: this.id, input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->success', value);\n }\n },\n });\n } catch (e) {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->error', e);\n }\n }\n }\n }\n\n /**\n * It takes the form, validates it, and then sends it to the GraphQL server\n *\n * @returns The id of the newly created or updated object.\n */\n submit(secret = false) {\n return new Promise(async (resolve, reject) => {\n if (!secret) {\n this.loading = true;\n }\n\n if (this.form.invalid && !secret) {\n this.formsService.validateAllFormFields(this.form as any);\n this.formsService.scrollToInvalidControl(this.form);\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.operation === 'update' && !this.id) {\n console.error('ID is missing for update!');\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->formValue', this.form.value);\n }\n\n // Prepare data for server request\n let data = Object.assign({}, this.form.value);\n data = this.prepareDataForRequest(this.config, this.fields, data);\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->valueToGraphql', data);\n console.log('ModelFormComponent::submit->fileChanges', this.fileChanges);\n }\n\n if (this.fileChanges?.length) {\n for (const fileChange of this.fileChanges) {\n const key = fileChange.field;\n const config = this.nestedObject(key, this.config);\n\n if (fileChange.file) {\n // Upload\n const value = this.form.get(key).value;\n\n // Check if file is an ID or a base64 string\n if (typeof value === 'string') {\n // Delete if ID\n if (!this.form.get(key).value?.startsWith('data:')) {\n const deleteResult = await this.fileService.delete(\n this.nestedObject(key, this.config)?.url,\n this.nestedObject(key, this.config)?.deletePath || '/files/',\n this.nestedObject(key, this.object)\n );\n\n if (deleteResult) {\n this.nestedObject(key, data, '');\n }\n }\n\n const uploadResult = await this.fileService.upload(\n this.nestedObject(key, this.config)?.url,\n this.nestedObject(key, this.config)?.uploadPath || '/files/upload',\n fileChange.file\n );\n\n if (uploadResult?.id) {\n this.nestedObject(key, data, uploadResult.id);\n }\n } else if (config?.imageMode && config?.imageMode !== 'file') {\n // Delete\n const result = await this.fileService.delete(\n config?.url,\n this.nestedObject(key, this.config)?.deletePath || '/files/',\n this.nestedObject(key, this.object)\n );\n\n if (result) {\n this.nestedObject(key, data, '');\n }\n }\n }\n }\n }\n\n this.graphQLService\n .graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {\n arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (!secret) {\n this.loading = false;\n this.finished.emit(null);\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description:\n this.label + ' wurde erfolgreich ' + (this.operation === 'create' ? 'erstellt.' : 'aktualisiert.'),\n });\n }\n\n resolve(value);\n },\n error: (err) => {\n if (!secret) {\n console.error('Failed on ' + this.operation, err);\n this.loading = false;\n\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.ERROR,\n description:\n 'Beim ' +\n (this.operation === 'create' ? 'erstellen' : 'aktualisieren') +\n ' von ' +\n this.label +\n ' ist etwas schiefgelaufen.',\n });\n }\n\n reject();\n },\n });\n });\n }\n\n /**\n * Prepare data for server\n */\n prepareDataForRequest(config, fieldsConfig, data) {\n if (!data) {\n return data;\n }\n\n for (const [key, value] of Object.entries(data)) {\n if ((this.fields[key]?.type === 'DateTime' || this.config[key]?.type === 'DateTime') && value === '') {\n data[key] = null;\n continue;\n }\n\n if ((config[key]?.roles ? !this.user.hasAllRoles(config[key]?.roles) : false) || config[key]?.exclude) {\n delete data[key];\n continue;\n }\n\n if (value && typeof value === 'object' && !Array.isArray(value) && this.fields[key]?.type !== 'Upload') {\n data[key] = Object.keys(data[key])\n .filter((k) => data[key][k] != null)\n .reduce((a, k) => ({ ...a, [k]: data[key][k] }), {});\n\n if (Object.keys(data[key])?.length === 0) {\n if (this.logging) {\n console.log('Object is empty from result');\n }\n data[key] = null;\n }\n }\n\n // Set type for graphql method\n if (fieldsConfig[key]?.type === 'Float') {\n if (value) {\n data[key] = Number(value);\n } else {\n data[key] = null;\n }\n }\n\n if (fieldsConfig[key]?.fields && Object.keys(fieldsConfig[key]?.fields).length > 0) {\n data[key] = this.prepareDataForRequest(config[key]?.fields, fieldsConfig[key]?.fields, data[key]);\n }\n }\n\n return data;\n }\n\n /**\n * Init fab buttons for mobile devices\n */\n initFabActions() {\n const saveEvent = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-check-lg', color: 'var(--bs-success)', event: saveEvent });\n saveEvent.subscribe(() => this.submit(false));\n\n if (this.duplicate && this.operation === 'update') {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });\n event.subscribe(() => this.duplicateObject());\n }\n\n if (this.operation === 'update' && this.delete) {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });\n event.subscribe(() => this.deleteObject());\n }\n }\n\n /**\n * Set file changes for process\n */\n processFileChanges(event: { field: string; file: File | null; base64: string | null }) {\n const index = this.fileChanges?.findIndex((e) => e.field === event.field);\n\n if (index !== undefined && index !== -1) {\n this.fileChanges[index] = event;\n } else if (this.fileChanges) {\n this.fileChanges.push(event);\n } else {\n this.fileChanges = [event];\n }\n }\n\n private formatDate(date) {\n if (!date) {\n return null;\n }\n const newDate = new Date(date);\n return newDate.toISOString().substring(0, 16);\n }\n\n private nestedObject(key: string, nestedObject: any, value?: any) {\n const props = key.split('.');\n let result: any = nestedObject;\n\n for (let i = 0; i < props.length; i++) {\n if (value && i === props.length - 1) {\n result[props[i]] = value;\n return result[props[i]];\n }\n\n result =\n result[props[i]]?.fields && Object.keys(result[props[i]]?.fields)?.length > 0\n ? result[props[i]]?.fields\n : result[props[i]];\n }\n\n return result;\n }\n}\n","@if (form) {\n <div class=\"w-100\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n @if (id && duplicate && !_loading) {\n <button class=\"btn btn-outline-primary me-2\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n }\n @if (!_loading) {\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n }\n @if (_loading) {\n <button class=\"btn btn-primary\" type=\"button\" disabled>\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n }\n </div>\n </div>\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [id]=\"id\"\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n (fileChanged)=\"processFileChanges($event)\"\n ></base-model-form-sub>\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n @if (id && delete) {\n <div>\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">Löschen</button>\n </div>\n }\n <div>\n @if (!_loading) {\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n }\n @if (_loading) {\n <button class=\"btn btn-primary\" type=\"button\" disabled>\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n }\n </div>\n </div>\n </form>\n</div>\n}\n\n@if (showFavButton) {\n <div class=\"d-block d-lg-none responsive-action-button\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n </div>\n}\n","import { CMSFieldConfig, CmsService, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { Button } from '../fab-button/fab-button.component';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n/**\n * Abstract Component for inputs and outputs only\n *\n * Hint for handling extensions of this component in project:\n * If you want to use complete custom services and methods, extend ModelFormComponent instead of ModelFormBaseComponent\n */\n@Component({\n template: '',\n standalone: true,\n})\nexport abstract class ModelFormBaseComponent implements OnInit {\n @Input() modelName: string;\n @Input() label: string;\n @Input() id: string | null;\n @Input() delete = true;\n @Input() onlyUpdateMode = false;\n @Input() duplicate = false;\n @Input() logging = false;\n @Input() config: { [key: string]: CMSFieldConfig } = null;\n @Input() showFavButton = true;\n\n @Output() finished = new EventEmitter();\n\n fabButtons: Button[] = [];\n operation: string;\n\n protected constructor(\n protected cmsService: CmsService,\n protected toastService: ToastService,\n protected router: Router,\n protected route: ActivatedRoute\n ) {}\n\n ngOnInit() {\n this.initFabActions();\n }\n\n /**\n * Init fab buttons for mobile devices\n */\n initFabActions() {\n const saveEvent = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-check-lg', color: 'var(--bs-success)', event: saveEvent });\n saveEvent.subscribe(() => this.submit());\n\n if (this.duplicate && this.operation === 'update') {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });\n event.subscribe(() => this.duplicateObject());\n }\n\n if (this.operation === 'update' && this.delete) {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });\n event.subscribe(() => this.deleteObject());\n }\n }\n\n submit() {}\n\n /**\n * It calls the graphQLService to delete the object with the id of the object that is currently being edited\n */\n deleteObject() {\n this.cmsService.deleteObject(this.id, this.modelName).then(() => {\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich gelöscht.',\n });\n this.finished.emit(null);\n });\n }\n\n /**\n * It sends a GraphQL mutation to the server to duplicate the object\n */\n async duplicateObject() {\n this.cmsService.duplicateObject(this.id, this.modelName).then(async (value) => {\n if (value?.id) {\n await this.router.navigate(['../'], { relativeTo: this.route });\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich dupliziert.',\n });\n } else {\n this.finished.emit(null);\n }\n });\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n *\n * @param value - The string to capitalize.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n\n formatDate(date) {\n if (!date) {\n return null;\n }\n const newDate = new Date(date);\n return newDate.toISOString().substring(0, 16);\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n CMSFieldConfig,\n CMSModelConfig,\n CmsService,\n CMSTableField,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n GraphQLType,\n ScrollService,\n StorageService,\n ToastService,\n ToastType\n} from '@lenne.tech/ng-base/shared';\nimport { FormControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DatePipe, NgClass } from '@angular/common';\nimport { SelectComponent } from '../select/select.component';\nimport { ContextMenuDirective } from '../../directives/context-menu.directive';\nimport { SortDirective } from '../../directives/sort.directive';\nimport { EllipsesPipe } from '../../pipes/ellipses.pipe';\nimport { ModelFormComponent } from '../model-form/model-form.component';\nimport { FabButtonComponent } from '../fab-button/fab-button.component';\n\n@Component({\n selector: 'base-model-table',\n templateUrl: './model-table.component.html',\n styleUrls: ['./model-table.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n SelectComponent,\n ContextMenuDirective,\n SortDirective,\n DatePipe,\n EllipsesPipe,\n ModelFormComponent,\n FabButtonComponent,\n ]\n})\nexport class ModelTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @Input() modelName: string;\n @Input() objectId: string;\n @Input() createMode = false;\n @Input() logging = false;\n @Input() create = true;\n @Input() update = true;\n @Input() delete = true;\n @Input() import = true;\n @Input() export = true;\n @Input() duplicate = true;\n @Input() modelConfig: CMSModelConfig = null;\n @Input() config: { [key: string]: CMSFieldConfig };\n @Input() showFavButton = false;\n\n @Output() idSelected = new EventEmitter<string>();\n @Output() createModeChanged = new EventEmitter<boolean>();\n\n @ViewChild('customFormTemplate', { read: ViewContainerRef }) customFormTemplate: ViewContainerRef;\n\n uniqueField = 'id';\n tableFields: CMSTableField = {\n id: { label: 'ID' },\n name: { label: 'Name' },\n title: { label: 'Titel' },\n description: { label: 'Beschreibung' },\n email: { label: 'E-Mail' },\n createdAt: { label: 'Erstellt am', dateFormat: 'dd.MM.YYYY HH:mm' },\n updatedAt: { label: 'Bearbeitet am', dateFormat: 'dd.MM.YYYY HH:mm' },\n };\n meta!: GraphQLMeta;\n objects: any[] = [];\n availableFields: string[] = [];\n id = '';\n queryName: string = null;\n camelModelName: string;\n possibleFields: Record<string, GraphQLType> = {};\n componentRef: ComponentRef<any> = undefined;\n\n totalCount: number;\n selectedPageIndex = 0;\n pages = [];\n pageItemsLimitControl = new FormControl(25);\n pageOptions = [\n {\n text: '25',\n value: 25,\n },\n {\n text: '50',\n value: 50,\n },\n {\n text: '75',\n value: 75,\n },\n {\n text: '100',\n value: 100,\n },\n {\n text: '200',\n value: 200,\n },\n ];\n subscription = new Subscription();\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private cmsService: CmsService,\n private toastService: ToastService,\n private scrollService: ScrollService,\n private storageService: StorageService\n ) {}\n\n ngAfterViewInit() {\n // Needed time out to prevent ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.integrateCustomFormComponent();\n }, 10);\n }\n\n ngOnInit(): void {\n const pageItemsLimit = this.storageService.load('pageItemsLimit');\n this.pageItemsLimitControl.setValue(pageItemsLimit ? pageItemsLimit : 25, { onlySelf: true, emitEvent: false });\n\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n\n if (this.objectId) {\n this.id = this.objectId;\n\n // Needed time out for rerender\n setTimeout(() => {\n this.integrateCustomFormComponent();\n }, 10);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['modelName'] && this.meta) {\n this.init();\n }\n\n if (changes['objectId'] && this.meta) {\n if (this.id !== this.objectId) {\n if (this.logging) {\n console.log('ModelTableComponent::ngOnChanges->selectedId', this.id);\n }\n\n this.id = this.objectId;\n }\n }\n\n this.setChangesInComponentRef();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * We're using the `meta` service to get the fields that are available for the `find` query for the model we're working\n * with. We're then using that information to populate the `availableFields` array\n */\n async init() {\n this.availableFields = [];\n this.pages = [];\n this.totalCount = null;\n this.camelModelName = this.kebabToCamelCase(this.modelName);\n\n // Set query name\n if (!this.modelConfig?.queryName) {\n this.queryName = 'findAndCount' + this.capitalizeFirstLetter(this.camelModelName) + 's';\n } else {\n this.queryName = this.modelConfig?.queryName;\n }\n\n if (this.modelConfig?.tableFields) {\n this.tableFields = this.modelConfig.tableFields;\n }\n\n if (this.logging) {\n console.log('ModelTableComponent::init->modelName', this.modelName);\n console.log('ModelTableComponent::init->camelModelName', this.camelModelName);\n console.log('ModelTableComponent::init->queryName', this.queryName);\n console.log('ModelTableComponent::init->tableFields', this.tableFields);\n }\n\n this.possibleFields = this.meta.getFields(this.queryName).fields;\n let keys;\n if (this.possibleFields?.items && Object.keys(this.possibleFields?.items?.fields).length > 0) {\n keys = Object.keys(this.possibleFields.items.fields);\n } else {\n keys = Object.keys(this.possibleFields);\n }\n\n const tableFieldKeys = Object.keys(this.tableFields);\n tableFieldKeys?.forEach((field) => {\n if (keys.includes(field)) {\n this.availableFields.push(field);\n }\n });\n\n if (this.logging) {\n console.log('ModelTableComponent::init->possibleFields', this.possibleFields);\n console.log('ModelTableComponent::init->keys', keys);\n console.log('ModelTableComponent::init->availableFields', this.availableFields);\n }\n\n this.selectedPageIndex = this.storageService.load('pageIndex') ? this.storageService.load('pageIndex') : 0;\n this.objects = await this.loadObjects(this.availableFields, 0, this.pageItemsLimitControl.value);\n this.subscribeToPageItems();\n }\n\n subscribeToPageItems() {\n this.subscription.add(\n this.pageItemsLimitControl.valueChanges.subscribe({\n next: async (value) => {\n this.selectedPageIndex = 0;\n this.storageService.save('pageIndex', this.selectedPageIndex);\n this.objects = await this.loadObjects(this.availableFields, 0, value);\n this.storageService.save('pageItemsLimit', value);\n },\n })\n );\n }\n\n integrateCustomFormComponent() {\n if (!this.customFormTemplate || this.componentRef) {\n return;\n }\n\n const customComponent = this.modelConfig?.customTemplateComponent;\n if (customComponent) {\n this.componentRef = this.customFormTemplate?.createComponent<any>(customComponent);\n this.setChangesInComponentRef();\n this.componentRef.instance.finished.subscribe(() => {\n this.selectId('');\n });\n }\n }\n\n setChangesInComponentRef() {\n if (this.componentRef) {\n const data = {\n config: this.config,\n delete: this.delete,\n duplicate: this.duplicate,\n id: this.id,\n label: this.modelConfig?.label,\n logging: this.logging,\n modelName: this.camelModelName,\n showFavButton: this.showFavButton,\n };\n\n for (const [key, value] of Object.entries(data)) {\n this.componentRef.setInput(key, value);\n }\n }\n }\n\n /**\n * When the user clicks the \"Create New\" button, the createModeChanged event is emitted, which is then handled by the\n * parent component\n */\n createNewObject() {\n this.createMode = true;\n this.createModeChanged.emit(true);\n }\n\n /**\n * It loads the objects from the database and stores them in the objects variable\n *\n * @param fields - string[] - The fields you want to load from the database.\n * @param skip\n * @param limit\n */\n loadObjects(fields: string[], skip = 0, limit = 25): Promise<any[]> {\n return new Promise<any[]>((resolve, reject) => {\n const requestFields = [...fields];\n const idInFields = requestFields.find((e) => e === 'id');\n\n if (!idInFields) {\n requestFields.push('id');\n }\n\n const isFindAndCount = this.queryName.includes('findAndCount');\n\n this.graphQLService\n .graphQl(this.queryName, {\n arguments: {\n limit: isFindAndCount ? limit : null,\n skip: isFindAndCount ? skip : null,\n },\n fields: isFindAndCount ? ['totalCount', { items: requestFields }] : requestFields,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (value) => {\n let items;\n if (this.logging) {\n console.log('ModelTableComponent::loadObjects->value', value);\n }\n\n if (value?.totalCount >= 0) {\n items = value.items;\n this.totalCount = value.totalCount;\n this.pages = [];\n let numbers = 0;\n\n while (numbers < this.totalCount) {\n this.pages.push({\n skip: numbers,\n limit: this.pageItemsLimitControl.value,\n });\n\n numbers = numbers + this.pageItemsLimitControl.value;\n }\n\n const loadedIndex = this.storageService.load('pageIndex');\n if (loadedIndex) {\n if (loadedIndex > this.pages.length) {\n this.selectedPageIndex = 0;\n this.storageService.save('pageIndex');\n }\n }\n } else {\n items = value;\n }\n\n resolve(items);\n },\n error: (err) => {\n console.log('Error on loading objects', err);\n reject(err);\n },\n });\n });\n }\n\n /**\n * If the update property is true, then set the selectedId property to the id of the object passed in, and emit the\n * selectedId property\n */\n selectId(object: any) {\n if (!object) {\n this.createMode = false;\n this.createModeChanged.emit(false);\n }\n\n if (this.update) {\n this.id = object['id'];\n this.idSelected.emit(this.id);\n }\n }\n\n openNewTab(object: any) {\n window.open(location.href + '/' + object['id'], '_blank');\n }\n\n /**\n * It calls the duplicateObject function in the cmsService, passing in the id of the object to be duplicated and the\n * modelName of the object\n */\n async duplicateObject(id: string) {\n await this.cmsService.duplicateObject(id, this.camelModelName);\n this.selectedPageIndex = this.storageService.load('pageIndex') ? this.storageService.load('pageIndex') : 0;\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n\n /**\n * It calls the deleteObject function in the cmsService, passing in the id of the object to delete and the name of the\n * model\n */\n async deleteObject(id: string) {\n await this.cmsService.deleteObject(id, this.camelModelName);\n this.selectedPageIndex = this.storageService.load('pageIndex') ? this.storageService.load('pageIndex') : 0;\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * Kebab to camel case string\n */\n kebabToCamelCase(str: string) {\n return str.replace(/-./g, (match) => match[1].toUpperCase());\n }\n\n /**\n * Import objects from json file\n */\n processImport(event) {\n // Create a new FileReader() object\n const reader = new FileReader();\n\n // Setup the callback event to run when the file is read\n reader.onload = async (readerEvent) => {\n let jsonResult = JSON.parse(readerEvent.target.result as any);\n\n if (!Array.isArray(jsonResult)) {\n jsonResult = [jsonResult];\n }\n\n for (let i = 0; i < jsonResult.length; i++) {\n try {\n this.graphQLService\n .graphQl('create' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { input: jsonResult[i] },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: async () => {\n this.toastService.show({\n id: this.modelName + '-' + i + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: 'Element ' + (i + 1) + ' von ' + jsonResult.length + ' erfolgreich importiert.',\n });\n\n if (i === jsonResult.length - 1) {\n this.selectedPageIndex = this.storageService.load('pageIndex')\n ? this.storageService.load('pageIndex')\n : 0;\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n },\n error: () => {\n this.toastService.show({\n id: this.modelName + '-' + i + '-error',\n type: ToastType.ERROR,\n title: 'Error',\n description: 'Element ' + (i + 1) + ' von ' + jsonResult.length + ' konnte nicht importiert werden.',\n });\n },\n });\n } catch (e) {\n this.toastService.show({\n id: this.modelName + '-' + i + '-error',\n type: ToastType.ERROR,\n title: 'Error',\n description: 'Element ' + (i + 1) + ' von ' + jsonResult.length + ' konnte nicht importiert werden.',\n });\n }\n }\n };\n\n // Read the file\n reader.readAsText(event.target.files[0]);\n }\n\n /**\n * Export objects as json\n */\n async processExport() {\n const keys = this.getAllKeys();\n const items = await this.loadObjects(\n keys,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n const data = JSON.stringify(items);\n const blob = new Blob([data], { type: 'text/json;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', this.modelName + 's.json');\n document.body.appendChild(link);\n link.click();\n }\n\n /**\n * Get all keys for request to export objects as json\n */\n getAllKeys() {\n const items = [];\n for (const [key, value] of Object.entries(this.possibleFields)) {\n if (!this.possibleFields[key].fields || Object.keys(this.possibleFields[key].fields).length === 0) {\n items.push(key);\n }\n }\n\n return items;\n }\n\n async selectPage(i: number) {\n if (!this.pages[i]) {\n return;\n }\n\n this.selectedPageIndex = i;\n await this.scrollService.scrollTo('model-table-top');\n this.storageService.save('pageIndex', this.selectedPageIndex);\n this.objects = await this.loadObjects(\n this.availableFields,\n this.pages[this.selectedPageIndex].skip,\n this.pages[this.selectedPageIndex].limit\n );\n }\n}\n","@if (!id && !createMode) {\n <div>\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-2 mb-lg-4\">\n @if (modelName) {\n <h2 id=\"model-table-top\" class=\"mb-0\">\n {{\n modelConfig?.plural\n ? modelConfig?.plural\n : modelConfig?.label\n ? modelConfig?.label\n : capitalizeFirstLetter(camelModelName) + 's'\n }}\n </h2>\n }\n <div class=\"d-flex align-items-center d-none d-lg-block\">\n <input #importFile type=\"file\" accept=\".json\" class=\"d-none\" (change)=\"processImport($event)\" />\n @if (import || export) {\n <div class=\"btn-group me-4\">\n <i\n class=\"bi bi-three-dots-vertical\"\n id=\"settingsDropdown\"\n type=\"button\"\n data-bs-toggle=\"dropdown\"\n data-bs-auto-close=\"true\"\n aria-expanded=\"false\"\n ></i>\n <ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"settingsDropdown\">\n <li>@if (export) {\n <a class=\"dropdown-item cursor-pointer\" (click)=\"processExport()\">Export</a>\n }</li>\n <li>@if (import) {\n <a class=\"dropdown-item cursor-pointer\" (click)=\"importFile.click()\"> Import </a>\n }</li>\n </ul>\n </div>\n }\n @if (create) {\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\">Erstellen</button>\n }\n </div>\n </div>\n @if (totalCount >= 0) {\n <div class=\"container-fluid\">\n <nav class=\"d-flex row\">\n <div class=\"col-12 col-md-2\"></div>\n <ul class=\"pagination justify-content-center col-12 col-md-8\">\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex - 1)\"\n aria-label=\"Previous\"\n [ngClass]=\"{ disabled: selectedPageIndex - 1 > 0 }\"\n >\n <span aria-hidden=\"true\">«</span>\n </a>\n </li>\n @for (page of pages; track page; let i = $index) {\n <li class=\"page-item\">\n <a class=\"page-link\" [ngClass]=\"{ active: selectedPageIndex === i }\" (click)=\"selectPage(i)\">{{ i + 1 }}</a>\n </li>\n }\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex + 1)\"\n aria-label=\"Next\"\n [ngClass]=\"{ disabled: pages[selectedPageIndex + 1] }\"\n >\n <span aria-hidden=\"true\">»</span>\n </a>\n </li>\n </ul>\n <div class=\"col-12 col-md-2\">\n <base-select [options]=\"pageOptions\" [control]=\"pageItemsLimitControl\"></base-select>\n </div>\n </nav>\n </div>\n }\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white d-none d-lg-table\">\n <thead>\n <tr>\n @for (field of availableFields; track field) {\n <th\n scope=\"col\"\n [baseSort]=\"objects\"\n (baseSorted)=\"objects = $event\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (object of objects; track object) {\n <tr class=\"object-col\" [id]=\"object[uniqueField]\">\n @for (field of availableFields; track field) {\n <td class=\"cursor-pointer\" (click)=\"selectId(object)\">\n @if (tableFields[field]?.dateFormat) {\n {{ object[field] | date : tableFields[field]?.dateFormat }} Uhr\n }\n @if (tableFields[field]?.enumValues) {\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n }\n @if (!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues) {\n {{ object[field] | baseEllipses : 60 }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <div class=\"d-flex d-lg-none flex-column flex-grow-1\">\n @for (object of objects; track object) {\n <div class=\"table-card\" [id]=\"object[uniqueField]\">\n @for (field of availableFields; track field; let i = $index) {\n <div class=\"table-card-entry\" (click)=\"selectId(object)\">\n @if (i > 0) {\n <b\n >{{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}:</b\n >\n }\n <p [ngClass]=\"{ 'table-card-entry-first': i === 0 }\">\n @if (tableFields[field]?.dateFormat) {\n {{ object[field] | date : tableFields[field]?.dateFormat }} Uhr\n }\n @if (tableFields[field]?.enumValues) {\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n }\n @if (!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues) {\n {{ object[field] | baseEllipses : 60 }}\n }\n </p>\n </div>\n }\n </div>\n }\n </div>\n @if (totalCount >= 0) {\n <div class=\"container-fluid\">\n <nav class=\"d-flex row\">\n <div class=\"col-12 col-md-2\"></div>\n <ul class=\"pagination justify-content-center col-12 col-md-8\">\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex - 1)\"\n aria-label=\"Previous\"\n [ngClass]=\"{ disabled: selectedPageIndex - 1 > 0 }\"\n >\n <span aria-hidden=\"true\">«</span>\n </a>\n </li>\n @for (page of pages; track page; let i = $index) {\n <li class=\"page-item\">\n <a class=\"page-link\" [ngClass]=\"{ active: selectedPageIndex === i }\" (click)=\"selectPage(i)\">{{ i + 1 }}</a>\n </li>\n }\n <li class=\"page-item\">\n <a\n class=\"page-link\"\n (click)=\"selectPage(selectedPageIndex + 1)\"\n aria-label=\"Next\"\n [ngClass]=\"{ disabled: pages[selectedPageIndex + 1] }\"\n >\n <span aria-hidden=\"true\">»</span>\n </a>\n </li>\n </ul>\n <div class=\"col-12 col-md-2\">\n <base-select [options]=\"pageOptions\" [control]=\"pageItemsLimitControl\"></base-select>\n </div>\n </nav>\n </div>\n }\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" (click)=\"openNewTab({ id: contextMenuData.clickedElement?.id })\">\n In neuen Tab öffnen\n </div>\n @if (duplicate) {\n <div class=\"context-menu-item\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n }\n @if (delete) {\n <div class=\"context-menu-item\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n Löschen\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n @if (id || createMode) {\n <div class=\"w-100\">\n <button class=\"d-none d-lg-block btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zurück</button>\n @if (!modelConfig?.customTemplateComponent) {\n <base-model-form\n [modelName]=\"camelModelName\"\n [label]=\"modelConfig?.label\"\n [config]=\"config\"\n [logging]=\"logging\"\n [id]=\"id\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n [showFavButton]=\"showFavButton\"\n ></base-model-form>\n }\n @if (modelConfig?.customTemplateComponent) {\n <ng-template #customFormTemplate></ng-template>\n }\n </div>\n }\n\n <div class=\"responsive-action-button d-block d-lg-none\">\n @if (!(id || createMode) && showFavButton) {\n <base-fab-button\n [fabIcon]=\"'bi-plus'\"\n (click)=\"createNewObject()\"\n ></base-fab-button>\n }\n </div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n AuthService,\n FormsService,\n securePasswordValidator,\n ToastService,\n ToastType,\n UserService,\n Validation\n} from '@lenne.tech/ng-base/shared';\nimport { InputComponent } from '../input/input.component';\n\n@Component({\n selector: 'base-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss'],\n standalone: true,\n imports: [\n InputComponent,\n ReactiveFormsModule\n ]\n})\nexport class ChangePasswordComponent implements OnInit {\n form: FormGroup;\n loading = false;\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create password change form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n current: new FormControl<string>('', [Validators.required]),\n password: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n },\n Validation.match('password', 'passwordConfirm') as any\n );\n }\n\n /**\n * Submit form and change password of user\n */\n submit() {\n this.loading = true;\n this.userService\n .login({\n email: this.authService.currentUser.email,\n password: this.form.get('current').value,\n })\n .subscribe({\n next: () => {\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.changePassword(this.authService.currentUser.id, this.form.get('password').value).subscribe({\n next: (response) => {\n if (response) {\n this.form.reset();\n this.toastService.show({\n id: 'password-change-success',\n title: 'Erfolgreich',\n description: 'Passwort wurde erfolgreich geändert.',\n type: ToastType.SUCCESS,\n });\n }\n\n this.loading = false;\n },\n error: () => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n },\n error: () => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen. Falsches Passwort.',\n type: ToastType.ERROR,\n errorCode: '401',\n });\n },\n });\n }\n}\n","<h3>Passwort ändern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'Aktuelles Passwort'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('current')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Neues Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Neues Passwort bestätigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"3\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n @if (!loading) {\n <button class=\"btn btn-primary\" (click)=\"submit()\">Passwort ändern</button>\n }\n @if (loading) {\n <button class=\"btn btn-primary\" type=\"button\" disabled>\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n }\n </div>\n </div>\n</form>\n","import { Component, Input } from '@angular/core';\nimport { AuthService, ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-delete-account',\n templateUrl: './delete-account.component.html',\n styleUrls: ['./delete-account.component.scss'],\n standalone: true,\n})\nexport class DeleteAccountComponent {\n @Input() description =\n 'Mit dem Löschen Deines Kontos werden alle persönlichen Daten sofort gelöscht und sind nicht wiederherstellbar.';\n loading = false;\n\n constructor(\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService,\n private router: Router\n ) {}\n\n deleteAccount() {\n this.loading = true;\n\n if (!confirm('Willst Du wirklich ein Konto unwiderruflich löschen?')) {\n this.loading = false;\n return;\n }\n\n this.userService.delete(this.authService.currentUser.id).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'delete-user-success',\n title: 'Erfolgreich',\n description: 'Dein Konto wurde erfolgreich gelöscht.',\n type: ToastType.SUCCESS,\n });\n }\n this.authService.logout();\n this.router.navigate(['/']);\n\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'delete-user-error',\n title: 'Fehlgeschlagen',\n description: 'Konto löschen ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<div>\n <h3>Konto löschen</h3>\n\n <p>{{ description }}</p>\n\n <div class=\"d-flex justify-content-end mt-3\">\n <div>\n @if (!loading) {\n <button class=\"btn btn-primary\" (click)=\"deleteAccount()\">Konto löschen</button>\n }\n @if (loading) {\n <button class=\"btn btn-primary\" type=\"button\" disabled>\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n }\n </div>\n </div>\n</div>\n","/**\n * Exports for public API\n */\n// Directives\nexport * from './directives/sort.directive';\nexport * from './directives/back-button.directive';\nexport * from './directives/context-menu.directive';\nexport * from './directives/stop-propagation.directive';\n\n// Pipes\nexport * from './pipes/ellipses.pipe';\n\n// Components\nexport * from './components/input/input.component';\nexport * from './components/select/select.component';\nexport * from './components/checkbox/checkbox.component';\nexport * from './components/textarea/textarea.component';\nexport * from './components/tags/tags.component';\nexport * from './components/toast/toast.component';\nexport * from './components/loading-bar/loading-bar.component';\nexport * from './components/skeleton-loader/skeleton-loader.component';\nexport * from './components/breadcrumb/breadcrumb.component';\nexport * from './components/model-form/model-form.component';\nexport * from './components/model-form/model-form-base.component';\nexport * from './components/model-table/model-table.component';\nexport * from './components/model-form-sub/model-form-sub.component';\nexport * from './components/upload-image/upload-image.component';\nexport * from './components/refence-input/refence-input.component';\nexport * from './components/change-password/change-password.component';\nexport * from './components/delete-account/delete-account.component';\nexport * from './components/fab-button/fab-button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|