diff --git a/modules/ui/src/app/model/filters.spec.ts b/modules/ui/src/app/model/filters.spec.ts index dcc5ee08e..f007c1b39 100644 --- a/modules/ui/src/app/model/filters.spec.ts +++ b/modules/ui/src/app/model/filters.spec.ts @@ -99,6 +99,7 @@ describe('Filters Models', () => { describe('Enums', () => { it('should define FilterItem values correctly', () => { + expect(FilterItem.QuickSearch).toBe('Raw search'); expect(FilterItem.DeviceInfo).toBe('Device'); expect(FilterItem.DeviceFirmware).toBe('Firmware'); expect(FilterItem.Results).toBe('Result'); @@ -123,6 +124,7 @@ describe('Filters Models', () => { }); it('should define FilterTitle values correctly', () => { + expect(FilterTitle.QuickSearch).toBe('Enter raw search'); expect(FilterTitle.DeviceInfo).toBe('Enter device name'); expect(FilterTitle.DeviceFirmware).toBe('Enter firmware name'); expect(FilterTitle.Results).toBe('Select status'); diff --git a/modules/ui/src/app/model/filters.ts b/modules/ui/src/app/model/filters.ts index cc7bb7f47..eea9d51cc 100644 --- a/modules/ui/src/app/model/filters.ts +++ b/modules/ui/src/app/model/filters.ts @@ -37,6 +37,7 @@ export interface FilterMenuItem { } export enum FilterItem { + QuickSearch = 'Raw search', DeviceInfo = 'Device', DeviceFirmware = 'Firmware', Results = 'Result', @@ -61,6 +62,7 @@ export enum FilterName { } export enum FilterTitle { + QuickSearch = 'Enter raw search', DeviceInfo = 'Enter device name', DeviceFirmware = 'Enter firmware name', Results = 'Select status', diff --git a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html index fdc361544..d778b6d8c 100644 --- a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html +++ b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html @@ -21,6 +21,16 @@

{{ data.title }}

'max-height': 'calc(100vh - ' + (topPosition + dialogTitle) + 'px)', }">
+ @if (data.filter === FilterName.QuickSearch) { + + Raw search + + + } @if (data.filter === FilterName.DeviceInfo) { Device diff --git a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.spec.ts b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.spec.ts index 43083d21d..a06d4070f 100644 --- a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.spec.ts +++ b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.spec.ts @@ -114,6 +114,7 @@ describe('FilterDialogComponent', () => { fixture.detectChanges(); component.filterForm.get('deviceInfo')?.setValue('deviceInfo '); const mockFormData = { + quickSearch: '', deviceInfo: 'deviceInfo', deviceFirmware: '', location: '', @@ -144,6 +145,7 @@ describe('FilterDialogComponent', () => { component.results.controls[0].setValue(true); const mockFormData = { + quickSearch: '', deviceInfo: '', deviceFirmware: '', location: 'Data Center 1', @@ -163,6 +165,35 @@ describe('FilterDialogComponent', () => { expect(closeSpy).toHaveBeenCalledWith(mockFormData); }); + it('should close dialog with raw search on "confirm" click', () => { + component.data = { + trigger: mockClientRest, + filter: FilterName.QuickSearch, + title: FilterTitle.QuickSearch, + }; + fixture.detectChanges(); + component.filterForm.get('quickSearch')?.setValue(' my raw query '); + const mockFormData = { + quickSearch: 'my raw query', + deviceInfo: '', + deviceFirmware: '', + location: '', + linuxEnv: '', + pythonVersion: '', + kernel: '', + results: [], + dateRange: new DateRange(), + }; + const closeSpy = spyOn(component.dialogRef, 'close'); + const confirmButton = compiled.querySelector( + '.confirm-button' + ) as HTMLButtonElement; + + confirmButton?.click(); + + expect(closeSpy).toHaveBeenCalledWith(mockFormData); + }); + it('should auto-populate end date with today if start date is set and end date is empty on confirm', () => { fixture.detectChanges(); const startDate = new Date('2024-01-01'); @@ -199,6 +230,9 @@ describe('FilterDialogComponent', () => { it('should provide form control getters', () => { fixture.detectChanges(); + expect(component.quickSearch).toBe( + component.filterForm.get('quickSearch')! + ); expect(component.deviceInfo).toBe(component.filterForm.get('deviceInfo')!); expect(component.deviceFirmware).toBe( component.filterForm.get('deviceFirmware')! diff --git a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts index 41b566fbd..ca7920943 100644 --- a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts +++ b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts @@ -161,6 +161,10 @@ export class FilterDialogComponent this.dialogRef = dialogRef; } + get quickSearch() { + return this.filterForm.get('quickSearch') as AbstractControl; + } + get deviceInfo() { return this.filterForm.get('deviceInfo') as AbstractControl; } @@ -238,6 +242,7 @@ export class FilterDialogComponent } private createFilterForm() { this.filterForm = this.fb.group({ + quickSearch: ['', []], deviceInfo: ['', [this.deviceValidators.deviceStringFormat()]], deviceFirmware: ['', [this.deviceValidators.firmwareStringFormat()]], location: ['', []], @@ -293,6 +298,7 @@ export class FilterDialogComponent } const filtersData = { + quickSearch: formData.quickSearch?.trim() || '', deviceInfo: formData.deviceInfo?.trim() || '', deviceFirmware: formData.deviceFirmware?.trim() || '', location: formData.location?.trim() || '', diff --git a/modules/ui/src/app/pages/reports/components/search/search.component.html b/modules/ui/src/app/pages/reports/components/search/search.component.html index 8c4cc74d9..b05c338e0 100644 --- a/modules/ui/src/app/pages/reports/components/search/search.component.html +++ b/modules/ui/src/app/pages/reports/components/search/search.component.html @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -
+
} - -
- @if (inputValue || hasActiveFilters()) { + @if (hasActiveFilters()) {