Skip to content

Commit 30ddfa8

Browse files
committed
only set query if modified
1 parent 7e71cd3 commit 30ddfa8

File tree

7 files changed

+37
-23
lines changed

7 files changed

+37
-23
lines changed

client/dist/hyperbole.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/src/browser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
export function setQuery(query: string = "") {
2+
export function setQuery(query: string) {
33
if (query != currentQuery()) {
44
if (query != "") query = "?" + query
55
let url = location.pathname + query

client/src/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { setQuery } from "./browser"
1414
// const CONTENT_ID = "yeti-root-content"
1515

1616
// console.log("VERSION 2", INIT_PAGE, INIT_STATE)
17-
console.log("Hyperbole 0.4.2")
17+
console.log("Hyperbole 0.4.3a")
1818

1919

2020
let rootStyles: HTMLStyleElement;
@@ -46,7 +46,9 @@ async function sendAction(msg: ActionMessage) {
4646
return
4747
}
4848

49-
setQuery(res.headers.get("set-query"))
49+
if (res.headers.has("set-query")) {
50+
setQuery(res.headers.get("set-query"))
51+
}
5052

5153
if (!res.ok) {
5254
let error = new Error()

client/src/sockets.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ export class SocketConnection {
9696
return
9797
}
9898

99-
setQuery(metadata.query)
99+
if (metadata.query !== undefined) {
100+
setQuery(metadata.query)
101+
}
100102

101103
if (metadata.viewId != id) {
102104
// console.warn("Mismatched ids, ignoring", metadata.viewId, id)

src/Web/Hyperbole/Effect/Hyperbole.hs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33

44
module Web.Hyperbole.Effect.Hyperbole where
55

6-
import Data.ByteString qualified as BS
76
import Effectful
87
import Effectful.Dispatch.Dynamic
98
import Effectful.Error.Static
109
import Effectful.State.Static.Local
11-
import Web.Hyperbole.Data.QueryData (queryData)
1210
import Web.Hyperbole.Effect.Server
1311

1412

@@ -44,16 +42,10 @@ runHyperbole = fmap combine $ reinterpret runLocal $ \_ -> \case
4442
runLocal eff = do
4543
-- Load the request ONCE right when we start
4644
r <- send LoadRequest
47-
let client = Client mempty (queryData $ queryParams r)
45+
let client = Client mempty mempty
4846
let st = HyperState r client
4947
runErrorNoCallStack @Response . runState st $ eff
5048

51-
queryParams request =
52-
filter (not . isSystemParam) request.query
53-
54-
isSystemParam (key, _) =
55-
"hyp-" `BS.isPrefixOf` key
56-
5749
combine :: (Server :> es) => Eff es (Either Response (Response, HyperState)) -> Eff es Response
5850
combine eff = do
5951
er <- eff

src/Web/Hyperbole/Effect/Query.hs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
module Web.Hyperbole.Effect.Query where
22

3+
import Data.ByteString qualified as BS
4+
import Data.Maybe (fromMaybe)
35
import Data.String.Conversions (cs)
46
import Effectful
57
import Effectful.Dispatch.Dynamic (send)
6-
import Web.Hyperbole.Data.QueryData (FromParam (..), FromQuery (..), Param, QueryData (..), ToParam (..), ToQuery (..))
8+
import Web.Hyperbole.Data.QueryData (FromParam (..), FromQuery (..), Param, QueryData (..), ToParam (..), ToQuery (..), queryData)
79
import Web.Hyperbole.Data.QueryData qualified as QueryData
810
import Web.Hyperbole.Effect.Hyperbole (Hyperbole (..))
9-
import Web.Hyperbole.Effect.Server (Client (..), Response (..), ResponseError (..))
11+
import Web.Hyperbole.Effect.Request (request)
12+
import Web.Hyperbole.Effect.Server (Client (..), Request (..), Response (..), ResponseError (..))
1013
import Prelude
1114

1215

@@ -77,10 +80,23 @@ deleteParam key = do
7780
-- | Return the query from 'Request' as a 'QueryData'
7881
queryParams :: (Hyperbole :> es) => Eff es QueryData
7982
queryParams = do
80-
(.query) <$> send GetClient
83+
cq <- clientQuery
84+
rq <- requestQuery
85+
pure $ fromMaybe rq cq
86+
where
87+
clientQuery = (.query) <$> send GetClient
88+
89+
requestQuery :: (Hyperbole :> es) => Eff es QueryData
90+
requestQuery = do
91+
r <- request
92+
pure $ queryData $ filter (not . isSystemParam) r.query
93+
94+
isSystemParam (key, _) =
95+
"hyp-" `BS.isPrefixOf` key
8196

8297

8398
modifyQuery :: (Hyperbole :> es) => (QueryData -> QueryData) -> Eff es ()
84-
modifyQuery f =
99+
modifyQuery f = do
100+
q <- queryParams
85101
send $ ModClient $ \client ->
86-
Client{query = f client.query, session = client.session}
102+
Client{query = Just $ f q, session = client.session}

src/Web/Hyperbole/Effect/Server.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ runServerWai toDoc req respond =
8989
setCookie cookie =
9090
("Set-Cookie", renderCookie (Wai.pathInfo req) cookie)
9191

92-
setQuery qd =
92+
setQuery Nothing = []
93+
setQuery (Just qd) =
9394
[("Set-Query", QueryData.render qd)]
9495

9596
-- convert to document if full page request. Subsequent POST requests will only include fragments
@@ -186,8 +187,9 @@ runServerSockets conn req = reinterpret runLocal $ \_ -> \case
186187
cookieMeta cookie =
187188
Metadata [("COOKIE", cs (renderCookie req.path cookie))]
188189

189-
queryMeta :: QueryData -> Metadata
190-
queryMeta q =
190+
queryMeta :: Maybe QueryData -> Metadata
191+
queryMeta Nothing = mempty
192+
queryMeta (Just q) =
191193
Metadata [("QUERY", cs $ QueryData.render q)]
192194

193195
viewIdMeta :: TargetViewId -> Metadata
@@ -218,7 +220,7 @@ errNotHandled ev =
218220

219221
data Client = Client
220222
{ session :: Cookies
221-
, query :: QueryData
223+
, query :: Maybe QueryData
222224
}
223225

224226

0 commit comments

Comments
 (0)