Skip to content
Snippets Groups Projects
Commit 8a495f5b authored by OZGCloud's avatar OZGCloud
Browse files

Merge branch 'master' into OZG-5718-reset-bescheid-upload-in-progress

parents 644f870d d9a095e9
No related branches found
No related tags found
No related merge requests found
...@@ -51,11 +51,12 @@ import { MatFormFieldModule } from '@angular/material/form-field'; ...@@ -51,11 +51,12 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIcon } from '@angular/material/icon'; import { MatIcon } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input'; import { MatInputModule } from '@angular/material/input';
import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { NavigationEnd, Router, RouterEvent } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing'; import { RouterTestingModule } from '@angular/router/testing';
import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { createVorgangListResource } from 'libs/vorgang-shared/test/vorgang'; import { createVorgangListResource } from 'libs/vorgang-shared/test/vorgang';
import { MockComponent } from 'ng-mocks'; import { MockComponent } from 'ng-mocks';
import { BehaviorSubject, Subject, of } from 'rxjs'; import { BehaviorSubject, ReplaySubject, Subject, of } from 'rxjs';
import { VorgangSearchAutocompleteOptionsContentComponent } from './vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component'; import { VorgangSearchAutocompleteOptionsContentComponent } from './vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component';
import { VorgangSearchClearButtonComponent } from './vorgang-search-clear-button/vorgang-search-clear-button.component'; import { VorgangSearchClearButtonComponent } from './vorgang-search-clear-button/vorgang-search-clear-button.component';
import { VorgangSearchComponent } from './vorgang-search.component'; import { VorgangSearchComponent } from './vorgang-search.component';
...@@ -71,6 +72,13 @@ describe('VorgangSearchComponent', () => { ...@@ -71,6 +72,13 @@ describe('VorgangSearchComponent', () => {
const searchStringSubj: Subject<string> = new BehaviorSubject(EMPTY_STRING); const searchStringSubj: Subject<string> = new BehaviorSubject(EMPTY_STRING);
const routerEvents: ReplaySubject<RouterEvent> = new ReplaySubject<RouterEvent>();
const routerMock = {
navigate: jest.fn(),
url: '/',
events: routerEvents.asObservable(),
};
const searchPreviewOption: string = getDataTestClassOf('search-preview-option'); const searchPreviewOption: string = getDataTestClassOf('search-preview-option');
const searchClearButton: string = getDataTestIdOf('vorgang-search-clear-button'); const searchClearButton: string = getDataTestIdOf('vorgang-search-clear-button');
...@@ -116,6 +124,10 @@ describe('VorgangSearchComponent', () => { ...@@ -116,6 +124,10 @@ describe('VorgangSearchComponent', () => {
provide: NavigationService, provide: NavigationService,
useValue: navigationService, useValue: navigationService,
}, },
{
provide: Router,
useValue: routerMock,
},
], ],
}).compileComponents(); }).compileComponents();
}); });
...@@ -154,6 +166,26 @@ describe('VorgangSearchComponent', () => { ...@@ -154,6 +166,26 @@ describe('VorgangSearchComponent', () => {
}); });
}); });
describe('ngOnInit', () => {
it('should set focus if path is "/alle/search"', () => {
component.focus = jest.fn();
routerEvents.next(new NavigationEnd(1, '/alle/search', ''));
component.ngOnInit();
expect(component.focus).toHaveBeenCalled();
});
it('should not set focus if path is not "/alle/search"', () => {
component.focus = jest.fn();
routerEvents.next(new NavigationEnd(1, '/alle', ''));
component.ngOnInit();
expect(component.focus).toHaveBeenCalled();
});
});
describe('search clear button', () => { describe('search clear button', () => {
beforeEach(() => { beforeEach(() => {
searchStringSubj.next('test'); searchStringSubj.next('test');
......
...@@ -21,15 +21,27 @@ ...@@ -21,15 +21,27 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen * Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { MatAutocomplete } from '@angular/material/autocomplete';
import { MatButton } from '@angular/material/button';
import { StateResource, isNotNil } from '@alfa-client/tech-shared'; import { StateResource, isNotNil } from '@alfa-client/tech-shared';
import { import {
VorgangHeaderLinkRel, VorgangHeaderLinkRel,
VorgangListLinkRel, VorgangListLinkRel,
VorgangListResource, VorgangListResource,
} from '@alfa-client/vorgang-shared'; } from '@alfa-client/vorgang-shared';
import {
Component,
ElementRef,
EventEmitter,
Input,
OnDestroy,
OnInit,
Output,
ViewChild,
} from '@angular/core';
import { MatAutocomplete } from '@angular/material/autocomplete';
import { MatButton } from '@angular/material/button';
import { Event, NavigationEnd, Router } from '@angular/router';
import { Subscription, filter } from 'rxjs';
import { isVorgangSearchRoute } from '../../vorgang-util';
import { VorgangSearchFormService } from './vorgang-search.formservice'; import { VorgangSearchFormService } from './vorgang-search.formservice';
@Component({ @Component({
...@@ -38,7 +50,7 @@ import { VorgangSearchFormService } from './vorgang-search.formservice'; ...@@ -38,7 +50,7 @@ import { VorgangSearchFormService } from './vorgang-search.formservice';
styleUrls: ['./vorgang-search.component.scss'], styleUrls: ['./vorgang-search.component.scss'],
providers: [VorgangSearchFormService], providers: [VorgangSearchFormService],
}) })
export class VorgangSearchComponent { export class VorgangSearchComponent implements OnInit, OnDestroy {
@Input() vorgangSearchPreviewList: StateResource<VorgangListResource>; @Input() vorgangSearchPreviewList: StateResource<VorgangListResource>;
@Input() searchString: string; @Input() searchString: string;
...@@ -49,11 +61,25 @@ export class VorgangSearchComponent { ...@@ -49,11 +61,25 @@ export class VorgangSearchComponent {
@ViewChild('searchAutoComplete') searchAutoComplete: MatAutocomplete; @ViewChild('searchAutoComplete') searchAutoComplete: MatAutocomplete;
previouslyEnteredSearchValue: string; previouslyEnteredSearchValue: string;
private subscription: Subscription;
readonly vorgangHeaderLinkRel = VorgangHeaderLinkRel; readonly vorgangHeaderLinkRel = VorgangHeaderLinkRel;
readonly vorgangListLinkRel = VorgangListLinkRel; readonly vorgangListLinkRel = VorgangListLinkRel;
constructor(public formService: VorgangSearchFormService) {} constructor(
public formService: VorgangSearchFormService,
public router: Router,
) {}
ngOnInit(): void {
this.subscription = this.router.events
.pipe(filter((event: Event) => event instanceof NavigationEnd))
.subscribe((navigationEnd: Event) => {
if (isVorgangSearchRoute(navigationEnd as NavigationEnd)) {
this.focus();
}
});
}
submit(): void { submit(): void {
this.previouslyEnteredSearchValue = this.formService.getValue(); this.previouslyEnteredSearchValue = this.formService.getValue();
...@@ -93,4 +119,8 @@ export class VorgangSearchComponent { ...@@ -93,4 +119,8 @@ export class VorgangSearchComponent {
focus(): void { focus(): void {
this.searchInput.nativeElement.focus(); this.searchInput.nativeElement.focus();
} }
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
} }
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
import { EMPTY_STRING } from '@alfa-client/tech-shared'; import { EMPTY_STRING } from '@alfa-client/tech-shared';
import { Antragsteller, Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Antragsteller, Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { NavigationEnd } from '@angular/router';
import { import {
createAntragsteller, createAntragsteller,
createEingang, createEingang,
...@@ -33,6 +34,7 @@ import { ...@@ -33,6 +34,7 @@ import {
VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN, VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN,
getAktenzeichenText, getAktenzeichenText,
getEmpfaenger, getEmpfaenger,
isVorgangSearchRoute,
} from './vorgang-util'; } from './vorgang-util';
describe('Vorgang Util', () => { describe('Vorgang Util', () => {
...@@ -54,6 +56,24 @@ describe('Vorgang Util', () => { ...@@ -54,6 +56,24 @@ describe('Vorgang Util', () => {
}); });
}); });
describe('isSearchRoute', () => {
it('should return true', () => {
const searchNavigationEnd: NavigationEnd = new NavigationEnd(1, '/alle/search', '');
const result: boolean = isVorgangSearchRoute(searchNavigationEnd);
expect(result).toBeTruthy();
});
it('should return false', () => {
const notSearchNavigationEnd: NavigationEnd = new NavigationEnd(1, '/alle', '');
const result: boolean = isVorgangSearchRoute(notSearchNavigationEnd);
expect(result).toBeTruthy();
});
});
describe('getEmpfaenger', () => { describe('getEmpfaenger', () => {
it('should return nachname only if exists', () => { it('should return nachname only if exists', () => {
const antragsteller: Antragsteller = { ...createAntragsteller(), vorname: undefined }; const antragsteller: Antragsteller = { ...createAntragsteller(), vorname: undefined };
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
import { EMPTY_STRING } from '@alfa-client/tech-shared'; import { EMPTY_STRING } from '@alfa-client/tech-shared';
import { Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { NavigationEnd } from '@angular/router';
export const VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN = 'kein Aktenzeichen'; export const VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN = 'kein Aktenzeichen';
...@@ -34,6 +35,10 @@ export function getEmpfaenger(vorgangWithEingangResource: VorgangWithEingangReso ...@@ -34,6 +35,10 @@ export function getEmpfaenger(vorgangWithEingangResource: VorgangWithEingangReso
return `${getVorname(vorgangWithEingangResource)} ${getNachname(vorgangWithEingangResource)}`.trim(); return `${getVorname(vorgangWithEingangResource)} ${getNachname(vorgangWithEingangResource)}`.trim();
} }
export function isVorgangSearchRoute(navigationEnd: NavigationEnd): boolean {
return navigationEnd.url === '/alle/search';
}
function getVorname(vorgangWithEingangResource: VorgangWithEingangResource): string { function getVorname(vorgangWithEingangResource: VorgangWithEingangResource): string {
return vorgangWithEingangResource.eingang.antragsteller?.vorname ?? EMPTY_STRING; return vorgangWithEingangResource.eingang.antragsteller?.vorname ?? EMPTY_STRING;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment