Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 22x 22x 22x 5x 2x 2x 2x 2x 2x 1x 2x 2x | import { Injectable } from '@angular/core';
import { Facet } from 'ish-core/models/facet/facet.model';
import { Filter } from 'ish-core/models/filter/filter.model';
import { SortableAttributesType } from 'ish-core/models/product-listing/product-listing.model';
import { SearchResponse } from 'ish-core/models/search/search.model';
import { SparqueProductMapper } from 'ish-core/models/sparque-product/sparque-product.mapper';
import { URLFormParams } from 'ish-core/utils/url-form-params';
import { SparqueFixedFacetGroup, SparqueSearch, SparqueSortingOption } from './sparque-search.interface';
@Injectable({ providedIn: 'root' })
export class SparqueSearchMapper {
constructor(private sparqueProductMapper: SparqueProductMapper) {}
fromData(search: SparqueSearch, searchParameter: URLFormParams): SearchResponse {
return {
products: this.sparqueProductMapper.fromListData(search.products),
total: search.total,
sortableAttributes: this.mapSortableAttributes(search.sortings),
filter: this.mapFilter(search.facets, searchParameter),
};
}
private mapSortableAttributes(sortingOptions: SparqueSortingOption[]): SortableAttributesType[] {
return sortingOptions
? sortingOptions.map(sorting => ({
name: sorting.identifier,
displayName: sorting.title,
}))
: undefined;
}
private mapFilter(filter: SparqueFixedFacetGroup[], searchParameter: URLFormParams): Filter[] {
return filter
? filter.map(facetGroup => {
const facets: Facet[] = facetGroup.options.map(facet => ({
name: facet.id ? facet.id : facet.value,
displayName: facet.value,
count: facet.score,
selected: searchParameter[facetGroup.id] ? searchParameter[facetGroup.id]?.includes(facet.id) : false,
level: 0,
searchParameter: calculateSearchParams(
searchParameter,
searchParameter[facetGroup.id]?.includes(facet.id),
facetGroup.id,
facet.id
),
}));
return {
name: facetGroup.title,
displayType: 'text_clear',
id: facetGroup.id,
facets,
selectionType: 'single',
limitCount: 5,
};
})
: undefined;
}
}
function calculateSearchParams(
currentSearchParams: URLFormParams,
isSelected: boolean,
facetGroupId: string,
facetId: string
): URLFormParams {
Iif (isSelected) {
return Object.fromEntries(Object.entries(currentSearchParams).filter(([, value]) => !value.includes(facetId)));
}
return {
...currentSearchParams,
[facetGroupId]: [facetId],
};
}
|