espial-0.0.9: purs/src/Component/AccountSettings.purs
module Component.AccountSettings where
import Prelude hiding (div)
import App (editAccountSettings)
import Data.Lens (Lens', lens, use, (%=))
import Effect.Aff (Aff)
import Globals (app')
import Halogen as H
import Halogen.HTML (div, input, text)
import Halogen.HTML.Elements (label)
import Halogen.HTML.Events (onChecked)
import Halogen.HTML.Properties (InputType(..), checked, for, id, name, type_)
import Model (AccountSettings)
import Util (class_)
import Web.Event.Event (Event)
type UState =
{ us :: AccountSettings
}
_us :: Lens' UState AccountSettings
_us = lens _.us (_ { us = _ })
data UAction
= UEditField EditField
| USubmit Event
data EditField
= EarchiveDefault Boolean
| EprivateDefault Boolean
| EprivacyLock Boolean
-- | The bookmark component definition.
usetting :: forall q i o. AccountSettings -> H.Component q i o Aff
usetting u' =
H.mkComponent
{ initialState: const (mkState u')
, render
, eval: H.mkEval $ H.defaultEval { handleAction = handleAction }
}
where
app = app' unit
mkState u =
{ us: u
}
render :: forall m. UState -> H.ComponentHTML UAction () m
render { us } =
div [ class_ "settings-form" ]
[ div [ class_ "fw7 mb2"] [ text "Account Settings" ]
, div [ class_ "flex items-center mb2" ]
[ input [ type_ InputCheckbox , class_ "pointer mr2" , id "archiveDefault", name "archiveDefault"
, checked (us.archiveDefault) , onChecked (editField EarchiveDefault) ]
, label [ for "archiveDefault", class_ "lh-copy" ]
[ text "Archive Non-Private Bookmarks (archive.li)" ]
]
, div [ class_ "flex items-center mb2" ]
[ input [ type_ InputCheckbox , class_ "pointer mr2" , id "privateDefault", name "privateDefault"
, checked (us.privateDefault) , onChecked (editField EprivateDefault) ]
, label [ for "privateDefault", class_ "lh-copy" ]
[ text "Default new bookmarks to Private" ]
]
, div [ class_ "flex items-center mb2" ]
[ input [ type_ InputCheckbox , class_ "pointer mr2" , id "privacyLock", name "privacyLock"
, checked (us.privacyLock) , onChecked (editField EprivacyLock) ]
, label [ for "privacyLock", class_ "lh-copy" ]
[ text "Privacy Lock (Private Account)" ]
]
]
where
editField :: forall a. (a -> EditField) -> a -> UAction
editField f = UEditField <<< f
handleAction :: UAction -> H.HalogenM UState UAction () o Aff Unit
handleAction (UEditField f) = do
_us %= case f of
EarchiveDefault e -> _ { archiveDefault = e }
EprivateDefault e -> _ { privateDefault = e }
EprivacyLock e -> _ { privacyLock = e }
us <- use _us
void $ H.liftAff (editAccountSettings us)
handleAction (USubmit _) = do
us <- use _us
void $ H.liftAff (editAccountSettings us)