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.

154 lines (124 loc) 5.17 kB
import { Services } from '../types/Services' import logger from './logger' import { EmbeddedSyncParams, EmbeddedSyncParamsConfig, InitialisedFeatures, EmbeddedReportFeatures, EmbeddedReportFeaturesList, } from '../types/EmbeddedReportUtils' // DATA STORE import ReportDataStore from '../data/reportDataStore' // FEATURE: Download import addDownloadRoutes from '../routes/download' import DownloadPermissionService from '../services/downloadPermissionService' import ReportingClient from '../data/reportingClient' import ReportingService from '../services/reportingService' export const initUserDataStore = (features: EmbeddedReportFeatures, services: Services) => { logger.info('Embedded Reports: Setting up user data store.') const { config: featuresConfig, list } = features const { redisClient, userDataStore } = featuresConfig let initialisedUserDataStore: ReportDataStore if (redisClient) { logger.info('Embedded Reports: Redis Client found. Initialising User Data store.') return new ReportDataStore(redisClient) } if (userDataStore) { logger.info('Embedded Reports: User data store found. Using the provided user data store') return userDataStore } logger.info('No user data store config provided. Assuming pre-initialisation of feature services') const errorMessages: string[] = [] if (!services.downloadPermissionService && list.includes(EmbeddedReportFeaturesList.download)) { errorMessages.push('Missing downloadPermissionService in services config: Cant enable download feature') } if (!services.bookmarkService && list.includes(EmbeddedReportFeaturesList.bookmark)) { errorMessages.push('Missing bookmarkService in services config: Cant enable bookmark feature') } if (!services.recentlyViewedService && list.includes(EmbeddedReportFeaturesList.recentlyViewed)) { errorMessages.push('Missing recentlyViewedService in services config: Cant enable recently feature') } if (errorMessages.length) { throw new Error(errorMessages.join(', ')) } return initialisedUserDataStore } const initFeatures = ({ router, config, services, features }: EmbeddedSyncParams) => { let updatedServices: Services = { ...services, } const initialisedFeatures: InitialisedFeatures = {} if (features !== undefined) { logger.info(`Embedded Reports: Features config found. Initialising features: ${features.list}`) const { list } = features const { layoutPath } = config const downloadFeatureEnabled = list.includes(EmbeddedReportFeaturesList.download) const bookmarkFeatureEnabled = list.includes(EmbeddedReportFeaturesList.bookmark) const recentlyViewedFeatureEnabled = list.includes(EmbeddedReportFeaturesList.recentlyViewed) const initialisedUserDataStore: ReportDataStore = initUserDataStore(features, services) if (downloadFeatureEnabled) { logger.info(`Download Feature: Setup`) try { if (!services.downloadPermissionService && initialisedUserDataStore) { logger.info('Download Feature: DownloadPermissionService not provided. Initialising new service') const downloadPermissionService = new DownloadPermissionService(initialisedUserDataStore) updatedServices = { ...services, downloadPermissionService, } logger.info('Download Feature: Service initialised and added to services config') } else { logger.info('Download Feature: DownloadPermissionService found') } initialisedFeatures.download = true addDownloadRoutes({ router, services: updatedServices, layoutPath, prefix: '' }) } catch (error) { logger.info('Download Feature: Unable to init feature.') throw error } } if (recentlyViewedFeatureEnabled) { logger.info('Recently Viewed Feature: Not Available') } if (bookmarkFeatureEnabled) { logger.info('Bookmark Feature: Not Available') } } return { router, services: updatedServices, initialisedFeatures, } } const initReportingService = (config: EmbeddedSyncParamsConfig, services: Services) => { let updatedServices = { ...services, } if (config?.reportingClientArgs) { logger.info('Embedded Reports: Reporting config found') if (services.reportingService) { logger.info('Embedded Reports: Reporting Service Found. Using service provided') } else { logger.info('Embedded Reports: Initialising Reporting Client and Service') const reportingClient = new ReportingClient(config.reportingClientArgs) const reportingService = new ReportingService(reportingClient) updatedServices = { ...services, reportingService, } } } else if (services.reportingService) { logger.info('Embedded Reports: Reporting Service Found. Using service provided') } else { logger.error( 'Embedded Reports: No Reporting service or Config Found. Please provide an initialiesed report service, or the correct config', ) } return { services: updatedServices, } } export default { initFeatures, initReportingService, }