From 593e1557550a80ab26d08c7bc991694b362e1b54 Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Sat, 10 Jan 2026 16:47:42 +0000 Subject: [PATCH] status tag component and implmentation --- .../src/components/issue-detail-pane.tsx | 22 +++++++++++-- .../frontend/src/components/issues-table.tsx | 5 ++- .../frontend/src/components/status-select.tsx | 32 +++++++++++-------- .../frontend/src/components/status-tag.tsx | 14 ++++++++ .../frontend/src/components/ui/select.tsx | 28 +++++++++------- 5 files changed, 70 insertions(+), 31 deletions(-) create mode 100644 packages/frontend/src/components/status-tag.tsx diff --git a/packages/frontend/src/components/issue-detail-pane.tsx b/packages/frontend/src/components/issue-detail-pane.tsx index d9ea027..addc4e7 100644 --- a/packages/frontend/src/components/issue-detail-pane.tsx +++ b/packages/frontend/src/components/issue-detail-pane.tsx @@ -4,8 +4,10 @@ import { useEffect, useState } from "react"; import { useSession } from "@/components/session-provider"; import SmallUserDisplay from "@/components/small-user-display"; import { StatusSelect } from "@/components/status-select"; +import StatusTag from "@/components/status-tag"; import { TimerModal } from "@/components/timer-modal"; import { Button } from "@/components/ui/button"; +import { SelectTrigger } from "@/components/ui/select"; import { UserSelect } from "@/components/user-select"; import { issue } from "@/lib/server"; import { issueID } from "@/lib/utils"; @@ -84,9 +86,23 @@ export function IssueDetailPane({
-
- -
+
+ ( + + + + )} + /> +
{issueData.Issue.title}
diff --git a/packages/frontend/src/components/issues-table.tsx b/packages/frontend/src/components/issues-table.tsx index 8250e70..2e9bc37 100644 --- a/packages/frontend/src/components/issues-table.tsx +++ b/packages/frontend/src/components/issues-table.tsx @@ -1,5 +1,6 @@ import type { IssueResponse } from "@issue/shared"; import Avatar from "@/components/avatar"; +import StatusTag from "@/components/status-tag"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { cn } from "@/lib/utils"; @@ -47,9 +48,7 @@ export function IssuesTable({ {(columns.status == null || columns.status === true) && ( -
- {issueData.Issue.status} -
+ )} {issueData.Issue.title}
diff --git a/packages/frontend/src/components/status-select.tsx b/packages/frontend/src/components/status-select.tsx index ccf0315..54d240f 100644 --- a/packages/frontend/src/components/status-select.tsx +++ b/packages/frontend/src/components/status-select.tsx @@ -1,37 +1,41 @@ +import type { ReactNode } from "react"; import { useState } from "react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import StatusTag from "./status-tag"; export function StatusSelect({ statuses, value, onChange, placeholder = "Select status", + trigger, }: { statuses: string[]; value: string; onChange: (value: string) => void; placeholder?: string; + trigger?: (args: { isOpen: boolean; value: string }) => ReactNode; }) { const [isOpen, setIsOpen] = useState(false); return (