UNPKG

react-toggleable-context

Version:
104 lines (89 loc) 3.75 kB
# react-toggleable-context React components to make anything to be toggleable ## [Demo](https://codesandbox.io/s/7mlqvn0370) ## Installation `npm i react-toggleable-context` `yarn add react-toggleable-context` ## Usage ```jsx import ToggleGroup, { useToggleable } from 'react-toggleable-context'; function FirstComponent() { const { toggled, handleClick } = useToggleable('first'); return ( <div id={'first'}> <a id={'link'} onClick={handleClick}> Header </a> <div id={'section-body'} data-toggled={toggled ? 'true' : 'false'}> lorem </div> </div> ); } function SecondComponent() { const { toggled, handleClick } = useToggleable('second'); return ( <div id={'second'}> <a id={'link'} onClick={handleClick}> Header </a> <div id={'section-body'} data-toggled={toggled ? 'true' : 'false'}> lorem </div> </div> ); } function MyComponent(props) { return ( <ToggleGroup> <FirstComponent /> <SecondComponent /> </ToggleGroup> ); } ``` ```jsx import ToggleGroup from 'react-toggleable-context'; function MyComponent(props) { return ( <ToggleGroup> <ToggleGroup.Section id={'first'}> {({ handleClick, toggled }) => ( <> <a id={'link'} onClick={handleClick}> Header </a> <div id={'section-body'} expanded={toggled ? 'true' : 'false'}> lorem </div>) </> )} </ToggleGroup.Section> <ToggleGroup.Section id={'second'}> {({ handleClick, toggled }) => ( <> <a id={'link'} onClick={handleClick}> Header </a> <div id={'section-body'} expanded={toggled ? 'true' : 'false'}> lorem </div>) </> )} </ToggleGroup.Section> </ToggleGroup> ); } ``` the `ToggleGroup` component provides the context and `ToggleGroup.Section` gives you the `handleClick` and `toggled` renderprops. The section must have an unique id inorder to be toggled. ### ToggleGroup | Prop | Type | Description | | -------------- | ----- | --------------------------------------------------------------------------------- | | collapse | bool | if set, all other expanded sections will collapse when another section is pressed | | initialToggled | array | if given a list of ids those sections will have expanded true on initial render | ### ToggleGroup.Section | Prop | Type | Description | required | | -------- | ------ | ------------------------------------------------------------------------------------------------------------------- | -------- | | id | string | must be unique | true | | children | fn | gives you 4 render props, handleClick, and toggled, the handleClick is bound to the section, handleOpen,handleClose | true | | | | | |