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:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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'],
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user