2026-09-04 15:22:33 +01:00
|
|
|
import { apiRequest } from './api'
|
|
|
|
|
import type { Card } from '../types'
|
|
|
|
|
|
2026-09-04 23:35:33 +01:00
|
|
|
/** A vuedraggable @change payload -- shared by every column that can be a
|
|
|
|
|
* drag source/target (a project's kanban columns, the sidebar's inbox). */
|
|
|
|
|
export type ColumnChange = {
|
|
|
|
|
added?: { element: Card; newIndex: number }
|
|
|
|
|
removed?: { element: Card; oldIndex: number }
|
|
|
|
|
moved?: { element: Card; oldIndex: number; newIndex: number }
|
|
|
|
|
}
|
|
|
|
|
|
2026-09-04 15:22:33 +01:00
|
|
|
/**
|
|
|
|
|
* Set the contents and order of one column -- the inbox (both null) or a
|
|
|
|
|
* project's status (both set). Shared by the sidebar's inbox list and a
|
|
|
|
|
* project's kanban columns, since either can be a drag source or target for
|
|
|
|
|
* the other (dragging a card in re-parents it; its old column is re-packed
|
|
|
|
|
* server-side).
|
|
|
|
|
*/
|
|
|
|
|
export async function reorderColumn(
|
|
|
|
|
projectId: number | null,
|
|
|
|
|
statusId: number | null,
|
|
|
|
|
cardIds: number[],
|
|
|
|
|
): Promise<{ cards: Card[] }> {
|
|
|
|
|
return apiRequest<{ cards: Card[] }>('/cards/order', {
|
|
|
|
|
method: 'PUT',
|
|
|
|
|
auth: true,
|
|
|
|
|
body: { project_id: projectId, status_id: statusId, card_ids: cardIds },
|
|
|
|
|
})
|
|
|
|
|
}
|