import type { ChangedFile, MergeMethod, PullState, ReviewerState, ReviewState, UserDto } from '@app/domains/pulls/model' import type { DiffFile, DiffFileStatus } from '@app/domains/repo/model' import { type MessageKey, t } from '@app/i18n' /** UI-only filter: the backend understands open/closed/merged and no filter. */ export type PullFilter = PullState | 'all' | 'draft' const PULL_STATE_KEYS: Record = { open: 'pull.state.open', closed: 'pull.state.closed', merged: 'pull.state.merged', } /** Lazy so badges follow the active locale. */ export const PULL_STATE_LABEL = new Proxy({} as Record, { get: (_target, key: PullState) => t(PULL_STATE_KEYS[key]), }) /** tailwind-ish tone classes shared across badges (mirrors repo-history colors). */ export const TONE = { green: 'text-[#1a7f37] bg-[rgba(35,165,90,0.12)]', red: 'text-[#b42318] bg-[rgba(242,63,67,0.10)]', amber: 'text-[#8a6100] bg-[rgba(240,178,50,0.16)]', violet: 'text-[#6937c3] bg-[rgba(120,82,196,0.12)]', gray: 'text-shell-ink-muted bg-shell-active', } as const const REVIEW_STATE_KEYS: Record = { approved: 'pull.reviewState.approved', changes_requested: 'pull.reviewState.changesRequested', commented: 'pull.reviewState.commented', pending: 'pull.reviewState.pending', dismissed: 'pull.reviewState.dismissed', } export const REVIEW_STATE_LABEL = new Proxy({} as Record, { get: (_target, key: ReviewState) => t(REVIEW_STATE_KEYS[key]), }) export const REVIEW_STATE_TONE: Record = { approved: 'green', changes_requested: 'red', commented: 'gray', pending: 'amber', dismissed: 'gray', } const REVIEWER_STATE_KEYS: Record = { requested: 'pull.reviewerState.requested', approved: 'pull.reviewerState.approved', changes_requested: 'pull.reviewerState.changesRequested', commented: 'pull.reviewerState.commented', dismissed: 'pull.reviewerState.dismissed', } export const REVIEWER_STATE_LABEL = new Proxy({} as Record, { get: (_target, key: ReviewerState) => t(REVIEWER_STATE_KEYS[key]), }) const MERGE_METHOD_KEYS: Record = { merge: 'pull.mergeMethod.merge', squash: 'pull.mergeMethod.squash', rebase: 'pull.mergeMethod.rebase', } /** 合并方式的可选顺序(供