htmgo/framework/h/util.go

58 lines
935 B
Go
Raw Normal View History

2024-09-11 17:31:40 +00:00
package h
import (
"encoding/json"
2024-09-17 17:13:22 +00:00
"github.com/labstack/echo/v4"
2024-09-11 17:31:40 +00:00
"net/url"
)
type Renderable interface {
Render() *Node
}
2024-09-11 17:31:40 +00:00
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)
}
2024-09-17 17:13:22 +00:00
func GetQueryParam(ctx echo.Context, key string) string {
value := ctx.QueryParam(key)
2024-09-11 17:31:40 +00:00
if value == "" {
2024-09-17 17:13:22 +00:00
current := ctx.Request().Header.Get("Hx-Current-Url")
2024-09-11 17:31:40 +00:00
if current != "" {
u, err := url.Parse(current)
if err == nil {
return u.Query().Get(key)
}
}
}
return value
}
2024-09-12 02:06:34 +00:00
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()
}