datastar/site/static/code_snippets/how_tos/load_more.gosnippet

35 lines
783 B
Plaintext

import (
"fmt"
"net/http"
"github.com/go-chi/chi/v5"
datastar "github.com/starfederation/datastar/sdk/go"
)
type OffsetSignals struct {
Offset int `json:"offset"`
}
signals := &OffsetSignals{}
if err := datastar.ReadSignals(r, signals); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
max := 5
limit := 1
offset := signals.Offset
sse := datastar.NewSSE(w, r)
if offset < max {
newOffset := offset + limit
sse.MergeFragments(fmt.Sprintf(`<div>Item %d</div>`, newOffset),
datastar.WithSelectorID("list"),
datastar.WithMergeMode(datastar.FragmentMergeModeAppend),
)
if newOffset < max {
sse.MergeSignals([]byte(fmt.Sprintf(`{offset: %d}`, newOffset)))
} else {
sse.RemoveFragments(`#load-more`)
}
}