hyperbole-0.1.1: example/BulkUpdate.hs
module BulkUpdate where
-- import Control.Monad (forM_)
-- import Control.Monad.IO.Class (liftIO)
-- import Data.Text (pack)
-- import Example.Colors
-- import Example.Effects.Users (User (..), UserStore)
-- import Example.Effects.Users qualified as Users
-- import Web.Htmx
-- import Web.Hyperbole (view)
-- import Web.Hyperbole.Htmx
-- import Web.Scotty hiding (text)
-- import Web.UI
--
-- route :: UserStore -> ScottyM ()
-- route st = do
-- get "/contacts/" $ do
-- us <- Users.all st
-- view $ viewMain us
--
-- -- scotty doesn't support multiple ids :(
-- post "/contacts/activate" $ do
-- ids <- param "ids" :: ActionM [Int]
-- liftIO $ print ids
-- forM_ ids $ \uid ->
-- Users.modify st uid $ \u -> u{isActive = True}
-- us <- Users.all st
-- view $ viewUsers us
--
-- post "/contacts/deactivate" $ do
-- ids <- param "ids" :: ActionM [Int]
-- liftIO $ print ids
-- forM_ ids $ \uid ->
-- Users.modify st uid $ \u -> u{isActive = False}
-- us <- Users.all st
-- view $ viewUsers us
--
-- viewMain :: [User] -> View ()
-- viewMain users = do
-- row (hxTarget (Query (Id "table")) . hxSwap OuterHTML . hxInclude (Id "form")) $ do
-- col (pad 20 . width 500) $ do
-- button (hxPost ("contacts" // "activate")) "Activate"
-- button (hxPost ("contacts" // "deactivate")) "Deactivate"
--
-- form (grow . pad 10 . att "id" "form") $ do
-- viewUsers users
--
-- viewUsers :: [User] -> View ()
-- viewUsers users = do
-- table (border 1 . att "id" "table") users $ do
-- tcol (cell . width 20) none $ \u -> do
-- input (att "type" "checkbox" . name "ids" . value (pack $ show u.id))
--
-- tcol cell (hd "First Name") $ \u -> do
-- el (if u.isActive then bold else id) $ text u.firstName
--
-- tcol cell (hd "Last Name") $ \u -> do
-- text u.lastName
--
-- tcol cell (hd "Email") $ \u -> do
-- text u.email
-- where
-- cell = pad 4 . border 1 . borderColor GrayLight
-- hd = el bold
--
-- --