From 5f8d049de31a967fb1641e5bbaedbb23a31cfff3 Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Wed, 21 Jan 2026 13:09:04 +0000 Subject: [PATCH] table rows as links --- .../frontend/src/components/issues-table.tsx | 96 +++++++++++++------ 1 file changed, 69 insertions(+), 27 deletions(-) diff --git a/packages/frontend/src/components/issues-table.tsx b/packages/frontend/src/components/issues-table.tsx index aeee09d..aa0f6ae 100644 --- a/packages/frontend/src/components/issues-table.tsx +++ b/packages/frontend/src/components/issues-table.tsx @@ -3,7 +3,7 @@ import Avatar from "@/components/avatar"; import { useSelection } from "@/components/selection-provider"; import StatusTag from "@/components/status-tag"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; -import { useIssues, useSelectedOrganisation } from "@/lib/query/hooks"; +import { useIssues, useSelectedOrganisation, useSelectedProject } from "@/lib/query/hooks"; import { cn } from "@/lib/utils"; export function IssuesTable({ @@ -16,10 +16,28 @@ export function IssuesTable({ const { selectedProjectId, selectedIssueId, selectIssue } = useSelection(); const { data: issuesData = [] } = useIssues(selectedProjectId); const selectedOrganisation = useSelectedOrganisation(); + const selectedProject = useSelectedProject(); const statuses = selectedOrganisation?.Organisation.statuses ?? {}; const issues = useMemo(() => [...issuesData].reverse(), [issuesData]); + const getIssueUrl = (issueNumber: number) => { + if (!selectedOrganisation || !selectedProject) return "#"; + const params = new URLSearchParams(); + params.set("o", selectedOrganisation.Organisation.slug.toLowerCase()); + params.set("p", selectedProject.Project.key.toLowerCase()); + params.set("i", issueNumber.toString()); + return `/app?${params.toString()}`; + }; + + const handleLinkClick = (e: React.MouseEvent) => { + if (e.metaKey || e.ctrlKey || e.shiftKey) { + e.stopPropagation(); + return; + } + e.preventDefault(); + }; + return ( @@ -51,13 +69,23 @@ export function IssuesTable({ }} > {(columns.id == null || columns.id === true) && ( - - {issueData.Issue.number.toString().padStart(3, "0")} + + + {issueData.Issue.number.toString().padStart(3, "0")} + )} {(columns.title == null || columns.title === true) && ( - -
+ + {(columns.status == null || columns.status === true) && ( )} {issueData.Issue.title} -
+
)} {(columns.description == null || columns.description === true) && ( - {issueData.Issue.description} + + + {issueData.Issue.description} + + )} {(columns.assignee == null || columns.assignee === true) && ( - - {issueData.Assignees && issueData.Assignees.length > 0 && ( -
- {issueData.Assignees.slice(0, 3).map((assignee) => ( - - ))} - {issueData.Assignees.length > 3 && ( - - +{issueData.Assignees.length - 3} - - )} -
- )} + + + {issueData.Assignees && issueData.Assignees.length > 0 && ( +
+ {issueData.Assignees.slice(0, 3).map((assignee) => ( + + ))} + {issueData.Assignees.length > 3 && ( + + +{issueData.Assignees.length - 3} + + )} +
+ )} +
)}