Skip to content

Commit b0994bd

Browse files
committed
feat(createstore): support namespace
1 parent 669c627 commit b0994bd

File tree

7 files changed

+144
-76
lines changed

7 files changed

+144
-76
lines changed

__test__/lane/lane.spec.ts

+81-46
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// <reference path="../index.d.ts" />
22
import { renderHook, act } from '@testing-library/react-hooks'
3-
import { createStore, useModel } from '../../src'
3+
import { createStore, useModel, Model } from '../../src'
44

55
describe('lane model', () => {
66
test('single model', async () => {
@@ -14,16 +14,49 @@ describe('lane model', () => {
1414
renderTimes += 1
1515
return { renderTimes, count, setCount }
1616
})
17-
await act(async () => {
17+
18+
act(() => {
19+
expect(result.current.renderTimes).toEqual(1)
20+
expect(result.current.count).toBe(1)
21+
})
22+
23+
act(() => {
24+
result.current.setCount(5)
25+
})
26+
27+
act(() => {
28+
expect(renderTimes).toEqual(2)
29+
expect(result.current.count).toBe(5)
30+
})
31+
})
32+
33+
test('create store with namespace', async () => {
34+
const { useStore } = Model({})
35+
createStore('Shared', () => {
36+
const [count, setCount] = useModel(1)
37+
return { count, setCount }
38+
})
39+
40+
let renderTimes = 0
41+
const { result } = renderHook(() => {
42+
// @ts-ignore
43+
const { count, setCount } = useStore('Shared')
44+
console.group('count: ', count)
45+
console.group('setCount: ', setCount)
46+
renderTimes += 1
47+
return { renderTimes, count, setCount }
48+
})
49+
act(() => {
1850
expect(renderTimes).toEqual(1)
1951
expect(result.current.count).toBe(1)
2052
})
2153

22-
await act(async () => {
23-
await result.current.setCount(5)
54+
act(() => {
55+
// @ts-ignore
56+
result.current.setCount(5)
2457
})
2558

26-
await act(() => {
59+
act(() => {
2760
expect(renderTimes).toEqual(2)
2861
expect(result.current.count).toBe(5)
2962
})
@@ -40,16 +73,17 @@ describe('lane model', () => {
4073
renderTimes += 1
4174
return { renderTimes, count, setCount }
4275
})
43-
await act(async () => {
76+
77+
act(() => {
4478
expect(renderTimes).toEqual(1)
4579
expect(result.current.count).toBe(1)
4680
})
4781

48-
await act(async () => {
49-
await result.current.setCount((count) => count + 1)
82+
act(() => {
83+
result.current.setCount((count) => count + 1)
5084
})
5185

52-
await act(() => {
86+
act(() => {
5387
expect(renderTimes).toEqual(2)
5488
expect(result.current.count).toBe(2)
5589
})
@@ -67,25 +101,25 @@ describe('lane model', () => {
67101
renderTimes += 1
68102
return { renderTimes, count, setCount }
69103
})
70-
await act(async () => {
104+
act(() => {
71105
expect(renderTimes).toEqual(1)
72106
expect(result.current.count).toBe(true)
73107
})
74108

75-
await act(async () => {
76-
await result.current.setCount(false)
109+
act(() => {
110+
result.current.setCount(false)
77111
})
78112

79-
await act(() => {
113+
act(() => {
80114
expect(renderTimes).toEqual(2)
81115
expect(result.current.count).toBe(false)
82116
})
83117

84-
await act(() => {
118+
act(() => {
85119
rerender()
86120
})
87121

88-
await act(() => {
122+
act(() => {
89123
expect(renderTimes).toEqual(3)
90124
expect(result.current.count).toBe(false)
91125
})
@@ -103,26 +137,26 @@ describe('lane model', () => {
103137
renderTimes += 1
104138
return { renderTimes, count, setCount, name, setName }
105139
})
106-
await act(async () => {
140+
act(() => {
107141
expect(renderTimes).toEqual(1)
108142
expect(result.current.count).toBe(1)
109143
})
110144

111-
await act(async () => {
112-
await result.current.setCount(5)
145+
act(() => {
146+
result.current.setCount(5)
113147
})
114148

115-
await act(() => {
149+
act(() => {
116150
expect(renderTimes).toEqual(2)
117151
expect(result.current.count).toBe(5)
118152
expect(result.current.name).toBe('Jane')
119153
})
120154

121-
await act(async () => {
122-
await result.current.setName('Bob')
155+
act(() => {
156+
result.current.setName('Bob')
123157
})
124158

125-
await act(() => {
159+
act(() => {
126160
expect(renderTimes).toEqual(3)
127161
expect(result.current.name).toBe('Bob')
128162
expect(result.current.count).toBe(5)
@@ -147,26 +181,27 @@ describe('lane model', () => {
147181
renderTimes += 1
148182
return { renderTimes, count, setCount, name, setName }
149183
})
150-
await act(async () => {
184+
185+
act(() => {
151186
expect(renderTimes).toEqual(1)
152187
expect(result.current.count).toBe(1)
153188
})
154189

155-
await act(async () => {
156-
await result.current.setCount(5)
190+
act(() => {
191+
result.current.setCount(5)
157192
})
158193

159-
await act(() => {
194+
act(() => {
160195
expect(renderTimes).toEqual(2)
161196
expect(result.current.count).toBe(5)
162197
expect(result.current.name).toBe('Jane')
163198
})
164199

165-
await act(async () => {
166-
await result.current.setName('Bob')
200+
act(() => {
201+
result.current.setName('Bob')
167202
})
168203

169-
await act(() => {
204+
act(() => {
170205
expect(renderTimes).toEqual(3)
171206
expect(result.current.name).toBe('Bob')
172207
expect(result.current.count).toBe(5)
@@ -190,16 +225,16 @@ describe('lane model', () => {
190225
renderTimes += 1
191226
return { renderTimes, count, setCount }
192227
})
193-
await act(async () => {
228+
act(() => {
194229
expect(renderTimes).toEqual(2)
195230
expect(mirrorResult.current.count).toBe(1)
196231
})
197232

198-
await act(async () => {
199-
await result.current.setCount(5)
233+
act(() => {
234+
result.current.setCount(5)
200235
})
201236

202-
await act(() => {
237+
act(() => {
203238
expect(renderTimes).toEqual(4)
204239
expect(mirrorResult.current.count).toBe(5)
205240
})
@@ -234,46 +269,46 @@ describe('lane model', () => {
234269
renderTimes += 1
235270
return { renderTimes, data, setName, name, status, set }
236271
})
237-
await act(async () => {
272+
act(() => {
238273
expect(renderTimes).toEqual(2)
239274
expect(mirrorResult.current.name).toBe('Jane')
240275
})
241276

242-
await act(async () => {
243-
await result.current.setData({ status: 'SUCCESS' })
277+
act(() => {
278+
result.current.setData({ status: 'SUCCESS' })
244279
})
245280

246281
// Both component will rerender
247282
// TODO: Only rerender second FC
248-
await act(() => {
283+
act(() => {
249284
expect(renderTimes).toEqual(4)
250285
expect(mirrorResult.current.data).toEqual({ status: 'SUCCESS' })
251286
})
252287

253-
await act(async () => {
254-
await mirrorResult.current.setName('Bob')
288+
act(() => {
289+
mirrorResult.current.setName('Bob')
255290
})
256291

257-
await act(() => {
292+
act(() => {
258293
expect(renderTimes).toEqual(6)
259294
expect(mirrorResult.current.name).toBe('Bob')
260295
expect(mirrorResult.current.status).toBe(false)
261296
})
262297

263-
await act(async () => {
264-
await mirrorResult.current.set(true)
298+
act(() => {
299+
mirrorResult.current.set(true)
265300
})
266301

267-
await act(() => {
302+
act(() => {
268303
expect(renderTimes).toEqual(7)
269304
expect(mirrorResult.current.status).toBe(true)
270305
})
271306

272-
await act(async () => {
273-
await mirrorResult.current.setName('Jane')
307+
act(() => {
308+
mirrorResult.current.setName('Jane')
274309
})
275310

276-
await act(() => {
311+
act(() => {
277312
expect(renderTimes).toEqual(9)
278313
expect(mirrorResult.current.name).toBe('Jane')
279314
expect(mirrorResult.current.status).toBe(true)

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-model",
3-
"version": "4.1.0-alpha.2",
3+
"version": "4.1.0-alpha.3",
44
"description": "The State management library for React",
55
"main": "./dist/react-model.js",
66
"module": "./dist/react-model.esm.js",

src/global.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ let withDevTools = false
2424

2525
let uid = 0 // The unique id of hooks
2626
let storeId = 0 // The unique id of stores
27-
let currentStoreId = 0 // Used for useModel
27+
let currentStoreId = '0' // Used for useModel
2828

2929
export default {
3030
Actions,

src/helper.ts

+4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ const setPartialState = (
7373
return Global.State
7474
}
7575

76+
const get = <T>(p: Array<string | number>) => (o: T) =>
77+
p.reduce((xs: any, key) => (xs && xs[key] ? xs[key] : null), o)
78+
7679
const timeout = <T>(ms: number, data: T): Promise<T> =>
7780
new Promise((resolve) =>
7881
setTimeout(() => {
@@ -150,6 +153,7 @@ export {
150153
setPartialState,
151154
shallowEqual,
152155
timeout,
156+
get,
153157
getCache,
154158
getInitialState
155159
}

src/index.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ interface Global {
4444
withDevTools: boolean
4545
uid: number
4646
storeId: number
47-
currentStoreId: number
47+
currentStoreId: string
4848
}
4949

5050
type ClassSetter = React.Dispatch<any> | undefined

0 commit comments

Comments
 (0)