UNPKG

nixa-react-native-accordion

Version:

React Native Accordion: Reanimated Collapsible Sections for React Native.

103 lines (102 loc) 5.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated")); var _MaterialCommunityIcons = _interopRequireDefault(require("react-native-vector-icons/MaterialCommunityIcons")); var _AccordionList = require("./AccordionList"); var _style = _interopRequireDefault(require("./style")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const AccordionItem = props => { const { index, header, children, title, subTitle, leftIcon } = props; const accordionContext = (0, _react.useContext)(_AccordionList.AccordionContext); const { compact, animationDuration, androidRipple } = accordionContext; const itemContainerStyle = props.itemContainerStyle || accordionContext.itemContainerStyle; const contentWrapperStyle = props.contentWrapperStyle || accordionContext.contentWrapperStyle; const contentContainerStyle = props.contentContainerStyle || accordionContext.contentContainerStyle; const headerStyle = props.headerStyle || accordionContext.headerStyle; const titleStyle = props.titleStyle || accordionContext.titleStyle; const subTitleStyle = props.subTitleStyle || accordionContext.subTitleStyle; const rightIcon = props.rightIcon || accordionContext.rightIcon || 'chevron-right'; const titleContainerStyle = props.titleContainerStyle || accordionContext.titleContainerStyle; const open = (0, _reactNativeReanimated.useSharedValue)(false); const height = (0, _reactNativeReanimated.useSharedValue)(0); const derivedHeight = (0, _reactNativeReanimated.useDerivedValue)(() => (0, _reactNativeReanimated.withTiming)(height.value * Number(open.value), { duration: animationDuration })); const baseWrapperStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({ height: derivedHeight.value })); const iconRotate = (0, _reactNativeReanimated.useSharedValue)('0deg'); const animatedIconStyles = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({ transform: [{ rotate: (0, _reactNativeReanimated.withSpring)(iconRotate.value) }] })); const onToggleCollapse = () => { open.value = !open.value; iconRotate.value = iconRotate.value === '90deg' ? '0deg' : '90deg'; }; const renderTitle = () => typeof title === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, { style: [_style.default.headerTitle, titleStyle], children: title }) : title; const renderSubTitle = () => subTitle && (typeof subTitle === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, { style: [_style.default.headerSubTitle, subTitleStyle], children: subTitle }) : subTitle); const renderHeader = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, { style: [_style.default.header, (!compact || compact && index === 0) && _style.default.noBorderTop, headerStyle], android_ripple: androidRipple, onPress: onToggleCollapse, children: header ?? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, { children: [leftIcon && (typeof leftIcon === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_MaterialCommunityIcons.default, { name: leftIcon, size: 26, color: '#000' }) : leftIcon), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { style: [_style.default.headerTitleContainer, titleContainerStyle], children: [renderTitle(), renderSubTitle()] }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, { style: [_style.default.headerIcon, animatedIconStyles], children: typeof rightIcon === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_MaterialCommunityIcons.default, { name: rightIcon, size: 26, color: '#000' }) : rightIcon })] }) }); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { style: [_style.default.accordionItem, !compact && _style.default.noCompactAccordionItem, itemContainerStyle], children: [renderHeader(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, { style: [baseWrapperStyle, contentWrapperStyle], children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { onLayout: e => { height.value = e.nativeEvent.layout.height; }, style: [_style.default.contentContainer, contentContainerStyle], children: children }) })] }); }; var _default = exports.default = AccordionItem; //# sourceMappingURL=AccordionItem.js.map