Skip to content

Commit 230a6e9

Browse files
feat(overmind): composition fixed and changed to modules and mutate
1 parent 17b0fee commit 230a6e9

File tree

26 files changed

+286
-232
lines changed

26 files changed

+286
-232
lines changed

packages/demos/todomvc/src/app/actions.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ type ChangeEvent = React.ChangeEvent<HTMLInputElement>
99
export const changeNewTodoTitle: Action<ChangeEvent> = (action) =>
1010
action()
1111
.map(operations.getEventValue)
12-
.mutation(mutations.setNewTodoTitle)
12+
.mutate(mutations.setNewTodoTitle)
1313

1414
export const addTodo: Action<React.FormEvent> = (action) =>
1515
action()
1616
.do(operations.preventEventDefault)
17-
.mutation(mutations.addTodo)
18-
.mutation(mutations.clearNewTodoTitle)
17+
.mutate(mutations.addTodo)
18+
.mutate(mutations.clearNewTodoTitle)
1919
.map(() => Promise.resolve())
2020
.map(() => Promise.resolve())
2121

2222
export const toggleCompleted: Action<Todo> = (action) =>
23-
action().mutation(mutations.toggleCompleted)
23+
action().mutate(mutations.toggleCompleted)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import { Mutation } from 'overmind'
1+
import { Mutate } from 'overmind'
22
import { Todo } from './state'
33

44
let nextTodoId = 0
55

6-
export const setNewTodoTitle: Mutation<string> = (state, value) =>
6+
export const setNewTodoTitle: Mutate<string> = (state, value) =>
77
(state.newTodoTitle = value)
88

9-
export const addTodo: Mutation = (state) =>
9+
export const addTodo: Mutate = (state) =>
1010
state.todos.unshift({
1111
id: String(nextTodoId++),
1212
title: state.newTodoTitle,
1313
completed: false,
1414
})
1515

16-
export const clearNewTodoTitle: Mutation = (state) => (state.newTodoTitle = '')
16+
export const clearNewTodoTitle: Mutate = (state) => (state.newTodoTitle = '')
1717

18-
export const toggleCompleted: Mutation<Todo> = (_, todo) =>
18+
export const toggleCompleted: Mutate<Todo> = (_, todo) =>
1919
(todo.completed = !todo.completed)

packages/node_modules/overmind-devtools/src/app/actions.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,70 +5,70 @@ import { Message, Tab } from './state'
55

66
const onMessage: Action<Message> = (action) =>
77
action()
8-
.mutation(mutations.performMutationsByMessageType)
9-
.mutation(mutations.addMessagesFromClient)
8+
.mutate(mutations.performMutationsByMessageType)
9+
.mutate(mutations.addMessagesFromClient)
1010

1111
export const loadDevtools: Action = (action) =>
1212
action()
1313
// .do(({ storage }) => storage.clear())
1414
// Do a check if the current app matches the keys of the ???
1515
.map(operations.getAppsFromStorage)
16-
.mutation(mutations.setApps)
16+
.mutate(mutations.setApps)
1717
.map(operations.getCurrentPortFromStorage)
18-
.mutation(mutations.setCurrentPort)
19-
.mutation(mutations.setAppLoaded)
20-
.do(operations.connectCurrentPort(onMessage(action)))
18+
.mutate(mutations.setCurrentPort)
19+
.mutate(mutations.setAppLoaded)
20+
.do(operations.connectCurrentPort(onMessage(action as any)))
2121

2222
export const setError: Action<string> = (action) =>
23-
action().mutation(mutations.setError)
23+
action().mutate(mutations.setError)
2424

2525
export const changeNewPortValue: Action<string> = (action) =>
2626
action()
2727
.map(operations.toNumber)
28-
.mutation(mutations.setNewPortValue)
28+
.mutate(mutations.setNewPortValue)
2929

3030
export const addPort: Action = (action) =>
3131
action()
3232
.map(operations.getNewPortFromState)
33-
.mutation(mutations.setCurrentPort)
34-
.mutation(mutations.addNewApp)
35-
.mutation(mutations.resetNewPortValue)
33+
.mutate(mutations.setCurrentPort)
34+
.mutate(mutations.addNewApp)
35+
.mutate(mutations.resetNewPortValue)
3636
.do(operations.storeApps)
3737
.do(operations.connectCurrentPort(onMessage))
3838

3939
export const changeTab: Action<Tab> = (action) =>
40-
action().mutation(mutations.changeTab)
40+
action().mutate(mutations.changeTab)
4141

4242
export const toggleExpandState: Action<string[]> = (action) =>
43-
action().mutation(mutations.toggleExpandStatePath)
43+
action().mutate(mutations.toggleExpandStatePath)
4444

4545
export const selectAction: Action<string> = (action) =>
4646
action()
47-
.mutation(mutations.toggleActionItemCollapse)
48-
.mutation(mutations.selectAction)
47+
.mutate(mutations.toggleActionItemCollapse)
48+
.mutate(mutations.selectAction)
4949

5050
type Collapsed = {
5151
isCollapsed: boolean
5252
}
5353

5454
export const toggleCollapsed: Action<Collapsed> = (action) =>
55-
action().mutation(mutations.toggleCollapsed)
55+
action().mutate(mutations.toggleCollapsed)
5656

5757
export const configurePort: Action = (action) =>
58-
action().mutation(mutations.configurePort)
58+
action().mutate(mutations.configurePort)
5959

6060
export const cancelConfigurePort: Action = (action) =>
61-
action().mutation(mutations.cancelConfigurePort)
61+
action().mutate(mutations.cancelConfigurePort)
6262

6363
export const removeApp: Action = (action) =>
6464
action()
6565
.filter(operations.confirm('Are you sure you want to remove the app?'))
6666
.do(operations.removeCurrentPort)
67-
.mutation(mutations.removeApp)
67+
.mutate(mutations.removeApp)
6868
.do(operations.storeApps)
69-
.do(operations.connectCurrentPort(onMessage(action)))
69+
.do(operations.connectCurrentPort(onMessage(action as any)))
7070

7171
export const selectPort: Action<string> = (action) =>
7272
action()
73-
.mutation(mutations.selectPort)
74-
.do(operations.connectCurrentPort(onMessage(action)))
73+
.mutate(mutations.selectPort)
74+
.do(operations.connectCurrentPort(onMessage(action as any)))

packages/node_modules/overmind-devtools/src/app/mutations.ts

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Mutation } from 'overmind'
1+
import { Mutate } from 'overmind'
22
import {
33
Apps,
44
Message,
@@ -15,20 +15,20 @@ import {
1515
getOperatorId,
1616
} from './utils'
1717

18-
export const setApps: Mutation<Apps> = (state, apps) => {
18+
export const setApps: Mutate<Apps> = (state, apps) => {
1919
if (!apps) {
2020
state.isAddingPort = true
2121
}
2222

2323
state.apps = apps || {}
2424
}
2525

26-
export const configurePort: Mutation = (state) => (state.isAddingPort = true)
26+
export const configurePort: Mutate = (state) => (state.isAddingPort = true)
2727

28-
export const selectPort: Mutation<string> = (state, port) =>
28+
export const selectPort: Mutate<string> = (state, port) =>
2929
(state.currentPort = port)
3030

31-
export const removeApp: Mutation = (state) => {
31+
export const removeApp: Mutate = (state) => {
3232
delete state.apps[state.currentPort]
3333

3434
const appPorts = Object.keys(state.apps)
@@ -40,42 +40,41 @@ export const removeApp: Mutation = (state) => {
4040
}
4141
}
4242

43-
export const cancelConfigurePort: Mutation = (state) =>
43+
export const cancelConfigurePort: Mutate = (state) =>
4444
(state.isAddingPort = false)
4545

46-
export const setCurrentPort: Mutation<string> = (state, currentPort) => {
46+
export const setCurrentPort: Mutate<string> = (state, currentPort) => {
4747
if (currentPort) {
4848
state.currentPort = currentPort
4949
} else if (Object.keys(state.apps).length) {
5050
state.currentPort = Object.keys(state.apps)[0]
5151
}
5252
}
5353

54-
export const setError: Mutation<string> = (state, error) =>
55-
(state.error = error)
54+
export const setError: Mutate<string> = (state, error) => (state.error = error)
5655

57-
export const setAppLoaded: Mutation = (state) => (state.isLoading = false)
56+
export const setAppLoaded: Mutate = (state) => (state.isLoading = false)
5857

59-
export const setNewPortValue: Mutation<string> = (state, value) =>
58+
export const setNewPortValue: Mutate<string> = (state, value) =>
6059
(state.newPortValue = value)
6160

62-
export const addNewApp: Mutation = (state) => {
61+
export const addNewApp: Mutate = (state) => {
6362
state.apps[state.newPortValue] = createApp({
6463
port: state.newPortValue,
6564
})
6665
state.isAddingPort = false
6766
}
6867

69-
export const resetNewPortValue: Mutation = (state) => (state.newPortValue = '')
68+
export const resetNewPortValue: Mutate = (state) => (state.newPortValue = '')
7069

71-
export const addMessagesFromClient: Mutation<Message> = (state, message) =>
70+
export const addMessagesFromClient: Mutate<Message> = (state, message) =>
7271
(state.apps[message.port].messages = message.message
7372
.reverse()
7473
.concat(state.apps[message.port].messages))
7574

76-
export const changeTab: Mutation<Tab> = (state, tab) => (state.currentTab = tab)
75+
export const changeTab: Mutate<Tab> = (state, tab) => (state.currentTab = tab)
7776

78-
export const toggleExpandStatePath: Mutation<string[]> = (state, path) => {
77+
export const toggleExpandStatePath: Mutate<string[]> = (state, path) => {
7978
const pathString = path.join('.')
8079

8180
if (state.expandedStatePaths.indexOf(pathString) >= 0) {
@@ -88,12 +87,11 @@ export const toggleExpandStatePath: Mutation<string[]> = (state, path) => {
8887
}
8988
}
9089

91-
export const performMutationsByMessageType: Mutation<Message> = (
90+
export const performMutationsByMessageType: Mutate<Message> = (
9291
state,
9392
message
9493
) => {
9594
message.message.forEach((clientMessage) => {
96-
console.log(clientMessage)
9795
switch (clientMessage.type) {
9896
case 'init': {
9997
state.apps[message.port] = createApp({
@@ -316,7 +314,7 @@ export const performMutationsByMessageType: Mutation<Message> = (
316314
})
317315
}
318316

319-
export const toggleActionItemCollapse: Mutation<string> = (state, actionId) => {
317+
export const toggleActionItemCollapse: Mutate<string> = (state, actionId) => {
320318
for (let index in state.currentApp.actionsList) {
321319
const item = state.currentApp.actionsList[index]
322320
if (
@@ -330,12 +328,12 @@ export const toggleActionItemCollapse: Mutation<string> = (state, actionId) => {
330328
}
331329
}
332330

333-
export const selectAction: Mutation<string> = (state, actionId) =>
331+
export const selectAction: Mutate<string> = (state, actionId) =>
334332
(state.currentApp.currentActionId = actionId)
335333

336334
type Collapse = {
337335
isCollapsed: boolean
338336
}
339337

340-
export const toggleCollapsed: Mutation<Collapse> = (_, item) =>
338+
export const toggleCollapsed: Mutate<Collapse> = (_, item) =>
341339
(item.isCollapsed = !item.isCollapsed)

packages/node_modules/overmind-devtools/src/components/Action/index.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import Operator from '../ActionOperator'
55
import Flush from '../ActionFlush'
66
import { getActionId, getOperatorId } from '../../app/utils'
77

8+
const ignoreOperatorValues = ['when', 'try', 'fork', 'compose']
9+
810
const Action: React.SFC<Connect> = ({ app }) => {
911
const flushReference =
1012
app.state.currentApp.flushByActionId[getActionId(app.state.currentAction)]
@@ -17,10 +19,14 @@ const Action: React.SFC<Connect> = ({ app }) => {
1719
{Object.keys(app.state.currentAction.operators).map(
1820
(key, index, array) => {
1921
const operator = app.state.currentAction.operators[key]
22+
const prevOperator =
23+
app.state.currentAction.operators[array[index - 1]]
2024
const value =
2125
index === 0
2226
? app.state.currentAction.value
23-
: app.state.currentAction.operators[array[index - 1]].result
27+
: ignoreOperatorValues.includes(prevOperator.type)
28+
? undefined
29+
: prevOperator.result
2430
const flushReference =
2531
app.state.currentApp.flushByOperatorId[getOperatorId(operator)]
2632
const flush =

packages/node_modules/overmind-devtools/src/components/ActionOperator/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ type Props = {
1515

1616
const ActionOperator: React.SFC<Props> = ({ operator, value, app }) => (
1717
<React.Fragment key={operator.operatorId}>
18-
<Pipe>
19-
<Path />
20-
<ValueInspector value={value} small />
21-
</Pipe>
18+
{value === undefined ? null : (
19+
<Pipe>
20+
<Path />
21+
<ValueInspector value={value} small />
22+
</Pipe>
23+
)}
2224
<Pipe>
2325
<Path borderColor={operator.type === 'mutation' ? 'red' : 'primary'}>
2426
{operator.path.length ? (

0 commit comments

Comments
 (0)