@ministryofjustice/probation-search-frontend
Version:
A shared UI component to search for probation cases from within your Express/Nunjucks application
50 lines • 2.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const superagent_1 = __importDefault(require("superagent"));
const environments_1 = __importDefault(require("../environments"));
class ProbationSearchClient {
hmppsAuthClient;
dataSource;
constructor(hmppsAuthClient, dataSource) {
this.hmppsAuthClient = hmppsAuthClient;
this.dataSource = dataSource;
}
async search({ query, matchAllTerms = true, providersFilter = [], asUsername, pageNumber = 1, pageSize = 10, }) {
if (this.dataSource instanceof Array) {
return Promise.resolve(this.localSearch(this.dataSource, pageNumber, pageSize));
}
const token = await this.hmppsAuthClient.getToken(asUsername);
const apiConfig = this.getApiConfig(this.dataSource).searchApi;
const response = await superagent_1.default
.post(`${apiConfig.url}/phrase?page=${pageNumber - 1}&size=${pageSize}`)
.auth(token, { type: 'bearer' })
.timeout(apiConfig.timeout)
.retry(2)
.send({
phrase: query,
probationAreasFilter: providersFilter.map(provider => provider.substring(0, 3)),
matchAllTerms,
});
return response.body;
}
localSearch(data, page, size) {
const content = data.slice((page - 1) * size, page * size);
return {
content,
probationAreaAggregations: [],
size: content.length,
totalElements: data.length,
totalPages: Math.ceil(data.length / size),
};
}
getApiConfig(dataSource) {
if (dataSource === 'dev' || dataSource === 'preprod' || dataSource === 'prod')
return environments_1.default[dataSource];
return dataSource;
}
}
exports.default = ProbationSearchClient;
//# sourceMappingURL=probationSearchClient.js.map