Skip to content

Commit

Permalink
MAN-352 persist activity log filter values
Browse files Browse the repository at this point in the history
  • Loading branch information
neil-mills committed Jan 30, 2025
1 parent ebfc76e commit cf46d5d
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 23 deletions.
10 changes: 9 additions & 1 deletion server/@types/ActivityLog.type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ export interface ActivityLogFilters {
dateFrom: string
dateTo: string
compliance: string[]
clearFilterKey?: string
clearFilterValue?: string
}

export interface ActivityLogRequestBody {
Expand All @@ -26,14 +28,20 @@ export interface ActivityLogFiltersResponse extends ActivityLogFilters {
selectedFilterItems: SelectedFilterItem[]
complianceOptions: Option[]
baseUrl: string
query: ActivityLogFilters
queryStr: string
queryStrPrefix: string
queryStrSuffix: string
maxDate: string
}

export interface ActivityLogCache extends ActivityLogFilters {
export interface ActivityLogCacheItem extends ActivityLogFilters {
crn: string
personActivity: PersonActivity
tierCalculation: TierCalculation
}

export interface ActivityLogCache {
results?: ActivityLogCacheItem[]
filters?: ActivityLogFilters
}
2 changes: 1 addition & 1 deletion server/@types/express/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ declare module 'express-session' {
data?: Data
errors?: Errors
cache?: {
activityLog: ActivityLogCache[]
activityLog: ActivityLogCache
}
}

Expand Down
70 changes: 59 additions & 11 deletions server/middleware/filterActivityLog.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
/* eslint-disable no-param-reassign */

import { DateTime } from 'luxon'
import { Route, ActivityLogFilters, ActivityLogFiltersResponse, SelectedFilterItem, Option } from '../@types'
import {
Route,
ActivityLogCacheItem,
ActivityLogFilters,
ActivityLogFiltersResponse,
SelectedFilterItem,
Option,
} from '../@types'

export const filterActivityLog: Route<void> = (req, res, next) => {
if (req?.query?.submit) {
Expand All @@ -10,14 +17,52 @@ export const filterActivityLog: Route<void> = (req, res, next) => {
return res.redirect(url)
}
const { crn } = req.params
const { keywords = '', dateFrom = '', dateTo = '', clearFilterKey, clearFilterValue } = req.query
const errors = req?.session?.errors
const { compliance: complianceQuery = [] } = req.query
const {
keywords = '',
dateFrom = '',
dateTo = '',
clearFilterKey,
clearFilterValue,
} = req.query as { [key: string]: string }

const { compliance: complianceQuery = [] } = req.query as { [key: string]: string | string[] }

let compliance = complianceQuery as string[] | string
const baseUrl = `/case/${crn}/activity-log`

if (!Array.isArray(compliance)) {
compliance = [compliance]
}

let query: ActivityLogFilters = { keywords, dateFrom, dateTo, compliance }
const hasQuery = keywords || (dateFrom && dateTo) || compliance?.length
// if not submitted and no query values exist, then attempt to hydrate from cache

if (req?.session?.cache?.activityLog?.filters && !req?.query?.submit && !hasQuery) {
query = req?.session?.cache?.activityLog?.filters
} else if (hasQuery) {
query = {
keywords,
dateFrom,
dateTo,
compliance,
}
req.session.cache = {
...(req?.session?.cache || {}),
activityLog: {
...(req?.session?.cache?.activityLog || {}),
filters: query,
},
}
}
query = { ...query, clearFilterKey, clearFilterValue }

console.log(query)

Check warning on line 59 in server/middleware/filterActivityLog.ts

View workflow job for this annotation

GitHub Actions / node build / Run the node build

Unexpected console statement
const errors = req?.session?.errors

const baseUrl = `/case/${crn}/activity-log`
if (!Array.isArray(query.compliance)) {
query.compliance = [query.compliance]
}
if (compliance?.length && clearFilterKey === 'compliance') {
compliance = compliance.filter(value => value !== clearFilterValue)
}
Expand All @@ -27,14 +72,16 @@ export const filterActivityLog: Route<void> = (req, res, next) => {
{ text: 'Not complied', value: 'not complied' },
]
const filters: ActivityLogFilters = {
keywords: keywords && clearFilterKey !== 'keywords' ? (keywords as string) : '',
keywords: query.keywords && query.clearFilterKey !== 'keywords' ? query.keywords : '',
dateFrom:
dateFrom && dateTo && !errors?.errorMessages?.dateFrom && clearFilterKey !== 'dateRange'
? (dateFrom as string)
query.dateFrom && query.dateTo && !errors?.errorMessages?.dateFrom && query.clearFilterKey !== 'dateRange'
? query.dateFrom
: '',
dateTo:
dateTo && dateFrom && !errors?.errorMessages?.dateTo && clearFilterKey !== 'dateRange' ? (dateTo as string) : '',
compliance,
query.dateTo && query.dateFrom && !errors?.errorMessages?.dateTo && query.clearFilterKey !== 'dateRange'
? query.dateTo
: '',
compliance: query.compliance,
}

const getQueryString = (values: ActivityLogFilters | Record<string, string>): string => {
Expand All @@ -56,7 +103,7 @@ export const filterActivityLog: Route<void> = (req, res, next) => {
return queryStr
}

const queryStr = getQueryString(req.query as Record<string, string>)
const queryStr = getQueryString(query)
const queryStrPrefix = queryStr ? '?' : ''
const queryStrSuffix = queryStr ? '&' : '?'
const redirectQueryStr = getQueryString(filters)
Expand Down Expand Up @@ -119,6 +166,7 @@ export const filterActivityLog: Route<void> = (req, res, next) => {
selectedFilterItems,
complianceOptions,
baseUrl,
query,
queryStr,
queryStrPrefix,
queryStrSuffix,
Expand Down
15 changes: 9 additions & 6 deletions server/middleware/getPersonActivity.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Request } from 'express'
import { HmppsAuthClient } from '../data'
import MasApiClient from '../data/masApiClient'
import { ActivityLogCache, ActivityLogRequestBody, AppResponse } from '../@types'
import { ActivityLogCache, ActivityLogCacheItem, ActivityLogRequestBody, AppResponse } from '../@types'
import { PersonActivity } from '../data/model/activityLog'
import { toISODate, toCamelCase } from '../utils/utils'
import TierApiClient, { TierCalculation } from '../data/tierApiClient'
Expand All @@ -22,8 +22,8 @@ export const getPersonActivity = async (

let personActivity: PersonActivity | null = null
let tierCalculation: TierCalculation | null = null
if (req?.session?.cache?.activityLog) {
const cache: ActivityLogCache | undefined = req.session.cache.activityLog.find(
if (req?.session?.cache?.activityLog?.results) {
const cache: ActivityLogCacheItem | undefined = req.session.cache.activityLog.results.find(
cacheItem =>
crn === cacheItem.crn &&
keywords === cacheItem.keywords &&
Expand All @@ -49,8 +49,8 @@ export const getPersonActivity = async (
masClient.postPersonActivityLog(crn, body, page as string),
tierClient.getCalculationDetails(crn),
])
const newCache: ActivityLogCache[] = [
...(req?.session?.cache?.activityLog || []),
const newCache: ActivityLogCacheItem[] = [
...(req?.session?.cache?.activityLog.results || []),
{
crn,
keywords,
Expand All @@ -63,7 +63,10 @@ export const getPersonActivity = async (
]
req.session.cache = {
...(req?.session?.cache || {}),
activityLog: newCache,
activityLog: {
...(req?.session?.cache?.activityLog || {}),
results: newCache,
},
}
}
return [tierCalculation, personActivity]
Expand Down
1 change: 0 additions & 1 deletion server/routes/activityLog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ export default function activityLogRoutes(router: Router, { hmppsAuthClient }: S
risksWidget,
predictorScores,
url: req.url,
query,
resultsStart,
resultsEnd,
})
Expand Down
6 changes: 3 additions & 3 deletions server/views/pages/activity-log/_filters.njk
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
'data-qa': 'keywords'
}
},
value: query.keywords
value: filters.query.keywords
}) }}
{{ mojDatePicker({
id: "dateFrom",
Expand All @@ -33,7 +33,7 @@
'data-qa': 'date-from'
}
},
value: query.dateFrom,
value: filters.query.dateFrom,
maxDate: filters.maxDate,
errorMessage: {
text: filters.errors.errorMessages.dateFrom.text
Expand All @@ -52,7 +52,7 @@
'data-qa': 'date-to'
}
},
value: query.dateTo,
value: filters.query.dateTo,
maxDate: filters.maxDate,
errorMessage: {
text: filters.errors.errorMessages.dateTo.text
Expand Down

0 comments on commit cf46d5d

Please sign in to comment.