# Task Detail Panel Implementation ## Overview The Task Detail Panel is a right-side panel component that displays comprehensive task information and provides quick actions for task management. It follows the ftrack-style interface pattern with a focus on usability and efficiency. ## Component Location `frontend/src/components/task/TaskDetailPanel.vue` ## Features Implemented ### 1. Quick Action Buttons The panel displays context-aware quick action buttons based on the current user's role and the task status: - **Start Task**: Visible when task status is "Not Started" and user is assigned to the task - Changes task status to "In Progress" - Only available to assigned artists - **Submit Work**: Visible when task status is "In Progress" or "Retake" and user is assigned - Directs user to the Submissions tab - Only available to assigned artists - **Reassign**: Visible to coordinators and admins - Opens assignment dialog to reassign task to another project member - Shows all project members with their department roles ### 2. Status Update Control - Dropdown selector for changing task status - Available statuses: Not Started, In Progress, Submitted, Approved, Retake - Artists can update their own tasks - Coordinators and admins can update any task - Real-time status updates with toast notifications ### 3. Task Assignment Dialog - Command-style searchable dialog for selecting project members - Displays member name and department role - Pre-selects current assignee when dialog opens - Filters members by name as you type - Only accessible to coordinators and admins ### 4. Enhanced Metadata Display - **Task Type**: Badge showing the task type (modeling, animation, etc.) - **Status**: Color-coded status badge - **Deadline**: Date with color coding based on urgency - Red: Overdue - Orange: Due within 3 days - Yellow: Due within 7 days - Default: Normal - **Assigned To**: User name with icon - **Context Information**: Project, Episode, Shot, or Asset details ### 5. Tabbed Interface Three tabs for organizing task-related content: - **Notes**: Threaded production notes with rich text - **Attachments**: File attachments with categorization - **Submissions**: Work submissions with version history Each tab displays a badge count showing the number of items. ## Component Props ```typescript interface Props { taskId: number // ID of the task to display } ``` ## Component Events ```typescript interface Emits { close: [] // Emitted when user closes the panel taskUpdated: [] // Emitted when task is updated (status, assignment, etc.) } ``` ## API Integration ### Endpoints Used 1. **GET /tasks/{task_id}** - Fetches complete task details - Includes related entity names (project, episode, shot, asset, assigned user) 2. **PUT /tasks/{task_id}/status** - Updates task status - Validates user permissions 3. **PUT /tasks/{task_id}/assign** - Assigns task to a user - Validates project membership and department roles - Sends notification to assigned user 4. **GET /projects/{project_id}/members** - Fetches all project members for assignment dialog - Includes user details and department roles 5. **GET /tasks/{task_id}/notes** - Fetches threaded production notes 6. **GET /tasks/{task_id}/attachments** - Fetches task attachments 7. **GET /tasks/{task_id}/submissions** - Fetches work submissions with version history ## Permission Logic ### Quick Actions ```typescript // Start Task button canStartTask = task.assigned_user_id === currentUser.id && task.status === 'not_started' // Submit Work button canSubmitWork = task.assigned_user_id === currentUser.id && (task.status === 'in_progress' || task.status === 'retake') // Reassign button canReassign = currentUser.is_admin || currentUser.role === 'coordinator' ``` ### Status Updates - Artists: Can update status of their own tasks only - Coordinators: Can update any task status - Admins: Can update any task status - Directors: Cannot update task status (review-only role) ### Task Assignment - Only coordinators and admins can reassign tasks - Assignment validates: - User exists - User is a project member - User has appropriate department role (warning, not blocking) ## UI/UX Design ### Layout ``` ┌─────────────────────────────────────┐ │ Task Details [X] │ ├─────────────────────────────────────┤ │ Task Name │ │ Description │ │ │ │ [Start Task] [Submit] [Reassign] │ │ Status: [Dropdown ▼] │ │ │ │ Type: [Badge] Status: [Badge] │ │ 📅 Deadline 👤 Assigned To │ │ │ │ ───────────────────────────────── │ │ │ │ Context: │ │ Project: Project Name │ │ Episode: Episode Name │ │ Shot: Shot Name │ │ │ │ ───────────────────────────────── │ │ │ │ [Notes (3)] [Attachments (2)] [Sub]│ │ │ │ Tab Content Area │ │ │ └─────────────────────────────────────┘ ``` ### Color Coding - **Deadline Colors**: - Overdue: `text-destructive` (red) - Due in 3 days: `text-orange-600` - Due in 7 days: `text-yellow-600` - Normal: `text-foreground` - **Status Badges**: Defined in TaskStatusBadge component - Not Started: Gray - In Progress: Blue - Submitted: Purple - Approved: Green - Retake: Red ### Icons - Close: `X` (lucide-vue-next) - Start Task: `Play` - Submit Work: `Upload` - Reassign: `UserPlus` - Calendar: `Calendar` - User: `User` ## Integration with TasksView The TaskDetailPanel is integrated into the TasksView as a conditional right panel: ```vue ``` ## Child Components The TaskDetailPanel uses several child components: 1. **TaskStatusBadge**: Displays color-coded status badge 2. **TaskNotes**: Threaded notes interface with add/edit/delete 3. **TaskAttachments**: File attachment gallery with upload 4. **TaskSubmissions**: Work submission list with version history ## State Management ### Local State - `task`: Current task details - `loading`: Loading state for initial fetch - `localStatus`: Local copy of status for dropdown - `notes`: Array of production notes - `attachments`: Array of task attachments - `submissions`: Array of work submissions - `showAssignmentDialog`: Boolean for assignment dialog visibility - `projectMembers`: Array of project members for assignment - `selectedUserId`: Selected user ID for assignment - `assignmentLoading`: Loading state for assignment operation ### Computed Properties - `canStartTask`: Whether user can start the task - `canSubmitWork`: Whether user can submit work - `canReassign`: Whether user can reassign the task ## Error Handling - Toast notifications for all operations (success and error) - Graceful error handling with user-friendly messages - Status revert on failed updates - Loading states during async operations ## Testing ### Manual Testing Use the test file: `frontend/test-task-detail-panel.html` ### Test Scenarios 1. **Quick Actions**: - Verify "Start Task" appears for not started tasks - Verify "Submit Work" appears for in progress tasks - Verify "Reassign" appears for coordinators/admins 2. **Status Updates**: - Test status changes as artist (own tasks only) - Test status changes as coordinator (any task) - Verify toast notifications 3. **Task Assignment**: - Open assignment dialog - Search for members - Assign task to different user - Verify assignment success 4. **Metadata Display**: - Verify all metadata fields display correctly - Check deadline color coding - Verify context information 5. **Tabs**: - Switch between tabs - Verify badge counts - Test child component functionality ## Future Enhancements 1. **Inline Editing**: Edit task name and description directly in panel 2. **Deadline Picker**: Quick deadline update control 3. **Activity Timeline**: Chronological activity feed 4. **Keyboard Shortcuts**: Quick actions via keyboard 5. **Drag and Drop**: File upload via drag and drop 6. **Real-time Updates**: WebSocket integration for live updates 7. **Task Dependencies**: Display and manage task dependencies 8. **Time Tracking**: Log time spent on tasks 9. **Custom Fields**: Display project-specific custom fields 10. **Quick Notes**: Add notes without switching to Notes tab ## Requirements Satisfied This implementation satisfies the following requirements from the spec: - **Requirement 3.1**: Task status display and updates - **Requirement 3.3**: Task information display with assignment details - **Requirement 3.4**: Task assignment and status update controls ## Related Documentation - [Task List Implementation](./task-list-implementation.md) - [Task Management API](../../backend/docs/task_management.md) - [ftrack-style UI Patterns](./ftrack-ui-patterns.md)