import type { Issue, IssueColumn } from '../types' /** * 看板每一列的卡片排序。 * * `done` 列按"完成时间"降序,最近完成的在最前。完成时间取 PR 合并时间 * (merged_at),没有 PR 的工单退回工单关闭时间(closed_at)——不这样兜底, * 直接关掉、没走 PR 流程的工单会永远沉在列底看不见。两者都没有的排最后, * 按工单号降序。其余列一律按工单号降序。 */ function doneAt(issue: Issue): string | undefined { return issue.prMergedAt ?? issue.closedAt } export function compareIssuesInColumn(col: IssueColumn, a: Issue, b: Issue): number { if (col === 'done') { const am = doneAt(a) const bm = doneAt(b) if (am && bm && am !== bm) return bm.localeCompare(am) if (am && !bm) return -1 if (bm && !am) return 1 } return b.number - a.number }