package routes import ( "fmt" "github.com/LazyBachelor/LazyPM/internal/models" "github.com/LazyBachelor/LazyPM/pkg/web/components" ) type BoardViewProps struct { Issues []*models.Issue BaseURL string QueryParam string EmptyText string } templ BoardView(props BoardViewProps) { @BaseLayout() { @BoardViewContent(props) } } templ BoardViewContent(props BoardViewProps) {
@components.SearchForm(components.SearchFormProps{ RootURL: props.BaseURL, SearchQuery: props.QueryParam, Target: "#board-container", })
@BoardColumns(props.Issues)
} templ BoardColumns(issues []*models.Issue) { {{ openIssues := []*models.Issue{} inProgressIssues := []*models.Issue{} closedIssues := []*models.Issue{} for _, issue := range issues { switch issue.Status { case "open": openIssues = append(openIssues, issue) case "in_progress": inProgressIssues = append(inProgressIssues, issue) case "closed": closedIssues = append(closedIssues, issue) } } }}
@BoardColumn("Open", "open", openIssues, "badge-info") @BoardColumn("In Progress", "in_progress", inProgressIssues, "badge-warning") @BoardColumn("Closed", "closed", closedIssues, "badge-success")
} templ BoardColumn(title string, status string, issues []*models.Issue, badgeClass 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 }

}
}