package routes
import (
"fmt"
"github.com/LazyBachelor/LazyPM/internal/models"
"github.com/LazyBachelor/LazyPM/pkg/web/components"
)
type BoardViewProps struct {
Issues []*models.Issue
BacklogIssues []*models.Issue
SprintIssues []*models.Issue
CurrentSprint int
Sprints []int
BaseURL string
QueryParam string
EmptyText string
}
templ BoardView(props BoardViewProps) {
@BaseLayout() {
@BoardViewContent(props)
}
}
templ BoardViewContent(props BoardViewProps) {
Sprint:
@BoardColumns(props)
}
templ BoardColumns(props BoardViewProps) {
{{
backlogIssues := props.BacklogIssues
todoIssues := []*models.Issue{}
inProgressIssues := []*models.Issue{}
blockedIssues := []*models.Issue{}
doneIssues := []*models.Issue{}
for _, issue := range props.SprintIssues {
switch issue.Status {
case "open":
todoIssues = append(todoIssues, issue)
case "in_progress":
inProgressIssues = append(inProgressIssues, issue)
case "blocked":
blockedIssues = append(blockedIssues, issue)
case "closed":
doneIssues = append(doneIssues, issue)
}
}
sprintName := "No Sprint"
if props.CurrentSprint > 0 {
sprintName = fmt.Sprintf("Sprint %d", props.CurrentSprint)
}
}}
@BoardColumn("Backlog", "backlog", backlogIssues, "badge-ghost", "")
@BoardColumn(fmt.Sprintf("%s - To Do", sprintName), "todo", todoIssues, "badge-info", sprintName)
@BoardColumn(fmt.Sprintf("%s - In Progress", sprintName), "in_progress", inProgressIssues, "badge-warning", sprintName)
@BoardColumn(fmt.Sprintf("%s - Blocked", sprintName), "blocked", blockedIssues, "badge-error", sprintName)
@BoardColumn(fmt.Sprintf("%s - Done", sprintName), "done", doneIssues, "badge-success", sprintName)
}
templ BoardColumn(title string, status string, issues []*models.Issue, badgeClass string, sprintName string) {
{ title }
{ fmt.Sprintf("%d", len(issues)) }
if len(issues) == 0 {
Drop issues here
}
for _, issue := range issues {
@BoardCard(issue)
}
}
templ BoardCard(issue *models.Issue) {
{ issue.ID }
@components.TypeBadge(issue.IssueType)
@components.PriorityBadge(issue.Priority)
if issue.Description != "" {
{ issue.Description }
}
}