Skip to content

Commit 15ef741

Browse files
committed
修复 KanbanColumn 组件中的卡片处理逻辑,确保安全卡片数组的使用,避免潜在的未定义错误;更新 KanbanBoard 组件以使用安全列数组。
1 parent 4113ae1 commit 15ef741

1 file changed

Lines changed: 17 additions & 7 deletions

File tree

packages/plugin-kanban/src/KanbanImpl.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,15 @@ function KanbanColumn({
9393
column: KanbanColumn
9494
cards: KanbanCard[]
9595
}) {
96+
const safeCards = cards || [];
9697
const { setNodeRef } = useSortable({
9798
id: column.id,
9899
data: {
99100
type: "column",
100101
},
101102
})
102103

103-
const isLimitExceeded = column.limit && cards.length >= column.limit
104+
const isLimitExceeded = column.limit && safeCards.length >= column.limit
104105

105106
return (
106107
<div
@@ -115,7 +116,7 @@ function KanbanColumn({
115116
<h3 className="font-semibold text-sm">{column.title}</h3>
116117
<div className="flex items-center gap-2">
117118
<span className="text-xs text-muted-foreground">
118-
{cards.length}
119+
{safeCards.length}
119120
{column.limit && ` / ${column.limit}`}
120121
</span>
121122
{isLimitExceeded && (
@@ -128,11 +129,11 @@ function KanbanColumn({
128129
</div>
129130
<ScrollArea className="flex-1 p-4">
130131
<SortableContext
131-
items={cards.map((c) => c.id)}
132+
items={safeCards.map((c) => c.id)}
132133
strategy={verticalListSortingStrategy}
133134
>
134135
<div className="space-y-2">
135-
{cards.map((card) => (
136+
{safeCards.map((card) => (
136137
<SortableCard key={card.id} card={card} />
137138
))}
138139
</div>
@@ -144,11 +145,20 @@ function KanbanColumn({
144145

145146
export default function KanbanBoard({ columns, onCardMove, className }: KanbanBoardProps) {
146147
const [activeCard, setActiveCard] = React.useState<KanbanCard | null>(null)
147-
const [boardColumns, setBoardColumns] = React.useState<KanbanColumn[]>(columns)
148+
149+
// Ensure we always have valid columns with cards array
150+
const safeColumns = React.useMemo(() => {
151+
return (columns || []).map(col => ({
152+
...col,
153+
cards: col.cards || []
154+
}));
155+
}, [columns]);
156+
157+
const [boardColumns, setBoardColumns] = React.useState<KanbanColumn[]>(safeColumns)
148158

149159
React.useEffect(() => {
150-
setBoardColumns(columns)
151-
}, [columns])
160+
setBoardColumns(safeColumns)
161+
}, [safeColumns])
152162

153163
const sensors = useSensors(
154164
useSensor(PointerSensor, {

0 commit comments

Comments
 (0)