File
Constructor
constructor(searchFilterService: SearchFilterService, translateJsonPipe: TranslateJsonPipe)
|
|
Parameters :
Name |
Type |
Optional |
searchFilterService |
SearchFilterService
|
No
|
translateJsonPipe |
TranslateJsonPipe
|
No
|
|
Methods
Private
Static
buildDefault
|
buildDefault(filterValues: FilterValue[], multiple: boolean)
|
|
Parameters :
Name |
Type |
Optional |
filterValues |
FilterValue[]
|
No
|
multiple |
boolean
|
No
|
Returns : [] | string | undefined
|
Private
Async
fetchSearchFormAPI
|
fetchSearchFormAPI()
|
|
|
Async
map
|
map(facetFilters: literal type, existingFilters: object)
|
|
Parameters :
Name |
Type |
Optional |
Default value |
facetFilters |
literal type
|
No
|
|
existingFilters |
object
|
No
|
{}
|
|
Private
searchFilterFormConfig
|
Type : any[]
|
|
import { Injectable } from '@angular/core';
import { FilterValue } from 'sunbird-sdk';
import { IFacetFilterFieldTemplateConfig } from 'common-form-elements';
import { SearchFilterService } from '@app/services';
import { TranslateJsonPipe } from '@app/pipes/translate-json/translate-json';
interface FilterFormConfigWithDefaults {
config: IFacetFilterFieldTemplateConfig[];
defaults: { [key: string]: string[] | string | undefined };
}
interface SearchFilterConfig {
code: string,
type: string,
name: string,
placeholder?: string,
multiple?: boolean,
index?: number
}
@Injectable()
export class FilterFormConfigMapper {
private searchFilterFormConfig: any[];
constructor(
private searchFilterService: SearchFilterService,
private translateJsonPipe: TranslateJsonPipe
) {
this.fetchSearchFormAPI();
}
private static buildDefault(filterValues: FilterValue[], multiple: boolean): string[] | string | undefined {
if (multiple) {
return filterValues
.filter(f => f.apply)
.map(f => f.name);
} else {
const filterValue = filterValues.find(f => f.apply);
return filterValue && filterValue.name;
}
}
private async fetchSearchFormAPI(){
this.searchFilterFormConfig = await this.searchFilterService.getFacetFormAPIConfig();
}
async map(facetFilters: { [key: string]: FilterValue[] }, existingFilters={}): Promise<FilterFormConfigWithDefaults> {
if(!this.searchFilterFormConfig || !this.searchFilterFormConfig.length){
this.searchFilterFormConfig = await this.searchFilterService.getFacetFormAPIConfig();
}
const mappedFilters: FilterFormConfigWithDefaults = {config:[], defaults:{}};
this.searchFilterFormConfig.sort((a, b)=>{
if(a.index && b.index){
return (a.index-b.index);
}
return 1;
});
this.searchFilterFormConfig.forEach((filterConfig:SearchFilterConfig) => {
if(facetFilters[filterConfig.code] && !existingFilters[filterConfig.code]){
mappedFilters.defaults[filterConfig.code] = FilterFormConfigMapper.buildDefault(facetFilters[filterConfig.code], filterConfig.multiple);
mappedFilters.config.push({
facet: filterConfig.code,
type: filterConfig.type as ('dropdown' | 'pills'),
labelText: this.translateJsonPipe.transform(filterConfig.name),
placeholderText: this.translateJsonPipe.transform(filterConfig.placeholder),
multiple: filterConfig.multiple
});
}
});
return mappedFilters;
}
}