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.Title }

{ issue.ID } @components.TypeBadge(issue.IssueType) @components.PriorityBadge(issue.Priority)
if issue.Description != "" {

{ issue.Description }

}
}