UNPKG

@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
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