diff --git a/app/components/routing-tabs.tsx b/app/components/routing-tabs.tsx new file mode 100644 index 0000000..dd4635a --- /dev/null +++ b/app/components/routing-tabs.tsx @@ -0,0 +1,68 @@ +"use client"; + +import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import React from "react"; +import { useNavigate } from "react-router"; + +type TabItem = { + label: React.ReactNode; + to: string; // route path + value: string; +}; + +type RoutingTabsProps = { + tabs?: Array; + defaultValue?: string; +}; + +// Provide an array of { label, to } and the component will navigate when a tab is selected. +export function RoutingTabs({ tabs, defaultValue }: RoutingTabsProps) { + const navigate = useNavigate(); + + const defaultTabs: Array = React.useMemo( + () => [ + { label: "Søkere", to: "dashboard/sokere", value: "sokere" }, + { + label: "Tidligere assistenter", + to: "dashboard/tidligere-assistenter", + value: "tidligere-assistenter", + }, + { + label: "Intervjufordeling", + to: "dashboard/intervjufordeling", + value: "intervjufordeling", + }, + { label: "Intervjuer", to: "dashboard/intervjuer", value: "intervjuer" }, + ], + [], + ); + + const items = tabs ?? defaultTabs; + + const handleTabChange = (value: string) => { + const item = items.find((tab) => (tab.value ?? tab.to) === value); + if (item) navigate(item.to); + }; + + return ( + +
+ + {items.map((tab) => ( + + {tab.label} + + ))} + +
+
+ ); +} diff --git a/app/routes/dashboard.intervjuer._index.tsx b/app/routes/dashboard.intervjuer._index.tsx index a4adf1a..69785fe 100644 --- a/app/routes/dashboard.intervjuer._index.tsx +++ b/app/routes/dashboard.intervjuer._index.tsx @@ -1,8 +1,10 @@ +import { RoutingTabs } from "@/components/routing-tabs"; // biome-ignore lint/style/noDefaultExport: Route Modules require default export https://reactrouter.com/start/framework/route-module export default function Intervjuer() { return ( <>

Intervjuer

+ ); } diff --git a/app/routes/dashboard.intervjufordeling._index.tsx b/app/routes/dashboard.intervjufordeling._index.tsx index e6e38ba..b37cd40 100644 --- a/app/routes/dashboard.intervjufordeling._index.tsx +++ b/app/routes/dashboard.intervjufordeling._index.tsx @@ -1,8 +1,11 @@ +import { RoutingTabs } from "@/components/routing-tabs"; + // biome-ignore lint/style/noDefaultExport: Route Modules require default export https://reactrouter.com/start/framework/route-module export default function Intervjufordeling() { return ( <>

Intervjufordeling

+ ); } diff --git a/app/routes/dashboard.sokere._index.tsx b/app/routes/dashboard.sokere._index.tsx index 8689b45..7b1c58c 100644 --- a/app/routes/dashboard.sokere._index.tsx +++ b/app/routes/dashboard.sokere._index.tsx @@ -1,4 +1,5 @@ import { DataTable } from "@/components/data-table"; +import { RoutingTabs } from "@/components/routing-tabs"; import { Checkbox } from "@/components/ui/checkbox"; import type { ColumnDef } from "@tanstack/react-table"; import { DataSokere } from "../mock/api/data-sokere"; @@ -71,6 +72,7 @@ export const columns: Array> = [ export default function Sokere() { return (
+ {/* Søkere diff --git a/app/routes/dashboard.tidligere-assistenter._index.tsx b/app/routes/dashboard.tidligere-assistenter._index.tsx index ba506e8..918680c 100644 --- a/app/routes/dashboard.tidligere-assistenter._index.tsx +++ b/app/routes/dashboard.tidligere-assistenter._index.tsx @@ -1,8 +1,11 @@ +import { RoutingTabs } from "@/components/routing-tabs"; + // biome-ignore lint/style/noDefaultExport: Route Modules require default export https://reactrouter.com/start/framework/route-module export default function TidligereAssistenter() { return ( <>

Tidligere Assistenter

+ ); } diff --git a/app/routes/dashboard.tsx b/app/routes/dashboard.tsx index 74ff5b7..a8762b8 100644 --- a/app/routes/dashboard.tsx +++ b/app/routes/dashboard.tsx @@ -141,7 +141,7 @@ const mainLinks = [ }, { title: "Tidligere Assistenter", - url: href("/dashboard/tidligereassistenter"), + url: href("/dashboard/tidligere-assistenter"), }, { title: "Intervjufordeling",