module Web.View.WidgetOwnerships.Index where
import Web.Types
import Generated.Types
import IHP.Prelude
import IHP.ViewPrelude
import Web.Routes ()
data IndexView = IndexView
{ ownerships :: ![WidgetOwnership]
, widgets :: ![Widget]
, hubs :: ![Hub]
}
instance View IndexView where
html IndexView { .. } = [hsx|
{renderOwnershipsSection ownerships widgets hubs}
|]
renderOwnershipsSection :: [WidgetOwnership] -> [Widget] -> [Hub] -> Html
renderOwnershipsSection [] _ _ = [hsx|No ownership records yet.
|]
renderOwnershipsSection ownerships ws hs = [hsx|
| Widget |
Owner Hub |
Steward Hub |
Type |
Effective From |
|
{forEach ownerships (renderOwnershipRow ws hs)}
|]
renderOwnershipRow :: [Widget] -> [Hub] -> WidgetOwnership -> Html
renderOwnershipRow ws hs o =
let widgetName wid = maybe (show wid) (.name) (find (\w -> w.id == wid) ws)
hubName hid = maybe "–" (.name) (find (\h -> h.id == hid) hs)
in [hsx|
| {widgetName o.widgetId} |
{hubName o.ownerHubId} |
{maybe "–" hubName o.stewardHubId}
|
" text-xs px-2 py-0.5 rounded font-medium"}>
{o.ownershipType}
|
{show o.effectiveFrom} |
View
|
|]
typeBadge :: Text -> Text
typeBadge t = case t of
"local" -> "bg-gray-100 text-gray-700"
"delegated" -> "bg-blue-100 text-blue-700"
"global" -> "bg-purple-100 text-purple-700"
_ -> "bg-gray-100 text-gray-600"