WIP Client.getThread

This commit is contained in:
towards-a-new-leftypol 2024-01-31 20:36:50 -05:00
parent dc82c318a7
commit cd3bb2064f
6 changed files with 68 additions and 29 deletions

1
closure_example.sh Normal file
View File

@ -0,0 +1 @@
closure-compiler --js lib.js --js_output_file lib.min.js --compilation_level SIMPLE_OPTIMIZATIONS

View File

@ -2,21 +2,24 @@ module Action where
import Data.Text (Text) import Data.Text (Text)
import Component.CatalogGrid as Grid import Component.CatalogGrid as Grid
import Network.Client as Client
import Data.Int (Int64) import Data.Int (Int64)
import Miso (URI) import Miso (URI)
import Network.ClientTypes as C
import Network.CatalogPostType (CatalogPost) import Network.CatalogPostType (CatalogPost)
import Network.Http (HttpResult)
data GetThreadArgs = GetThreadArgs
{ website :: Text
, board_pathpart :: Text
, board_thread_id :: Int64
}
data Action data Action
= GridAction Grid.Action = GridAction Grid.Action
| GetLatest | GetLatest
| GetThread | GetThread GetThreadArgs
{ website :: Text | HaveLatest (HttpResult [CatalogPost])
, board_pathpart :: Text | ClientAction C.Action
, board_thread_id :: Int64
}
| HaveLatest (Client.HttpResult [CatalogPost])
| ClientAction Client.Action
| ChangeURI URI | ChangeURI URI
| NoAction | NoAction

View File

@ -67,7 +67,7 @@ initialActionFromRoute model uri = either (const NoAction) id routing_result
h_latest = const GetLatest h_latest = const GetLatest
h_thread :: Text -> Text -> BoardThreadId -> Model -> Action h_thread :: Text -> Text -> BoardThreadId -> Model -> Action
h_thread website board_pathpart board_thread_id _ = GetThread {..} h_thread website board_pathpart board_thread_id _ = GetThread GetThreadArgs {..}
initialModel initialModel
@ -141,7 +141,7 @@ mainView model = view
catalog_view :: Model -> View Action catalog_view :: Model -> View Action
catalog_view _ = div_ [] catalog_view _ = div_ []
[ h1_ [] [ text "Hello World" ] [ h1_ [] [ text "Overboard Catalog" ]
, Grid.view iGrid (gridModel model) , Grid.view iGrid (gridModel model)
] ]
@ -172,7 +172,7 @@ mainUpdate GetLatest m = m <# Client.fetchLatest (clientModel m) iClient
-- mainUpdate GetThread {..} m = noEff m -- mainUpdate GetThread {..} m = noEff m
mainUpdate GetThread {..} m = m <# do mainUpdate (GetThread GetThreadArgs{..}) m = m <# do
consoleLog $ "Thread " `append` (pack $ show $ board_thread_id) consoleLog $ "Thread " `append` (pack $ show $ board_thread_id)
pushURI new_current_uri pushURI new_current_uri
-- TODO: Need to return a Client action here to get the thread data -- TODO: Need to return a Client action here to get the thread data
@ -207,7 +207,7 @@ iGrid = Grid.Interface
where where
mkGetThread :: CatalogPost -> Action mkGetThread :: CatalogPost -> Action
mkGetThread post = GetThread mkGetThread post = GetThread GetThreadArgs
{ website = CatalogPost.site_name post { website = CatalogPost.site_name post
, board_pathpart = CatalogPost.pathpart post , board_pathpart = CatalogPost.pathpart post
, board_thread_id = CatalogPost.board_thread_id post , board_thread_id = CatalogPost.board_thread_id post
@ -224,9 +224,9 @@ iClient = Client.Interface
- - Create the thread view - - Create the thread view
- - add routing so when you click in the catalog it goes to the thread - - add routing so when you click in the catalog it goes to the thread
- - register onClick - - register onClick
- - pevent default and consoleLog the event - - pevent default and consoleLog the event
- - display page - - display page
- - history api / navigation for browser history - - history api / navigation for browser history
- - create component - - create component
- -
- -

View File

@ -2,6 +2,7 @@
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE RecordWildCards #-}
module Network.Client module Network.Client
( Http.HttpActionResult ( Http.HttpActionResult
@ -27,20 +28,8 @@ import Miso (effectSub, Effect)
import qualified Network.Http as Http import qualified Network.Http as Http
import Network.CatalogPostType (CatalogPost) import Network.CatalogPostType (CatalogPost)
import qualified Action as A
import Network.ClientTypes
data Action = Connect (Http.HttpActionResult [CatalogPost])
data Interface a = Interface
{ passAction :: Action -> a
, returnResult :: Http.HttpResult [CatalogPost] -> a
}
data Model = Model
{ pgApiRoot :: JSString
, fetchCount :: Int
} deriving Eq
update update
@ -58,6 +47,24 @@ data FetchCatalogArgs = FetchCatalogArgs
, max_row_read :: Int , max_row_read :: Int
} deriving (Generic, ToJSON) } deriving (Generic, ToJSON)
http_
:: (ToJSON b)
=> Model
-> Interface a
-> JSString
-> Http.HttpMethod
-> Maybe b
-> IO a
http_ m iface api_path method payload = do
Http.http
(pgApiRoot m <> api_path)
method
[("Content-Type", "application/json")]
payload
>>= return . (passAction iface) . Connect
fetchLatest :: Model -> Interface a -> IO a fetchLatest :: Model -> Interface a -> IO a
fetchLatest m iface = do fetchLatest m iface = do
ct <- getCurrentTime ct <- getCurrentTime
@ -72,3 +79,12 @@ fetchLatest m iface = do
} }
) )
>>= return . (passAction iface) . Connect >>= return . (passAction iface) . Connect
getThread :: A.GetThreadArgs -> IO a
getThread A.GetThreadArgs {..} = undefined
-- TODO: Action.GetLatest needs to be refactored out into a shared
-- data structure that we can pass as the argument for this getThread
-- function

View File

@ -0,0 +1,19 @@
module Network.ClientTypes where
import qualified Network.Http as Http
import Network.CatalogPostType (CatalogPost)
import GHCJS.DOM.Types (JSString)
data Action = Connect (Http.HttpActionResult [CatalogPost])
data Interface a = Interface
{ passAction :: Action -> a
, returnResult :: Http.HttpResult [CatalogPost] -> a
}
data Model = Model
{ pgApiRoot :: JSString
, fetchCount :: Int
} deriving Eq

View File

@ -36,6 +36,7 @@ import Miso (consoleLog)
data HttpMethod = GET | PUT | POST | DELETE | PATCH data HttpMethod = GET | PUT | POST | DELETE | PATCH
deriving Show deriving Show
data HttpResult a data HttpResult a
= Error = Error
| HttpResponse | HttpResponse
@ -46,7 +47,6 @@ data HttpResult a
type HttpActionResult a = (IO (), MVar (HttpResult a)) -- (abort, result) type HttpActionResult a = (IO (), MVar (HttpResult a)) -- (abort, result)
type Header = (JSString, JSString) type Header = (JSString, JSString)
mkResult :: (FromJSON a) => XMLHttpRequest -> IO (HttpResult a) mkResult :: (FromJSON a) => XMLHttpRequest -> IO (HttpResult a)