htmgo/framework/h/util.go
2024-09-19 20:34:50 -05:00

58 lines
957 B
Go

package h
import (
"encoding/json"
"github.com/labstack/echo/v4"
"net/url"
"strings"
)
type Ren interface {
Render(builder *strings.Builder)
}
func Ternary[T any](value bool, a T, b T) T {
if value {
return a
}
return b
}
func JsonSerialize(data any) string {
serialized, err := json.Marshal(data)
if err != nil {
return ""
}
return string(serialized)
}
func GetQueryParam(ctx echo.Context, key string) string {
value := ctx.QueryParam(key)
if value == "" {
current := ctx.Request().Header.Get("Hx-Current-Url")
if current != "" {
u, err := url.Parse(current)
if err == nil {
return u.Query().Get(key)
}
}
}
return value
}
func SetQueryParams(href string, qs map[string]string) string {
u, err := url.Parse(href)
if err != nil {
return href
}
q := u.Query()
for key, value := range qs {
if value == "" {
q.Del(key)
} else {
q.Set(key, value)
}
}
u.RawQuery = q.Encode()
return u.String()
}