From 3ff66897d0d150683cf2bd97cc65fb30fd039998 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Mon, 20 May 2024 18:30:48 +0200 Subject: [PATCH 01/30] Outsource header search form --- .../ahb-search-form-header.component.html | 12 +++++ .../ahb-search-form-header.component.spec.ts | 22 ++++++++ .../ahb-search-form-header.component.ts | 53 +++++++++++++++++++ .../ahb-table/ahb-table.component.html | 10 ++-- .../views/ahb-page/ahb-page.component.html | 34 ++---------- .../ahbs/views/ahb-page/ahb-page.component.ts | 45 +++------------- 6 files changed, 100 insertions(+), 76 deletions(-) create mode 100644 src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html create mode 100644 src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.spec.ts create mode 100644 src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.ts diff --git a/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html new file mode 100644 index 000000000..f0bece6eb --- /dev/null +++ b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html @@ -0,0 +1,12 @@ +
+ + + diff --git a/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.spec.ts b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.spec.ts new file mode 100644 index 000000000..bbc36eca3 --- /dev/null +++ b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AhbSearchFormHeaderComponent } from './ahb-search-form-header.component'; + +describe('AhbSearchFormHeaderComponent', () => { + let component: AhbSearchFormHeaderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AhbSearchFormHeaderComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(AhbSearchFormHeaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.ts b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.ts new file mode 100644 index 000000000..c5866de2c --- /dev/null +++ b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.ts @@ -0,0 +1,53 @@ +import { Component, effect, input } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms'; +import { Router } from '@angular/router'; +import { PruefiInputComponent } from '../pruefi-input/pruefi-input.component'; +import { FormatVersionSelectComponent } from '../format-version-select/format-version-select.component'; + +@Component({ + selector: 'app-ahb-search-form-header', + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + FormatVersionSelectComponent, + PruefiInputComponent, + ], + templateUrl: './ahb-search-form-header.component.html', +}) +export class AhbSearchFormHeaderComponent { + formatVersion = input.required(); + pruefi = input.required(); + + headerSearchForm = new FormGroup({ + formatVersion: new FormControl('', Validators.required), + pruefi: new FormControl('', Validators.required), + }); + + constructor(private readonly router: Router) { + effect(() => { + this.headerSearchForm.setValue({ + formatVersion: this.formatVersion(), + pruefi: this.pruefi(), + }); + }); + } + + onPruefiSelect() { + if (!this.headerSearchForm.valid) { + this.headerSearchForm.markAllAsTouched(); + return; + } + this.router.navigate([ + '/ahb', + this.headerSearchForm.value.formatVersion, + this.headerSearchForm.value.pruefi, + ]); + } +} diff --git a/src/app/features/ahbs/components/ahb-table/ahb-table.component.html b/src/app/features/ahbs/components/ahb-table/ahb-table.component.html index a04b21ad7..e22c6e0f6 100644 --- a/src/app/features/ahbs/components/ahb-table/ahb-table.component.html +++ b/src/app/features/ahbs/components/ahb-table/ahb-table.component.html @@ -2,9 +2,7 @@ - + @@ -16,10 +14,10 @@ @for (line of lines; track line.index) { - + @@ -43,5 +41,3 @@
Segmentname Segmentgruppe
{{ line.section_name }}
- -
{{ lines | json }}
diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index 57fab766f..4676d07eb 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -1,34 +1,8 @@ -
- - @if ( - headerSearchForm.controls.formatVersion.errors?.["required"] && - (headerSearchForm.controls.formatVersion.dirty || - headerSearchForm.controls.formatVersion.touched) - ) { -

Dieses Feld ist ein Pflichtfeld

- } - - @if ( - headerSearchForm.controls.pruefi.errors?.["required"] && - (headerSearchForm.controls.pruefi.dirty || - headerSearchForm.controls.pruefi.touched) - ) { -

Dieses Feld ist ein Pflichtfeld

- } - - - - +
@if (ahb$ | async; as ahb) { diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts index 7caf9e32c..535c3fe7f 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts @@ -3,29 +3,20 @@ import { HeaderComponent } from '../../../../shared/components/header/header.com import { AhbTableComponent } from '../../components/ahb-table/ahb-table.component'; import { Ahb, AhbService } from '../../../../core/api'; import { CommonModule } from '@angular/common'; -import { - FormControl, - FormGroup, - FormsModule, - ReactiveFormsModule, - Validators, -} from '@angular/forms'; +import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { Observable, map, shareReplay } from 'rxjs'; -import { Router } from '@angular/router'; -import { FormatVersionSelectComponent } from '../../components/format-version-select/format-version-select.component'; -import { PruefiInputComponent } from '../../components/pruefi-input/pruefi-input.component'; +import { AhbSearchFormHeaderComponent } from '../../components/ahb-search-form-header/ahb-search-form-header.component'; @Component({ selector: 'app-ahb-page', standalone: true, imports: [ + FormsModule, + ReactiveFormsModule, HeaderComponent, AhbTableComponent, CommonModule, - FormsModule, - ReactiveFormsModule, - FormatVersionSelectComponent, - PruefiInputComponent, + AhbSearchFormHeaderComponent, ], templateUrl: './ahb-page.component.html', }) @@ -38,15 +29,7 @@ export class AhbPageComponent { ahb$?: Observable; lines$?: Observable; - headerSearchForm = new FormGroup({ - formatVersion: new FormControl('', Validators.required), - pruefi: new FormControl('', Validators.required), - }); - - constructor( - private readonly ahbService: AhbService, - private readonly router: Router, - ) { + constructor(private readonly ahbService: AhbService) { effect(() => { this.ahb$ = this.ahbService .getAhb({ @@ -55,10 +38,6 @@ export class AhbPageComponent { }) .pipe(shareReplay()); this.lines$ = this.ahb$.pipe(map((ahb) => ahb.lines)); - this.headerSearchForm.setValue({ - formatVersion: this.formatVersion(), - pruefi: this.pruefi(), - }); }); } @@ -73,16 +52,4 @@ export class AhbPageComponent { ), ); } - - onClickHeaderSearchSubmit() { - if (!this.headerSearchForm.valid) { - this.headerSearchForm.markAllAsTouched(); - return; - } - this.router.navigate([ - '/ahb', - this.headerSearchForm.value.formatVersion, - this.headerSearchForm.value.pruefi, - ]); - } } From 4c8e721b57077a1263a1fc931c29d131a31fda29 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Mon, 20 May 2024 18:31:03 +0200 Subject: [PATCH 02/30] Add command to init submodules --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 37cfb959b..b8adc2fb6 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "ahbesser", "version": "0.0.0", "scripts": { + "init": "npm run install-submodules", "start": "concurrently \"npm run ng:start\" \"npm run server:watch\"", "ng:start": "ng serve", "ng:build": "ng build", @@ -14,7 +15,8 @@ "format:check": "prettier '**/*.{js,jsx,ts,tsx,html,css,scss,json,yml,md}' --check", "format": "prettier '**/*.{js,jsx,ts,tsx,html,css,scss,json,yml,md}' --write", "ng-openapi-gen": "ng-openapi-gen --input openapi.yml --output ./src/app/core/api --indexFile=true", - "lint": "ng lint" + "lint": "ng lint", + "install-submodules": "git submodule update --init --recursive" }, "watch": { "server:start": { From 6bc6ee7aa8c435be33076440bcaf4d0f90e8e653 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Mon, 20 May 2024 19:06:14 +0200 Subject: [PATCH 03/30] Improve ahb page --- .../views/ahb-page/ahb-page.component.html | 33 ++++++++++++++----- .../components/header/header.component.html | 9 ++--- tailwind.config.js | 3 ++ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index 4676d07eb..5f42e5f19 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -1,21 +1,36 @@ @if (ahb$ | async; as ahb) { +
+
+

+ Anwendungshandbücher für Menschen +

+

+ Anwendungshandbuch {{ ahb.meta.pruefidentifikator }} +

+

{{ ahb.meta.description }}

+

+ Sender/Empfänger: + {{ ahb.meta.direction }} +

+
+
+ +
+
-
{{ ahb.meta | json }}
-
-
- @if (lines$ | async; as lines) { } diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html index 512d92273..7ea16bedf 100644 --- a/src/app/shared/components/header/header.component.html +++ b/src/app/shared/components/header/header.component.html @@ -1,10 +1,7 @@
-
-
diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts index 535c3fe7f..e205b01cb 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts @@ -6,6 +6,7 @@ import { CommonModule } from '@angular/common'; import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { Observable, map, shareReplay } from 'rxjs'; import { AhbSearchFormHeaderComponent } from '../../components/ahb-search-form-header/ahb-search-form-header.component'; +import { InputSearchEnhancedComponent } from '../../../../shared/components/input-search-enhanced/input-search-enhanced.component'; @Component({ selector: 'app-ahb-page', @@ -17,6 +18,7 @@ import { AhbSearchFormHeaderComponent } from '../../components/ahb-search-form-h AhbTableComponent, CommonModule, AhbSearchFormHeaderComponent, + InputSearchEnhancedComponent, ], templateUrl: './ahb-page.component.html', }) @@ -41,13 +43,13 @@ export class AhbPageComponent { }); } - onSearchQueryChange() { + onSearchQueryChange(searchQuery: string | undefined) { this.lines$ = this.ahb$?.pipe( map((ahb) => ahb.lines), map( (lines) => lines.filter((line) => - JSON.stringify(line).includes(this.searchQuery.value ?? ''), + JSON.stringify(line).includes(searchQuery ?? ''), ) ?? [], ), ); diff --git a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html new file mode 100644 index 000000000..67ce4106d --- /dev/null +++ b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html @@ -0,0 +1,55 @@ +
+ + + + + + + + + + + +
diff --git a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.spec.ts b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.spec.ts new file mode 100644 index 000000000..41a6aa882 --- /dev/null +++ b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InputSearchEnhancedComponent } from './input-search-enhanced.component'; + +describe('InputSearchEnhancedComponent', () => { + let component: InputSearchEnhancedComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InputSearchEnhancedComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(InputSearchEnhancedComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts new file mode 100644 index 000000000..09f14969b --- /dev/null +++ b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts @@ -0,0 +1,28 @@ +import { Component, effect, model, output } from '@angular/core'; +import { FormsModule } from '@angular/forms'; + +@Component({ + selector: 'app-input-search-enhanced', + standalone: true, + imports: [FormsModule], + templateUrl: './input-search-enhanced.component.html', +}) +export class InputSearchEnhancedComponent { + searchQueryChange = output(); + + searchQuery = model(); + + constructor() { + effect(() => { + this.searchQueryChange.emit(this.searchQuery()); + }); + } + + onClickNext() { + alert('not implemented'); + } + + onClickPrevious() { + alert('not implemented'); + } +} From c0f3f35b3eb43c1bb176dc2480a27f35ed0d7164 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Mon, 20 May 2024 19:40:13 +0200 Subject: [PATCH 05/30] Add ui for export button --- .../features/ahbs/views/ahb-page/ahb-page.component.html | 7 +++++++ src/app/features/ahbs/views/ahb-page/ahb-page.component.ts | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index d07a1e66e..e22842125 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -23,8 +23,15 @@

+
diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts index e205b01cb..73fdcd9f4 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts @@ -54,4 +54,8 @@ export class AhbPageComponent { ), ); } + + onClickExport() { + alert('not implemented'); + } } From 3d6d6e66e4a104f64834b0bc9ef14da53ea79c56 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Mon, 20 May 2024 20:13:35 +0200 Subject: [PATCH 06/30] Floating labels --- .../ahb-search-form-header.component.html | 4 +-- .../format-version-select.component.html | 27 ++++++++++++------- .../pruefi-input/pruefi-input.component.html | 24 ++++++++++++----- .../components/header/header.component.html | 4 +-- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html index f0bece6eb..551af5abf 100644 --- a/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html +++ b/src/app/features/ahbs/components/ahb-search-form-header/ahb-search-form-header.component.html @@ -1,10 +1,10 @@
- - @for (formatVersion of formatVersions; track formatVersion) { - - } - +
+ + +
} diff --git a/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html b/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html index ca2ca22df..5251e49e7 100644 --- a/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html +++ b/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html @@ -1,10 +1,20 @@ - +
+ + +
+ @for (pruefi of pruefis$ | async; track pruefi) { diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html index 7ea16bedf..ded64f735 100644 --- a/src/app/shared/components/header/header.component.html +++ b/src/app/shared/components/header/header.component.html @@ -1,5 +1,5 @@
-
diff --git a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html index 67ce4106d..d8d017643 100644 --- a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html +++ b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html @@ -1,6 +1,6 @@ -
+
- + Date: Tue, 21 May 2024 01:07:43 +0200 Subject: [PATCH 08/30] Add init highlight logic --- .../ahb-table/ahb-table.component.html | 42 ++++++++++--------- .../ahb-table/ahb-table.component.ts | 8 ++-- .../ahb-landing-page.component.html | 9 ++-- .../views/ahb-page/ahb-page.component.html | 4 +- .../ahbs/views/ahb-page/ahb-page.component.ts | 18 ++------ src/app/shared/pipes/highlight.pipe.spec.ts | 8 ++++ src/app/shared/pipes/highlight.pipe.ts | 26 ++++++++++++ 7 files changed, 72 insertions(+), 43 deletions(-) create mode 100644 src/app/shared/pipes/highlight.pipe.spec.ts create mode 100644 src/app/shared/pipes/highlight.pipe.ts diff --git a/src/app/features/ahbs/components/ahb-table/ahb-table.component.html b/src/app/features/ahbs/components/ahb-table/ahb-table.component.html index e22c6e0f6..961d879f9 100644 --- a/src/app/features/ahbs/components/ahb-table/ahb-table.component.html +++ b/src/app/features/ahbs/components/ahb-table/ahb-table.component.html @@ -13,29 +13,33 @@ - @for (line of lines; track line.index) { + @for (line of lines(); track line.index) { - {{ line.section_name }} - - - {{ line.segment_group_key }} - - - {{ line.segment_code }} - - - {{ line.data_element }} - - - {{ line.name }} - - - {{ line.ahb_expression }} - + [innerHTML]="line.section_name | highlight: highlight()" + > + + + + + } diff --git a/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts b/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts index b962fa624..1d084b2a9 100644 --- a/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts +++ b/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts @@ -1,14 +1,16 @@ -import { Component, Input } from '@angular/core'; +import { Component, input } from '@angular/core'; import { Ahb } from '../../../../core/api'; import { JsonPipe } from '@angular/common'; +import { HighlightPipe } from '../../../../shared/pipes/highlight.pipe'; @Component({ selector: 'app-ahb-table', standalone: true, - imports: [JsonPipe], + imports: [JsonPipe, HighlightPipe], templateUrl: './ahb-table.component.html', styleUrl: './ahb-table.component.scss', }) export class AhbTableComponent { - @Input({ required: true }) lines!: Ahb['lines']; + lines = input.required(); + highlight = input(); } diff --git a/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html b/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html index 7da378e59..d19f5b17f 100644 --- a/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html +++ b/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html @@ -12,10 +12,11 @@

We are more than just a company

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. + Lorem ipsum dolor sit amet, + testconsectetur adipisicing + elit, sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat.

diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index 9607ac7b3..e71f7e022 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -25,7 +25,7 @@

+

+ +
+
+ @if (lines$ | async; as lines) { + + }
-
- -
- @if (lines$ | async; as lines) { - - } -
-} @else { - loading ... -} + } @else { + loading ... + } + diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts index 009dd0b11..b14c43409 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts @@ -7,6 +7,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { Observable, map, shareReplay } from 'rxjs'; import { AhbSearchFormHeaderComponent } from '../../components/ahb-search-form-header/ahb-search-form-header.component'; import { InputSearchEnhancedComponent } from '../../../../shared/components/input-search-enhanced/input-search-enhanced.component'; +import { HighlightPipe } from '../../../../shared/pipes/highlight.pipe'; @Component({ selector: 'app-ahb-page', @@ -19,6 +20,7 @@ import { InputSearchEnhancedComponent } from '../../../../shared/components/inpu CommonModule, AhbSearchFormHeaderComponent, InputSearchEnhancedComponent, + HighlightPipe, ], templateUrl: './ahb-page.component.html', }) From a4e93180ea7403d754c83483d994d1c4c5cc6904 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Fri, 24 May 2024 19:26:48 +0200 Subject: [PATCH 10/30] Fix color --- .../format-version-select/format-version-select.component.html | 2 +- .../ahbs/components/pruefi-input/pruefi-input.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/features/ahbs/components/format-version-select/format-version-select.component.html b/src/app/features/ahbs/components/format-version-select/format-version-select.component.html index 8e5e6ff5b..588a2daab 100644 --- a/src/app/features/ahbs/components/format-version-select/format-version-select.component.html +++ b/src/app/features/ahbs/components/format-version-select/format-version-select.component.html @@ -12,7 +12,7 @@ diff --git a/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html b/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html index 4a2b33322..a879dde56 100644 --- a/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html +++ b/src/app/features/ahbs/components/pruefi-input/pruefi-input.component.html @@ -9,7 +9,7 @@ /> From c6a658697307cf2666771dc6c856a61336589ce8 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Fri, 24 May 2024 19:28:56 +0200 Subject: [PATCH 11/30] Sticky table header --- .../ahb-table/ahb-table.component.html | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/app/features/ahbs/components/ahb-table/ahb-table.component.html b/src/app/features/ahbs/components/ahb-table/ahb-table.component.html index 97ebace77..fc42224d5 100644 --- a/src/app/features/ahbs/components/ahb-table/ahb-table.component.html +++ b/src/app/features/ahbs/components/ahb-table/ahb-table.component.html @@ -1,12 +1,24 @@ - - - - - - + + + + + + From 4c7d62dfd1eac6eaff8ec1a0caa19e6d7b26fe58 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Fri, 24 May 2024 19:32:54 +0200 Subject: [PATCH 12/30] Make highlighting case insensitive --- src/app/shared/pipes/highlight.pipe.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/shared/pipes/highlight.pipe.ts b/src/app/shared/pipes/highlight.pipe.ts index a3201a57a..662c7a0d4 100644 --- a/src/app/shared/pipes/highlight.pipe.ts +++ b/src/app/shared/pipes/highlight.pipe.ts @@ -18,9 +18,8 @@ export class HighlightPipe implements PipeTransform { if (!highlightText) { return this.domSanitizer.bypassSecurityTrustHtml(value); } - const html = value - .split(highlightText) - .join(`${highlightText}`); + const regex = new RegExp(highlightText, 'gi'); + const html = value.replace(regex, (match) => `${match}`); return this.domSanitizer.bypassSecurityTrustHtml(html); } } From 61ba8f7b0cfd3f2c28d77840e97f346cb741184a Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Fri, 24 May 2024 20:29:36 +0200 Subject: [PATCH 13/30] Highlight selected elements --- .../ahb-table/ahb-table.component.ts | 78 ++++++++++++++++++- .../views/ahb-page/ahb-page.component.html | 3 + .../ahbs/views/ahb-page/ahb-page.component.ts | 4 +- .../input-search-enhanced.component.html | 5 +- .../input-search-enhanced.component.ts | 11 +-- 5 files changed, 89 insertions(+), 12 deletions(-) diff --git a/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts b/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts index 1d084b2a9..57a4d6f5e 100644 --- a/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts +++ b/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts @@ -1,4 +1,11 @@ -import { Component, input } from '@angular/core'; +import { + Component, + ElementRef, + computed, + effect, + input, + signal, +} from '@angular/core'; import { Ahb } from '../../../../core/api'; import { JsonPipe } from '@angular/common'; import { HighlightPipe } from '../../../../shared/pipes/highlight.pipe'; @@ -13,4 +20,73 @@ import { HighlightPipe } from '../../../../shared/pipes/highlight.pipe'; export class AhbTableComponent { lines = input.required(); highlight = input(); + markIndex = signal(0); + + markElements = computed(() => { + const highlight = this.highlight(); + const nativeElement = this.elementRef.nativeElement; + if (!highlight || !nativeElement) { + return []; + } + return nativeElement.querySelectorAll('mark'); + }); + + selectedMarkElement = computed(() => { + const markIndex = this.markIndex(); + const markElements = this.markElements(); + if (markElements.length === 0 || markElements.length < markIndex + 1) { + return null; + } + return markElements[this.markIndex()]; + }); + + constructor(private readonly elementRef: ElementRef) { + // reset index on highlight change + effect( + () => { + this.highlight(); + this.markIndex.set(0); + }, + { + allowSignalWrites: true, + }, + ); + // set selected class + effect(() => { + const selectedMarkElement = this.selectedMarkElement(); + if (selectedMarkElement === null) { + return; + } + const markElements = this.markElements(); + markElements.forEach((el) => el.classList.remove('bg-orange-500')); + selectedMarkElement.classList.add('bg-orange-500'); + }); + // scroll + effect(() => { + const selectedMarkElement = this.selectedMarkElement(); + if (selectedMarkElement === null) { + return; + } + selectedMarkElement.scrollIntoView(); + }); + } + + nextResult() { + const markIndex = this.markIndex() + 1; + const markElements = this.markElements(); + if (markIndex < markElements.length) { + this.markIndex.set(markIndex); + return; + } + this.markIndex.set(0); + } + + previousResult() { + const markIndex = this.markIndex() - 1; + if (markIndex >= 0) { + this.markIndex.set(markIndex); + return; + } + this.markIndex.set(this.markElements().length - 1); + } } diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index d073decc5..9f0c881f1 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -27,6 +27,9 @@

-

SegmentnameSegmentgruppeSegmentDatenelementNameBedingung + Segmentname + + Segmentgruppe + + Segment + + Datenelement + + Name + + Bedingung +
- + @for (line of lines(); track line.index) { - +
Segmentname diff --git a/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts b/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts index 57a4d6f5e..2ab49a2d3 100644 --- a/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts +++ b/src/app/features/ahbs/components/ahb-table/ahb-table.component.ts @@ -4,7 +4,9 @@ import { computed, effect, input, + output, signal, + viewChild, } from '@angular/core'; import { Ahb } from '../../../../core/api'; import { JsonPipe } from '@angular/common'; @@ -18,8 +20,13 @@ import { HighlightPipe } from '../../../../shared/pipes/highlight.pipe'; styleUrl: './ahb-table.component.scss', }) export class AhbTableComponent { + header = viewChild('header'); + lines = input.required(); highlight = input(); + + selectElement = output<{ element: HTMLElement; offsetY: number }>(); + markIndex = signal(0); markElements = computed(() => { @@ -51,23 +58,23 @@ export class AhbTableComponent { allowSignalWrites: true, }, ); - // set selected class effect(() => { const selectedMarkElement = this.selectedMarkElement(); if (selectedMarkElement === null) { return; } + // make selected element orange const markElements = this.markElements(); markElements.forEach((el) => el.classList.remove('bg-orange-500')); selectedMarkElement.classList.add('bg-orange-500'); - }); - // scroll - effect(() => { - const selectedMarkElement = this.selectedMarkElement(); - if (selectedMarkElement === null) { - return; - } - selectedMarkElement.scrollIntoView(); + // notify outer scroll container + const header = this.header(); + const headerHeight = + header?.nativeElement.getBoundingClientRect().height ?? 0; + this.selectElement.emit({ + element: selectedMarkElement, + offsetY: headerHeight, + }); }); } diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index 9f0c881f1..efcb85c67 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -41,9 +41,13 @@

-
+
@if (lines$ | async; as lines) { - + }
diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts index 05f3189dd..782d0a9dc 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.ts @@ -1,4 +1,11 @@ -import { Component, effect, input, signal, viewChild } from '@angular/core'; +import { + Component, + ElementRef, + effect, + input, + signal, + viewChild, +} from '@angular/core'; import { HeaderComponent } from '../../../../shared/components/header/header.component'; import { AhbTableComponent } from '../../components/ahb-table/ahb-table.component'; import { Ahb, AhbService } from '../../../../core/api'; @@ -8,6 +15,7 @@ import { Observable, map, shareReplay } from 'rxjs'; import { AhbSearchFormHeaderComponent } from '../../components/ahb-search-form-header/ahb-search-form-header.component'; import { InputSearchEnhancedComponent } from '../../../../shared/components/input-search-enhanced/input-search-enhanced.component'; import { HighlightPipe } from '../../../../shared/pipes/highlight.pipe'; +import { scrollToElement } from '../../../../core/helper/scroll-to-element'; @Component({ selector: 'app-ahb-page', @@ -29,6 +37,7 @@ export class AhbPageComponent { pruefi = input.required(); table = viewChild(AhbTableComponent); + scroll = viewChild('scroll'); searchQuery = signal(''); @@ -50,4 +59,12 @@ export class AhbPageComponent { onClickExport() { alert('not implemented'); } + + scrollToElement(element: HTMLElement, offsetY: number): void { + const scrollContainer = this.scroll(); + if (!scrollContainer?.nativeElement) { + return; + } + scrollToElement(element, offsetY, scrollContainer.nativeElement); + } } From 23c3d62ab9c09009551e2016b9ed465b3932d7b6 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Fri, 24 May 2024 21:16:11 +0200 Subject: [PATCH 15/30] Show results --- .../features/ahbs/views/ahb-page/ahb-page.component.html | 2 ++ .../input-search-enhanced.component.html | 7 ++++++- .../input-search-enhanced.component.ts | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index efcb85c67..0b62ea820 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -30,6 +30,8 @@

(keyupEnter)="table()?.nextResult()" (nextClick)="table()?.nextResult()" (previousClick)="table()?.previousResult()" + [selectedPosition]="(table()?.markIndex() ?? 0) + 1" + [totalResults]="table()?.markElements()?.length" /> - - +
+ + @if ( + form.controls.pruefi.errors?.["required"] && + (form.controls.pruefi.dirty || form.controls.pruefi.touched) + ) { +

Dieses Feld ist ein Pflichtfeld

+ } +
+ - + diff --git a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html index 0b62ea820..b99bb0b84 100644 --- a/src/app/features/ahbs/views/ahb-page/ahb-page.component.html +++ b/src/app/features/ahbs/views/ahb-page/ahb-page.component.html @@ -35,7 +35,7 @@

/> + -
-

Finde dein AHB

-

lorem ipsum

- - Jetzt oeffnen - +
+
+
AHB Tabelle
+
+ Anwendungshandbücher für Menschen +
+
+
+

Was sind AHB Tabellen?

+

+ Und die Formatversion. Und dann steht hier noch mehr Anleitung zu dem + Prozess. Und vielleicht wird auch beschrieben, worum es eigentlich geht? + Also ansonsten könnte man auch über Kochrezepte schreiben oder + ähnliches.Gib hier die Prüfidentifikationsnummer ein. Und die + Formatversion. +

+

+ Und dann steht hier noch mehr Anleitung zu dem Prozess. Und vielleicht + wird auch beschrieben, worum es eigentlich geht? Also ansonsten könnte man + auch über Kochrezepte schreiben oder ähnliches. +

+
+
+

+ Und die Formatversion. Und dann steht hier noch mehr Anleitung zu dem + Prozess. Und vielleicht wird auch beschrieben, worum es eigentlich geht? + Also ansonsten könnte man auch über Kochrezepte schreiben oder + ähnliches.Gib hier die Prüfidentifikationsnummer ein. Und die + Formatversion. Und dann steht hier noch mehr Anleitung zu dem Prozess. Und + vielleicht wird auch beschrieben, worum es eigentlich geht? Also ansonsten + könnte man auch über Kochrezepte schreiben oder ähnliches.Gib hier die + Prüfidentifikationsnummer ein. +

+
+
+
+ Firmenlogo von Hochfrequenz +
From 97ac75dffc2413c453bcb0707768620fa9661358 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sat, 25 May 2024 11:19:24 +0200 Subject: [PATCH 19/30] Texte --- .../ahb-landing-page.component.html | 10 ++- .../landing-page/landing-page.component.html | 78 ++++++++++++------- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html b/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html index f92cfba5b..9bb6131ab 100644 --- a/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html +++ b/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html @@ -16,9 +16,13 @@

Gib hier die Prüfidentifikationsnummer ein. Und die Formatversion.

- Und dann steht hier noch mehr Anleitung zu dem Prozess. Und vielleicht - wird auch beschrieben, worum es eigentlich geht? Also ansonsten könnte - man auch über Kochrezepte schreiben oder ähnliches. + Nutzen Sie unser benutzerfreundliches Suchformular, um direkt auf die + Informationen zuzugreifen, die Sie benötigen. Geben Sie einfach die + FormatVersion und den Prüfidentifikator ein, und unser System liefert + Ihnen präzise Ergebnisse in Sekundenschnelle. So sparen Sie Zeit und + erhalten genau die Details, die für Ihre Arbeit relevant sind. + Probieren Sie es aus und erleben Sie, wie einfach und effizient die + Suche nach spezifischen Anwendungshandbüchern sein kann.

diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index 0ce3a6ae4..d1dbfd860 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -13,45 +13,67 @@

Finde dein AHB

-
+
-
AHB Tabelle
-
- Anwendungshandbücher für Menschen -
-
-
-

Was sind AHB Tabellen?

+

+ Willkommen bei Ahbesser – Anwendungshandbücher für Menschen +

- Und die Formatversion. Und dann steht hier noch mehr Anleitung zu dem - Prozess. Und vielleicht wird auch beschrieben, worum es eigentlich geht? - Also ansonsten könnte man auch über Kochrezepte schreiben oder - ähnliches.Gib hier die Prüfidentifikationsnummer ein. Und die - Formatversion. + Bei uns steht der Mensch im Mittelpunkt. Unser Ziel ist es, die komplexen + und oft schwer verständlichen Anwendungshandbücher der deutschen + Energiewirtschaft benutzerfreundlich und zugänglich zu machen. Mit unserem + Service können Sie gezielt nach FormatVersionen und Prüfidentifikatoren + suchen und ein einzelnes Dokument nach spezifischen Details durchsuchen. + So sparen Sie wertvolle Zeit und Nerven, die Sie stattdessen in Ihr + Kerngeschäft investieren können.

+
+
+

+ Effiziente Suche und einfache Navigation +

- Und dann steht hier noch mehr Anleitung zu dem Prozess. Und vielleicht - wird auch beschrieben, worum es eigentlich geht? Also ansonsten könnte man - auch über Kochrezepte schreiben oder ähnliches. + Wir wissen, dass das Durchforsten riesiger PDF-Dateien eine mühsame und + zeitraubende Aufgabe sein kann. Daher bieten wir Ihnen eine innovative + Plattform, die diesen Prozess erheblich vereinfacht. Unsere + benutzerfreundliche Suchfunktion ermöglicht es Ihnen, schnell und präzise + die Informationen zu finden, die Sie benötigen. Geben Sie einfach die + gewünschte FormatVersion oder den Prüfidentifikator ein, und schon + gelangen Sie zum relevanten Dokument – klar strukturiert und leicht + verständlich aufbereitet.

+

Ihre Vorteile auf einen Blick

+

+ Mit AHBesser wird die Arbeit mit Anwendungshandbüchern so effizient und + unkompliziert wie nie zuvor. Unsere Plattform bietet Ihnen: +

+
    +
  • + Zeitersparnis: Finden Sie gezielt die + Informationen, die Sie benötigen, ohne lange suchen zu müssen. +
  • +
  • + Benutzerfreundlichkeit: Eine intuitive + Navigation und klare Strukturen erleichtern Ihnen den Zugang zu den + Dokumenten. +
  • +
  • + Transparenz und Klarheit: Alle relevanten + Details auf einen Blick, ohne die Notwendigkeit, sich durch + unübersichtliche PDF-Dateien zu kämpfen. +
  • +

- Und die Formatversion. Und dann steht hier noch mehr Anleitung zu dem - Prozess. Und vielleicht wird auch beschrieben, worum es eigentlich geht? - Also ansonsten könnte man auch über Kochrezepte schreiben oder - ähnliches.Gib hier die Prüfidentifikationsnummer ein. Und die - Formatversion. Und dann steht hier noch mehr Anleitung zu dem Prozess. Und - vielleicht wird auch beschrieben, worum es eigentlich geht? Also ansonsten - könnte man auch über Kochrezepte schreiben oder ähnliches.Gib hier die - Prüfidentifikationsnummer ein. + Erleben Sie den Unterschied und optimieren Sie Ihre Arbeitsabläufe mit + unserer intelligenten Lösung für die Verwaltung von Anwendungshandbüchern + in der Energiewirtschaft. Willkommen bei AHbesser – weil wir an den + Menschen denken.

-
-
+
Date: Sat, 25 May 2024 12:28:32 +0200 Subject: [PATCH 20/30] Fix test --- .../views/landing-page/landing-page.component.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.spec.ts b/src/app/features/landingpage/views/landing-page/landing-page.component.spec.ts index cddb4fd6c..dad2f9850 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.spec.ts +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.spec.ts @@ -6,6 +6,8 @@ describe('LandingPageComponent', () => { it('should render', () => { const fixture = MockRender(LandingPageComponent); - expect(ngMocks.formatHtml(fixture)).toContain(''); + expect(ngMocks.formatHtml(fixture)).toContain( + 'Anwendungshandbücher für Menschen', + ); }); }); From c74c19444784fce9c09b7759b02cd55bb5ee12a7 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sat, 25 May 2024 12:52:49 +0200 Subject: [PATCH 21/30] Outsource icons --- .../icon-arrow-left.component.html | 12 ++++++ .../icon-arrow-left.component.spec.ts | 22 ++++++++++ .../icon-arrow-left.component.ts | 8 ++++ .../icon-arrow-right.component.html | 12 ++++++ .../icon-arrow-right.component.spec.ts | 22 ++++++++++ .../icon-arrow-right.component.ts | 8 ++++ .../icon-magnifying-glass.component.html | 14 +++++++ .../icon-magnifying-glass.component.spec.ts | 22 ++++++++++ .../icon-magnifying-glass.component.ts | 8 ++++ .../input-search-enhanced.component.html | 41 ++----------------- .../input-search-enhanced.component.ts | 10 ++++- 11 files changed, 140 insertions(+), 39 deletions(-) create mode 100644 src/app/shared/components/icon-arrow-left/icon-arrow-left.component.html create mode 100644 src/app/shared/components/icon-arrow-left/icon-arrow-left.component.spec.ts create mode 100644 src/app/shared/components/icon-arrow-left/icon-arrow-left.component.ts create mode 100644 src/app/shared/components/icon-arrow-right/icon-arrow-right.component.html create mode 100644 src/app/shared/components/icon-arrow-right/icon-arrow-right.component.spec.ts create mode 100644 src/app/shared/components/icon-arrow-right/icon-arrow-right.component.ts create mode 100644 src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.html create mode 100644 src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.spec.ts create mode 100644 src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.ts diff --git a/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.html b/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.html new file mode 100644 index 000000000..094a544df --- /dev/null +++ b/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.html @@ -0,0 +1,12 @@ + + + diff --git a/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.spec.ts b/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.spec.ts new file mode 100644 index 000000000..06d182e52 --- /dev/null +++ b/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { IconArrowLeftComponent } from './icon-arrow-left.component'; + +describe('IconArrowLeftComponent', () => { + let component: IconArrowLeftComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [IconArrowLeftComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(IconArrowLeftComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.ts b/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.ts new file mode 100644 index 000000000..7ef93c14d --- /dev/null +++ b/src/app/shared/components/icon-arrow-left/icon-arrow-left.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-icon-arrow-left', + standalone: true, + templateUrl: './icon-arrow-left.component.html', +}) +export class IconArrowLeftComponent {} diff --git a/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.html b/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.html new file mode 100644 index 000000000..a110db797 --- /dev/null +++ b/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.html @@ -0,0 +1,12 @@ + + + diff --git a/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.spec.ts b/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.spec.ts new file mode 100644 index 000000000..b1dbcb7aa --- /dev/null +++ b/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { IconArrowRightComponent } from './icon-arrow-right.component'; + +describe('IconArrowRightComponent', () => { + let component: IconArrowRightComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [IconArrowRightComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(IconArrowRightComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.ts b/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.ts new file mode 100644 index 000000000..ce2e5182a --- /dev/null +++ b/src/app/shared/components/icon-arrow-right/icon-arrow-right.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-icon-arrow-right', + standalone: true, + templateUrl: './icon-arrow-right.component.html', +}) +export class IconArrowRightComponent {} diff --git a/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.html b/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.html new file mode 100644 index 000000000..7c5cc7f2b --- /dev/null +++ b/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.html @@ -0,0 +1,14 @@ + + + diff --git a/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.spec.ts b/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.spec.ts new file mode 100644 index 000000000..00436ef0d --- /dev/null +++ b/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { IconMagnifyingGlassComponent } from './icon-magnifying-glass.component'; + +describe('IconMagnifyingGlassComponent', () => { + let component: IconMagnifyingGlassComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [IconMagnifyingGlassComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(IconMagnifyingGlassComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.ts b/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.ts new file mode 100644 index 000000000..1d405b146 --- /dev/null +++ b/src/app/shared/components/icon-magnifying-glass/icon-magnifying-glass.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-icon-magnifying-glass', + standalone: true, + templateUrl: './icon-magnifying-glass.component.html', +}) +export class IconMagnifyingGlassComponent {} diff --git a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html index 8cf1e984e..d96d01ac8 100644 --- a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html +++ b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.html @@ -1,20 +1,7 @@
diff --git a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts index 9eebe2f7a..fcbb9fe8c 100644 --- a/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts +++ b/src/app/shared/components/input-search-enhanced/input-search-enhanced.component.ts @@ -1,10 +1,18 @@ import { Component, effect, input, model, output } from '@angular/core'; import { FormsModule } from '@angular/forms'; +import { IconMagnifyingGlassComponent } from '../icon-magnifying-glass/icon-magnifying-glass.component'; +import { IconArrowLeftComponent } from '../icon-arrow-left/icon-arrow-left.component'; +import { IconArrowRightComponent } from '../icon-arrow-right/icon-arrow-right.component'; @Component({ selector: 'app-input-search-enhanced', standalone: true, - imports: [FormsModule], + imports: [ + FormsModule, + IconMagnifyingGlassComponent, + IconArrowLeftComponent, + IconArrowRightComponent, + ], templateUrl: './input-search-enhanced.component.html', }) export class InputSearchEnhancedComponent { From 9e8551c46427b91ed70123c3697b0b5a8d260a42 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sat, 25 May 2024 13:05:52 +0200 Subject: [PATCH 22/30] Outsource layout components --- .../landing-page/landing-page.component.html | 10 +-------- .../landing-page/landing-page.component.ts | 3 ++- .../components/footer/footer.component.html | 3 +++ .../footer/footer.component.spec.ts | 22 +++++++++++++++++++ .../components/footer/footer.component.ts | 10 +++++++++ .../components/header/header.component.html | 8 +------ .../components/header/header.component.ts | 3 ++- .../icon-logo/icon-logo.component.html | 9 ++++++++ .../icon-logo/icon-logo.component.spec.ts | 22 +++++++++++++++++++ .../icon-logo/icon-logo.component.ts | 10 +++++++++ 10 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 src/app/shared/components/footer/footer.component.html create mode 100644 src/app/shared/components/footer/footer.component.spec.ts create mode 100644 src/app/shared/components/footer/footer.component.ts create mode 100644 src/app/shared/components/icon-logo/icon-logo.component.html create mode 100644 src/app/shared/components/icon-logo/icon-logo.component.spec.ts create mode 100644 src/app/shared/components/icon-logo/icon-logo.component.ts diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index d1dbfd860..b9ba70079 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -73,12 +73,4 @@

Ihre Vorteile auf einen Blick

-
- Firmenlogo von Hochfrequenz -
+ diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.ts b/src/app/features/landingpage/views/landing-page/landing-page.component.ts index 852fc2cf0..28c561f99 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.ts +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.ts @@ -1,11 +1,12 @@ import { Component } from '@angular/core'; import { HeaderComponent } from '../../../../shared/components/header/header.component'; import { RouterLink } from '@angular/router'; +import { FooterComponent } from '../../../../shared/components/footer/footer.component'; @Component({ selector: 'app-landing-page', standalone: true, - imports: [HeaderComponent, RouterLink], + imports: [HeaderComponent, RouterLink, FooterComponent], templateUrl: './landing-page.component.html', }) export class LandingPageComponent {} diff --git a/src/app/shared/components/footer/footer.component.html b/src/app/shared/components/footer/footer.component.html new file mode 100644 index 000000000..05ee2fb9d --- /dev/null +++ b/src/app/shared/components/footer/footer.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/app/shared/components/footer/footer.component.spec.ts b/src/app/shared/components/footer/footer.component.spec.ts new file mode 100644 index 000000000..0070205d8 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterComponent } from './footer.component'; + +describe('FooterComponent', () => { + let component: FooterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FooterComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(FooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/footer/footer.component.ts b/src/app/shared/components/footer/footer.component.ts new file mode 100644 index 000000000..0ecd71fe6 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; +import { IconLogoComponent } from '../icon-logo/icon-logo.component'; + +@Component({ + selector: 'app-footer', + standalone: true, + imports: [IconLogoComponent], + templateUrl: './footer.component.html', +}) +export class FooterComponent {} diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html index 4041f83c5..a3882b19b 100644 --- a/src/app/shared/components/header/header.component.html +++ b/src/app/shared/components/header/header.component.html @@ -1,13 +1,7 @@

+ @for (formatVersion of formatVersions; track formatVersion) { } From 1e18a6a073c460f504f780325294110928a9dc37 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sat, 25 May 2024 13:17:16 +0200 Subject: [PATCH 24/30] Fix test --- src/app/shared/components/header/header.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/components/header/header.component.spec.ts b/src/app/shared/components/header/header.component.spec.ts index bd80e13ee..f29141e41 100644 --- a/src/app/shared/components/header/header.component.spec.ts +++ b/src/app/shared/components/header/header.component.spec.ts @@ -7,6 +7,6 @@ describe('HeaderComponent', () => { it('should render', () => { const fixture = MockRender(HeaderComponent); const html = ngMocks.formatHtml(fixture); - expect(html).toContain('alt="Firmenlogo von Hochfrequenz"'); + expect(html).toContain('app-icon-logo'); }); }); From 4a69a3c4c2b0b67130c2495b9e3c7fb4e96ff0e9 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sun, 26 May 2024 22:35:15 +0200 Subject: [PATCH 25/30] Update src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html Co-authored-by: kevin <68426071+hf-krechan@users.noreply.github.com> --- .../ahbs/views/ahb-landing-page/ahb-landing-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html b/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html index 9bb6131ab..a97c3bb3e 100644 --- a/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html +++ b/src/app/features/ahbs/views/ahb-landing-page/ahb-landing-page.component.html @@ -18,7 +18,7 @@

Nutzen Sie unser benutzerfreundliches Suchformular, um direkt auf die Informationen zuzugreifen, die Sie benötigen. Geben Sie einfach die - FormatVersion und den Prüfidentifikator ein, und unser System liefert + Formatversion und den Prüfidentifikator ein, und unser System liefert Ihnen präzise Ergebnisse in Sekundenschnelle. So sparen Sie Zeit und erhalten genau die Details, die für Ihre Arbeit relevant sind. Probieren Sie es aus und erleben Sie, wie einfach und effizient die From 43fd4574294b8e4a48da9c98ba4550386713ea85 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sun, 26 May 2024 22:35:31 +0200 Subject: [PATCH 26/30] Update src/app/features/landingpage/views/landing-page/landing-page.component.html Co-authored-by: kevin <68426071+hf-krechan@users.noreply.github.com> --- .../landingpage/views/landing-page/landing-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index b9ba70079..cb6319712 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -22,7 +22,7 @@

Bei uns steht der Mensch im Mittelpunkt. Unser Ziel ist es, die komplexen und oft schwer verständlichen Anwendungshandbücher der deutschen Energiewirtschaft benutzerfreundlich und zugänglich zu machen. Mit unserem - Service können Sie gezielt nach FormatVersionen und Prüfidentifikatoren + Service können Sie gezielt nach Formatversionen und Prüfidentifikatoren suchen und ein einzelnes Dokument nach spezifischen Details durchsuchen. So sparen Sie wertvolle Zeit und Nerven, die Sie stattdessen in Ihr Kerngeschäft investieren können. From c1a51c69b210d35721d194613d48aab37fcbb7ae Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sun, 26 May 2024 22:35:52 +0200 Subject: [PATCH 27/30] Update src/app/features/landingpage/views/landing-page/landing-page.component.html Co-authored-by: kevin <68426071+hf-krechan@users.noreply.github.com> --- .../landingpage/views/landing-page/landing-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index cb6319712..9f5a1e36c 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -46,7 +46,7 @@

Ihre Vorteile auf einen Blick

- Mit AHBesser wird die Arbeit mit Anwendungshandbüchern so effizient und + Mit AHB Tabellen wird die Arbeit mit Anwendungshandbüchern so effizient und unkompliziert wie nie zuvor. Unsere Plattform bietet Ihnen:

    From fcd81b93d6b203605bcf762287f44268ce5a20a6 Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sun, 26 May 2024 22:35:59 +0200 Subject: [PATCH 28/30] Update src/app/features/landingpage/views/landing-page/landing-page.component.html Co-authored-by: kevin <68426071+hf-krechan@users.noreply.github.com> --- .../landingpage/views/landing-page/landing-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index 9f5a1e36c..70f1d0ae9 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -38,7 +38,7 @@

    Plattform, die diesen Prozess erheblich vereinfacht. Unsere benutzerfreundliche Suchfunktion ermöglicht es Ihnen, schnell und präzise die Informationen zu finden, die Sie benötigen. Geben Sie einfach die - gewünschte FormatVersion oder den Prüfidentifikator ein, und schon + gewünschte Formatversion oder den Prüfidentifikator ein, und schon gelangen Sie zum relevanten Dokument – klar strukturiert und leicht verständlich aufbereitet.

    From d4a758b1a90e176f06a4f27b7bd80f6a2eee10fe Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sun, 26 May 2024 22:36:29 +0200 Subject: [PATCH 29/30] Update src/app/features/landingpage/views/landing-page/landing-page.component.html Co-authored-by: kevin <68426071+hf-krechan@users.noreply.github.com> --- .../landingpage/views/landing-page/landing-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index 70f1d0ae9..6772af038 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -68,7 +68,7 @@

    Ihre Vorteile auf einen Blick

    Erleben Sie den Unterschied und optimieren Sie Ihre Arbeitsabläufe mit unserer intelligenten Lösung für die Verwaltung von Anwendungshandbüchern - in der Energiewirtschaft. Willkommen bei AHbesser – weil wir an den + in der Energiewirtschaft. Willkommen bei AHB Tabellen – weil wir an den Menschen denken.

From be3ab5993dc763f65ef2806b8858ed043be2c4bd Mon Sep 17 00:00:00 2001 From: Maxim Uhlemann Date: Sun, 26 May 2024 22:41:22 +0200 Subject: [PATCH 30/30] ... --- .../views/landing-page/landing-page.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/features/landingpage/views/landing-page/landing-page.component.html b/src/app/features/landingpage/views/landing-page/landing-page.component.html index 6772af038..d59c74e4c 100644 --- a/src/app/features/landingpage/views/landing-page/landing-page.component.html +++ b/src/app/features/landingpage/views/landing-page/landing-page.component.html @@ -46,8 +46,8 @@

Ihre Vorteile auf einen Blick

- Mit AHB Tabellen wird die Arbeit mit Anwendungshandbüchern so effizient und - unkompliziert wie nie zuvor. Unsere Plattform bietet Ihnen: + Mit AHB Tabellen wird die Arbeit mit Anwendungshandbüchern so effizient + und unkompliziert wie nie zuvor. Unsere Plattform bietet Ihnen: