Skip to main content

Drawer

Drawer is a sliding panel that appears from the edge of the screen, used for navigation or to display additional content without navigating away from the current view. It can be opened and closed by any user interaction doe outside.

Demo​

Result
Loading...
Live Editor
//import {useToastState, Toast, ButtonGroup, Button} from 'koval-ui';

function Example(props) {
  const id = 'foo';

  const {isOpen, closeDrawer, openDrawer} = useDrawerState(id);

  const handleClick = useCallback(() => {
    isOpen ? closeDrawer() : openDrawer();
  }, [closeDrawer, isOpen, openDrawer]);

  return (
    <Fragment>
      <Button onClick={handleClick}>Toggle Drawer</Button>
      <Drawer id={id}>Drawer content.</Drawer>
    </Fragment>
  );
}

Props​

id​

type: string

Provide unique id for Drawer

placement​

type: 'left' | 'right'

Choose a side to attach Drawer

useDrawerState hook interface​

useDrawerState uses Koval Global Context, so it works anywhere in the application. Developers can put Drawer in the other component.

openDrawer​

Show a Drawer to the user.

const {openDrawer} = useDrawerState('foo');

const handleClick = useCallback(() => {
openDrawer();
}, [openDrawer]);

closeDrawer​

Hide Drawer.

const {closeDrawer} = useDrawerState('foo');

const handleClick = useCallback(() => {
closeDrawer();
}, [closeToast]);

Multiple Drawers​

Result
Loading...
Live Editor
//import {useToastState, Toast, ButtonGroup, Button} from 'koval-ui';

function Example(props) {
  const {
    isOpen: isOpenFoo,
    closeDrawer: closeDrawerFoo,
    openDrawer: openDrawerFoo,
  } = useDrawerState('foo');
  const {
    isOpen: isOpenBar,
    closeDrawer: closeDrawerBar,
    openDrawer: openDrawerBar,
  } = useDrawerState('bar');
  const handleClickFoo = useCallback(() => {
    isOpenFoo ? closeDrawerFoo() : openDrawerFoo();
  }, [closeDrawerFoo, isOpenFoo, openDrawerFoo]);
  const handleClickBar = useCallback(() => {
    isOpenBar ? closeDrawerBar() : openDrawerBar();
  }, [closeDrawerBar, isOpenBar, openDrawerBar]);

  return (
    <Fragment>
      <ButtonGroup>
        <Button onClick={handleClickFoo}>Toggle Drawer #1</Button>
        <Button onClick={handleClickBar}>Toggle Drawer #2</Button>
      </ButtonGroup>
      <Drawer id="foo" placement="left">
        <H2>Foo drawer</H2>
      </Drawer>
      <Drawer id="bar" placement="right">
        <H2>Bar drawer</H2>
      </Drawer>
    </Fragment>
  );
}