row.toggleSelected(!!value)}
aria-label="Select row"
/>
),
enableSorting: false,
enableHiding: false,
},
{
accessorKey: "name",
header: ({ column }) => (
),
cell: ({ row }) => {
const trial = row.original;
return (
{trial.name}
);
},
},
{
accessorKey: "status",
header: ({ column }) => (
),
cell: ({ row }) => {
const status = row.getValue("status") as Trial["status"];
const config = statusConfig[status];
return (
{config.label}
);
},
filterFn: (row, id, value: string[]) => {
const status = row.getValue(id) as string;
return value.includes(status);
},
},
{
accessorKey: "participant",
header: ({ column }) => (
),
cell: ({ row }) => {
const participant = row.getValue("participant") as Trial["participant"];
return (
{participant.name || "Unnamed Participant"}
);
},
enableSorting: false,
},
{
accessorKey: "experiment",
header: ({ column }) => (
),
cell: ({ row }) => {
const experiment = row.getValue("experiment") as Trial["experiment"];
return (
{experiment.name || "Unnamed Experiment"}
);
},
enableSorting: false,
enableHiding: true,
meta: {
defaultHidden: true,
},
},
{
accessorKey: "wizard",
header: ({ column }) => (
),
cell: ({ row }) => {
const wizard = row.getValue("wizard") as Trial["wizard"];
if (!wizard) {
return (
Not assigned
);
}
return (
{wizard.name ?? ""}
{wizard.email}
);
},
enableSorting: false,
enableHiding: true,
meta: {
defaultHidden: true,
},
},
{
accessorKey: "scheduledAt",
header: ({ column }) => (
),
cell: ({ row }) => {
const date = row.getValue("scheduledAt") as Date | null;
if (!date) {
return (
Not scheduled
);
}
return (
{formatDistanceToNow(date, { addSuffix: true })}
);
},
enableHiding: true,
meta: {
defaultHidden: true,
},
},
{
id: "duration",
header: "Duration",
cell: ({ row }) => {
const trial = row.original;
if (
trial.status === "completed" &&
trial.startedAt &&
trial.completedAt
) {
const duration = Math.round(
(trial.completedAt.getTime() - trial.startedAt.getTime()) /
(1000 * 60),
);
return {duration}m
;
}
if (trial.status === "in_progress" && trial.startedAt) {
const duration = Math.round(
(Date.now() - trial.startedAt.getTime()) / (1000 * 60),
);
return (
{duration}m
);
}
if (trial.duration) {
return (
~{trial.duration}m
);
}
return -;
},
enableSorting: false,
},
{
id: "stats",
header: "Data",
cell: ({ row }) => {
const trial = row.original;
const counts = trial._count;
return (
{counts?.actions ?? 0}
{counts?.logs ?? 0}
);
},
enableSorting: false,
enableHiding: true,
meta: {
defaultHidden: true,
},
},
{
accessorKey: "createdAt",
header: ({ column }) => (
),
cell: ({ row }) => {
const date = row.getValue("createdAt") as Date;
return (
{formatDistanceToNow(date, { addSuffix: true })}
);
},
enableHiding: true,
meta: {
defaultHidden: true,
},
},
{
id: "actions",
header: "Actions",
cell: ({ row }) => ,
enableSorting: false,
enableHiding: false,
},
];