54 lines
1.6 KiB
Plaintext
54 lines
1.6 KiB
Plaintext
module Aviary.UI where
|
|
|
|
import Prelude
|
|
|
|
import Aviary.Model (Image, ImageData(..), Model(..))
|
|
|
|
import Data.Maybe (maybe)
|
|
import Effect.Aff (Aff)
|
|
import Halogen as H
|
|
import Halogen.HTML as HH
|
|
import Halogen.HTML.Properties as HP
|
|
import Web.HTML.Common (ClassName(..))
|
|
|
|
data Event = Unimplemented
|
|
|
|
component :: forall query input output. Model -> H.Component query input output Aff
|
|
component initialState = H.mkComponent
|
|
{ initialState: \_ -> initialState
|
|
, render
|
|
, eval: H.mkEval $ H.defaultEval { handleAction = update }
|
|
}
|
|
|
|
placeholderBlurhash :: forall r i. String -> HH.IProp r i
|
|
placeholderBlurhash = HH.attr (HH.AttrName "data-blurhash")
|
|
|
|
renderThumbnail :: forall m. Image -> H.ComponentHTML Event () m
|
|
renderThumbnail {blurhash, thumb} =
|
|
HH.div
|
|
[ HP.class_ $ ClassName "thumbnail-card"
|
|
]
|
|
( [ HH.img
|
|
( [ placeholderBlurhash blurhash
|
|
, HP.width 400
|
|
, HP.height 400
|
|
] <> case thumb of
|
|
ILoaded url -> [HP.src url]
|
|
_ -> []
|
|
)
|
|
] <> case thumb of
|
|
Unloaded _ -> [HH.p_ [HH.text "Loading..."]]
|
|
IError e -> [HH.p_ [HH.text $ "Error! " <> (show e)]]
|
|
_ -> []
|
|
)
|
|
|
|
update :: forall output. Event -> H.HalogenM Model Event () output Aff Unit
|
|
update Unimplemented = pure unit
|
|
|
|
render :: forall m. Model -> H.ComponentHTML Event () m
|
|
render (GError e) = HH.p_ [ HH.text $ show e ]
|
|
render (GLoaded title desc images) = HH.div_
|
|
((maybe [] (HH.text >>> pure >>> HH.h1_ >>> pure) title) <>
|
|
(maybe [] (HH.text >>> pure >>> HH.p_ >>> pure) desc) <>
|
|
(renderThumbnail <$> images))
|