UNPKG

@devrue/rn-select

Version:

Custom typescript only select component for react native

141 lines (139 loc) 6.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Anchor; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _useStyles = _interopRequireDefault(require("../hooks/useStyles")); var _ChevronDownIcon = _interopRequireDefault(require("../icons/ChevronDownIcon")); var _Selections = _interopRequireDefault(require("./Selections")); var _CloseIcon = _interopRequireDefault(require("../icons/CloseIcon")); var _debounce = _interopRequireDefault(require("lodash/debounce")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 && Object.prototype.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; } function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); } function Anchor({ placeholder, selected, multi = false, clearable, disabled, onRemove, onClear, onLayout, selectStyle, selectPlaceholderTextStyle, selectTextStyle, selectPillTextStyle, selectPillRemoveContainerStyle, selectPillRemoveIconStyle, selectIconStyle, ...rest }) { var _selected$; const styles = (0, _useStyles.default)(({ tokens, hairlineWidth }) => ({ anchorContainer: { height: tokens.size.xl + 4, paddingLeft: tokens.size.xs, borderColor: '#c5c5c5', borderWidth: hairlineWidth, borderRadius: tokens.size.xs, flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }, icon: { width: (selectIconStyle === null || selectIconStyle === void 0 ? void 0 : selectIconStyle.fontSize) ?? tokens.size.sm, height: (selectIconStyle === null || selectIconStyle === void 0 ? void 0 : selectIconStyle.fontSize) ?? tokens.size.sm, paddingHorizontal: tokens.size.sm - 4 }, iconContainer: { flexDirection: 'row', alignItems: 'center' }, fill: { flex: 1 }, placeholder: { color: '#808080' }, closeIconContainer: { height: tokens.size.xl + 4, justifyContent: 'center' }, disabled: { cursor: 'not-allowed', backgroundColor: 'white', opacity: 0.4, borderRadius: tokens.size.xs } }), [selectIconStyle, disabled]); const ref = (0, _react.useRef)(null); const onLayoutRef = (0, _react.useRef)(onLayout); (0, _react.useEffect)(() => { const updatePosition = () => { if (ref.current) { ref.current.measure((x, y, width, height, pageX, pageY) => { onLayoutRef.current({ x, y, width, height, left: pageX, top: pageY }); }); } }; const debouncedUpdate = (0, _debounce.default)(updatePosition, 16); const subscription = _reactNative.Dimensions.addEventListener('change', debouncedUpdate); // Track scroll events on web if (_reactNative.Platform.OS === 'web' && window) { window.addEventListener('scroll', debouncedUpdate, true); } updatePosition(); return () => { subscription.remove(); debouncedUpdate.cancel(); if (_reactNative.Platform.OS === 'web') { window.removeEventListener('scroll', debouncedUpdate, true); } }; }, []); return /*#__PURE__*/_react.default.createElement(_reactNative.Pressable, _extends({ ref: ref }, rest, { style: [styles.anchorContainer, selectStyle] }), selected.length === 0 && /*#__PURE__*/_react.default.createElement(_reactNative.Text, { style: [styles.placeholder, selectPlaceholderTextStyle, styles.fill], numberOfLines: 1 }, placeholder), selected.length === 1 && !multi && /*#__PURE__*/_react.default.createElement(_reactNative.Text, { style: [selectTextStyle, styles.fill], numberOfLines: 1 }, (_selected$ = selected[0]) === null || _selected$ === void 0 ? void 0 : _selected$[1]), selected.length > 0 && multi && /*#__PURE__*/_react.default.createElement(_Selections.default, { items: selected, onRemove: onRemove, pillTextStyle: selectPillTextStyle, pillRemoveContainerStyle: selectPillRemoveContainerStyle, pillRemoveIconStyle: selectPillRemoveIconStyle }), /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: styles.iconContainer }, selected.length > 0 && clearable && !disabled && /*#__PURE__*/_react.default.createElement(_reactNative.Pressable, { style: styles.closeIconContainer, onPress: onClear }, /*#__PURE__*/_react.default.createElement(_CloseIcon.default, { stroke: (selectIconStyle === null || selectIconStyle === void 0 ? void 0 : selectIconStyle.color) ?? '#c5c5c5', style: styles.icon })), /*#__PURE__*/_react.default.createElement(_ChevronDownIcon.default, { stroke: (selectIconStyle === null || selectIconStyle === void 0 ? void 0 : selectIconStyle.color) ?? '#c5c5c5', style: styles.icon })), disabled && /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: [_reactNative.StyleSheet.absoluteFill, styles.disabled] })); } //# sourceMappingURL=Anchor.js.map