from typing import List from pydantic import BaseModel, Field from webcomponents.models.tasks import TaskList,TaskCategory,TaskStatus class TaskHtml(BaseModel): name: str category: str icon_color: str background_color: str is_highlighted: bool = False icon_svg: str = Field(default='svg/rocket_black.svg') action_svg: str = Field(default='svg/clip_black.svg') class TaskListHtml(BaseModel): tasks: List[TaskHtml] = [] def convert_task_list_to_html(task_list: TaskList) -> TaskListHtml: task_list_html = TaskListHtml() # Define color schemes for different categories category_colors = { TaskCategory.BUG: ("#E74C3C", "#FDEDEC"), # Red TaskCategory.QUESTION: ("#3498DB", "#EBF5FB"), # Blue TaskCategory.STORY: ("#9B59B6", "#F4ECF7"), # Purple TaskCategory.TASK: ("#2ECC71", "#E8F8F5"), # Green TaskCategory.VARIA: ("#F1C40F", "#FEF9E7"), # Yellow TaskCategory.FEATURE: ("#E67E22", "#FDF2E9"), # Orange } # Define icons for different categories category_icons = { TaskCategory.BUG: "svg/gauge_black.svg", TaskCategory.QUESTION: "svg/question_black.svg", TaskCategory.STORY: "svg/book_black.svg", TaskCategory.TASK: "svg/gauge_black.svg", TaskCategory.VARIA: "svg/gauge_black.svg", TaskCategory.FEATURE: "svg/gauge_black.svg", } for task in task_list.get_tasks(): # Get colors for the task category icon_color, background_color = category_colors[task.category] # Get icon for the task category icon_svg = category_icons[task.category] # Determine if the task should be highlighted (high priority, overdue, or blocked) is_highlighted = ( task.priority >= 4 or task.is_overdue() or task.status == TaskStatus.BLOCKED ) # Create TaskHtml object task_html = TaskHtml( name=task.name, category=task.category.value, icon_color=icon_color, background_color=background_color, is_highlighted=is_highlighted, icon_svg=icon_svg, action_svg='svg/clip_black.svg' if task.remarks else 'svg/world_black.svg' ) task_list_html.tasks.append(task_html) return task_list_html