88 lines
2.4 KiB
JavaScript
Raw Normal View History

2020-02-27 14:50:20 +11:00
import React, { useState } from 'react';
2019-12-05 12:39:26 -05:00
import { PropTypes } from 'prop-types';
import { Button } from '@storybook/react/demo';
import { addons } from '@storybook/addons';
2020-07-02 12:00:46 +08:00
import { useAddonState, useGlobals } from '@storybook/api';
import { themes } from '@storybook/theming';
2019-12-05 12:39:26 -05:00
import { AddonPanel } from '@storybook/components';
2020-01-27 17:37:07 +01:00
import logo from './logo.svg';
addons.setConfig({
2020-01-27 17:37:07 +01:00
theme: {
brandImage: logo,
brandTitle: 'Custom - Storybook',
...themes.dark,
appContentBg: 'white',
2020-01-27 17:37:07 +01:00
},
panelPosition: 'bottom',
selectedPanel: 'storybook/roundtrip',
});
2019-12-05 12:39:26 -05:00
const StatePanel = ({ active, key }) => {
const [managerState, setManagerState] = useAddonState('manager', 10);
2019-12-06 13:59:37 -05:00
const [previewState, setPreviewState] = useAddonState('preview');
2019-12-05 12:39:26 -05:00
return (
<AddonPanel key={key} active={active}>
<div>
Manager counter: {managerState}
<br />
<Button onClick={() => setManagerState(managerState - 1)}>decrement</Button>
<Button onClick={() => setManagerState(managerState + 1)}>increment</Button>
</div>
2019-12-05 12:39:26 -05:00
<br />
<div>
Preview counter: {previewState}
<br />
<Button onClick={() => previewState && setPreviewState(previewState - 1)}>decrement</Button>
<Button onClick={() => previewState && setPreviewState(previewState + 1)}>increment</Button>
</div>
2019-12-05 12:39:26 -05:00
</AddonPanel>
);
};
StatePanel.propTypes = {
active: PropTypes.bool.isRequired,
key: PropTypes.string.isRequired,
};
addons.addPanel('useAddonState', {
id: 'useAddonState',
title: 'useAddonState',
render: StatePanel,
});
2020-02-27 14:50:20 +11:00
2020-07-02 12:00:46 +08:00
const GlobalsPanel = ({ active, key }) => {
const [globals, updateGlobals] = useGlobals();
const [globalsInput, updateGlobalsInput] = useState(JSON.stringify(globals));
2020-02-27 14:50:20 +11:00
return (
<AddonPanel key={key} active={active}>
<div>
<h2>Global Args</h2>
<form
2020-03-27 20:04:50 +01:00
onSubmit={(e) => {
2020-02-27 14:50:20 +11:00
e.preventDefault();
2020-07-02 12:00:46 +08:00
updateGlobals(JSON.parse(globalsInput));
2020-02-27 14:50:20 +11:00
}}
>
2020-07-02 12:00:46 +08:00
<textarea value={globalsInput} onChange={(e) => updateGlobalsInput(e.target.value)} />
2020-02-27 14:50:20 +11:00
<br />
<button type="submit">Change</button>
</form>
</div>
</AddonPanel>
);
};
2020-07-02 12:00:46 +08:00
GlobalsPanel.propTypes = {
2020-02-27 14:50:20 +11:00
active: PropTypes.bool.isRequired,
key: PropTypes.string.isRequired,
};
2020-07-02 12:00:46 +08:00
addons.addPanel('useGlobals', {
id: 'useGlobals',
title: 'useGlobals',
render: GlobalsPanel,
2020-02-27 14:50:20 +11:00
});