Skip to content

Commit

Permalink
Storybook: persist pane knob values in localstorage
Browse files Browse the repository at this point in the history
  • Loading branch information
sidke authored and josh-signal committed Aug 28, 2020
1 parent b9c5e7b commit c08914c
Showing 1 changed file with 33 additions and 19 deletions.
52 changes: 33 additions & 19 deletions .storybook/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,43 @@ const optionsConfig = {
display: 'inline-radio',
};

const persistKnob = id => knob => {
const value = knob(localStorage.getItem(id));
localStorage.setItem(id, value);
return value;
};

const makeThemeKnob = pane =>
optionsKnob(
`${pane} Pane Theme`,
{ Light: '', Dark: classnames('dark-theme', styles.darkTheme) },
'',
optionsConfig,
`${pane} Pane`
persistKnob(`${pane}-pane-theme`)(localValue =>
optionsKnob(
`${pane} Pane Theme`,
{ Light: '', Dark: classnames('dark-theme', styles.darkTheme) },
localValue || '',
optionsConfig,
`${pane} Pane`
)
);

const makeDeviceThemeKnob = pane =>
optionsKnob(
`${pane} Pane Device Theme`,
{ Android: '', iOS: 'ios-theme' },
'',
optionsConfig,
`${pane} Pane`
persistKnob(`${pane}-pane-device-theme`)(localValue =>
optionsKnob(
`${pane} Pane Device Theme`,
{ Android: '', iOS: 'ios-theme' },
localValue || '',
optionsConfig,
`${pane} Pane`
)
);

const makeModeKnob = pane =>
optionsKnob(
`${pane} Pane Mode`,
{ Mouse: 'mouse-mode', Keyboard: 'keyboard-mode' },
'mouse-mode',
optionsConfig,
`${pane} Pane`
persistKnob(`${pane}-pane-mode`)(localValue =>
optionsKnob(
`${pane} Pane Mode`,
{ Mouse: 'mouse-mode', Keyboard: 'keyboard-mode' },
localValue || 'mouse-mode',
optionsConfig,
`${pane} Pane`
)
);

addDecorator(withKnobs);
Expand All @@ -46,7 +58,9 @@ addDecorator((storyFn /* , context */) => {
const firstPaneDeviceTheme = makeDeviceThemeKnob('First');
const firstPaneMode = makeModeKnob('First');

const secondPane = boolean('Second Pane Active', false, 'Second Pane');
const secondPane = persistKnob('second-pane-active')(localValue =>
boolean('Second Pane Active', localValue !== 'false', 'Second Pane')
);

const secondPaneTheme = makeThemeKnob('Second');
const secondPaneDeviceTheme = makeDeviceThemeKnob('Second');
Expand Down

0 comments on commit c08914c

Please sign in to comment.