feat: switch frontend indexing to code-first identifiers
This commit is contained in:
@@ -19,7 +19,7 @@ export default function CreateTaskPage() {
|
||||
const [projects, setProjects] = useState<Project[]>([])
|
||||
const [milestones, setMilestones] = useState<Milestone[]>([])
|
||||
const [form, setForm] = useState({
|
||||
title: '', description: '', project_id: 0, milestone_id: 0, task_type: 'issue', // P7.1: default changed from 'task' to 'issue'
|
||||
title: '', description: '', project_code: '', milestone_code: '', task_type: 'issue', // P7.1: default changed from 'task' to 'issue'
|
||||
task_subtype: '', priority: 'medium', tags: '', reporter_id: 1,
|
||||
})
|
||||
|
||||
@@ -27,21 +27,21 @@ export default function CreateTaskPage() {
|
||||
api.get<Project[]>('/projects').then(({ data }) => {
|
||||
setProjects(data)
|
||||
if (data.length) {
|
||||
setForm((f) => ({ ...f, project_id: data[0].id }))
|
||||
setForm((f) => ({ ...f, project_code: data[0].project_code || '' }))
|
||||
// Load milestones for the first project
|
||||
api.get<Milestone[]>(`/milestones?project_id=${data[0].id}`).then(({ data: ms }) => {
|
||||
api.get<Milestone[]>(`/milestones?project_code=${data[0].project_code}`).then(({ data: ms }) => {
|
||||
setMilestones(ms)
|
||||
if (ms.length) setForm((f) => ({ ...f, milestone_id: ms[0].id }))
|
||||
if (ms.length) setForm((f) => ({ ...f, milestone_code: ms[0].milestone_code || '' }))
|
||||
})
|
||||
}
|
||||
})
|
||||
}, [])
|
||||
|
||||
const handleProjectChange = (projectId: number) => {
|
||||
setForm(f => ({ ...f, project_id: projectId, milestone_id: 0 }))
|
||||
api.get<Milestone[]>(`/milestones?project_id=${projectId}`).then(({ data: ms }) => {
|
||||
const handleProjectChange = (projectCode: string) => {
|
||||
setForm(f => ({ ...f, project_code: projectCode, milestone_code: '' }))
|
||||
api.get<Milestone[]>(`/milestones?project_code=${projectCode}`).then(({ data: ms }) => {
|
||||
setMilestones(ms)
|
||||
if (ms.length) setForm((f) => ({ ...f, milestone_id: ms[0].id }))
|
||||
if (ms.length) setForm((f) => ({ ...f, milestone_code: ms[0].milestone_code || '' }))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ export default function CreateTaskPage() {
|
||||
|
||||
const submit = async (e: React.FormEvent) => {
|
||||
e.preventDefault()
|
||||
if (!form.milestone_id) {
|
||||
if (!form.milestone_code) {
|
||||
alert('Please select a milestone')
|
||||
return
|
||||
}
|
||||
@@ -71,14 +71,14 @@ export default function CreateTaskPage() {
|
||||
<label>Title <input data-testid="task-title-input" required value={form.title} onChange={(e) => setForm({ ...form, title: e.target.value })} /></label>
|
||||
<label>Description <textarea data-testid="task-description-input" value={form.description} onChange={(e) => setForm({ ...form, description: e.target.value })} /></label>
|
||||
<label>Projects
|
||||
<select data-testid="project-select" value={form.project_id} onChange={(e) => handleProjectChange(Number(e.target.value))}>
|
||||
{projects.map((p) => <option key={p.id} value={p.id}>{p.name}</option>)}
|
||||
<select data-testid="project-select" value={form.project_code} onChange={(e) => handleProjectChange(e.target.value)}>
|
||||
{projects.map((p) => <option key={p.id} value={p.project_code || ''}>{p.name}</option>)}
|
||||
</select>
|
||||
</label>
|
||||
<label>Milestone
|
||||
<select data-testid="milestone-select" value={form.milestone_id} onChange={(e) => setForm({ ...form, milestone_id: Number(e.target.value) })}>
|
||||
{milestones.length === 0 && <option value={0}>No milestones available</option>}
|
||||
{milestones.map((m) => <option key={m.id} value={m.id}>{m.title}</option>)}
|
||||
<select data-testid="milestone-select" value={form.milestone_code} onChange={(e) => setForm({ ...form, milestone_code: e.target.value })}>
|
||||
{milestones.length === 0 && <option value="">No milestones available</option>}
|
||||
{milestones.map((m) => <option key={m.id} value={m.milestone_code || ''}>{m.title}</option>)}
|
||||
</select>
|
||||
</label>
|
||||
<label>Type
|
||||
|
||||
Reference in New Issue
Block a user