0bc0d99c21
- Create SettingsTabLayout component with sidebar navigation - Create ProjectSettingsPage with General settings tab - Create RepositoriesSettingsTab for repo management - Add Members placeholder tab - Update router with settings routes - Add CSS styles for settings layout - Navigate to /projects/:id/settings from workspace header
4.2 KiB
4.2 KiB
Workspace Visual Overhaul Specification
Requirements
Functional Requirements
- Header Actions: All primary project actions in workspace header (right-aligned)
- Project Settings Page: Dedicated settings page with tabs
- Repository Management in Settings: Move repo management to settings tab
- Sidebar Simplification: Remove management links from sidebar
- Consistent Navigation: Follow GitHub-style patterns
Non-Functional Requirements
- Responsive: Works on desktop, tablet, and mobile
- Accessible: Keyboard navigation, screen reader support
- Performant: No layout shifts, smooth transitions
- Maintainable: Clean component separation
UI Specification
Workspace Header
Left Side:
- Project icon (📁 or custom)
- Project name (bold, 1.25rem)
- Optional: Current repository name (smaller, muted)
Right Side (Actions):
- "History" button (clock icon) → navigates to history
- "Settings" button (gear icon) → navigates to settings
States:
- Loading: Show skeleton or spinner
- Error: Show error message with retry
Project Settings Page
Layout:
- Two-column layout (sidebar tabs + content)
- Mobile: Tabs at top, content below
Tabs:
General Tab
- Project name input (required)
- Description textarea (optional)
- Created at (read-only)
- Updated at (read-only)
- Save changes button
- Cancel button (if dirty)
Repositories Tab
- Repository list (same as current repo management)
- Add repository button
- Each repo card:
- Name
- Remote URL (truncated)
- Last updated
- Actions: Delete
Members Tab (Placeholder)
- "Coming soon" message
- Brief description of future feature
Danger Zone
- Red background/warning styling
- Delete project button
- Confirmation dialog on click
Sidebar Changes
Current sidebar items:
- Branch selector
- File tree
- Manage Repositories link
New sidebar items:
- Branch selector (keep)
- File tree (keep)
Manage Repositories(remove)
Route Changes
Remove Routes
/projects/:projectId/repositories→ Moved to settings
New Routes
/projects/:projectId/settings→ Settings (defaults to General tab)/projects/:projectId/settings/general→ General settings/projects/:projectId/settings/repositories→ Repository management/projects/:projectId/settings/members→ Members (placeholder)
Keep Routes
/projects→ Project list/projects/:projectId→ Workspace/projects/:projectId/repositories/:repoId/history→ History
Component Specification
WorkspaceHeader
interface WorkspaceHeaderProps {
project: {
id: string;
name: string;
description?: string;
};
currentRepo?: {
id: string;
name: string;
};
onNavigateToHistory: () => void;
onNavigateToSettings: () => void;
}
ProjectSettingsPage
interface ProjectSettingsProps {
projectId: string;
}
// Tabs configuration
const TABS = [
{ id: 'general', label: 'General', icon: 'settings' },
{ id: 'repositories', label: 'Repositories', icon: 'repo' },
{ id: 'members', label: 'Members', icon: 'people' },
];
SettingsTabLayout
interface SettingsTabLayoutProps {
projectId: string;
activeTab: string;
children: React.ReactNode;
}
API Requirements
PUT /projects/:id
Update project details.
Request Body:
{
"name": "Updated Project Name",
"description": "Updated description"
}
Response 200:
{
"id": "uuid",
"name": "Updated Project Name",
"description": "Updated description",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-02T00:00:00Z"
}
Error Handling
- Project not found: Show 404 page
- Permission denied: Show auth error, redirect to login
- Save failed: Show toast notification, keep form state
- Delete failed: Show error in danger zone
Testing Strategy
Frontend Tests
- Test header navigation (History, Settings buttons)
- Test settings tabs switching
- Test form validation (name required)
- Test delete confirmation flow
- Test responsive layout
Integration Tests
- Test navigation flow: workspace → settings → back
- Test route changes
- Test data persistence (save project changes)