package handler import ( "context" "io" "net/http" "time" "github.com/LazyBachelor/LazyPM/internal/models" "github.com/LazyBachelor/LazyPM/pkg/web/components" "github.com/a-h/templ" ) type ValidationFeedback = models.ValidationFeedback var taskFeedback ValidationFeedback var submitChan chan<- struct{} func SetTaskFeedback(feedback ValidationFeedback) { taskFeedback = feedback } func SetSubmitChan(ch chan<- struct{}) { submitChan = ch } func HandleTaskStatus(w http.ResponseWriter, r *http.Request) { submitChan <- struct{}{} time.Sleep(100 * time.Millisecond) hx := HTMX(r) if hx.IsHxRequest() { hx.WriteString(`
`) return } w.Header().Set("Content-Type", "application/json") hx.WriteJSON(taskFeedback) } func HandleTaskStatusModal(w http.ResponseWriter, r *http.Request) { time.Sleep(100 * time.Millisecond) err := components.Modal(components.ModalProps{ ID: "task-status-modal", Title: "Task Status", Content: feedbackList(taskFeedback), Open: true, }).Render(r.Context(), w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func feedbackList(feedback ValidationFeedback) templ.Component { return templ.ComponentFunc(func(ctx context.Context, w io.Writer) error { for _, check := range feedback.Checks { if !check.Valid { io.WriteString(w, `

`+"❌ "+check.Message+`

`) } else { io.WriteString(w, `

`+"✅ "+check.Message+`

`) } } return nil }) }