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';
import { MatIcon } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { NavigationEnd, Router, RouterEvent } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { createVorgangListResource } from 'libs/vorgang-shared/test/vorgang';
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 { VorgangSearchClearButtonComponent } from './vorgang-search-clear-button/vorgang-search-clear-button.component';
import { VorgangSearchComponent } from './vorgang-search.component';
......@@ -71,6 +72,13 @@ describe('VorgangSearchComponent', () => {
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 searchClearButton: string = getDataTestIdOf('vorgang-search-clear-button');
......@@ -116,6 +124,10 @@ describe('VorgangSearchComponent', () => {
provide: NavigationService,
useValue: navigationService,
},
{
provide: Router,
useValue: routerMock,
},
],
}).compileComponents();
});
......@@ -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', () => {
beforeEach(() => {
searchStringSubj.next('test');
......
......@@ -21,15 +21,27 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* 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 {
VorgangHeaderLinkRel,
VorgangListLinkRel,
VorgangListResource,
} 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';
@Component({
......@@ -38,7 +50,7 @@ import { VorgangSearchFormService } from './vorgang-search.formservice';
styleUrls: ['./vorgang-search.component.scss'],
providers: [VorgangSearchFormService],
})
export class VorgangSearchComponent {
export class VorgangSearchComponent implements OnInit, OnDestroy {
@Input() vorgangSearchPreviewList: StateResource<VorgangListResource>;
@Input() searchString: string;
......@@ -49,11 +61,25 @@ export class VorgangSearchComponent {
@ViewChild('searchAutoComplete') searchAutoComplete: MatAutocomplete;
previouslyEnteredSearchValue: string;
private subscription: Subscription;
readonly vorgangHeaderLinkRel = VorgangHeaderLinkRel;
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 {
this.previouslyEnteredSearchValue = this.formService.getValue();
......@@ -93,4 +119,8 @@ export class VorgangSearchComponent {
focus(): void {
this.searchInput.nativeElement.focus();
}
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
}
......@@ -23,6 +23,7 @@
*/
import { EMPTY_STRING } from '@alfa-client/tech-shared';
import { Antragsteller, Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { NavigationEnd } from '@angular/router';
import {
createAntragsteller,
createEingang,
......@@ -33,6 +34,7 @@ import {
VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN,
getAktenzeichenText,
getEmpfaenger,
isVorgangSearchRoute,
} from './vorgang-util';
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', () => {
it('should return nachname only if exists', () => {
const antragsteller: Antragsteller = { ...createAntragsteller(), vorname: undefined };
......
......@@ -23,6 +23,7 @@
*/
import { EMPTY_STRING } from '@alfa-client/tech-shared';
import { Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { NavigationEnd } from '@angular/router';
export const VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN = 'kein Aktenzeichen';
......@@ -34,6 +35,10 @@ export function getEmpfaenger(vorgangWithEingangResource: VorgangWithEingangReso
return `${getVorname(vorgangWithEingangResource)} ${getNachname(vorgangWithEingangResource)}`.trim();
}
export function isVorgangSearchRoute(navigationEnd: NavigationEnd): boolean {
return navigationEnd.url === '/alle/search';
}
function getVorname(vorgangWithEingangResource: VorgangWithEingangResource): 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