diff --git a/lib/content-services/src/lib/common/services/sites.service.ts b/lib/content-services/src/lib/common/services/sites.service.ts index a48a595bca..49e8859aa0 100644 --- a/lib/content-services/src/lib/common/services/sites.service.ts +++ b/lib/content-services/src/lib/common/services/sites.service.ts @@ -17,9 +17,9 @@ import { Injectable } from '@angular/core'; import { from, Observable } from 'rxjs'; -import { AlfrescoApiService } from '@alfresco/adf-core'; +import {AlfrescoApiService, UserPreferencesService} from '@alfresco/adf-core'; import { - Node, + Node, ResultSetPaging, SearchApi, SiteBodyCreate, SiteEntry, SiteGroupEntry, @@ -38,12 +38,19 @@ import { }) export class SitesService { private _sitesApi: SitesApi; + private _searchApi: SearchApi; + get sitesApi(): SitesApi { this._sitesApi = this._sitesApi ?? new SitesApi(this.apiService.getInstance()); return this._sitesApi; } - constructor(private apiService: AlfrescoApiService) {} + get searchApi(): SearchApi { + this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance()); + return this._searchApi; + } + + constructor(private apiService: AlfrescoApiService, private userPreferencesService: UserPreferencesService) {} /** * Create a site @@ -216,6 +223,32 @@ export class SitesService { return from(this.sitesApi.rejectSiteMembershipRequest(siteId, inviteeId, opts)); } + /** + * Searches sites by their name. + * + * @param name Value for name which should be used during searching categories. + * @param skipCount Specify how many first results should be skipped. Default 0. + * @param maxItems Specify max number of returned categories. Default is specified by UserPreferencesService. + * @returns Observable Found categories which name contains searched name. + */ + searchSite(name: string, skipCount = 0, maxItems?: number): Observable { + maxItems = maxItems || this.userPreferencesService.paginationSize; + console.log(name) + return from( + this.searchApi.search({ + query: { + language: 'afts', + query: `*` + }, + paging: { + skipCount, + maxItems + }, + include: ['path'] + }) + ); + } + /** * List group membership for site * diff --git a/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.html b/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.html index 91b08741e0..b2980a1122 100644 --- a/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.html +++ b/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.html @@ -26,11 +26,13 @@ [attr.aria-label]="placeholder | translate" (matChipInputTokenEnd)="add($event)" (blur)="activeAnyOption = false" + (focus)="activeAnyOption = true" data-automation-id="adf-search-chip-autocomplete-input"> - + + + + + + + + + + + + + + diff --git a/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.ts b/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.ts index df7f95df42..f2bf2cad48 100644 --- a/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.ts +++ b/lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.ts @@ -88,7 +88,13 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy, this._activeAnyOption = active; } + get activeAnyOption() { + return this._activeAnyOption; + } + ngOnInit() { + this.filteredOptions = this.autocompleteOptions; + this.formCtrl.valueChanges .pipe( startWith(''), 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 03e81d4ef1..c483ea3875 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 @@ -24,6 +24,8 @@ import { SearchFilterList } from '../../models/search-filter-list.model'; import { TagService } from '../../../tag/services/tag.service'; import { CategoryService } from '../../../category/services/category.service'; import { AutocompleteField, AutocompleteOption } from '../../models/autocomplete-option.interface'; +import {SitesService} from "../../../common"; +import {ActivatedRoute} from "@angular/router"; @Component({ selector: 'adf-search-filter-autocomplete-chips', @@ -45,7 +47,7 @@ export class SearchFilterAutocompleteChipsComponent implements SearchWidget, OnI private autocompleteOptionsSubject$ = new BehaviorSubject([]); autocompleteOptions$: Observable = this.autocompleteOptionsSubject$.asObservable(); - constructor(private tagService: TagService, private categoryService: CategoryService) { + constructor(private tagService: TagService, private categoryService: CategoryService, private sitesService: SitesService, private route: ActivatedRoute) { this.options = new SearchFilterList(); } @@ -57,6 +59,11 @@ export class SearchFilterAutocompleteChipsComponent implements SearchWidget, OnI } this.enableChangeUpdate = this.settings.allowUpdateOnChange ?? true; } + + if (this.settings.field === AutocompleteField.SITE) { + console.log(this.route.snapshot.params) + this.searchForExistingLocations('*'); + } } reset() { @@ -129,6 +136,9 @@ export class SearchFilterAutocompleteChipsComponent implements SearchWidget, OnI case AutocompleteField.CATEGORIES: this.autocompleteOptionsSubject$.next([]); break; + case AutocompleteField.SITE: + this.autocompleteOptionsSubject$.next(this.settings.autocompleteOptions); + break; default: this.autocompleteOptionsSubject$.next(this.settings.autocompleteOptions); } @@ -143,4 +153,14 @@ export class SearchFilterAutocompleteChipsComponent implements SearchWidget, OnI })); }); } + + private searchForExistingLocations(searchTerm: string) { + this.sitesService.searchSite(searchTerm, 0, 15).subscribe((existingSiteResult) => { + console.log(existingSiteResult.list.entries.map((rowEntry) => { + const path = rowEntry.entry.path.name; + const fullPath = path ? `${path}/${rowEntry.entry.name}` : rowEntry.entry.name; + return fullPath; + })) + }); + } } diff --git a/lib/content-services/src/lib/search/models/autocomplete-option.interface.ts b/lib/content-services/src/lib/search/models/autocomplete-option.interface.ts index c453f1ef54..7ed9874bdb 100644 --- a/lib/content-services/src/lib/search/models/autocomplete-option.interface.ts +++ b/lib/content-services/src/lib/search/models/autocomplete-option.interface.ts @@ -24,5 +24,6 @@ export interface AutocompleteOption { export enum AutocompleteField { TAG = 'TAG', - CATEGORIES = 'cm:categories' + CATEGORIES = 'cm:categories', + SITE = 'SITE', }