Files
dspace-angular/src/app/core/data/facet-config-response-parsing.service.ts

39 lines
1.4 KiB
TypeScript

import { Injectable } from '@angular/core';
import { SearchFilterConfig } from '../../shared/search/search-filter-config.model';
import { ParsedResponse } from '../cache/response.models';
import { RawRestResponse } from '../dspace-rest/raw-rest-response.model';
import { DSpaceSerializer } from '../dspace-rest/dspace.serializer';
import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service';
import { FacetConfigResponse } from '../../shared/search/facet-config-response.model';
import { RestRequest } from './rest-request.model';
@Injectable()
export class FacetConfigResponseParsingService extends DspaceRestResponseParsingService {
parse(request: RestRequest, data: RawRestResponse): ParsedResponse {
const config = data.payload._embedded.facets;
const serializer = new DSpaceSerializer(SearchFilterConfig);
const filters = serializer.deserializeArray(config);
const _links = {
self: data.payload._links.self
};
// fill in the missing links section
filters.forEach((filterConfig: SearchFilterConfig) => {
_links[filterConfig.name] = {
href: filterConfig._links.self.href
};
});
const facetConfigResponse = Object.assign(new FacetConfigResponse(), {
filters,
_links
});
this.addToObjectCache(facetConfigResponse, request, data);
return new ParsedResponse(data.statusCode, facetConfigResponse._links.self);
}
}