diff --git a/src/App.tsx b/src/App.tsx index d1d5982..d6a5963 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,9 +5,9 @@ import Sidebar from '@/components/Sidebar' import LoginPage from '@/pages/LoginPage' import SetupWizardPage from '@/pages/SetupWizardPage' import DashboardPage from '@/pages/DashboardPage' -import IssuesPage from '@/pages/IssuesPage' -import IssueDetailPage from '@/pages/IssueDetailPage' -import CreateIssuePage from '@/pages/CreateIssuePage' +import TasksPage from '@/pages/TasksPage' +import TaskDetailPage from '@/pages/TaskDetailPage' +import CreateTaskPage from '@/pages/CreateTaskPage' import ProjectsPage from '@/pages/ProjectsPage' import ProjectDetailPage from '@/pages/ProjectDetailPage' import MilestonesPage from '@/pages/MilestonesPage' @@ -85,9 +85,9 @@ export default function App() {
} /> - } /> - } /> - } /> + } /> + } /> + } /> } /> } /> } /> diff --git a/src/index.css b/src/index.css index 3f807d4..ed5c725 100644 --- a/src/index.css +++ b/src/index.css @@ -63,7 +63,7 @@ thead th { text-align: left; padding: 10px 12px; border-bottom: 2px solid var(-- tbody td { padding: 10px 12px; border-bottom: 1px solid var(--border); } tr.clickable { cursor: pointer; } tr.clickable:hover { background: var(--bg-hover); } -.issue-title { font-weight: 500; max-width: 400px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.task-title { font-weight: 500; max-width: 400px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Badges */ .badge { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: .75rem; font-weight: 600; text-transform: capitalize; color: #fff; background: var(--text-dim); } @@ -92,10 +92,10 @@ tr.clickable:hover { background: var(--bg-hover); } .pagination button { padding: 6px 14px; border: 1px solid var(--border); background: var(--bg-card); color: var(--text); border-radius: 6px; cursor: pointer; } .pagination button:disabled { opacity: .4; cursor: default; } -/* Issue detail */ -.issue-header { margin-bottom: 20px; } -.issue-header h2 { margin-bottom: 8px; } -.issue-meta { display: flex; gap: 8px; flex-wrap: wrap; } +/* Task detail */ +.task-header { margin-bottom: 20px; } +.task-header h2 { margin-bottom: 8px; } +.task-meta { display: flex; gap: 8px; flex-wrap: wrap; } .tags { color: var(--accent); font-size: .85rem; } .section { margin: 20px 0; } .section h3 { margin-bottom: 8px; color: var(--text-dim); font-size: .9rem; text-transform: uppercase; } @@ -113,11 +113,11 @@ dd { font-size: .9rem; } .comment-form textarea { width: 100%; min-height: 80px; padding: 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text); resize: vertical; margin-bottom: 8px; } .comment-form button { padding: 8px 16px; background: var(--accent); color: #fff; border: none; border-radius: 6px; cursor: pointer; } -/* Create Issue form */ -.create-issue form { max-width: 600px; display: flex; flex-direction: column; gap: 14px; } -.create-issue label { display: flex; flex-direction: column; gap: 4px; font-size: .85rem; color: var(--text-dim); } -.create-issue input, .create-issue textarea, .create-issue select { padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text); font-size: .95rem; } -.create-issue textarea { min-height: 100px; resize: vertical; } +/* Create Task form */ +.create-task form { max-width: 600px; display: flex; flex-direction: column; gap: 14px; } +.create-task label { display: flex; flex-direction: column; gap: 4px; font-size: .85rem; color: var(--text-dim); } +.create-task input, .create-task textarea, .create-task select { padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text); font-size: .95rem; } +.create-task textarea { min-height: 100px; resize: vertical; } /* Project grid */ .project-grid, .milestone-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; margin-top: 16px; } diff --git a/src/pages/CreateIssuePage.tsx b/src/pages/CreateTaskPage.tsx similarity index 89% rename from src/pages/CreateIssuePage.tsx rename to src/pages/CreateTaskPage.tsx index 160395f..66bf9e6 100644 --- a/src/pages/CreateIssuePage.tsx +++ b/src/pages/CreateTaskPage.tsx @@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Project } from '@/types' -const ISSUE_TYPES = [ +const TASK_TYPES = [ { value: 'story', label: 'Story', subtypes: ['feature', 'improvement', 'refactor'] }, { value: 'issue', label: 'Issue', subtypes: ['infrastructure', 'performance', 'regression', 'security', 'user_experience', 'defect'] }, { value: 'task', label: 'Task', subtypes: ['defect'] }, @@ -16,11 +16,11 @@ const ISSUE_TYPES = [ { value: 'resolution', label: 'Resolution', subtypes: [] }, ] -export default function CreateIssuePage() { +export default function CreateTaskPage() { const navigate = useNavigate() const [projects, setProjects] = useState([]) const [form, setForm] = useState({ - title: '', description: '', project_id: 0, issue_type: 'issue', + title: '', description: '', project_id: 0, issue_type: 'task', issue_subtype: '', priority: 'medium', tags: '', reporter_id: 1, }) @@ -31,7 +31,7 @@ export default function CreateIssuePage() { }) }, []) - const currentType = ISSUE_TYPES.find(t => t.value === form.issue_type) || ISSUE_TYPES[1] + const currentType = TASK_TYPES.find(t => t.value === form.issue_type) || TASK_TYPES[2] const subtypes = currentType.subtypes || [] const handleTypeChange = (newType: string) => { @@ -43,12 +43,12 @@ export default function CreateIssuePage() { const payload: any = { ...form, tags: form.tags || null } if (!form.issue_subtype) delete payload.issue_subtype await api.post('/issues', payload) - navigate('/issues') + navigate('/tasks') } return ( -
-

Create Issue

+
+

Create Task