Skip to content

Commit dcbc784

Browse files
authored
Merge pull request #113 from yf-yang/immer
2 parents a6ed7d8 + b8059ba commit dcbc784

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

.changeset/fluffy-toes-juggle.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'zustand-x': patch
3+
---
4+
5+
Update readme and improve test cases related to immer style set

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ store.set('someAction', 10);
122122
store.set('state', (draft) => {
123123
draft.name = 'Bob';
124124
draft.loggedIn = true;
125+
// With immer, draft still need to be returned to be compatible with general state update type signatures
126+
return draft;
125127
});
126128
```
127129

@@ -272,6 +274,9 @@ const storeWithActions = store.extendActions(
272274
set('state', (draft) => {
273275
draft.firstName = 'Jane';
274276
draft.lastName = 'Doe';
277+
278+
// With immer, draft still need to be returned to be compatible with general state update type signatures
279+
return draft;
275280
});
276281
},
277282
someActionToOverride: () => {

packages/zustand-x/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ store.set('someAction', 10);
122122
store.set('state', (draft) => {
123123
draft.name = 'Bob';
124124
draft.loggedIn = true;
125+
// With immer, draft still need to be returned to be compatible with general state update type signatures
126+
return draft;
125127
});
126128
```
127129

@@ -272,6 +274,9 @@ const storeWithActions = store.extendActions(
272274
set('state', (draft) => {
273275
draft.firstName = 'Jane';
274276
draft.lastName = 'Doe';
277+
278+
// With immer, draft still need to be returned to be compatible with general state update type signatures
279+
return draft;
275280
});
276281
},
277282
someActionToOverride: () => {

packages/zustand-x/src/tests/createStore.spec.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,20 +266,31 @@ describe('zustandX', () => {
266266
});
267267

268268
describe('when extending actions', () => {
269+
const initialTags: string[] = ['tag1', 'tag2'];
269270
const store = createStore(
270271
{
271272
name: 'zustandX',
272273
stars: 0,
273274
description: '',
275+
tags: initialTags,
274276
},
275277
{
276278
name: 'repo',
279+
immer: {
280+
enabled: true,
281+
},
277282
}
278283
)
279284
.extendActions(({ set }) => ({
280285
validName: (name: string) => {
281286
set('name', name.trim());
282287
},
288+
replace2ndTag: (tag: string) => {
289+
set('state', (draft) => {
290+
draft.tags?.splice(1, 1, tag);
291+
return draft;
292+
});
293+
},
283294
}))
284295
.extendActions(({ set }) => ({
285296
reset: (name: string) => {
@@ -300,12 +311,19 @@ describe('zustandX', () => {
300311
expect(store.get('name')).toBe('test');
301312
});
302313

314+
it('should execute action with immer', () => {
315+
store.actions.replace2ndTag('tag3');
316+
expect(store.get('tags')).toEqual(['tag1', 'tag3']);
317+
expect(store.get('tags')).not.toBe(initialTags);
318+
});
319+
303320
it('should execute chained actions', () => {
304321
store.actions.reset('test ');
305322
expect(store.get('state')).toEqual({
306323
name: 'test',
307324
stars: 0,
308325
description: '',
326+
tags: ['tag1', 'tag3'],
309327
});
310328
});
311329

@@ -315,6 +333,7 @@ describe('zustandX', () => {
315333
name: 'test-repo',
316334
stars: 42,
317335
description: 'A test repository',
336+
tags: ['tag1', 'tag3'],
318337
});
319338
});
320339

@@ -616,13 +635,18 @@ describe('zustandX', () => {
616635
});
617636

618637
describe('when set.state', () => {
638+
const initialTags: string[] = ['tag1', 'tag2'];
619639
const store = createStore(
620640
{
621641
name: 'zustandX',
622642
stars: 0,
643+
tags: initialTags,
623644
},
624645
{
625646
name: 'repo',
647+
immer: {
648+
enabled: true,
649+
},
626650
}
627651
);
628652

@@ -636,7 +660,15 @@ describe('zustandX', () => {
636660
expect(store.get('state')).toEqual({
637661
name: 'test',
638662
stars: 1,
663+
tags: ['tag1', 'tag2'],
639664
});
665+
666+
store.set('state', (draft) => {
667+
draft.tags?.splice(1, 1, 'tag3', 'tag4');
668+
return draft;
669+
});
670+
671+
expect(store.get('tags')).not.toBe(initialTags);
640672
});
641673

642674
describe('when using immer', () => {

0 commit comments

Comments
 (0)