UNPKG

monday-ui-react-core

Version:

Official monday.com UI resources for application development in React.js

67 lines (59 loc) 1.74 kB
import React, { useRef, useCallback, forwardRef } from "react"; import PropTypes from "prop-types"; import cx from "classnames"; import useMergeRefs from "../../../hooks/useMergeRefs"; import ExpandCollapse from "../../ExpandCollapse/ExpandCollapse"; const AccordionItem = forwardRef( ({ children, title, className, iconSize, id, open, onClick, onClickAccordionCallback }, ref) => { // Change onClick param name to onClickCallback in 1.0.0 const componentRef = useRef(null); const mergedRef = useMergeRefs({ refs: [ref, componentRef] }); const onClickCallback = useCallback(() => { onClickAccordionCallback && onClickAccordionCallback(); onClick && onClick(); }, [onClickAccordionCallback, onClick]); return ( <div ref={mergedRef} className={cx("accordion-item", className)} id={id}> <ExpandCollapse title={title} iconSize={iconSize} open={open} onClick={onClickCallback}> {children} </ExpandCollapse> </div> ); } ); AccordionItem.propTypes = { /** * custom style */ className: PropTypes.string, /** * id to be add to the wrapper */ id: PropTypes.string, /** * Header title */ title: PropTypes.string, /** * The value of the expandable section */ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]), /** * The expand icon font size */ iconSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), /** * On click callback */ onClick: PropTypes.func }; AccordionItem.isAccordionChild = true; AccordionItem.defaultProps = { className: "", id: undefined, iconSize: 24, title: "", onClick: undefined, children: null }; export default AccordionItem;