diff --git a/client/src/client/page/dashboard.gleam b/client/src/client/page/dashboard.gleam index c5d1fab..6de6e21 100644 --- a/client/src/client/page/dashboard.gleam +++ b/client/src/client/page/dashboard.gleam @@ -36,9 +36,9 @@ fn view_quick_access(session: Session) -> element.Element(Msg) { // User Management view_quick_access_section( session:, - required: [role.Admin], - icon: icon.user([class("inline")]), heading: "User Management", + icon: icon.user([class("inline")]), + required: [role.Admin], elements: [ view_quick_access_item( session:, @@ -52,9 +52,9 @@ fn view_quick_access(session: Session) -> element.Element(Msg) { // Crew Management view_quick_access_section( session:, - required: [role.Admin], - icon: icon.users([class("inline")]), heading: "Crew Management", + icon: icon.users([class("inline")]), + required: [role.Admin], elements: [ view_quick_access_item( session:, @@ -70,12 +70,12 @@ fn view_quick_access(session: Session) -> element.Element(Msg) { fn view_quick_access_section( session session: Session, - required required: List(role.Role), - icon icon: element.Element(Msg), heading heading: String, + icon icon: element.Element(Msg), + required required: List(role.Role), elements elements: List(element.Element(Msg)), ) -> element.Element(Msg) { - use <- ui.require_role(session, required) + use <- ui.require_role(session:, required:) html.div([], [ html.h6([class("flex gap-2")], [icon, html.text(heading)]), @@ -89,7 +89,7 @@ fn view_quick_access_item( text text: String, href href: route.Route, ) -> element.Element(Msg) { - use <- ui.require_role(session, required) + use <- ui.require_role(session:, required:) let href = attr.href(route.to_path(href)) button.link([href, class("w-full")], [html.text(text)]) diff --git a/client/src/client/ui.gleam b/client/src/client/ui.gleam index ee84650..c509203 100644 --- a/client/src/client/ui.gleam +++ b/client/src/client/ui.gleam @@ -3,11 +3,11 @@ import lustre/element import shared/role import shared/session.{type Session} -/// Render nothing if user is not authenticated or lack permissions +/// Conditionally render an element based on an user's permissions pub fn require_role( - session: Session, - required: List(role.Role), - next: fn() -> element.Element(a), + session session: Session, + required required: List(role.Role), + next next: fn() -> element.Element(a), ) -> element.Element(a) { case session { session.Authenticated(user:) ->