diff --git a/pkg/handlers/error.go b/pkg/handlers/error.go index d34ca73..b61dd80 100644 --- a/pkg/handlers/error.go +++ b/pkg/handlers/error.go @@ -3,12 +3,15 @@ package handlers import ( "net/http" + "github.com/a-h/templ" "github.com/labstack/echo/v4" "git.grosinger.net/tgrosinger/saasitone/pkg/context" "git.grosinger.net/tgrosinger/saasitone/pkg/log" "git.grosinger.net/tgrosinger/saasitone/pkg/page" "git.grosinger.net/tgrosinger/saasitone/pkg/services" + "git.grosinger.net/tgrosinger/saasitone/templ/layouts" + "git.grosinger.net/tgrosinger/saasitone/templ/pages" "git.grosinger.net/tgrosinger/saasitone/templates" ) @@ -38,13 +41,18 @@ func (e *Error) Page(err error, ctx echo.Context) { // Render the error page p := page.New(ctx) - p.Layout = templates.LayoutMain p.Name = templates.PageError p.Title = http.StatusText(code) p.StatusCode = code p.HTMX.Request.Enabled = false - if err = e.RenderPage(ctx, p); err != nil { + component := pages.Error(p) + + p.LayoutComponent = func(content templ.Component) templ.Component { + return layouts.Main(p, content) + } + + if err = e.RenderPageTempl(ctx, p, component); err != nil { log.Ctx(ctx).Error("failed to render error page", "error", err, ) diff --git a/templ/pages/error.templ b/templ/pages/error.templ new file mode 100644 index 0000000..02839ee --- /dev/null +++ b/templ/pages/error.templ @@ -0,0 +1,19 @@ +package pages + +import ( + "net/http" + + "git.grosinger.net/tgrosinger/saasitone/pkg/page" +) + +templ Error(p page.Page) { + if p.StatusCode >= 500 { +

Please try again.

+ } else if p.StatusCode == http.StatusUnauthorized || p.StatusCode == http.StatusForbidden { +

You are not authorized to view the requested page.

+ } else if p.StatusCode == http.StatusNotFound { +

Click here to return home

+ } else { +

Something went wrong

+ } +} diff --git a/templ/pages/error_templ.go b/templ/pages/error_templ.go new file mode 100644 index 0000000..bc38127 --- /dev/null +++ b/templ/pages/error_templ.go @@ -0,0 +1,67 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.707 +package pages + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import "context" +import "io" +import "bytes" + +import ( + "net/http" + + "git.grosinger.net/tgrosinger/saasitone/pkg/page" +) + +func Error(p page.Page) templ.Component { + return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) + if !templ_7745c5c3_IsBuffer { + templ_7745c5c3_Buffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + if p.StatusCode >= 500 { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Please try again.

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else if p.StatusCode == http.StatusUnauthorized || p.StatusCode == http.StatusForbidden { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

You are not authorized to view the requested page.

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else if p.StatusCode == http.StatusNotFound { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Click here to return home

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Something went wrong

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + if !templ_7745c5c3_IsBuffer { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) + } + return templ_7745c5c3_Err + }) +} diff --git a/templates/pages/error.gohtml b/templates/pages/error.gohtml deleted file mode 100644 index c432fe3..0000000 --- a/templates/pages/error.gohtml +++ /dev/null @@ -1,11 +0,0 @@ -{{define "content"}} - {{if ge .StatusCode 500}} -

Please try again.

- {{else if or (eq .StatusCode 403) (eq .StatusCode 401)}} -

You are not authorized to view the requested page.

- {{else if eq .StatusCode 404}} -

Click {{link (url "home") "here" .Path}} to return home

- {{else}} -

Something went wrong

- {{end}} -{{end}} \ No newline at end of file