UNPKG

@damourlabs/euro-clinical-trials

Version:

A Nuxt 3 application for visualizing and managing clinical trials data in Europe, built with modern web technologies.

98 lines (93 loc) 3.68 kB
import type { ColumnDef } from '@tanstack/vue-table' import type { ProtocolDeviation, Patient } from '~/server/database/schema' import { StatusBadge, FieldDate, GenericCompactCard } from '~/components/common/field' async function fetchPatient(_uuid: string) { const patient = usePatientsStore().getById(_uuid) if (patient === undefined) { throw createError(`Patient with UUID ${_uuid} not found`) } return patient } export const protocolDeviationsColumnSimple: ColumnDef<ProtocolDeviation>[] = [ createResponsiveColumn({ accessorKey: 'uuid', header: () => h('div', { class: getHeaderClasses('right') }, 'Patient ID'), cell: ({ row }) => { const protocolDeviation = row.original return h('div', { class: getCellClasses('right') }, h(GenericCompactCard<ProtocolDeviation>, { entityUuid: protocolDeviation.uuid, entityType: 'protocol-deviation', fetchFunction: () => Promise.resolve(protocolDeviation), titleField: 'patientUuid', subtitleField: 'description', statusField: 'severity', colorScheme: 'red' }) ) }, }), createResponsiveColumn({ accessorKey: 'description', header: () => h('div', { class: getHeaderClasses() }, 'Description'), cell: ({ row }) => { const description = row.getValue('description') as string const truncated = description.length > 50 ? description.substring(0, 50) + '...' : description return h('div', { class: getCellClasses(), title: description }, truncated) } }), // Severity column createResponsiveColumn({ accessorKey: 'severity', header: () => h('div', { class: getHeaderClasses('center') }, 'Severity'), cell: ({ row }) => { const severity = row.getValue('severity') as string return h('div', { class: getCellClasses('center') }, h(StatusBadge, { status: severity }) ) } }), // Date Occurred column createResponsiveColumn({ accessorKey: 'dateOccurred', header: () => h('div', { class: getHeaderClasses('center') }, 'Date Occurred'), cell: ({ row }) => { const dateOccurred = row.getValue('dateOccurred') as string return h('div', { class: getCellClasses('center') }, h(FieldDate, { date: dateOccurred }) ) } }), // Reported At column createResponsiveColumn({ accessorKey: 'reportedAt', header: () => h('div', { class: getHeaderClasses('center') }, 'Reported At'), cell: ({ row }) => { const reportedAt = row.getValue('reportedAt') as string return h('div', { class: getCellClasses('center') }, h(FieldDate, { date: reportedAt }) ) } }), // Patient UUID column createResponsiveColumn({ accessorKey: 'patientUuid', header: () => h('div', { class: getHeaderClasses('right') }, 'Patient UUID'), cell: ({ row }) => { const patientUuid = row.getValue('patientUuid') as string return h(GenericCompactCard<Patient>, { entityUuid: patientUuid, entityType: 'patient', fetchFunction: fetchPatient, titleField: 'subjectId', subtitleField: 'randomizationGroup', statusField: 'status', colorScheme: 'blue' }) } }), ]