The Inertia.js server-side adapter for Go. Visit inertiajs.com to learn more.
Install the package using the go get
command:
go get github.com/seagyn/inertia-fiber
url := "http://inertia-app.test" // Application URL for redirect
rootTemplate := "./app.gohtml" // Root template, see the example below
version := "" // Asset version
inertiaManager := inertia.New(url, rootTemplate, version)
Or create with embed.FS
for root template:
import "embed"
//go:embed template
var templateFS embed.FS
// ...
inertiaManager := inertia.NewWithFS(url, rootTemplate, version, templateFS)
mux := http.NewServeMux()
mux.Handle("/", inertiaManager.Middleware(homeHandler))
func homeHandler(w http.ResponseWriter, r *http.Request) {
// ...
err := inertiaManager.Render(w, r, "home/Index", nil)
if err != nil {
// Handle server error...
}
}
Or render with props:
// ...
err := inertiaManager.Render(w, r, "home/Index", map[string]interface{}{
"total": 32,
})
//...
The following examples show how to use the package.
inertiaManager.Share("title", "Inertia App Title")
inertiaManager.ShareFunc("asset", assetFunc)
<script src="{{ asset "js/app.js" }}"></script>
func authenticate(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// ...
ctx := inertiaManager.WithProp(r.Context(), "authUserId", user.Id)
next.ServeHTTP(w, r.WithContext(ctx))
})
}
ctx := inertiaManager.WithViewData(r.Context(), "meta", meta)
r = r.WithContext(ctx)
<meta name="description" content="{{ .meta }}">
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/app.css" rel="stylesheet">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<div id="app" data-page="{{ marshal .page }}"></div>
<script src="js/app.js"></script>
</body>
</html>
https://github.com/petaki/satellite
https://github.com/homettp/homettp
If you are facing a problem with this package or found any bug, please open an issue on GitHub.
The MIT License (MIT). Please see License File for more information.