Persist GitLab tracking metadata and surface it across task APIs and dashboard views. - add task-store schema, migration, and update helpers for linked GitLab items and stale state - expose validated GitLab tracking updates through task workflow routes and legacy task payloads - render GitLab badges, detail-panel metadata, open/unlink actions, styling, i18n strings, and docs - cover persistence, route validation, task card badges, and task detail interactions with tests - add a patch changeset for the published Fusion package Files changed: .changeset/fn-7425-gitlab-tracking.md | 7 ++ docs/cli-reference.md | 2 +- docs/dashboard-guide.md | 3 + packages/core/src/__tests__/db-migrate.test.ts | 29 +++++ .../src/__tests__/store-gitlab-tracking.test.ts | 138 +++++++++++++++++++++ packages/core/src/db.ts | 10 +- packages/core/src/gitlab-tracking.ts | 10 ++ packages/core/src/index.ts | 3 +- packages/core/src/store.ts | 135 +++++++++++++++++++- packages/core/src/types.ts | 49 ++++++++ packages/dashboard/app/api/legacy.ts | 3 + packages/dashboard/app/components/GitLabBadge.tsx | 33 +++++ packages/dashboard/app/components/TaskCard.tsx | 7 +- .../dashboard/app/components/TaskCardBadge.tsx | 15 ++- .../dashboard/app/components/TaskDetailModal.css | 47 +++++-- .../dashboard/app/components/TaskDetailModal.tsx | 134 +++++++++++++++++++- .../app/components/__tests__/TaskCard.test.tsx | 49 ++++++++ .../TaskDetailModal.gitlab-tracking.test.tsx | 121 ++++++++++++++++++ .../__tests__/TaskDetailModal.test-helpers.ts | 1 + packages/dashboard/app/styles.css | 9 ++ .../src/__tests__/routes-tasks-ops.test.ts | 136 ++++++++++++++++++++ packages/dashboard/src/gitlab.ts | 24 +++- packages/dashboard/src/routes/register-gitlab.ts | 1 + .../src/routes/register-task-workflow-routes.ts | 106 +++++++++++++++- packages/i18n/locales/en/app.json | 31 +++++ packages/i18n/src/resources.d.ts | 31 +++++ 26 files changed, 1106 insertions(+), 28 deletions(-) Fusion-Task-Id: FN-7425 Fusion-Task-Lineage: 9b5e6005-7284-402e-995c-553be2275eff Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { GitBranch, AlertTriangle } from "lucide-react";
|
|
import type { TaskGitLabTrackedItem } from "@fusion/core";
|
|
|
|
export function formatGitLabBadgeKind(item: Pick<TaskGitLabTrackedItem, "kind">): string {
|
|
if (item.kind === "merge_request") return "MR";
|
|
if (item.kind === "group_issue") return "Group issue";
|
|
return "Issue";
|
|
}
|
|
|
|
export function formatGitLabBadgeMarker(item: Pick<TaskGitLabTrackedItem, "kind" | "iid">): string {
|
|
return `${item.kind === "merge_request" ? "!" : "#"}${item.iid}`;
|
|
}
|
|
|
|
export function GitLabBadge({ item }: { item?: TaskGitLabTrackedItem }) {
|
|
if (!item) return null;
|
|
const stale = Boolean(item.staleAt || item.staleReason);
|
|
const title = `GitLab ${formatGitLabBadgeKind(item)} ${formatGitLabBadgeMarker(item)}${item.title ? `: ${item.title}` : ""}${stale ? ` — stale${item.staleReason ? `: ${item.staleReason}` : ""}` : ""}`;
|
|
|
|
return (
|
|
<a
|
|
className={`card-github-badge card-gitlab-badge ${stale ? "card-gitlab-badge--stale" : "card-github-badge--open"}`}
|
|
title={title}
|
|
href={item.url}
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
aria-label={title}
|
|
data-testid="card-gitlab-badge"
|
|
>
|
|
{stale ? <AlertTriangle size={10} aria-hidden="true" /> : <GitBranch size={10} aria-hidden="true" />}
|
|
<span>{formatGitLabBadgeMarker(item)}</span>
|
|
</a>
|
|
);
|
|
}
|