@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
97 lines (78 loc) • 2.19 kB
text/typescript
import {
ActionTemplate,
CopyActionParams,
DownloadActionParams,
GetActionsParams,
PrintActionParams,
RefreshActionParams,
ReportAction,
ShareActionParams,
} from './types'
import { actionTemplates } from './actionsTemplate'
const getActions = ({ refresh, print, share, copy, download }: GetActionsParams): ReportAction[] => {
const actions: ReportAction[] = []
if (refresh && refresh.url && refresh.executionId) {
actions.push(setRefreshAction(actionTemplates.refresh, refresh))
}
if (print) {
actions.push(setPrintAction(actionTemplates.printable, print))
}
if (share) {
actions.push(setShareAction(actionTemplates.sharable, share))
}
if (copy) {
actions.push(setCopyAction(actionTemplates.copy, copy))
}
if (download) {
actions.push(setDownloadAction(actionTemplates.downloadable, download))
}
return actions
}
const setRefreshAction = (template: ActionTemplate, data: RefreshActionParams) => {
const { url: href } = data
return {
...template,
href,
}
}
const setShareAction = (template: ActionTemplate, data: ShareActionParams) => {
const { reportName, name, url } = data
const href = `mailto:?subject=${reportName}-${name}&body=${encodeURIComponent(url)}`
return {
...template,
href,
}
}
const setCopyAction = (template: ActionTemplate, data: CopyActionParams) => {
const { url: href } = data
return {
...template,
href,
}
}
const setDownloadAction = (template: ActionTemplate, data: DownloadActionParams) => {
const { canDownload, enabled } = data
const { tooltipText, ariaLabelText } = template
return {
...template,
tooltipText: canDownload ? tooltipText : 'Enable download',
disabled: !enabled,
attributes: {
...data,
},
ariaLabelText: !enabled ? `${ariaLabelText}, disabled` : ariaLabelText,
}
}
const setPrintAction = (template: ActionTemplate, data: PrintActionParams) => {
const { enabled } = data
const { ariaLabelText } = template
return {
...template,
disabled: !enabled,
href: '#',
ariaLabelText: !enabled ? `${ariaLabelText}, disabled` : ariaLabelText,
}
}
export default {
getActions,
}