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", })
@DashboardIssueList(props.Issues, props.SelectedIssue.ID)
@DashboardIssueDetail(props.SelectedIssue, props.EmptyText)
} templ DashboardIssueDetail(selectedIssue *models.Issue, emptyText string) { if selectedIssue != nil {
@components.IssueDetail(components.IssueDetailProps{ Issue: selectedIssue, })
} else {

{ emptyText }

Create an issue
} } 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) } }