datastar/site/routes_examples_dispatch_cu...

50 lines
1.1 KiB
Go

package site
import (
"net/http"
"time"
"github.com/go-chi/chi/v5"
"github.com/go-faker/faker/v4"
datastar "github.com/starfederation/datastar/sdk/go"
)
func setupExamplesDispatchCustomEvent(examplesRouter chi.Router) error {
examplesRouter.Get("/dispatch_custom_event/events", func(w http.ResponseWriter, r *http.Request) {
sse := datastar.NewSSE(w, r)
ctx := r.Context()
sse.ExecuteScript(`
document.addEventListener('example-event-from-server', (e) => {
const container = document.getElementById('container');
container.innerHTML = JSON.stringify(e.detail, null,2);
});
`, datastar.WithExecuteScriptAutoRemove(false))
type ExampleEventDetails struct {
Name string `faker:"name"`
UserName string `faker:"username"`
UUIDHypenated string `faker:"uuid_hyphenated"`
}
t := time.NewTicker(1 * time.Second)
for {
select {
case <-ctx.Done():
return
case <-t.C:
detail := &ExampleEventDetails{}
if err := faker.FakeData(detail); err != nil {
sse.ConsoleError(err)
return
}
sse.DispatchCustomEvent("example-event-from-server", detail)
}
}
})
return nil
}