feat: update frontend type definitions and status enums to match new backend

- types/index.ts: Task status 'progressing' → 'undergoing' + 'completed'; Milestone status updated to open/freeze/undergoing/completed/closed + started_at field
- MilestoneFormModal: dropdown options updated
- MilestoneDetailPage: isProgressing → isUndergoing, badge class simplified
- MilestonesPage: badge class simplified
- TaskDetailPage: status transition map updated for new state machine
This commit is contained in:
zhi
2026-03-17 01:04:51 +00:00
parent 7587554fd8
commit e60763b128
5 changed files with 15 additions and 13 deletions

View File

@@ -125,9 +125,9 @@ export default function MilestoneFormModal({ isOpen, onClose, onSaved, milestone
Status
<select value={form.status} onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}>
<option value="open">Open</option>
<option value="pending">Pending</option>
<option value="deferred">Deferred</option>
<option value="progressing">Progressing</option>
<option value="freeze">Freeze</option>
<option value="undergoing">Undergoing</option>
<option value="completed">Completed</option>
<option value="closed">Closed</option>
</select>
</label>

View File

@@ -96,7 +96,7 @@ export default function MilestoneDetailPage() {
currentMemberRole === 'admin'
))
const isProgressing = milestone?.status === 'progressing'
const isUndergoing = milestone?.status === 'undergoing'
if (!milestone) return <div className="loading">Loading...</div>
@@ -117,7 +117,7 @@ export default function MilestoneDetailPage() {
<div className="task-header">
<h2>🏁 {milestone.title}</h2>
<div className="task-meta">
<span className={`badge status-${milestone.status === 'progressing' ? 'in_progress' : milestone.status}`}>{milestone.status}</span>
<span className={`badge status-${milestone.status}`}>{milestone.status}</span>
{milestone.due_date && <span className="text-dim">Due {dayjs(milestone.due_date).format('YYYY-MM-DD')}</span>}
{milestone.planned_release_date && <span className="text-dim">Planned Release: {dayjs(milestone.planned_release_date).format('YYYY-MM-DD')}</span>}
</div>
@@ -154,14 +154,14 @@ export default function MilestoneDetailPage() {
<div className="section">
<div style={{ display: 'flex', gap: 8, marginBottom: 16 }}>
{!isProgressing && canEditMilestone && (
{!isUndergoing && canEditMilestone && (
<>
<button className="btn-primary" onClick={() => { setActiveTab('tasks'); setShowCreateTask(true) }}>+ Create Task</button>
<button className="btn-primary" onClick={() => { setActiveTab('supports'); setShowCreateSupport(true) }}>+ Create Support</button>
<button className="btn-primary" onClick={() => { setActiveTab('meetings'); setShowCreateMeeting(true) }}>+ Schedule Meeting</button>
</>
)}
{isProgressing && <span className="text-dim">Milestone is in progress - cannot add new items</span>}
{isUndergoing && <span className="text-dim">Milestone is undergoing - cannot add new items</span>}
</div>
<MilestoneFormModal

View File

@@ -51,7 +51,7 @@ export default function MilestonesPage() {
{milestones.map((ms) => (
<div key={ms.id} className="milestone-card" onClick={() => navigate(`/milestones/${ms.id}`)}>
<div className="milestone-card-header">
<span className={`badge status-${ms.status === 'progressing' ? 'in_progress' : ms.status}`}>{ms.status}</span>
<span className={`badge status-${ms.status}`}>{ms.status}</span>
<h3>{ms.title}</h3>
</div>
<p className="project-desc">{ms.description || 'No description'}</p>

View File

@@ -63,9 +63,10 @@ export default function TaskDetailPage() {
if (!task) return <div className="loading">Loading...</div>
const statusActions: Record<string, string[]> = {
open: ['progressing', 'closed'],
pending: ['progressing', 'closed'],
progressing: ['pending', 'closed'],
open: ['undergoing', 'closed'],
pending: ['open', 'closed'],
undergoing: ['completed', 'closed'],
completed: ['open'],
closed: ['open'],
}

View File

@@ -35,7 +35,7 @@ export interface Task {
description: string | null
task_type: 'issue' | 'maintenance' | 'research' | 'review' | 'story' | 'test' | 'resolution' | 'task'
task_subtype: string | null
status: 'open' | 'pending' | 'progressing' | 'closed'
status: 'open' | 'pending' | 'undergoing' | 'completed' | 'closed'
priority: 'low' | 'medium' | 'high' | 'critical'
project_id: number
milestone_id: number | null
@@ -64,7 +64,8 @@ export interface Milestone {
id: number
title: string
description: string | null
status: 'open' | 'pending' | 'deferred' | 'progressing' | 'closed'
status: 'open' | 'freeze' | 'undergoing' | 'completed' | 'closed'
started_at: string | null
project_id: number
created_by_id: number | null
due_date: string | null