From b75aed652474b785c1e0d48e037d11763a84dd8c Mon Sep 17 00:00:00 2001 From: "tembo[bot]" <208362400+tembo[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 00:57:42 +0000 Subject: [PATCH 1/2] feat(dashboard): improve loading states and enhance repo name display in rows Co-authored-by: Alan <45767683+stylessh@users.noreply.github.com> --- .../layouts/dashboard-content-loading.tsx | 24 +++++++++++++++++++ .../src/components/repo/repository-row.tsx | 17 +++++++++++-- apps/dashboard/src/routes/_protected.tsx | 2 ++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx b/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx index d72ccf8..ae84469 100644 --- a/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx +++ b/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx @@ -1,5 +1,15 @@ import { Spinner } from "@diffkit/ui/components/spinner"; +/** + * Pending component used for routes rendered inside the dashboard card + * (`DashboardLayout`). The `h-full` chain resolves against the card so the + * spinner stays visually centered within the content area. + * + * For top-level pending fallbacks where the parent is just `` (e.g. + * when `_protected` itself is reloading), use `DashboardViewportLoading` + * instead — `h-full` there collapses to content height and pins the spinner + * to the top of the viewport. + */ export function DashboardContentLoading() { return (
@@ -7,3 +17,17 @@ export function DashboardContentLoading() {
); } + +/** + * Full-viewport pending component. Use for route pending states that render + * directly inside the document body (where no ancestor provides a resolved + * height). Keeps the spinner centered regardless of how little content the + * layout has yet rendered. + */ +export function DashboardViewportLoading() { + return ( +
+ +
+ ); +} diff --git a/apps/dashboard/src/components/repo/repository-row.tsx b/apps/dashboard/src/components/repo/repository-row.tsx index a5b40b3..771ecfb 100644 --- a/apps/dashboard/src/components/repo/repository-row.tsx +++ b/apps/dashboard/src/components/repo/repository-row.tsx @@ -135,8 +135,21 @@ export const RepositoryRow = memo(function RepositoryRow({ >
-

- {repo.fullName} + {/* + * Split owner/name so a long owner login doesn't consume all the + * space and hide the repo name. The owner takes flexible space and + * truncates first; the repo name stays readable at its natural + * size. See diffkit#154. + */} +

+ + {repo.owner} + + / + {repo.name}

diff --git a/apps/dashboard/src/routes/_protected.tsx b/apps/dashboard/src/routes/_protected.tsx index 8da673d..0b2a8f8 100644 --- a/apps/dashboard/src/routes/_protected.tsx +++ b/apps/dashboard/src/routes/_protected.tsx @@ -1,4 +1,5 @@ import { createFileRoute, redirect } from "@tanstack/react-router"; +import { DashboardViewportLoading } from "#/components/layouts/dashboard-content-loading"; import { DashboardLayout } from "#/components/layouts/dashboard-layout"; import { ErrorScreen } from "#/components/layouts/error-screen"; import { getSession } from "#/lib/auth.functions"; @@ -67,5 +68,6 @@ export const Route = createFileRoute("/_protected")({ }); }, component: DashboardLayout, + pendingComponent: DashboardViewportLoading, errorComponent: ErrorScreen, }); From fa11e094b83cea8f7e9d260f40f0bca307052d2a Mon Sep 17 00:00:00 2001 From: "tembo[bot]" <208362400+tembo[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 01:05:12 +0000 Subject: [PATCH 2/2] refactor(review): autofocus textarea in inline comment form for immediate input Co-authored-by: Alan <45767683+stylessh@users.noreply.github.com> --- .../layouts/dashboard-content-loading.tsx | 16 ---------------- .../pulls/review/review-file-diff-block.tsx | 8 ++++++++ .../src/components/repo/repository-row.tsx | 6 ------ 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx b/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx index ae84469..dbd90d1 100644 --- a/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx +++ b/apps/dashboard/src/components/layouts/dashboard-content-loading.tsx @@ -1,15 +1,5 @@ import { Spinner } from "@diffkit/ui/components/spinner"; -/** - * Pending component used for routes rendered inside the dashboard card - * (`DashboardLayout`). The `h-full` chain resolves against the card so the - * spinner stays visually centered within the content area. - * - * For top-level pending fallbacks where the parent is just `` (e.g. - * when `_protected` itself is reloading), use `DashboardViewportLoading` - * instead — `h-full` there collapses to content height and pins the spinner - * to the top of the viewport. - */ export function DashboardContentLoading() { return (
@@ -18,12 +8,6 @@ export function DashboardContentLoading() { ); } -/** - * Full-viewport pending component. Use for route pending states that render - * directly inside the document body (where no ancestor provides a resolved - * height). Keeps the spinner centered regardless of how little content the - * layout has yet rendered. - */ export function DashboardViewportLoading() { return (
diff --git a/apps/dashboard/src/components/pulls/review/review-file-diff-block.tsx b/apps/dashboard/src/components/pulls/review/review-file-diff-block.tsx index 327ca50..036e6e1 100644 --- a/apps/dashboard/src/components/pulls/review/review-file-diff-block.tsx +++ b/apps/dashboard/src/components/pulls/review/review-file-diff-block.tsx @@ -20,7 +20,9 @@ import { memo, Suspense, useCallback, + useEffect, useMemo, + useRef, useState, } from "react"; import { CommentMoreMenu } from "#/components/details/comment-more-menu"; @@ -464,6 +466,11 @@ function InlineCommentForm({ mentionConfig?: MentionConfig; }) { const [body, setBody] = useState(""); + const textareaRef = useRef(null); + + useEffect(() => { + textareaRef.current?.focus(); + }, []); return (
@@ -478,6 +485,7 @@ function InlineCommentForm({ placeholder="Leave a comment..." compact mentions={mentionConfig} + textareaRef={textareaRef} />