UNPKG

react95-native

Version:

Refreshed Windows 95 style UI components for your React Native app

104 lines (83 loc) 3.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _reactNative = require("react-native"); var _ = require("../.."); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 chevronIconSize = 20; // TODO: performance improvements (callbacks, refs ...etc) const ScrollView = ({ children, scrollViewProps = {}, style, ...rest }) => { const [contentOffset, setContentOffset] = _react.default.useState(0); const [contentSize, setContentSize] = _react.default.useState(0); const [scrollViewSize, setScrollViewSize] = _react.default.useState(0); // TODO: that's a naive approach. if it causes problems // trigger a callback when last child becomes fully visible const lastElementVisible = contentOffset + scrollViewSize < contentSize - chevronIconSize; const handleScroll = e => { var _scrollViewProps$onSc; (_scrollViewProps$onSc = scrollViewProps.onScroll) === null || _scrollViewProps$onSc === void 0 ? void 0 : _scrollViewProps$onSc.call(scrollViewProps, e); setContentOffset(e.nativeEvent.contentOffset.x); }; const handleContentSizeChange = (width, height) => { var _scrollViewProps$onCo; (_scrollViewProps$onCo = scrollViewProps.onContentSizeChange) === null || _scrollViewProps$onCo === void 0 ? void 0 : _scrollViewProps$onCo.call(scrollViewProps, width, height); setContentSize(width); }; const handleLayout = e => { var _scrollViewProps$onLa; (_scrollViewProps$onLa = scrollViewProps.onLayout) === null || _scrollViewProps$onLa === void 0 ? void 0 : _scrollViewProps$onLa.call(scrollViewProps, e); setScrollViewSize(e.nativeEvent.layout.width); }; return /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({ style: [styles.wrapper, { flexDirection: 'row' }, style] }, rest), /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: [styles.content] }, /*#__PURE__*/_react.default.createElement(_reactNative.ScrollView, _extends({}, scrollViewProps, { showsHorizontalScrollIndicator: false, scrollEventThrottle: 100, onScroll: handleScroll, onContentSizeChange: handleContentSizeChange, onLayout: handleLayout, horizontal: true }), children)), /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: styles.chevronIcon }, lastElementVisible && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_.ChevronIcon, { segments: 3, direction: "right", style: { marginRight: 1 } }), /*#__PURE__*/_react.default.createElement(_.ChevronIcon, { segments: 3, direction: "right" })))); }; const styles = _reactNative.StyleSheet.create({ wrapper: { display: 'flex', position: 'relative' }, content: { flexGrow: 1, flexShrink: 1 }, chevronIcon: { justifyContent: 'center', flexDirection: 'row', alignSelf: 'flex-start', width: chevronIconSize } }); var _default = ScrollView; exports.default = _default; //# sourceMappingURL=Toolbar.js.map