Files
dspace-angular/src/app/search-navbar/search-navbar.component.ts
Sascha Szott d5aca7633c site search should not adopt existing URL query string parameters (#2818)
src/app/search-navbar: do not merge existing query params

Do not merge existing query params when using site search from MyDSpace workflow.
2024-02-22 11:10:02 +03:00

73 lines
2.0 KiB
TypeScript

import { Component, ElementRef, ViewChild } from '@angular/core';
import { UntypedFormBuilder } from '@angular/forms';
import { Router } from '@angular/router';
import { SearchService } from '../core/shared/search/search.service';
import { expandSearchInput } from '../shared/animations/slide';
/**
* The search box in the header that expands on focus and collapses on focus out
*/
@Component({
selector: 'ds-search-navbar',
templateUrl: './search-navbar.component.html',
styleUrls: ['./search-navbar.component.scss'],
animations: [expandSearchInput]
})
export class SearchNavbarComponent {
// The search form
searchForm;
// Whether or not the search bar is expanded, boolean for html ngIf, string fo AngularAnimation state change
searchExpanded = false;
isExpanded = 'collapsed';
// Search input field
@ViewChild('searchInput') searchField: ElementRef;
constructor(private formBuilder: UntypedFormBuilder, private router: Router, private searchService: SearchService) {
this.searchForm = this.formBuilder.group(({
query: '',
}));
}
/**
* Expands search bar by angular animation, see expandSearchInput
*/
expand() {
this.searchExpanded = true;
this.isExpanded = 'expanded';
this.editSearch();
}
/**
* Collapses & blurs search bar by angular animation, see expandSearchInput
*/
collapse() {
this.searchField.nativeElement.blur();
this.searchExpanded = false;
this.isExpanded = 'collapsed';
}
/**
* Focuses on input search bar so search can be edited
*/
editSearch(): void {
this.searchField.nativeElement.focus();
}
/**
* Submits the search (on enter or on search icon click)
* @param data Data for the searchForm, containing the search query
*/
onSubmit(data: any) {
this.collapse();
const queryParams = Object.assign({}, data);
const linkToNavigateTo = [this.searchService.getSearchLink().replace('/', '')];
this.searchForm.reset();
this.router.navigate(linkToNavigateTo, {
queryParams: queryParams
});
}
}