UNPKG

saagie-ui

Version:

Saagie UI from Saagie Design System

68 lines (59 loc) 1.44 kB
import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { Manager } from 'react-popper'; import classnames from 'classnames'; const propTypes = { children: PropTypes.node, /** * The component used for the root node. * Either a string to use a DOM element or a component. */ tag: PropTypes.elementType, className: PropTypes.string, onToggle: PropTypes.func, }; const defaultProps = { children: undefined, className: 'sui-o-dropdown__link', onToggle: undefined, tag: 'button', }; export const DropdownSubmenuContext = React.createContext({ handleToggle: () => {}, isOpen: false, }); export const useDropdownSubmenuContext = () => React.useContext(DropdownSubmenuContext); export const DropdownSubmenu = ({ className, onToggle, tag: Tag, ...attributes }) => { const [isOpen, setIsOpen] = useState(false); const classes = classnames( className, { 'as--open': isOpen, 'as--submenu': true, } ); const handleToggle = (e) => { setIsOpen((s) => !s); if (onToggle) { onToggle(e); } }; return ( <DropdownSubmenuContext.Provider value={{ handleToggle, isOpen, }} > <Manager isSubmenu> <Tag isSubmenu {...attributes} className={classes} /> </Manager> </DropdownSubmenuContext.Provider> ); }; DropdownSubmenu.propTypes = propTypes; DropdownSubmenu.defaultProps = defaultProps;