@kietpt2003/react-native-core-ui
Version:
React Native Core UI components by KietPT
20 lines (19 loc) • 1.15 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import React from 'react';
import { Pressable, View } from 'react-native';
import Animated, { FadeIn, FadeOut, LinearTransition, } from 'react-native-reanimated';
const Accordion = ({ header, children, expanded, defaultExpanded = false, onChange, style, disabled, }) => {
const isControlled = expanded !== undefined;
const [internalExpanded, setInternalExpanded] = React.useState(defaultExpanded);
const isExpanded = isControlled ? expanded : internalExpanded;
const toggle = React.useCallback(() => {
const next = !isExpanded;
if (!isControlled) {
setInternalExpanded(next);
}
onChange === null || onChange === void 0 ? void 0 : onChange(next);
}, [isExpanded, isControlled, onChange]);
return (_jsxs(View, { style: style, children: [_jsx(Pressable, { disabled: disabled, onPress: toggle, children: header }), isExpanded && (_jsx(Animated.View, { entering: FadeIn, exiting: FadeOut, layout: LinearTransition.springify(), children: children }))] }));
};
Accordion.displayName = 'Accordion';
export default Accordion;