package routes import ( "github.com/LazyBachelor/LazyPM/internal/models" "github.com/LazyBachelor/LazyPM/pkg/web/components" "github.com/LazyBachelor/LazyPM/pkg/web/components/base" ) type DashboardProps struct { Issues []*models.Issue SelectedIssue *models.Issue BaseURL string QueryParam string EmptyText string } templ Dashboard(props DashboardProps) { @BaseLayout() { @DashboardContent(props) } } templ DashboardContent(props DashboardProps) {
@components.SearchForm(components.SearchFormProps{ RootURL: props.BaseURL, SearchQuery: props.QueryParam, Target: "#issue-list-container", })
if props.SelectedIssue != nil { if props.SelectedIssue.Status != "closed" { } }
@DashboardIssueList(props.Issues, props.SelectedIssue.ID)
if props.SelectedIssue != nil {
@components.IssueDetail(components.IssueDetailProps{ Issue: props.SelectedIssue, })
}
} templ DashboardIssueList(issues []*models.Issue, selectedID string) {
@base.Table( []templ.Component{ base.PlainText("ID"), base.PlainText("Title"), base.PlainText("Status"), base.PlainText("Type"), base.PlainText("Priority"), }, []templ.Component{ DashboardIssueRows(issues, selectedID), }, templ.Attributes{}, )
} templ DashboardIssueRows(issues []*models.Issue, selectedID string) { if len(issues) == 0 { No issues } for _, issue := range issues { {{ var active string if selectedID == issue.ID { active = "bg-primary/10" } }} { issue.ID } { issue.Title } @components.StatusBadge(issue.Status) @components.TypeBadge(issue.IssueType) @components.PriorityBadge(issue.Priority) } }