From a1bf950c8834eef4b79eca9bf024e0311d84c580 Mon Sep 17 00:00:00 2001 From: Rainer Killinger Date: Tue, 21 Sep 2021 14:04:47 +0200 Subject: [PATCH] refactor: enable full sort capabilites on search --- .../data/list/food-data-list.component.ts | 34 +++++++++++-------- .../data/list/search-page.component.ts | 4 +-- .../catalog-detail-content.component.ts | 13 +++++-- .../modules/favorites/favorites.service.ts | 6 ++-- .../menu/context/context-menu.service.ts | 20 ++++++----- 5 files changed, 46 insertions(+), 31 deletions(-) diff --git a/src/app/modules/data/list/food-data-list.component.ts b/src/app/modules/data/list/food-data-list.component.ts index e00f1f2f..9af38526 100644 --- a/src/app/modules/data/list/food-data-list.component.ts +++ b/src/app/modules/data/list/food-data-list.component.ts @@ -27,24 +27,28 @@ export class FoodDataListComponent extends SearchPageComponent { */ initialize() { if (this.positionService.position) { - this.sortQuery = { - type: 'distance', - order: 'asc', - arguments: { - field: 'geo.point.coordinates', - position: [ - this.positionService.position.longitude, - this.positionService.position.latitude, - ], + this.sortQuery = [ + { + type: 'distance', + order: 'asc', + arguments: { + field: 'geo.point.coordinates', + position: [ + this.positionService.position.longitude, + this.positionService.position.latitude, + ], + }, }, - }; + ]; } - this.sortQuery = { - arguments: {field: 'name'}, - order: 'asc', - type: 'ducet', - }; + this.sortQuery = [ + { + arguments: {field: 'name'}, + order: 'asc', + type: 'ducet', + }, + ]; this.forcedFilter = { arguments: { diff --git a/src/app/modules/data/list/search-page.component.ts b/src/app/modules/data/list/search-page.component.ts index 12bd53e1..e736ef89 100644 --- a/src/app/modules/data/list/search-page.component.ts +++ b/src/app/modules/data/list/search-page.component.ts @@ -98,7 +98,7 @@ export class SearchPageComponent implements OnInit, OnDestroy { /** * Api query sorting */ - sortQuery: SCSearchSort | undefined; + sortQuery: SCSearchSort[] | undefined; /** * Array of all subscriptions to Observables @@ -148,7 +148,7 @@ export class SearchPageComponent implements OnInit, OnDestroy { if (this.sortQuery) { // add query sorting - searchOptions.sort = [this.sortQuery]; + searchOptions.sort = this.sortQuery; } for (const filter of [this.forcedFilter, this.filterQuery]) { diff --git a/src/app/modules/data/types/catalog/catalog-detail-content.component.ts b/src/app/modules/data/types/catalog/catalog-detail-content.component.ts index 6cb85c9e..568bea42 100644 --- a/src/app/modules/data/types/catalog/catalog-detail-content.component.ts +++ b/src/app/modules/data/types/catalog/catalog-detail-content.component.ts @@ -22,7 +22,7 @@ import { OnDestroy, OnChanges, } from '@angular/core'; -import {SCCatalog, SCSearchBooleanFilter} from '@openstapps/core'; +import {SCCatalog, SCSearchBooleanFilter, SCDucetSort} from '@openstapps/core'; import {SearchPageComponent} from '../../list/search-page.component'; enum AccordionButtonState { @@ -72,12 +72,21 @@ export class CatalogDetailContentComponent initialize() { this.pageSize = 100; - this.sortQuery = { + + const nameSort: SCDucetSort = { arguments: {field: 'name'}, order: 'asc', type: 'ducet', }; + const typeSort: SCDucetSort = { + arguments: {field: 'type'}, + order: 'desc', + type: 'ducet', + }; + + this.sortQuery = [typeSort, nameSort]; + const subCatalogFilter: SCSearchBooleanFilter = { arguments: { operation: 'and', diff --git a/src/app/modules/favorites/favorites.service.ts b/src/app/modules/favorites/favorites.service.ts index 9dce2608..b2341925 100644 --- a/src/app/modules/favorites/favorites.service.ts +++ b/src/app/modules/favorites/favorites.service.ts @@ -193,7 +193,7 @@ export class FavoritesService { search( queryText?: string, filterQuery?: SCSearchFilter, - sortQuery?: SCSearchSort, + sortQuery?: SCSearchSort[], ): Observable<{data: SCThings[]; facets: SCFacet[]}> { return this.favoritesChanged$.pipe( map(favoritesMap => { @@ -229,8 +229,8 @@ export class FavoritesService { if (typeof sortQuery !== 'undefined') { items = this.sortItems( items, - sortQuery.arguments.field as 'name' | 'type', - sortQuery.order, + sortQuery[0].arguments.field as 'name' | 'type', + sortQuery[0].order, ); } diff --git a/src/app/modules/menu/context/context-menu.service.ts b/src/app/modules/menu/context/context-menu.service.ts index 927349ff..6ca8c651 100644 --- a/src/app/modules/menu/context/context-menu.service.ts +++ b/src/app/modules/menu/context/context-menu.service.ts @@ -75,7 +75,7 @@ export class ContextMenuService { /** * Container for the sort query */ - sortQuery = new Subject(); + sortQuery = new Subject(); /** * Observable SortContext streams @@ -144,20 +144,22 @@ export class ContextMenuService { * * @param sortContext SortContext to build SCSearchSort from */ - buildSortQuery = (sortContext: SortContext): SCSearchSort | undefined => { + buildSortQuery = (sortContext: SortContext): SCSearchSort[] | undefined => { if ( sortContext.value && sortContext.value.length > 0 && (sortContext.value === 'name' || sortContext.value === 'type') ) { - return { - arguments: { - field: sortContext.value, - position: 0, + return [ + { + arguments: { + field: sortContext.value, + position: 0, + }, + order: sortContext.reversed ? 'desc' : 'asc', + type: 'ducet', }, - order: sortContext.reversed ? 'desc' : 'asc', - type: 'ducet', - }; + ]; } return;