maisonsport-common-ui
Version:
Suite of styled-components to be consumed by the React-Native App and by the Web (via React-Native for Web)
114 lines (97 loc) • 4.55 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.nestedHeaderBarcontainer = exports.headerBarContainer = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _native = require("styled-components/native");
var _theme = _interopRequireDefault(require("../../theme"));
var _Box = _interopRequireDefault(require("../../atoms/Box"));
var _Text = _interopRequireDefault(require("../../atoms/Text"));
var _Touchable = _interopRequireDefault(require("../../atoms/Touchable"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
const headerBarContainer = 'header-bar-container';
exports.headerBarContainer = headerBarContainer;
const nestedHeaderBarcontainer = 'nested-header-bar-container';
exports.nestedHeaderBarcontainer = nestedHeaderBarcontainer;
function Accordion({
title = '',
titleProps = {},
image = null,
onOpen = () => {},
onClose = () => {},
openByDefault = false,
nested = false,
children
}) {
const [isOpen, setIsOpen] = (0, _react.useState)(openByDefault);
const [chevronPos] = (0, _react.useState)(new _reactNative.Animated.Value(0));
(0, _react.useEffect)(() => {
_reactNative.Animated.timing(chevronPos, {
toValue: isOpen ? 1 : 0,
duration: 300,
useNativeDriver: true
}).start();
}, [isOpen]);
function handleToggle() {
if (isOpen) onClose();else onOpen();
setIsOpen(open => !open);
}
const chevronAngle = chevronPos.interpolate({
inputRange: [0, 1],
outputRange: ['90deg', '-90deg']
});
return /*#__PURE__*/_react.default.createElement(_native.ThemeProvider, {
theme: _theme.default
}, /*#__PURE__*/_react.default.createElement(_Box.default, {
noWrapTheme: true
}, /*#__PURE__*/_react.default.createElement(_Touchable.default, {
testID: nested ? nestedHeaderBarcontainer : headerBarContainer,
noWrapTheme: true,
onPress: handleToggle,
width: 1,
paddingX: 3
}, /*#__PURE__*/_react.default.createElement(_Box.default, {
noWrapTheme: true,
paddingY: 3,
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between"
}, image && image, /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
noWrapTheme: true,
touchable: false,
alignSelf: "flex-start",
textAlign: "left",
padding: 0,
flex: 0.8,
fontWeight: isOpen ? 'bold' : 'medium'
}, titleProps), title), /*#__PURE__*/_react.default.createElement(_reactNative.Animated.Image, {
source: require('../../assets/images/chevron.png'),
style: {
width: 12,
height: 12,
marginRight: nested ? _theme.default.space[3] : _theme.default.space[1],
transform: [{
rotate: chevronAngle
}]
}
}))), isOpen && /*#__PURE__*/_react.default.createElement(_Box.default, {
noWrapTheme: true,
width: 1,
height: "auto",
paddingX: nested ? 3 : 0,
paddingBottom: 3
}, children), !isOpen && /*#__PURE__*/_react.default.createElement(_Box.default, {
noWrapTheme: true,
width: 1,
height: 0.9,
backgroundColor: "grey"
})));
}
var _default = Accordion;
exports.default = _default;
//# sourceMappingURL=index.js.map