espial/purs/src/Component/BList.purs

40 lines
1 KiB
Text
Raw Normal View History

2019-01-31 02:54:47 +00:00
module Component.BList where
import Prelude
2019-03-01 04:45:34 +00:00
import Component.BMark (BMessage(..), BSlot, bmark)
2019-01-31 02:54:47 +00:00
import Model (Bookmark, BookmarkId)
import Data.Array (filter)
import Data.Maybe (Maybe(..))
import Effect.Aff (Aff)
import Halogen as H
import Halogen.HTML as HH
2019-03-01 04:45:34 +00:00
import Data.Symbol (SProxy(..))
2019-01-31 02:54:47 +00:00
2019-03-01 04:45:34 +00:00
data LAction =
HandleBMessage BookmarkId BMessage
2019-01-31 02:54:47 +00:00
2019-03-01 04:45:34 +00:00
type ChildSlots =
( bookmark :: BSlot Int
)
2019-01-31 02:54:47 +00:00
2019-03-01 04:45:34 +00:00
_bookmark = SProxy :: SProxy "bookmark"
blist :: forall q i o. Array Bookmark -> H.Component HH.HTML q i o Aff
2019-01-31 02:54:47 +00:00
blist st =
2019-03-01 04:45:34 +00:00
H.mkComponent
2019-01-31 02:54:47 +00:00
{ initialState: const st
, render
2019-03-01 04:45:34 +00:00
, eval: H.mkEval $ H.defaultEval { handleAction = handleAction }
2019-01-31 02:54:47 +00:00
}
where
2019-03-01 04:45:34 +00:00
render :: Array Bookmark -> H.ComponentHTML LAction ChildSlots Aff
2019-01-31 02:54:47 +00:00
render bms =
2019-03-01 04:45:34 +00:00
HH.div_ $ map (\b -> HH.slot _bookmark b.bid (bmark b) unit (Just <<< HandleBMessage b.bid)) bms
handleAction :: LAction -> H.HalogenM (Array Bookmark) LAction ChildSlots o Aff Unit
handleAction (HandleBMessage bid BNotifyRemove) = do
H.modify_ (filter (\b -> b.bid /= bid))