[ACS-9166]: updates existing modern service

This commit is contained in:
Anton Ramanovich
2025-11-03 07:15:04 +01:00
parent 53bb04a3d7
commit 6fc92b2c3b
@@ -22,6 +22,7 @@ import { catchError, concatMap, first, map, switchMap, take, tap } from 'rxjs/op
import { AlfrescoApiService } from '../../services/alfresco-api.service'; import { AlfrescoApiService } from '../../services/alfresco-api.service';
import { SavedSearch } from '../interfaces/saved-search.interface'; import { SavedSearch } from '../interfaces/saved-search.interface';
import { AuthenticationService } from '@alfresco/adf-core'; import { AuthenticationService } from '@alfresco/adf-core';
import { SavedSearchStrategy } from '../interfaces/saved-searches-strategy.interface';
export interface SavedSearchesPreferencesApiService { export interface SavedSearchesPreferencesApiService {
getPreference: (personId: string, preferenceName: string, opts?: ContentFieldsQuery) => Promise<PreferenceEntry> | Observable<PreferenceEntry>; getPreference: (personId: string, preferenceName: string, opts?: ContentFieldsQuery) => Promise<PreferenceEntry> | Observable<PreferenceEntry>;
@@ -33,7 +34,7 @@ export const SAVED_SEARCHES_SERVICE_PREFERENCES = new InjectionToken<SavedSearch
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class SavedSearchesService { export class SavedSearchesService implements SavedSearchStrategy {
private savedSearchFileNodeId: string; private savedSearchFileNodeId: string;
private _nodesApi: NodesApi; private _nodesApi: NodesApi;
private _preferencesApi: SavedSearchesPreferencesApiService; private _preferencesApi: SavedSearchesPreferencesApiService;
@@ -54,7 +55,8 @@ export class SavedSearchesService {
return this._preferencesApi; return this._preferencesApi;
} }
readonly savedSearches$ = new ReplaySubject<SavedSearch[]>(1); private readonly _savedSearches$ = new ReplaySubject<SavedSearch[]>(1);
readonly savedSearches$ = this._savedSearches$.asObservable();
constructor( constructor(
private readonly apiService: AlfrescoApiService, private readonly apiService: AlfrescoApiService,
@@ -65,11 +67,6 @@ export class SavedSearchesService {
this.fetchSavedSearches(); this.fetchSavedSearches();
} }
/**
* Gets a list of saved searches by user.
*
* @returns SavedSearch list containing user saved searches
*/
getSavedSearches(): Observable<SavedSearch[]> { getSavedSearches(): Observable<SavedSearch[]> {
const savedSearchesMigrated = localStorage.getItem(this.getLocalStorageKey()) ?? ''; const savedSearchesMigrated = localStorage.getItem(this.getLocalStorageKey()) ?? '';
if (savedSearchesMigrated === 'true') { if (savedSearchesMigrated === 'true') {
@@ -89,13 +86,6 @@ export class SavedSearchesService {
} }
} }
/**
* Saves a new search into state and updates state. If there are less than 5 searches,
* it will be pushed on first place, if more it will be pushed to 6th place.
*
* @param newSaveSearch object { name: string, description: string, encodedUrl: string }
* @returns NodeEntry
*/
saveSearch(newSaveSearch: Pick<SavedSearch, 'name' | 'description' | 'encodedUrl'>): Observable<NodeEntry> { saveSearch(newSaveSearch: Pick<SavedSearch, 'name' | 'description' | 'encodedUrl'>): Observable<NodeEntry> {
return this.getSavedSearches().pipe( return this.getSavedSearches().pipe(
take(1), take(1),
@@ -118,7 +108,7 @@ export class SavedSearchesService {
return from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSavedSearches))).pipe( return from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSavedSearches))).pipe(
map((preference) => JSON.parse(preference.entry.value)), map((preference) => JSON.parse(preference.entry.value)),
tap(() => this.savedSearches$.next(updatedSavedSearches)) tap(() => this._savedSearches$.next(updatedSavedSearches))
); );
}), }),
catchError((error) => { catchError((error) => {
@@ -128,12 +118,6 @@ export class SavedSearchesService {
); );
} }
/**
* Replace Save Search with new one and also updates the state.
*
* @param updatedSavedSearch - updated Save Search
* @returns NodeEntry
*/
editSavedSearch(updatedSavedSearch: SavedSearch): Observable<NodeEntry> { editSavedSearch(updatedSavedSearch: SavedSearch): Observable<NodeEntry> {
let previousSavedSearches: SavedSearch[]; let previousSavedSearches: SavedSearch[];
return this.savedSearches$.pipe( return this.savedSearches$.pipe(
@@ -143,7 +127,7 @@ export class SavedSearchesService {
return savedSearches.map((search) => (search.order === updatedSavedSearch.order ? updatedSavedSearch : search)); return savedSearches.map((search) => (search.order === updatedSavedSearch.order ? updatedSavedSearch : search));
}), }),
tap((updatedSearches: SavedSearch[]) => { tap((updatedSearches: SavedSearch[]) => {
this.savedSearches$.next(updatedSearches); this._savedSearches$.next(updatedSearches);
}), }),
switchMap((updatedSearches: SavedSearch[]) => switchMap((updatedSearches: SavedSearch[]) =>
from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe( from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(
@@ -151,18 +135,12 @@ export class SavedSearchesService {
) )
), ),
catchError((error) => { catchError((error) => {
this.savedSearches$.next(previousSavedSearches); this._savedSearches$.next(previousSavedSearches);
return throwError(() => error); return throwError(() => error);
}) })
); );
} }
/**
* Deletes Save Search and update state.
*
* @param deletedSavedSearch - Save Search to delete
* @returns NodeEntry
*/
deleteSavedSearch(deletedSavedSearch: SavedSearch): Observable<NodeEntry> { deleteSavedSearch(deletedSavedSearch: SavedSearch): Observable<NodeEntry> {
let previousSavedSearchesOrder: SavedSearch[]; let previousSavedSearchesOrder: SavedSearch[];
return this.savedSearches$.pipe( return this.savedSearches$.pipe(
@@ -176,7 +154,7 @@ export class SavedSearchesService {
})); }));
}), }),
tap((updatedSearches: SavedSearch[]) => { tap((updatedSearches: SavedSearch[]) => {
this.savedSearches$.next(updatedSearches); this._savedSearches$.next(updatedSearches);
}), }),
switchMap((updatedSearches: SavedSearch[]) => switchMap((updatedSearches: SavedSearch[]) =>
from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe( from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(
@@ -184,18 +162,12 @@ export class SavedSearchesService {
) )
), ),
catchError((error) => { catchError((error) => {
this.savedSearches$.next(previousSavedSearchesOrder); this._savedSearches$.next(previousSavedSearchesOrder);
return throwError(() => error); return throwError(() => error);
}) })
); );
} }
/**
* Reorders saved search place
*
* @param previousIndex - previous index of saved search
* @param currentIndex - new index of saved search
*/
changeOrder(previousIndex: number, currentIndex: number): void { changeOrder(previousIndex: number, currentIndex: number): void {
let previousSavedSearchesOrder: SavedSearch[]; let previousSavedSearchesOrder: SavedSearch[];
this.savedSearches$ this.savedSearches$
@@ -210,14 +182,14 @@ export class SavedSearchesService {
order: index order: index
})); }));
}), }),
tap((savedSearches: SavedSearch[]) => this.savedSearches$.next(savedSearches)), tap((savedSearches: SavedSearch[]) => this._savedSearches$.next(savedSearches)),
switchMap((updatedSearches: SavedSearch[]) => switchMap((updatedSearches: SavedSearch[]) =>
from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe( from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSearches))).pipe(
map((preference) => JSON.parse(preference.entry.value)) map((preference) => JSON.parse(preference.entry.value))
) )
), ),
catchError((error) => { catchError((error) => {
this.savedSearches$.next(previousSavedSearchesOrder); this._savedSearches$.next(previousSavedSearchesOrder);
return throwError(() => error); return throwError(() => error);
}) })
) )
@@ -255,7 +227,7 @@ export class SavedSearchesService {
private fetchSavedSearches(): void { private fetchSavedSearches(): void {
this.getSavedSearches() this.getSavedSearches()
.pipe(take(1)) .pipe(take(1))
.subscribe((searches) => this.savedSearches$.next(searches)); .subscribe((searches) => this._savedSearches$.next(searches));
} }
private migrateSavedSearches(): Observable<SavedSearch[]> { private migrateSavedSearches(): Observable<SavedSearch[]> {