50 lines
1.1 KiB
Go
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
|
|
}
|