UNPKG

@geezee/react-ui

Version:

Modern and minimalist React UI library.

75 lines (65 loc) 2.92 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _JSXStyle from "styled-jsx/style"; import React, { useMemo } from 'react'; import withDefaults from '../utils/with-defaults'; import useTheme from '../styles/use-theme'; import { CollapseContext } from './collapse-context'; import useCurrentState from '../utils/use-current-state'; import { setChildrenIndex } from '../utils/collections'; import Collapse from './collapse'; var defaultProps = { accordion: true, className: '' }; var CollapseGroup = function CollapseGroup(_ref) { var children = _ref.children, accordion = _ref.accordion, className = _ref.className, props = _objectWithoutProperties(_ref, ["children", "accordion", "className"]); var theme = useTheme(); var _useCurrentState = useCurrentState([]), _useCurrentState2 = _slicedToArray(_useCurrentState, 3), state = _useCurrentState2[0], setState = _useCurrentState2[1], stateRef = _useCurrentState2[2]; var updateValues = function updateValues(currentIndex, nextState) { var hasChild = stateRef.current.find(function (val) { return val === currentIndex; }); if (accordion) { if (nextState) return setState([currentIndex]); return setState([]); } if (nextState) { // In a few cases, the user will set Collapse Component state manually. // If the user incorrectly set the state, Group component should ignore it. /* istanbul ignore if */ if (hasChild) return; return setState([].concat(_toConsumableArray(stateRef.current), [currentIndex])); } setState(stateRef.current.filter(function (item) { return item !== currentIndex; })); }; var initialValue = useMemo(function () { return { values: state, updateValues: updateValues }; }, [state.join(',')]); var hasIndexChildren = useMemo(function () { return setChildrenIndex(children, [Collapse]); }, [children]); return /*#__PURE__*/React.createElement(CollapseContext.Provider, { value: initialValue }, /*#__PURE__*/React.createElement("div", _extends({}, props, { className: _JSXStyle.dynamic([["846585142", [theme.layout.gapHalf]]]) + " " + (props && props.className != null && props.className || "collapse-group ".concat(className)) }), hasIndexChildren, /*#__PURE__*/React.createElement(_JSXStyle, { id: "846585142", dynamic: [theme.layout.gapHalf] }, ".collapse-group.__jsx-style-dynamic-selector{width:auto;padding:0 ".concat(theme.layout.gapHalf, ";}.collapse-group.__jsx-style-dynamic-selector>div + div{border-top:none;}")))); }; export default withDefaults(CollapseGroup, defaultProps);