Skip to content

Commit 4cd7ccd

Browse files
feat(website): routing guide, force version bump
1 parent 766aed4 commit 4cd7ccd

File tree

6 files changed

+49
-35
lines changed

6 files changed

+49
-35
lines changed

packages/overmind-website/examples/guide/routing/compose.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as operations from './operations'
1010
1111
...
1212
13-
export const showUser: Action<string> = action =>
13+
export const showUserModal: Action<string> = action =>
1414
action()
1515
.compose(showUsersPage) // <-- WE ADD COMPOSE
1616
.mutate(mutations.setModalUserId)

packages/overmind-website/examples/guide/routing/parallel.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ export const showUsersPage: Action<any> = action =>
2121
2222
const getUserWithDetails: Action<string> = action =>
2323
action()
24-
.mutate(mutations.setModalUserId)
2524
.mutate(mutations.setLoadingUserWithDetails(true))
2625
.map(operations.getUserWithDetails)
2726
.mutate(mutations.updateUserWithDetails)
2827
.mutate(mutations.setLoadingUserWithDetails(false))
2928
30-
export const showUser: Action<string> = action =>
29+
export const showUserModal: Action<string> = action =>
3130
action()
31+
.mutate(mutations.setModalUserId)
3232
.parallel([
3333
showUsersPage,
3434
getUserWithDetails
@@ -58,14 +58,14 @@ export const showUsersPage = action =>
5858
5959
const getUserWithDetails = action =>
6060
action()
61-
.mutate(mutations.setModalUserId)
6261
.mutate(mutations.setLoadingUserWithDetails(true))
6362
.map(operations.getUserWithDetails)
6463
.mutate(mutations.updateUserWithDetails)
6564
.mutate(mutations.setLoadingUserWithDetails(false))
6665
67-
export const showUser = action =>
66+
export const showUserModal = action =>
6867
action()
68+
.mutate(mutations.setModalUserId)
6969
.parallel([
7070
showUsersPage,
7171
getUserWithDetails

packages/overmind-website/examples/guide/routing/query.ts

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,12 @@ import * as effects from './effects'
1515
1616
const app = new App(config)
1717
18-
function parseQuery (action) {
19-
return (context) {
20-
action({
21-
params: context.params,
22-
query: queryString.parse(context.querystring)
23-
})
24-
}
25-
}
18+
const withParamsAndQuery = <T>(action: (payload: T) => any) => ({ params, querystring }) =>
19+
action(Object.assign({}, params, queryString.parse(querystring)))
2620
27-
page('/', parseQuery(app.actions.showHomePage))
28-
page('/users', parseQuery(app.actions.showUsersPage))
29-
page('/users/:id', parseQuery(app.actions.showUserModal))
21+
page('/', withParamsAndQuery(app.actions.showHomePage))
22+
page('/users', withParamsAndQuery(app.actions.showUsersPage))
23+
page('/users/:id', withParamsAndQuery<{ id: string, tabIndex: string }>(app.actions.showUserModal))
3024
3125
...
3226
`,
@@ -49,18 +43,12 @@ const app = new App({
4943
effects
5044
})
5145
52-
function parseQuery (action) {
53-
return (context) {
54-
action({
55-
params: context.params,
56-
query: queryString.parse(context.querystring)
57-
})
58-
}
59-
}
46+
const withParamsAndQuery = (action) => ({ params, querystring }) =>
47+
action(Object.assign({}, params, queryString.parse(querystring)))
6048
61-
page('/', parseQuery(app.actions.showHomePage))
62-
page('/users', parseQuery(app.actions.showUsersPage))
63-
page('/users/:id', parseQuery(app.actions.showUserModal))
49+
page('/', withParamsAndQuery(app.actions.showHomePage))
50+
page('/users', withParamsAndQuery(app.actions.showUsersPage))
51+
page('/users/:id', withParamsAndQuery(app.actions.showUserModal))
6452
6553
...
6654
`,

packages/overmind-website/examples/guide/routing/router.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ declare module 'overmind' {
2323
2424
const app = new App(config)
2525
26+
const withParams = <T>(action: (payload: T) => any) => ({ params }) => action(params)
27+
28+
page('/', withParams(app.actions.showHomePage))
29+
page('/users', withParams(app.actions.showUsersPage))
30+
page('/users/:id', withParams<{ id: string }>(app.actions.showUserModal))
31+
2632
page.start()
2733
2834
export type Connect = TConnect<typeof app>
@@ -47,7 +53,11 @@ const app = new App({
4753
effects
4854
})
4955
50-
page('/', ({ params }) => app.actions.showHomePage(params))
56+
const withParams = (action) => ({ params }) => action(params)
57+
58+
page('/', withParams(app.actions.showHomePage))
59+
page('/users', withParams(app.actions.showUsersPage))
60+
page('/users/:id', withParams(app.actions.showUserModal))
5161
5262
page.start()
5363

packages/overmind-website/examples/guide/routing/setup.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,24 @@ export const showHomePage: Action = action =>
1414
1515
export const showUsersPage: Action = action =>
1616
action()
17+
.mutate(mutations.unsetModalUserId)
1718
.mutate(mutations.setPage('users'))
1819
.mutate(mutations.setLoadingUsers(true))
1920
.map(operations.getUsers)
2021
.mutate(mutations.setUsers)
2122
.mutate(mutations.setLoadingUsers(false))
2223
23-
export const showUser: Action<string> = action =>
24+
export const showUserModal: Action<string> = action =>
2425
action()
25-
.mutate(mutations.setCurrentUserId)
26+
.mutate(mutations.setModalUserId)
27+
.mutate(mutations.setLoadingUserWithDetails(true))
28+
.map(operations.getUserWithDetails)
29+
.mutate(mutations.updateUserWithDetails)
30+
.mutate(mutations.setLoadingUserWithDetails(false))
2631
27-
export const changeUserTab: Action<number> = action =>
32+
export const changeUserModalTab: Action<number> = action =>
2833
action()
29-
.mutate(mutations.setUserTabIndex)
34+
.mutate(mutations.setUserModalTabIndex)
3035
`,
3136
},
3237
]
@@ -51,11 +56,15 @@ export const showUsersPage = action =>
5156
5257
export const showUser = action =>
5358
action()
54-
.mutate(mutations.setCurrentUserId)
59+
.mutate(mutations.setModalUserId)
60+
.mutate(mutations.setLoadingUserWithDetails(true))
61+
.map(operations.getUserWithDetails)
62+
.mutate(mutations.updateUserWithDetails)
63+
.mutate(mutations.setLoadingUserWithDetails(false))
5564
56-
export const changeUserTab = action =>
65+
export const changeUserModalTab = action =>
5766
action()
58-
.mutate(mutations.setUserTabIndex)
67+
.mutate(mutations.setUserModalTabIndex)
5968
`,
6069
},
6170
]

packages/overmind-website/guides/intermediate/01_routing.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ h(Example, { name: "guide/routing/parallel" })
6262
**Page js** also allows us to manage query strings, the stuff after the **?** in the url. Page js does not parse it though, so we introduce a library which does just that, [query-string](https://www.npmjs.com/package/query-string). With this we can update our route to also pass in any query params.
6363

6464

65+
```marksy
66+
h(Example, { name: "guide/routing/query" })
67+
```
68+
69+
## Summary
70+
71+
With very little effort we were able to build a custom "**application state first**" router for our application. Like many common tools needed in an application, like talking to the server, local storage etc., there are often small differences in the requirements. And even more often you do not need the full implementation of the tool you are using. By using simple tools you can meet the actual requirements of the application more "head on".

0 commit comments

Comments
 (0)