@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
106 lines (101 loc) • 4.22 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var reportStoreService = require('./reportStoreService.js');
var filtersTypeEnum = require('../components/_filters/filtersTypeEnum.js');
var logger = require('../utils/logger.js');
/* eslint-disable no-param-reassign */
class DefaultFilterValuesService extends reportStoreService.ReportStoreService {
enabled;
constructor(reportDataStore, serviceFeatureConfig) {
super(reportDataStore);
this.enabled = Boolean(serviceFeatureConfig.saveDefaults);
if (!this.enabled)
logger.default.info(`saveDefaultsFilters: disabled`);
}
async init(userConfig, userId) {
if (!this.enabled)
return;
if (!userConfig.defaultFilters) {
userConfig.defaultFilters = [];
await this.saveState(userId, userConfig);
}
}
async save(userId, reportId, id, values) {
if (!this.enabled)
return;
const userConfig = await this.getState(userId);
await this.init(userConfig, userId);
const defaults = {
reportId,
id,
values,
};
const defaultValuesIndex = await this.getIndex(userId, reportId, id);
if (userConfig.defaultFilters !== undefined) {
if (defaultValuesIndex === -1) {
userConfig.defaultFilters.push(defaults);
}
else if (typeof defaultValuesIndex === 'number') {
userConfig.defaultFilters[defaultValuesIndex] = defaults;
}
await this.saveState(userId, userConfig);
}
}
async get(userId, reportId, id, filtersType) {
if (!this.enabled)
return [];
const userConfig = await this.getState(userId);
const defaultConfig = userConfig.defaultFilters?.find(defaultFilter => {
return defaultFilter.id === id && defaultFilter.reportId === reportId;
});
if (!defaultConfig) {
return undefined;
}
return defaultConfig.values.filter(v => {
const type = !v.type ? filtersTypeEnum.FiltersType.REQUEST : v.type;
return filtersType === type;
});
}
async hasDefaults(userId, reportId, id, type = filtersTypeEnum.FiltersType.REQUEST) {
if (!this.enabled)
return false;
const userConfig = await this.getState(userId);
const defaults = userConfig.defaultFilters?.find(df => df.reportId === reportId && df.id === id);
if (!defaults || !Array.isArray(defaults.values) || defaults.values.length === 0) {
return false;
}
return defaults.values.some(value => {
const filtersType = !value.type ? filtersTypeEnum.FiltersType.REQUEST : value.type;
return filtersType === type;
});
}
async getIndex(userId, reportId, id) {
const userConfig = await this.getState(userId);
return userConfig.defaultFilters?.findIndex(defaultFilter => {
return defaultFilter.id === id && defaultFilter.reportId === reportId;
});
}
async delete(userId, reportId, id, type) {
if (!this.enabled)
return;
const userConfig = await this.getState(userId);
const index = await this.getIndex(userId, reportId, id);
if (index !== undefined && index !== -1 && userConfig.defaultFilters) {
const defaults = userConfig.defaultFilters[index];
if (defaults.values.length > 0) {
const updatedValues = defaults.values.filter(value => {
const filtersType = !value.type ? filtersTypeEnum.FiltersType.REQUEST : value.type;
return filtersType !== type;
});
userConfig.defaultFilters[index].values = updatedValues;
}
else {
userConfig.defaultFilters.splice(index, 1);
}
await this.saveState(userId, userConfig);
}
}
}
exports.DefaultFilterValuesService = DefaultFilterValuesService;
exports.default = DefaultFilterValuesService;
//# sourceMappingURL=defaultFilterValuesService.js.map