module Web.View.WidgetPatterns.Index where
import Web.Types
import Generated.Types
import IHP.Prelude
import IHP.ViewPrelude
import Web.Routes ()
-- Row: WidgetPattern fields + adopter_count + latest_version
type PatternIndexRow = (WidgetPattern, Int, Maybe Int)
data IndexView = IndexView
{ patterns :: ![PatternIndexRow]
}
instance View IndexView where
html IndexView { .. } = [hsx|
Widget Pattern Library
Published reusable widget patterns.
New Pattern
{forEach patterns renderPatternRow}
{if null patterns then noPatternsMsg else mempty}
|]
noPatternsMsg :: Html
noPatternsMsg = [hsx|No published patterns yet.
|]
renderPatternRow :: PatternIndexRow -> Html
renderPatternRow (pattern, adopterCount, mVersion) = [hsx|
{pattern.name}
{pattern.widgetType}
{if pattern.isCrossHub then crossHubChip else mempty}
{tshow adopterCount} adopters
{maybe mempty renderVersionChip mVersion}
{maybe mempty renderPatternDesc pattern.description}
|]
crossHubChip :: Html
crossHubChip = [hsx|cross-hub|]
renderVersionChip :: Int -> Html
renderVersionChip v = [hsx|v{tshow v}|]
renderPatternDesc :: Text -> Html
renderPatternDesc d = [hsx|{d}
|]