UNPKG

zmp-react

Version:

Build full featured iOS & Android apps using ZMP & React

87 lines (77 loc) 2.66 kB
import _extends from "@babel/runtime/helpers/extends"; import React, { forwardRef, useRef, useImperativeHandle } from 'react'; import { useIsomorphicLayoutEffect } from '../shared/use-isomorphic-layout-effect'; import { classNames, getExtraAttrs, emit } from '../shared/utils'; import { colorClasses } from '../shared/mixins'; import { zmp, zmpready } from '../shared/zmp'; var AccordionItem = /*#__PURE__*/forwardRef(function (props, ref) { var className = props.className, id = props.id, style = props.style, children = props.children, opened = props.opened; var elRef = useRef(null); useImperativeHandle(ref, function () { return { el: elRef.current }; }); var onBeforeOpen = function onBeforeOpen(el, prevent) { if (elRef.current !== el) return; emit(props, 'accordionBeforeOpen', prevent); }; var onOpen = function onOpen(el) { if (elRef.current !== el) return; emit(props, 'accordionOpen'); }; var onOpened = function onOpened(el) { if (elRef.current !== el) return; emit(props, 'accordionOpened'); }; var onBeforeClose = function onBeforeClose(el, prevent) { if (elRef.current !== el) return; emit(props, 'accordionBeforeClose', prevent); }; var onClose = function onClose(el) { if (elRef.current !== el) return; emit(props, 'accordionClose'); }; var onClosed = function onClosed(el) { if (elRef.current !== el) return; emit(props, 'accordionClosed'); }; var attachEvents = function attachEvents() { zmpready(function () { zmp.on('accordionBeforeOpen', onBeforeOpen); zmp.on('accordionOpen', onOpen); zmp.on('accordionOpened', onOpened); zmp.on('accordionBeforeClose', onBeforeClose); zmp.on('accordionClose', onClose); zmp.on('accordionClosed', onClosed); }); }; var detachEvents = function detachEvents() { zmp.off('accordionBeforeOpen', onBeforeOpen); zmp.off('accordionOpen', onOpen); zmp.off('accordionOpened', onOpened); zmp.off('accordionBeforeClose', onBeforeClose); zmp.off('accordionClose', onClose); zmp.off('accordionClosed', onClosed); }; useIsomorphicLayoutEffect(function () { attachEvents(); return detachEvents; }); var extraAttrs = getExtraAttrs(props); var classes = classNames(className, 'accordion-item', { 'accordion-item-opened': opened }, colorClasses(props)); return /*#__PURE__*/React.createElement("div", _extends({ id: id, style: style, className: classes, ref: elRef }, extraAttrs), children); }); AccordionItem.displayName = 'zmp-accordion-item'; export default AccordionItem;