diff --git a/apps/dashboard/src/app/(dashboard)/incidents/client.tsx b/apps/dashboard/src/app/(dashboard)/incidents/client.tsx index be78aa5d..b67b5609 100644 --- a/apps/dashboard/src/app/(dashboard)/incidents/client.tsx +++ b/apps/dashboard/src/app/(dashboard)/incidents/client.tsx @@ -70,6 +70,7 @@ export function Client() { ) : ( + // incident.list already sorts open first, then newest declared. )} diff --git a/apps/dashboard/src/components/data-table/managed-incidents/columns.tsx b/apps/dashboard/src/components/data-table/managed-incidents/columns.tsx index bff0a6bd..138712dc 100644 --- a/apps/dashboard/src/components/data-table/managed-incidents/columns.tsx +++ b/apps/dashboard/src/components/data-table/managed-incidents/columns.tsx @@ -7,6 +7,7 @@ import { formatDistanceStrict } from "date-fns"; import { Link } from "@/components/common/link"; import { TableCellDate } from "@/components/data-table/table-cell-date"; +import { TableCellLink } from "@/components/data-table/table-cell-link"; import { TableCellNumber } from "@/components/data-table/table-cell-number"; import { TableCellText } from "@/components/data-table/table-cell-text"; import { @@ -97,4 +98,18 @@ export const columns: ColumnDef[] = [ ), meta: { cellClassName: "max-w-[200px] truncate" }, }, + { + id: "slack", + header: "Slack", + cell: ({ row }) => { + const { slackTeamId, slackChannelId } = row.original; + const bound = slackTeamId && slackChannelId; + return ( + + ); + }, + }, ]; diff --git a/apps/dashboard/src/components/forms/incident/form.tsx b/apps/dashboard/src/components/forms/incident/form.tsx index 16f625ec..f8640933 100644 --- a/apps/dashboard/src/components/forms/incident/form.tsx +++ b/apps/dashboard/src/components/forms/incident/form.tsx @@ -44,7 +44,13 @@ const schema = z.object({ severity: z.enum(incidentSeverity), summary: z.string().max(4000), commanderId: z.string(), - startedAt: z.string().min(1, "Start time is required."), + startedAt: z + .string() + .min(1, "Start time is required.") + .refine( + (value) => new Date(value) <= new Date(), + "Start time cannot be in the future.", + ), statusReportId: z.string(), }); @@ -84,6 +90,8 @@ export function FormDeclareIncident({ title: "", severity: "major", summary: "", + // user.get is prefetched in the dashboard layout, so it is hydrated + // before the sheet can mount and the default is never NONE for members. commanderId: user ? String(user.id) : NONE, startedAt: toLocalInput(new Date()), statusReportId: NONE,