From abddd51796b4519c541ceda2fcb7e56e3a09cfb3 Mon Sep 17 00:00:00 2001
From: Dominik Iwanek <141320833+dominikiwanekhyland@users.noreply.github.com>
Date: Mon, 30 Mar 2026 12:08:42 +0200
Subject: [PATCH] [ACS-10475] [FE][Search] UX improvements for search (#5112)
---
.../search-input/search-input.component.spec.ts | 10 +++++++++-
.../search/search-input/search-input.component.ts | 12 +++++++++---
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts b/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts
index 67bd5a427..d11c7b577 100644
--- a/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts
+++ b/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts
@@ -22,7 +22,7 @@
* from Hyland Software. If not, see .
*/
-import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { AppTestingModule } from '../../../testing/app-testing.module';
import { SearchInputComponent } from './search-input.component';
import { Subject } from 'rxjs';
@@ -124,6 +124,14 @@ describe('SearchInputComponent', () => {
expect(searchButton).toBeTruthy();
});
+ it('should focus the search input field after view init', fakeAsync(() => {
+ const input = testingUtils.getInputByCSS('.app-search-input');
+ spyOn(input, 'focus');
+ component.ngAfterViewInit();
+ tick();
+ expect(input.focus).toHaveBeenCalled();
+ }));
+
describe('onSearchSubmit', () => {
it('should execute search on submit with valid term', () => {
component.onSearchSubmit('happy faces only');
diff --git a/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts b/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts
index 6ac32107f..48c3a4940 100644
--- a/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts
+++ b/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts
@@ -24,7 +24,7 @@
import { AppHookService } from '@alfresco/aca-shared';
import { AppConfigService } from '@alfresco/adf-core';
-import { Component, DestroyRef, ElementRef, inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
+import { AfterViewInit, Component, DestroyRef, ElementRef, inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, NavigationSkipped, NavigationStart, Params, Router } from '@angular/router';
import { SearchNavigationService } from '../search-navigation.service';
import { SearchFilterService } from '../search-filter.service';
@@ -51,7 +51,7 @@ import { extractSearchedWordFromEncodedQuery } from '../../../utils/aca-search-u
encapsulation: ViewEncapsulation.None,
host: { class: 'aca-search-input' }
})
-export class SearchInputComponent implements OnInit, OnDestroy {
+export class SearchInputComponent implements OnInit, AfterViewInit, OnDestroy {
private readonly queryBuilder = inject(SearchQueryBuilderService);
private readonly config = inject(AppConfigService);
private readonly router = inject(Router);
@@ -75,7 +75,7 @@ export class SearchInputComponent implements OnInit, OnDestroy {
this.searchOnChange = this.config.get('search.aca:triggeredOnChange', true);
}
- ngOnInit() {
+ ngOnInit(): void {
this.initSearchState();
this.subscribeToRouteParams();
@@ -84,6 +84,12 @@ export class SearchInputComponent implements OnInit, OnDestroy {
});
}
+ ngAfterViewInit(): void {
+ setTimeout(() => {
+ this.searchInputField.nativeElement.focus();
+ });
+ }
+
ngOnDestroy(): void {
this.filterService.removeContentFilters();
}