@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
101 lines (98 loc) • 4.01 kB
JavaScript
import { ReportStoreService } from './reportStoreService.js';
import { FiltersType } from '../components/_filters/filtersTypeEnum.js';
import logger from '../utils/logger.js';
/* eslint-disable no-param-reassign */
class DefaultFilterValuesService extends ReportStoreService {
enabled;
constructor(reportDataStore, serviceFeatureConfig) {
super(reportDataStore);
this.enabled = Boolean(serviceFeatureConfig.saveDefaults);
if (!this.enabled)
logger.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 ? FiltersType.REQUEST : v.type;
return filtersType === type;
});
}
async hasDefaults(userId, reportId, id, type = 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 ? 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 ? FiltersType.REQUEST : value.type;
return filtersType !== type;
});
userConfig.defaultFilters[index].values = updatedValues;
}
else {
userConfig.defaultFilters.splice(index, 1);
}
await this.saveState(userId, userConfig);
}
}
}
export { DefaultFilterValuesService, DefaultFilterValuesService as default };
//# sourceMappingURL=defaultFilterValuesService.js.map