Skip to content

Commit

Permalink
Merge branch 'fix-default-sort-and-alignment-issue-7.6' into fix-defa…
Browse files Browse the repository at this point in the history
…ult-sort-and-alignment-issue-main
  • Loading branch information
YanaDePauw committed Jan 23, 2025
2 parents 94045f0 + 3b8b5b4 commit 6cb08bf
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 8 deletions.
13 changes: 13 additions & 0 deletions src/app/core/shared/search/search-configuration.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -362,4 +362,17 @@ describe('SearchConfigurationService', () => {
});
});
});

describe('convertSortConfigToOptions', () => {
it('should convert a sortConfig object to a SortOptions object', () => {
const sortConfig1 = { name: 'test-name-1', sortOrder: 'asc' };
const sortConfig2 = { name: 'test-name-2', sortOrder: 'not-asc' };
const sortOption1 = { field: 'test-name-1', direction: SortDirection.ASC };
const sortOption2 = { field: 'test-name-2', direction: SortDirection.DESC };

expect(service.convertSortConfigToOptions(sortConfig1)).toEqual(sortOption1);
expect(service.convertSortConfigToOptions(sortConfig2)).toEqual(sortOption2);
});

});
});
16 changes: 12 additions & 4 deletions src/app/core/shared/search/search-configuration.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,18 @@ export class SearchConfigurationService implements OnDestroy {
* @param searchConfig The SearchConfig object
*/
getConfigurationSortOptions(searchConfig: SearchConfig): SortOptions[] {
return searchConfig.sortOptions.map((entry: SortConfig) => ({
field: entry.name,
direction: entry.sortOrder.toLowerCase() === SortDirection.ASC.toLowerCase() ? SortDirection.ASC : SortDirection.DESC,
}));
return searchConfig.sortOptions.map((entry: SortConfig) => this.convertSortConfigToOptions(entry));
}

/**
* Converts a sortConfig object to a SortOptions object
* @param sortConfig The sortConfig object to convert
*/
convertSortConfigToOptions(sortConfig: SortConfig): SortOptions {
return {
field: sortConfig.name,
direction: sortConfig.sortOrder.toLowerCase() === SortDirection.ASC.toLowerCase() ? SortDirection.ASC : SortDirection.DESC,
};
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ export class SearchConfig implements CacheableObject {
@autoserialize
sortOptions: SortConfig[];

/**
* The default sort option
*/
@autoserialize
defaultSortOption: SortConfig;

/**
* The object type.
*/
Expand Down
17 changes: 13 additions & 4 deletions src/app/shared/search/search.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,16 +382,25 @@ export class SearchComponent implements OnDestroy, OnInit {
// Determinate PaginatedSearchOptions and listen to any update on it
const configuration$: Observable<string> = this.searchConfigService
.getCurrentConfiguration(this.configuration).pipe(distinctUntilChanged());
const searchSortOptions$: Observable<SortOptions[]> = combineLatest([configuration$, this.currentScope$]).pipe(

const scopedConfiguration$: Observable<SearchConfig> = combineLatest([configuration$, this.currentScope$]).pipe(
switchMap(([configuration, scope]: [string, string]) => this.searchConfigService.getConfigurationSearchConfig(configuration, scope)),
);

const searchSortOptions$: Observable<SortOptions[]> = scopedConfiguration$.pipe(
map((searchConfig: SearchConfig) => this.searchConfigService.getConfigurationSortOptions(searchConfig)),
distinctUntilChanged(),
);
const searchOptions$: Observable<PaginatedSearchOptions> = this.getSearchOptions().pipe(distinctUntilChanged());

const sortOption$: Observable<SortOptions> = combineLatest([searchSortOptions$, searchOptions$]).pipe(
switchMap(([searchSortOptions, searchOptions]: [SortOptions[], PaginatedSearchOptions]) => {
const defaultSortOption = hasValue(searchOptions.sort?.field) && hasValue(searchOptions.sort?.field) ? searchOptions.sort : searchSortOptions[0];
const sortOption$: Observable<SortOptions> = combineLatest([searchSortOptions$, scopedConfiguration$]).pipe(
switchMap(([searchSortOptions, searchConfig]: [SortOptions[], SearchConfig]) => {
let defaultSortOption;
if (hasValue(searchConfig.defaultSortOption?.name) && hasValue(searchConfig.defaultSortOption?.sortOrder)) {
defaultSortOption = this.searchConfigService.convertSortConfigToOptions(searchConfig.defaultSortOption);
} else {
defaultSortOption = searchSortOptions[0];
}
return this.searchConfigService.getCurrentSort(this.paginationId, defaultSortOption);
}),
distinctUntilChanged(),
Expand Down

0 comments on commit 6cb08bf

Please sign in to comment.