chore: clear lint warnings and finalize shared epic chip strip

This commit is contained in:
zenchantlive 2026-02-13 12:44:14 -08:00
parent 74871545c7
commit df4769bf07
5 changed files with 9 additions and 19 deletions

View file

@ -1,7 +1,7 @@
import nextCoreWebVitals from 'eslint-config-next/core-web-vitals';
import nextTypeScript from 'eslint-config-next/typescript';
export default [
const eslintConfig = [
...nextCoreWebVitals,
...nextTypeScript,
{
@ -17,3 +17,5 @@ export default [
},
},
];
export default eslintConfig;

View file

@ -15,7 +15,7 @@ import {
import '@xyflow/react/dist/style.css';
import dagre from 'dagre';
import { EpicChipStrip } from './epic-chip-strip';
import { EpicChipStrip } from '../shared/epic-chip-strip';
import { WorkflowTabs, type WorkflowTab } from './workflow-tabs';
import { TaskCardGrid, type BlockerDetail } from './task-card-grid';
import { TaskDetailsDrawer } from './task-details-drawer';
@ -25,14 +25,14 @@ import { GraphSection } from './graph-section';
import { ProjectScopeControls } from '../shared/project-scope-controls';
import { WorkspaceHero } from '../shared/workspace-hero';
import { buildGraphModel, type GraphNode } from '../../lib/graph';
import { buildGraphModel } from '../../lib/graph';
import {
buildPathWorkspace,
type GraphHopDepth,
analyzeBlockedChain,
detectDependencyCycles,
} from '../../lib/graph-view';
import { buildBlockedByTree, type BlockedTreeNode } from '../../lib/kanban';
import { buildBlockedByTree } from '../../lib/kanban';
import { type BeadIssue } from '../../lib/types';
import type { ProjectScopeOption } from '../../lib/project-scope';
@ -599,8 +599,7 @@ export function DependencyGraphPage({
const nodeTypes: NodeTypes = useMemo(
() => ({
// eslint-disable-next-line @typescript-eslint/no-explicit-any
flowNode: GraphNodeCard as any,
flowNode: GraphNodeCard as NodeTypes['flowNode'],
}),
[],
);
@ -847,7 +846,6 @@ export function DependencyGraphPage({
<TaskCardGrid
tasks={sortedEpicTasks}
selectedId={selectedId}
signalById={signalById}
blockerDetailsMap={blockerDetailsMap}
blocksDetailsMap={blocksDetailsMap}
actionableIds={actionableNodeIds}
@ -866,7 +864,6 @@ export function DependencyGraphPage({
<TaskCardGrid
tasks={sortedEpicTasks}
selectedId={selectedId}
signalById={signalById}
blockerDetailsMap={blockerDetailsMap}
blocksDetailsMap={blocksDetailsMap}
actionableIds={actionableNodeIds}

View file

@ -18,10 +18,6 @@ interface TaskCardProps {
issue: BeadIssue;
/** Whether this card is the currently selected task. */
selected: boolean;
/** Number of issues blocking this task. */
blockedBy: number;
/** Number of issues this task blocks. */
blocks: number;
/** List of issues blocking this task. */
blockers: BlockerDetail[];
/** List of issues this task blocks. */
@ -38,8 +34,6 @@ interface TaskCardGridProps {
tasks: BeadIssue[];
/** ID of the currently selected task, or null. */
selectedId: string | null;
/** Map of issue ID to blocker/blocks counts. */
signalById: Map<string, { blockedBy: number; blocks: number }>;
/** Map of issue ID to detailed blocker info. */
blockerDetailsMap: Map<string, BlockerDetail[]>;
/** Map of issue ID to detailed downstream blocking info. */
@ -157,7 +151,7 @@ function statusBadge(status: BeadIssue['status'], isActionable: boolean, hasBloc
* A single task card displaying the issue ID, title, priority, type, assignee,
* and detailed blocker list (interactive).
*/
function TaskCard({ issue, selected, blockedBy, blocks, blockers, blocking, isActionable, onSelect }: TaskCardProps) {
function TaskCard({ issue, selected, blockers, blocking, isActionable, onSelect }: TaskCardProps) {
const hasBlockers = blockers.length > 0; // Note: blockers list only contains OPEN blockers (computed in page)
const badge = statusBadge(issue.status, isActionable, hasBlockers);
const projectName = (issue as BeadIssue & { project?: { name?: string } }).project?.name ?? null;
@ -360,7 +354,7 @@ function TaskCard({ issue, selected, blockedBy, blocks, blockers, blocking, isAc
* Renders a responsive grid of task cards.
* Uses auto-fill with minmax to prevent cards from being too narrow to read.
*/
export function TaskCardGrid({ tasks, selectedId, signalById, blockerDetailsMap, blocksDetailsMap, actionableIds, onSelect }: TaskCardGridProps) {
export function TaskCardGrid({ tasks, selectedId, blockerDetailsMap, blocksDetailsMap, actionableIds, onSelect }: TaskCardGridProps) {
// Show an empty state when no tasks exist in the selected epic
if (tasks.length === 0) {
return (
@ -377,8 +371,6 @@ export function TaskCardGrid({ tasks, selectedId, signalById, blockerDetailsMap,
key={task.id}
issue={task}
selected={selectedId === task.id}
blockedBy={signalById.get(task.id)?.blockedBy ?? 0}
blocks={signalById.get(task.id)?.blocks ?? 0}
blockers={blockerDetailsMap?.get(task.id) ?? []}
blocking={blocksDetailsMap?.get(task.id) ?? []}
isActionable={actionableIds?.has(task.id) ?? false}

View file

@ -6,7 +6,6 @@ import {
buildBdMutationArgs,
validateMutationPayload,
executeMutation,
type MutationOperation,
} from '../../src/lib/mutations';
const root = 'C:/Users/Zenchant/codex/beadboard';