From 07e562cee9158db41ef6875849b6e54f7a7dfcb8 Mon Sep 17 00:00:00 2001 From: g-jaskowski Date: Thu, 2 Oct 2025 08:43:28 +0200 Subject: [PATCH] [ACS-10165] filter out inaccessible locations from autocomplete --- ...ilter-autocomplete-chips.component.spec.ts | 31 ++++++++++++++++--- ...rch-filter-autocomplete-chips.component.ts | 10 +++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.spec.ts b/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.spec.ts index 31726e1178..fafe022cab 100644 --- a/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.spec.ts +++ b/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.spec.ts @@ -166,24 +166,47 @@ describe('SearchFilterAutocompleteChipsComponent', () => { }); it('should populate LOCATION field options with sites and predefined values from config', (done) => { + const sitesMock: SitePaging = { + list: { + pagination: {}, + entries: [{ entry: { guid: 'site1', id: 'site1', title: 'Marketing', visibility: 'public' } }] + } + }; + component.settings.field = AutocompleteField.LOCATION; + component.settings.autocompleteOptions = [{ value: 'Repository', query: `PATH:'somePath'` }]; + spyOn(sitesService, 'getSites').and.returnValue(of(sitesMock)); + component.onInputChange('mark'); + component.autocompleteOptions$.subscribe((result) => { + expect(result).toEqual([ + { id: 'site1', value: 'Marketing' }, + { value: 'Repository', query: `PATH:'somePath'` } + ]); + done(); + }); + }); + + it('should filter LOCATION field options', (done) => { const sitesMock: SitePaging = { list: { pagination: {}, entries: [ { entry: { guid: 'site1', id: 'site1', title: 'Marketing', visibility: 'public' } }, - { entry: { guid: 'site2', id: 'site2', title: 'Finance', visibility: 'private' } } + { entry: { guid: 'site2', id: 'site2', title: 'Finance', visibility: 'moderated' } }, + { entry: { guid: 'site3', id: 'site3', title: 'HR', visibility: 'private' } }, + { entry: { guid: 'site4', id: 'site4', title: 'Legal', visibility: 'private', role: 'Consumer' } }, + { entry: { guid: 'site5', id: 'site5', title: 'IT', visibility: 'moderated', role: 'SiteManager' } } ] } }; component.settings.field = AutocompleteField.LOCATION; - component.settings.autocompleteOptions = [{ value: 'Repository', query: `PATH:'somePath'` }]; + component.settings.autocompleteOptions = []; spyOn(sitesService, 'getSites').and.returnValue(of(sitesMock)); component.onInputChange('mark'); component.autocompleteOptions$.subscribe((result) => { expect(result).toEqual([ { id: 'site1', value: 'Marketing' }, - { id: 'site2', value: 'Finance' }, - { value: 'Repository', query: `PATH:'somePath'` } + { id: 'site4', value: 'Legal' }, + { id: 'site5', value: 'IT' } ]); done(); }); diff --git a/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.ts b/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.ts index 0d3909af0e..c1caa63551 100644 --- a/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.ts +++ b/lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.ts @@ -198,10 +198,12 @@ export class SearchFilterAutocompleteChipsComponent implements SearchWidget, OnI .pipe( map((sites) => { const predefinedOptions = this.settings?.autocompleteOptions || []; - const sitesOptions = sites.list.entries.map((siteEntry) => ({ - id: siteEntry.entry.id, - value: siteEntry.entry.title - })); + const sitesOptions = sites.list.entries + .filter((siteEntry) => siteEntry.entry.visibility === 'public' || siteEntry.entry?.role) + .map((siteEntry) => ({ + id: siteEntry.entry.id, + value: siteEntry.entry.title + })); return [...sitesOptions, ...predefinedOptions]; }) )