Openstatus www.openstatus.dev

fix: search params (#793)

authored by

Maximilian Kaske and committed by
GitHub
56e60ef0 2dffb3ec

+32 -5
+28 -2
apps/web/src/app/app/[workspaceSlug]/(dashboard)/monitors/(overview)/page.tsx
··· 1 1 import * as React from "react"; 2 2 import Link from "next/link"; 3 + import { notFound } from "next/navigation"; 4 + import { z } from "zod"; 3 5 4 6 import { OSTinybird } from "@openstatus/tinybird"; 5 7 import { Button } from "@openstatus/ui"; ··· 17 19 18 20 export const dynamic = "force-dynamic"; 19 21 20 - export default async function MonitorPage() { 22 + /** 23 + * allowed URL search params 24 + */ 25 + const searchParamsSchema = z.object({ 26 + tags: z 27 + .string() 28 + .transform((v) => v?.split(",")) 29 + .optional(), 30 + }); 31 + 32 + export default async function MonitorPage({ 33 + searchParams, 34 + }: { 35 + searchParams: { [key: string]: string | string[] | undefined }; 36 + }) { 37 + const search = searchParamsSchema.safeParse(searchParams); 21 38 const monitors = await api.monitor.getMonitorsByWorkspace.query(); 22 39 const isLimitReached = await api.monitor.isMonitorLimitReached.query(); 40 + 41 + if (!search.success) return notFound(); 23 42 24 43 if (monitors?.length === 0) 25 44 return ( ··· 80 99 81 100 return ( 82 101 <> 83 - <DataTable columns={columns} data={monitorsWithData} tags={tags} /> 102 + <DataTable 103 + defaultColumnFilters={[{ id: "tags", value: search.data.tags }].filter( 104 + (v) => v.value !== undefined, 105 + )} 106 + columns={columns} 107 + data={monitorsWithData} 108 + tags={tags} 109 + /> 84 110 {isLimitReached ? <Limit /> : null} 85 111 {/* <RefreshWidget defaultValue={lastCronTimestamp} /> */} 86 112 </>
+4 -3
apps/web/src/components/data-table/monitor/data-table.tsx
··· 33 33 columns: ColumnDef<TData, TValue>[]; 34 34 data: TData[]; 35 35 tags?: MonitorTag[]; 36 + defaultColumnFilters?: ColumnFiltersState; 36 37 } 37 38 38 39 export function DataTable<TData, TValue>({ 39 40 columns, 40 41 data, 41 42 tags, 43 + defaultColumnFilters = [], 42 44 }: DataTableProps<TData, TValue>) { 43 - const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>( 44 - [], 45 - ); 45 + const [columnFilters, setColumnFilters] = 46 + React.useState<ColumnFiltersState>(defaultColumnFilters); 46 47 const [columnVisibility, setColumnVisibility] = 47 48 React.useState<VisibilityState>({ 48 49 public: false, // default is true