@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
109 lines (106 loc) • 4.37 kB
JavaScript
import { ReportStoreService } from '../../../../services/reportStoreService.js';
import logger from '../../../../utils/logger.js';
class SubscriptionStoreService extends ReportStoreService {
enabled;
constructor(userDataStore, serviceFeatureConfig) {
super(userDataStore);
this.enabled = Boolean(serviceFeatureConfig.subscriptions);
if (!this.enabled)
logger.info(`Subsriptions Store Service: disabled `);
}
getSubscriptionsState(userConfig) {
if (!this.enabled)
return [];
return userConfig.subscriptions ?? [];
}
async getAllReports(userId) {
if (!this.enabled)
return [];
const userConfig = await this.getState(userId);
return this.getSubscriptionsState(userConfig);
}
async getReportByExecutionId(id, userId) {
if (!this.enabled)
return undefined;
const userConfig = await this.getState(userId);
const subscriptions = this.getSubscriptionsState(userConfig);
return subscriptions.find(report => report.executionId === id);
}
async getReportByTableId(id, userId) {
if (!this.enabled)
return undefined;
const userConfig = await this.getState(userId);
const subscriptions = this.getSubscriptionsState(userConfig);
return subscriptions.find(report => report.tableId === id);
}
async addReport(userId, reportStateData) {
if (!this.enabled)
return;
const userConfig = await this.getState(userId);
const subscriptions = this.getSubscriptionsState(userConfig);
const sub = subscriptions.find(subscription => subscription.tableId === reportStateData.tableId);
if (!sub) {
subscriptions.unshift(reportStateData);
await this.saveState(userId, userConfig);
}
}
async removeReport(userId, reportId, id) {
if (!this.enabled)
return;
const userConfig = await this.getState(userId);
const subscriptions = this.getSubscriptionsState(userConfig);
const index = this.findIndexByReportAndVariantId(id, reportId, subscriptions);
if (index >= 0) {
userConfig.subscriptions.splice(index, 1);
await this.saveState(userId, userConfig);
}
}
async isSubscribed(reportId, id, userId) {
if (!this.enabled)
return false;
const userConfig = await this.getState(userId);
const subscriptions = this.getSubscriptionsState(userConfig);
return subscriptions.some(report => report.id === id && report.reportId === reportId);
}
async getSubscription(reportId, id, userId) {
if (!this.enabled)
return undefined;
const userConfig = await this.getState(userId);
const subscriptions = this.getSubscriptionsState(userConfig);
const index = this.findIndexByReportAndVariantId(id, reportId, subscriptions);
return index > -1 ? userConfig.subscriptions[index] : undefined;
}
async updateTimestamps(tsDataArray, userId) {
if (!this.enabled)
return [];
const userConfig = await this.getState(userId);
const subscriptions = tsDataArray.reduce((updatedSubscriptions, tsData) => this.updateRefreshedTimestamp(tsData, updatedSubscriptions), this.getSubscriptionsState(userConfig));
userConfig.subscriptions = subscriptions;
await this.saveState(userId, userConfig);
return subscriptions;
}
updateRefreshedTimestamp(tsData, subscriptions) {
if (!this.enabled)
return [];
const { tableId, createdAt } = tsData;
const createdAtDate = new Date(createdAt);
return subscriptions.map(subscription => {
if (subscription.tableId !== tableId) {
return subscription;
}
const { refresh } = subscription.timestamp;
if (refresh && +refresh === +createdAtDate) {
return subscription;
}
return {
...subscription,
timestamp: {
...subscription.timestamp,
refresh: createdAtDate,
},
};
});
}
}
export { SubscriptionStoreService as default };
//# sourceMappingURL=service.js.map