diff --git a/ui/components/ui/toggle-button/README.mdx b/ui/components/ui/toggle-button/README.mdx new file mode 100644 index 000000000..460f78ffb --- /dev/null +++ b/ui/components/ui/toggle-button/README.mdx @@ -0,0 +1,15 @@ +import { Story, Canvas, ArgsTable } from '@storybook/addon-docs'; + +import ToggleButton from '.'; + +# Toggle Button + +Button that toggles state on or off. Wraps react-toggle-button + + + + + +## Component API + + diff --git a/ui/components/ui/toggle-button/toggle-button.component.js b/ui/components/ui/toggle-button/toggle-button.component.js index ef28fec8a..271707cbe 100644 --- a/ui/components/ui/toggle-button/toggle-button.component.js +++ b/ui/components/ui/toggle-button/toggle-button.component.js @@ -87,11 +87,29 @@ const ToggleButton = (props) => { }; ToggleButton.propTypes = { + /** + * ToggleButton value + */ value: PropTypes.bool, + /** + * The onChange handler of the ToggleButton + */ onToggle: PropTypes.func, + /** + * Label text when toggle is off + */ offLabel: PropTypes.string, + /** + * Label text when toggle is on + */ onLabel: PropTypes.string, + /** + * Disables ToggleButton if true. Set to false as default + */ disabled: PropTypes.bool, + /** + * Additional className to add to the ToggleButton + */ className: PropTypes.string, }; diff --git a/ui/components/ui/toggle-button/toggle-button.stories.js b/ui/components/ui/toggle-button/toggle-button.stories.js index f2d96fcc5..9dea24bcb 100644 --- a/ui/components/ui/toggle-button/toggle-button.stories.js +++ b/ui/components/ui/toggle-button/toggle-button.stories.js @@ -1,30 +1,38 @@ -import React, { useState } from 'react'; -import { action } from '@storybook/addon-actions'; -import { boolean, text } from '@storybook/addon-knobs'; - +import React from 'react'; +import { useArgs } from '@storybook/client-api'; +import README from './README.mdx'; import ToggleButton from './toggle-button.component'; export default { title: 'Components/UI/ToggleButton', component: ToggleButton, id: __filename, + parameters: { + docs: { + page: README, + }, + }, + argTypes: { + value: { control: 'boolean' }, + onToggle: { action: 'onToggle' }, + offLabel: { control: 'text' }, + onLabel: { control: 'text' }, + disabled: { control: 'boolean' }, + }, }; -export const DefaultStory = () => { - const [checked, setChecked] = useState(false); - const handleOnToggle = (e) => { - action('onToggle')(e); - setChecked(!checked); +export const DefaultStory = (args) => { + const [{ value }, updateArgs] = useArgs(); + const handleOnToggle = () => { + updateArgs({ value: !value }); }; - return ( - - ); + return ; }; DefaultStory.storyName = 'Default'; +DefaultStory.args = { + value: false, + offLabel: 'off', + onLabel: 'on', + disabled: false, +};