Add CommonHtmxRoute making it easy to create a Post method
This commit is contained in:
+34
-13
@@ -96,29 +96,32 @@ func addLanguageToPath(path string, language Language) string {
|
||||
return "/" + string(language) + path
|
||||
}
|
||||
|
||||
type HtmxGetRoute struct {
|
||||
type CommonHtmxRoute struct {
|
||||
Paths LanguagePaths
|
||||
RouteFunc HtmxRouteFunc
|
||||
PathParams []HtmxPathParam
|
||||
ActivePath *ActivePath
|
||||
Method string
|
||||
HtmxMethod HtmxHttpMethodFunction
|
||||
}
|
||||
|
||||
func (h HtmxGetRoute) Execute(c HtmxContext) {
|
||||
func NewCommonHtmxRoute(routeFunc HtmxRouteFunc, paths LanguagePaths, method string,
|
||||
htmxMethod HtmxHttpMethodFunction) *CommonHtmxRoute {
|
||||
return &CommonHtmxRoute{RouteFunc: routeFunc, Paths: paths, Method: method, HtmxMethod: htmxMethod}
|
||||
}
|
||||
|
||||
func (h CommonHtmxRoute) Execute(c HtmxContext) {
|
||||
h.RouteFunc(c)
|
||||
}
|
||||
|
||||
func (h HtmxGetRoute) SetActivePath(activePath *ActivePath) HtmxRoute {
|
||||
func (h CommonHtmxRoute) SetActivePath(activePath *ActivePath) HtmxRoute {
|
||||
h.ActivePath = activePath
|
||||
return h
|
||||
}
|
||||
|
||||
func NewHtmxGetRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) *HtmxGetRoute {
|
||||
return &HtmxGetRoute{RouteFunc: routeFunc, Paths: paths}
|
||||
}
|
||||
|
||||
func (h HtmxGetRoute) Add(server *http.ServeMux) {
|
||||
func (h CommonHtmxRoute) AddWithMethod(method string, server *http.ServeMux) {
|
||||
for language, path := range h.Paths {
|
||||
server.HandleFunc("GET "+addLanguageToPath(path, language), func(res http.ResponseWriter, req *http.Request) {
|
||||
server.HandleFunc(method+" "+addLanguageToPath(path, language), func(res http.ResponseWriter, req *http.Request) {
|
||||
context := NewHtmxContext(req, res, language)
|
||||
if h.ActivePath != nil {
|
||||
context.SetActivePath(h.ActivePath)
|
||||
@@ -128,12 +131,16 @@ func (h HtmxGetRoute) Add(server *http.ServeMux) {
|
||||
}
|
||||
}
|
||||
|
||||
func (h HtmxGetRoute) WithPathParams(params ...HtmxPathParam) HtmxRoute {
|
||||
func (h CommonHtmxRoute) Add(server *http.ServeMux) {
|
||||
h.AddWithMethod(h.Method, server)
|
||||
}
|
||||
|
||||
func (h CommonHtmxRoute) WithPathParams(params ...HtmxPathParam) HtmxRoute {
|
||||
h.PathParams = params
|
||||
return h
|
||||
}
|
||||
|
||||
func (h HtmxGetRoute) ToUrl(language Language, queryParams ...HtmxPathParam) string {
|
||||
func (h CommonHtmxRoute) ToUrl(language Language, queryParams ...HtmxPathParam) string {
|
||||
path := addLanguageToPath(h.Paths[language], language)
|
||||
if len(h.PathParams) == 0 {
|
||||
return path
|
||||
@@ -144,8 +151,22 @@ func (h HtmxGetRoute) ToUrl(language Language, queryParams ...HtmxPathParam) str
|
||||
return path
|
||||
}
|
||||
|
||||
func (h HtmxGetRoute) GetHtmx(language Language, queryParams ...HtmxPathParam) gomponents.Node {
|
||||
return htmx.Get(h.ToUrl(language, queryParams...))
|
||||
type HtmxHttpMethodFunction func(url string) gomponents.Node
|
||||
|
||||
func (h CommonHtmxRoute) GetHtmxFromMethod(method HtmxHttpMethodFunction, language Language, queryParams ...HtmxPathParam) gomponents.Node {
|
||||
return method(h.ToUrl(language, queryParams...))
|
||||
}
|
||||
|
||||
func (h CommonHtmxRoute) GetHtmx(language Language, queryParams ...HtmxPathParam) gomponents.Node {
|
||||
return h.GetHtmxFromMethod(h.HtmxMethod, language, queryParams...)
|
||||
}
|
||||
|
||||
func NewHtmxGetRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) HtmxRoute {
|
||||
return NewCommonHtmxRoute(routeFunc, paths, "GET", htmx.Get)
|
||||
}
|
||||
|
||||
func NewHtmxPostRoute(routeFunc HtmxRouteFunc, paths LanguagePaths) HtmxRoute {
|
||||
return NewCommonHtmxRoute(routeFunc, paths, "POST", htmx.Post)
|
||||
}
|
||||
|
||||
func HandleStaticAndDefaultPath(server *http.ServeMux, defaultRoute HtmxRoute, defaultLanguage Language) func(http.ResponseWriter, *http.Request) {
|
||||
|
||||
Reference in New Issue
Block a user