export function boardColumnsToKanbanValue( columns: Array<{ id: string; items: T[] }>, ): Record { const value: Record = {} for (const column of columns) { value[column.id] = column.items } return value } export function detectKanbanItemMove( prev: Record, next: Record, ): { itemId: string; fromColumnId: string; toColumnId: string } | null { for (const [fromColumnId, items] of Object.entries(prev)) { for (const item of items) { const itemId = String(item.id) const nextColumnId = Object.entries(next).find(([, colItems]) => colItems.some((entry) => String(entry.id) === itemId), )?.[0] if (nextColumnId && nextColumnId !== fromColumnId) { return { itemId, fromColumnId, toColumnId: nextColumnId } } } } return null }