diff --git a/pkg/ui/layouts/admin.go b/pkg/ui/layouts/admin.go deleted file mode 100644 index 916b2b9..0000000 --- a/pkg/ui/layouts/admin.go +++ /dev/null @@ -1,72 +0,0 @@ -package layouts - -import ( - "github.com/mikestefanello/pagoda/ent/admin" - "github.com/mikestefanello/pagoda/pkg/routenames" - "github.com/mikestefanello/pagoda/pkg/ui" - . "github.com/mikestefanello/pagoda/pkg/ui/components" - - . "maragu.dev/gomponents" - . "maragu.dev/gomponents/html" -) - -func Admin(r *ui.Request, content Node) Node { - return Doctype( - HTML( - Lang("en"), - Head( - Metatags(r), - CSS(), - JS(r), - ), - Body( - Div( - Class("box"), - Div( - Class("columns"), - Div( - Class("column is-2"), - adminMenu(r), - ), - Div( - Class("column is-10"), - If(len(r.Title) > 0, H1(Class("title"), Text(r.Title))), - FlashMessages(r), - content, - ), - ), - ), - ), - HtmxListeners(r), - ), - ) -} - -func adminMenu(r *ui.Request) Node { - entityTypeNames := admin.GetEntityTypeNames() - entityTypeLinks := make(Group, len(entityTypeNames)) - for _, n := range entityTypeNames { - entityTypeLinks = append(entityTypeLinks, MenuLink(r, n, routenames.AdminEntityList(n))) - } - - return Aside( - Class("menu"), - HxBoost(), - P( - Class("menu-label"), - Text("Entities"), - ), - Ul( - Class("menu-list"), - entityTypeLinks, - ), - P( - Class("menu-label"), - Text("Account"), - ), - Ul( - Class("menu-list"), - If(r.IsAuth, MenuLink(r, "Logout", routenames.Logout)), - ), - ) -} diff --git a/pkg/ui/layouts/primary.go b/pkg/ui/layouts/primary.go index a314d62..623d087 100644 --- a/pkg/ui/layouts/primary.go +++ b/pkg/ui/layouts/primary.go @@ -1,6 +1,7 @@ package layouts import ( + "github.com/mikestefanello/pagoda/ent/admin" "github.com/mikestefanello/pagoda/pkg/routenames" "github.com/mikestefanello/pagoda/pkg/ui" "github.com/mikestefanello/pagoda/pkg/ui/cache" @@ -128,6 +129,25 @@ func search(r *ui.Request) Node { } func sidebarMenu(r *ui.Request) Node { + adminSubMenu := func() Node { + entityTypeNames := admin.GetEntityTypeNames() + entityTypeLinks := make(Group, len(entityTypeNames)) + for _, n := range entityTypeNames { + entityTypeLinks = append(entityTypeLinks, MenuLink(r, n, routenames.AdminEntityList(n))) + } + + return Group{ + P( + Class("menu-label"), + Text("Entities"), + ), + Ul( + Class("menu-list"), + entityTypeLinks, + ), + } + } + return Aside( Class("menu"), HxBoost(), @@ -155,5 +175,6 @@ func sidebarMenu(r *ui.Request) Node { If(!r.IsAuth, MenuLink(r, "Register", routenames.Register)), If(!r.IsAuth, MenuLink(r, "Forgot password", routenames.ForgotPasswordSubmit)), ), + Iff(r.IsAdmin, adminSubMenu), ) } diff --git a/pkg/ui/pages/entity.go b/pkg/ui/pages/entity.go index 65620f8..bbe8867 100644 --- a/pkg/ui/pages/entity.go +++ b/pkg/ui/pages/entity.go @@ -38,7 +38,7 @@ func AdminEntityDelete(ctx echo.Context, entityTypeName string) error { CSRF(r), ) - return r.Render(layouts.Admin, form) + return r.Render(layouts.Primary, form) } func AdminEntityForm(ctx echo.Context, isNew bool, schema *load.Schema, values url.Values) error { @@ -138,7 +138,7 @@ func AdminEntityForm(ctx echo.Context, isNew bool, schema *load.Schema, values u ButtonLink(r.Path(routenames.AdminEntityList(schema.Name)), "is-secondary", "Cancel"), ), CSRF(r)) - return r.Render(layouts.Admin, Form( + return r.Render(layouts.Primary, Form( Method(http.MethodPost), nodes, )) @@ -204,7 +204,7 @@ func AdminEntityList(ctx echo.Context, params AdminEntityListParams) error { ) } - return r.Render(layouts.Admin, Group{ + return r.Render(layouts.Primary, Group{ ButtonLink( r.Path(routenames.AdminEntityAdd(params.EntityType.Name)), "is-primary", diff --git a/pkg/ui/request.go b/pkg/ui/request.go index c2c6ab9..c5d5c8f 100644 --- a/pkg/ui/request.go +++ b/pkg/ui/request.go @@ -28,6 +28,9 @@ type ( // IsAuth stores whether the user is authenticated. IsAuth bool + // IsAdmin stores whether the user is an admin. + IsAdmin bool + // AuthUser stores the authenticated user. AuthUser *ent.User @@ -77,6 +80,7 @@ func NewRequest(ctx echo.Context) *Request { if u := ctx.Get(context.AuthenticatedUserKey); u != nil { p.IsAuth = true p.AuthUser = u.(*ent.User) + p.IsAdmin = p.AuthUser.Admin } if cfg := ctx.Get(context.ConfigKey); cfg != nil {