packages feed

dingo-example-0.0.3.4: src/Main.hs

module Main where

import Control.Monad.IO.Class (MonadIO(..))
import Dingo.Event (Event(..))
import Dingo.Callback (CallbackM)
import Dingo.ResourceBundle.JqueryUI.Lightness (jqueryUIStyleResourceBundle)
import Dingo.Server (DingoSettings(..), defaultDingoSettings, runApplication)
import Dingo.Widget.Application
import Dingo.Widget.DataTables (mkTable, setTableData, onTableBodyEvent)
import qualified Dingo.Widget.Button as WB
import qualified Dingo.Widget.Input as WI
import qualified Dingo.Widget.Panel as WP
import qualified Dingo.Widget.Select as WS
import qualified TownWidget as TSW

-- Test application
app :: Application -> CallbackM ()
app pw = do

  panel <- WP.mkPanel pw

  -- Add a button widget.
  btn <- WB.mkButton panel "Click Me!"
  WB.onClick btn $ do
    liftIO $ putStrLn "Button was clicked!"
    setApplicationTitle pw "Hello, world!"
  -- Add select field.
  sel <- WS.mkSelect panel [ ("K1", "V1")
                           , ("K2", "V2")
                           ]
  WS.onChange sel $ do
    liftIO $ putStrLn "Select field changed!"
    WS.setValue sel "K1"
    liftIO $ putStrLn "Select field reset!"
  -- Add an input field.
  inp <- WI.mkInput panel
  WI.onChange inp $ do
    liftIO $ putStrLn "Input field changed!"
    v <- WI.getValue inp
    liftIO $ putStrLn $ "INPUT FIELD NEW VALUE: " ++ show v
    -- Reset the field value to something else.
    WI.setValue inp "CHANGED!"
    v' <- WI.getValue inp
    liftIO $ putStrLn $ "INPUT FIELD NEW VALUE*: " ++ show v'
    -- Also change selector.
    WS.setValue sel "K2"

  -- Add a little table.
  table <- mkTable panel ["Task", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
           [ ["Frob the Gib", "(0,0)", "(1,0)", "(2,0)", "(3,0)", "(4,0)", "(5,0)", "(6,0)" ]
           , ["Knead It",     "(0,1)", "(1,1)", "(2,1)", "(3,1)", "(4,1)", "(5,1)", "(6,1)" ]
           , ["Empty Trash",  "(0,2)", "(1,2)", "(2,2)", "(3,2)", "(4,2)", "(5,2)", "(6,2)" ]
           , ["Choose Knob",  "(0,3)", "(1,3)", "(2,3)", "(3,3)", "(4,3)", "(5,3)", "(6,3)" ]
           , ["Frotz Nitz",   "(0,4)", "(1,4)", "(2,4)", "(3,4)", "(4,4)", "(5,4)", "(6,4)"]
           ]

  onTableBodyEvent table OnDblClick $ liftIO $ putStrLn "CLICKED TABLE!"

  -- Add town selector widget.
  townSel <- TSW.mkTownWidget panel
  TSW.onChange townSel $ do
    liftIO $ putStrLn "TOWN SELECTOR CHANGE EVENT FIRED!"
    v <- TSW.getSelectedTown townSel
    liftIO $ putStrLn $ "TOWN: " ++ show v
    v' <- TSW.getSelectedCountry townSel
    liftIO $ putStrLn $ "COUNTRY: " ++ show v'
    -- Change a cell in the table.
    setTableData table (2,1) "Hello!"

  return ()

main :: IO ()
main = do
  putStrLn "Starting server"
  runApplication dingoSettings "Dingo Example App" app
  where
    dingoSettings =
      defaultDingoSettings
        { dsPort = 3000
        , dsResourceBundles = [jqueryUIStyleResourceBundle]
        }