Skip to content

Commit 173d611

Browse files
committed
Merge branch 'fix-store-bahavior'
2 parents cee03c2 + c52109d commit 173d611

File tree

5 files changed

+199
-17
lines changed

5 files changed

+199
-17
lines changed

.storybook/stories.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,33 @@ import { withAdk, adkParams } from '../dev/withAdk';
1414
*
1515
*/
1616

17-
addParameters(adkParams({ themes: ['theme1', 'theme2'], currentTheme: 0 }));
17+
addParameters(
18+
adkParams({ themes: ['theme1-aa', 'theme2-bb', 't3', 't4', 't5'], currentTheme: 0 })
19+
);
1820

1921
storiesOf('Storybook Addon Development Kit', module)
2022
.addDecorator(withAdk({ mainColor: 'green' }))
2123
.add(
2224
'Stories',
2325
() => {
24-
console.log('Render Button 1');
2526
return (
2627
<div>
2728
<button>Button 1</button>
2829
</div>
2930
);
3031
},
31-
adkParams({ currentTheme: 1 })
32+
// adkParams({ currentTheme: 1 })
3233
)
3334
.add(
3435
'Stories2',
3536
() => {
36-
console.log('Render Button 2');
3737
return (
3838
<div>
3939
<button>Button 2</button>
4040
</div>
4141
);
4242
},
43-
adkParams({ currentTheme: 0 })
43+
// adkParams({ currentTheme: 0 })
4444
);
4545
// .add('Details', () => (
4646
// <div>

dev/register.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,19 @@ const AsyncRequest = () => new Promise(resolve => {
6262

6363
register(
6464
{
65-
themeInd: store => store.currentTheme,
65+
themeInd: store => store.currentTheme || 0,
6666
themeList: store => store.themes,
6767
theme: store => store.themes[store.currentTheme],
6868
data: store => store
6969
},
7070
({ global, local }) => ({
7171
indInc: global(store => ({
72-
...store,
73-
currentTheme: store.currentTheme + 1,
72+
// ...store,
73+
currentTheme: (store.currentTheme || 0) + 1,
7474
})),
7575
indDec: global(store => ({
76-
...store,
77-
currentTheme: store.currentTheme - 1,
76+
// ...store,
77+
currentTheme: (store.currentTheme || 0) - 1,
7878
})),
7979
update: global(),
8080
comment: local(store => ({

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"@storybook/addons": "^5.3.18",
2626
"@storybook/core-events": "^5.3.18",
2727
"@storybook/theming": "^5.3.18",
28+
"deep-equal": "^2.0.2",
2829
"prop-types": "^15.6.2"
2930
},
3031
"devDependencies": {

src/ChannelStore.js

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import addons from '@storybook/addons';
2+
import deepEqual from 'deep-equal';
23

34
const GLOBAL = 'global';
45

@@ -26,7 +27,6 @@ export default class ChannelStore {
2627
};
2728
}
2829

29-
3030
selectorId = null;
3131

3232
subscriber = () => {};
@@ -65,16 +65,46 @@ export default class ChannelStore {
6565
const { data, id } = initData;
6666
const selectorId = id || GLOBAL;
6767
const selectedData = { ...(this.store[selectorId] || {}) };
68-
selectedData.init = data;
6968
/**
7069
* Previous behavior didn't reset state on init event
7170
* it caused that we didn't see changes after
7271
* updating story parameters
7372
* So i'm removing this, but if we need to make it optional
7473
* this is how to revert it:
75-
* electedData.over = selectedData.over || {};
74+
* selectedData.over = selectedData.over || {};
75+
*
76+
* Update:
77+
* Now we check if coming initial data the same as we already have in the store
78+
* this allow us to not reset changes while switching stories
79+
*
80+
* it works if stories don't contain parameters or changing data any other way
81+
*
82+
* Additional it's better if actions don't return whole store
83+
* compare:
84+
*
85+
* // right way:
86+
* store => ({
87+
* currentTheme: store.currentTheme + 1,
88+
* })
89+
*
90+
* vs
91+
*
92+
* // wrong way:
93+
* store => ({
94+
* ...store, // this cause an overriding of whole store
95+
* currentTheme: store.currentTheme + 1,
96+
* })
97+
*
98+
* the better solution would be to granularly commit updates and store only changed values
99+
*
76100
*/
77-
selectedData.over = {};
101+
if (deepEqual(selectedData.init, data)) {
102+
selectedData.over = selectedData.over || {};
103+
} else {
104+
selectedData.init = data;
105+
selectedData.over = {};
106+
}
107+
78108
this.store[selectorId] = selectedData;
79109
this.selectorId = selectorId;
80110
this.subscriber();
@@ -169,6 +199,6 @@ export const getSingleStore = (...args) => {
169199
return singleStore;
170200
};
171201

172-
export const getNewStore = (...args) => {
202+
export const getNewStore = (...args) => {
173203
return new ChannelStore(...args);
174-
};
204+
};

0 commit comments

Comments
 (0)