UNPKG

@uiw/react-native

Version:
142 lines (120 loc) 17.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _Flex = _interopRequireDefault(require("../Flex")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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 MaybeTextOrView({ children, ...otherProps }) { if (typeof children === 'string' || children && children.type.displayName === 'Text') { return <_reactNative.Text {...otherProps}>{children}</_reactNative.Text>; } return <_reactNative.View {...otherProps}>{children}</_reactNative.View>; } const styles = _reactNative.StyleSheet.create({ defalut: { backgroundColor: '#fff' }, touchWarpper: { flex: 1, width: '100%', alignItems: 'center', justifyContent: 'center' } }); class Grid extends _react.Component { render() { const { style, data, iconStyle, textStyle, itemStyle, renderItem, hasLine, columns = 4, onPress, ...otherProps } = this.props; if (!Array.isArray(data)) { return null; } const childs = []; let childItem = []; data.forEach((item, idx) => { if (idx !== 0 && idx % columns === 0) { childs.push(childItem); childItem = []; } let icon = null; if (_react.default.isValidElement(item.icon)) { icon = item.icon; } else if (item.icon) { icon = <_reactNative.Image style={[{ width: 36, height: 36 }, _reactNative.StyleSheet.flatten(iconStyle)]} source={typeof item.icon === 'number' ? item.icon : { uri: item.icon }} />; } if (renderItem && typeof renderItem === 'function') { childItem.push(renderItem(item, idx, parseInt((idx / columns).toString(), 10) + 1)); } else { const itemContent = <_react.Fragment> {icon && <MaybeTextOrView style={iconStyle}>{icon}</MaybeTextOrView>} <MaybeTextOrView style={[{ marginTop: 9, fontSize: 12 }, textStyle]}>{item.text}</MaybeTextOrView> </_react.Fragment>; childItem.push(<_Flex.default direction="column" align="center" justify="center" style={[{ height: 120 }, _reactNative.StyleSheet.flatten(itemStyle), { width: `${100 / columns}%` }]}> {onPress ? <_reactNative.TouchableOpacity style={styles.touchWarpper} onPress={onPress.bind(this, item, idx, parseInt((idx / columns).toString(), 10) + 1)}> {itemContent} </_reactNative.TouchableOpacity> : itemContent} </_Flex.default>); } if (idx === data.length - 1) { childs.push(childItem); } }); return <_reactNative.View style={[styles.defalut, style]} {...otherProps}> {childs.map((rowitem, rowidx) => <_Flex.default justify="start" key={rowidx}> {rowitem.map((item, idx) => { if (!_react.default.isValidElement(item)) { return null; } const itemBorderStyle = {}; if (hasLine) { const hairLineWidth = _reactNative.StyleSheet.hairlineWidth; itemBorderStyle.borderBottomWidth = childs.length - 1 === rowidx ? 0 : hairLineWidth; itemBorderStyle.borderRightWidth = rowitem.length - 1 === idx && rowitem.length === columns ? 0 : hairLineWidth; itemBorderStyle.borderBottomColor = '#ddd'; itemBorderStyle.borderRightColor = '#ddd'; } return _react.default.cloneElement(item, { key: idx, style: [itemBorderStyle, item.props.style] }); })} </_Flex.default>)} </_reactNative.View>; } } exports.default = Grid; Grid.defaultProps = { data: [], hasLine: true }; module.exports = exports.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmlkL2luZGV4LnRzeCJdLCJuYW1lcyI6WyJNYXliZVRleHRPclZpZXciLCJjaGlsZHJlbiIsIm90aGVyUHJvcHMiLCJ0eXBlIiwiZGlzcGxheU5hbWUiLCJzdHlsZXMiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiZGVmYWx1dCIsImJhY2tncm91bmRDb2xvciIsInRvdWNoV2FycHBlciIsImZsZXgiLCJ3aWR0aCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIkdyaWQiLCJDb21wb25lbnQiLCJyZW5kZXIiLCJzdHlsZSIsImRhdGEiLCJpY29uU3R5bGUiLCJ0ZXh0U3R5bGUiLCJpdGVtU3R5bGUiLCJyZW5kZXJJdGVtIiwiaGFzTGluZSIsImNvbHVtbnMiLCJvblByZXNzIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZHMiLCJjaGlsZEl0ZW0iLCJmb3JFYWNoIiwiaXRlbSIsImlkeCIsInB1c2giLCJpY29uIiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhlaWdodCIsImZsYXR0ZW4iLCJ1cmkiLCJwYXJzZUludCIsInRvU3RyaW5nIiwiaXRlbUNvbnRlbnQiLCJtYXJnaW5Ub3AiLCJmb250U2l6ZSIsInRleHQiLCJiaW5kIiwibGVuZ3RoIiwibWFwIiwicm93aXRlbSIsInJvd2lkeCIsIml0ZW1Cb3JkZXJTdHlsZSIsImhhaXJMaW5lV2lkdGgiLCJoYWlybGluZVdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiY2xvbmVFbGVtZW50Iiwia2V5IiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBY0E7Ozs7Ozs7O0FBTUEsU0FBU0EsZUFBVCxDQUF5QjtBQUFFQyxFQUFBQSxRQUFGO0FBQVksS0FBR0M7QUFBZixDQUF6QixFQUFvRztBQUNsRyxNQUFJLE9BQU9ELFFB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RCxFQUFrQnBCLElBQUksQ0FBQ04sS0FBTCxDQUFXVCxLQUE3QjtBQUY2QyxXQUEvQyxDQUFQO0FBSUQsU0FqQkEsQ0FBRDtBQWtCWixVQUFVLGdCQXBCRCxDQUFEO0FBc0JSLE1BQU0sb0JBeEJGO0FBMEJEOztBQWxHb0Q7OztBQUFsQ0gsSSxDQUNaK0MsWSxHQUEwQjtBQUMvQjNDLEVBQUFBLElBQUksRUFBRSxFQUR5QjtBQUUvQkssRUFBQUEsT0FBTyxFQUFFO0FBRnNCLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIFZpZXcsXG4gIFZpZXdQcm9wcyxcbiAgVmlld1N0eWxlLFxuICBUZXh0LFxuICBUZXh0U3R5bGUsXG4gIFN0eWxlUHJvcCxcbiAgSW1hZ2UsXG4gIEltYWdlU3R5bGUsXG4gIFRleHRQcm9wcyxcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgR2VzdHVyZVJlc3BvbmRlckV2ZW50LFxuICBTdHlsZVNoZWV0LFxufSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuaW1wb3J0IEZsZXggZnJvbSAnLi4vRmxleCc7XG5cbmludGVyZmFjZSBNYXliZVRleHRPclZpZXdQcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5mdW5jdGlvbiBNYXliZVRleHRPclZpZXcoeyBjaGlsZHJlbiwgLi4ub3RoZXJQcm9wcyB9OiBNYXliZVRleHRPclZpZXdQcm9wcyAmIFRleHRQcm9wcyAmIFZpZXdQcm9wcykge1xuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCAoY2hpbGRyZW4gJiYgKGNoaWxkcmVuIGFzIGFueSkudHlwZS5kaXNwbGF5TmFtZSA9PT0gJ1RleHQnKSkge1xuICAgIHJldHVybiA8VGV4dCB7Li4ub3RoZXJQcm9wc30+e2NoaWxkcmVufTwvVGV4dD47XG4gIH1cbiAgcmV0dXJuIDxWaWV3IHsuLi5vdGhlclByb3BzfT57Y2hpbGRyZW59PC9WaWV3Pjtcbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBkZWZhbHV0OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gIH0sXG4gIHRvdWNoV2FycHBlcjoge1xuICAgIGZsZXg6IDEsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH0sXG59KTtcblxuaW50ZXJmYWNlIEl0ZW1EYXRhIHtcbiAgaWNvbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGV4dD86IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkUHJvcHMgZXh0ZW5kcyBWaWV3UHJvcHMge1xuICBkYXRhPzogSXRlbURhdGFbXTtcbiAgY29sdW1ucz86IG51bWJlcjtcbiAgaGFzTGluZT86IGJvb2xlYW47XG4gIGl0ZW1TdHlsZT86IFN0eWxlUHJvcDxWaWV3U3R5bGU+O1xuICB0ZXh0U3R5bGU/OiBTdHlsZVByb3A8VGV4dFN0eWxlICYgVmlld1N0eWxlPjtcbiAgaWNvblN0eWxlPzogU3R5bGVQcm9wPEltYWdlU3R5bGUgJiBUZXh0U3R5bGUgJiBWaWV3U3R5bGU+O1xuICByZW5kZXJJdGVtPzogKGRhdGE6IEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyLCByb3c6IG51bWJlcikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBvblByZXNzPzogKGRhdGE6IEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyLCByb3c6IG51bWJlciwgZXZlbnQ6IEdlc3R1cmVSZXNwb25kZXJFdmVudCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JpZCBleHRlbmRzIENvbXBvbmVudDxHcmlkUHJvcHM+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wczogR3JpZFByb3BzID0ge1xuICAgIGRhdGE6IFtdLFxuICAgIGhhc0xpbmU6IHRydWUsXG4gIH07XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdHlsZSxcbiAgICAgIGRhdGEsXG4gICAgICBpY29uU3R5bGUsXG4gICAgICB0ZXh0U3R5bGUsXG4gICAgICBpdGVtU3R5bGUsXG4gICAgICByZW5kZXJJdGVtLFxuICAgICAgaGFzTGluZSxcbiAgICAgIGNvbHVtbnMgPSA0LFxuICAgICAgb25QcmVzcyxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHM6IFJlYWN0LlJlYWN0Tm9kZVtdW10gPSBbXTtcbiAgICBsZXQgY2hpbGRJdGVtOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4ICE9PSAwICYmIGlkeCAlIGNvbHVtbnMgPT09IDApIHtcbiAgICAgICAgY2hpbGRzLnB1c2goY2hpbGRJdGVtKTtcbiAgICAgICAgY2hpbGRJdGVtID0gW107XG4gICAgICB9XG4gICAgICBsZXQgaWNvbiA9IG51bGw7XG4gICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoaXRlbS5pY29uKSkge1xuICAgICAgICBpY29uID0gaXRlbS5pY29uO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgaWNvbiA9IChcbiAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgIHN0eWxlPXtbeyB3aWR0aDogMzYsIGhlaWdodDogMzYgfSwgU3R5bGVTaGVldC5mbGF0dGVuKGljb25TdHlsZSldfVxuICAgICAgICAgICAgc291cmNlPXt0eXBlb2YgaXRlbS5pY29uID09PSAnbnVtYmVyJyA/IGl0ZW0uaWNvbiA6IHsgdXJpOiBpdGVtLmljb24gYXMgc3RyaW5nIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZW5kZXJJdGVtICYmIHR5cGVvZiByZW5kZXJJdGVtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoaWxkSXRlbSEucHVzaChyZW5kZXJJdGVtKGl0ZW0sIGlkeCwgcGFyc2VJbnQoKGlkeCAvIGNvbHVtbnMpLnRvU3RyaW5nKCksIDEwKSArIDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZW1Db250ZW50ID0gKFxuICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIHtpY29uICYmIDxNYXliZVRleHRPclZpZXcgc3R5bGU9e2ljb25TdHlsZX0+e2ljb259PC9NYXliZVRleHRPclZpZXc+fVxuICAgICAgICAgICAgPE1heWJlVGV4dE9yVmlldyBzdHlsZT17W3sgbWFyZ2luVG9wOiA5LCBmb250U2l6ZTogMTIgfSwgdGV4dFN0eWxlXX0+e2l0ZW0udGV4dH08L01heWJlVGV4dE9yVmlldz5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApO1xuICAgICAgICBjaGlsZEl0ZW0hLnB1c2goXG4gICAgICAgICAgPEZsZXhcbiAgICAgICAgICAgIGRpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICBhbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgICBqdXN0aWZ5PVwiY2VudGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXtbeyBoZWlnaHQ6IDEyMCB9LCBTdHlsZVNoZWV0LmZsYXR0ZW4oaXRlbVN0eWxlKSwgeyB3aWR0aDogYCR7MTAwIC8gY29sdW1uc30lYCB9XX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b25QcmVzcyA/IChcbiAgICAgICAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnRvdWNoV2FycHBlcn1cbiAgICAgICAgICAgICAgICBvblByZXNzPXtvblByZXNzLmJpbmQodGhpcywgaXRlbSwgaWR4LCBwYXJzZUludCgoaWR4IC8gY29sdW1ucykudG9TdHJpbmcoKSwgMTApICsgMSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7aXRlbUNvbnRlbnR9XG4gICAgICAgICAgICAgIDwvVG91Y2hhYmxlT3BhY2l0eT5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIGl0ZW1Db250ZW50XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRmxleD4sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaWR4ID09PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY2hpbGRzLnB1c2goY2hpbGRJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e1tzdHlsZXMuZGVmYWx1dCwgc3R5bGVdfSB7Li4ub3RoZXJQcm9wc30+XG4gICAgICAgIHtjaGlsZHMubWFwKChyb3dpdGVtLCByb3dpZHgpID0+IChcbiAgICAgICAgICA8RmxleCBqdXN0aWZ5PVwic3RhcnRcIiBrZXk9e3Jvd2lkeH0+XG4gICAgICAgICAgICB7cm93aXRlbS5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgaXRlbUJvcmRlclN0eWxlOiBWaWV3UHJvcHNbJ3N0eWxlJ10gPSB7fTtcbiAgICAgICAgICAgICAgaWYgKGhhc0xpbmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYWlyTGluZVdpZHRoID0gU3R5bGVTaGVldC5oYWlybGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGl0ZW1Cb3JkZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCA9IGNoaWxkcy5sZW5ndGggLSAxID09PSByb3dpZHggPyAwIDogaGFpckxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBpdGVtQm9yZGVyU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCA9XG4gICAgICAgICAgICAgICAgICByb3dpdGVtLmxlbmd0aCAtIDEgPT09IGlkeCAmJiByb3dpdGVtLmxlbmd0aCA9PT0gY29sdW1ucyA/IDAgOiBoYWlyTGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGl0ZW1Cb3JkZXJTdHlsZS5ib3JkZXJCb3R0b21Db2xvciA9ICcjZGRkJztcbiAgICAgICAgICAgICAgICBpdGVtQm9yZGVyU3R5bGUuYm9yZGVyUmlnaHRDb2xvciA9ICcjZGRkJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGl0ZW0gYXMgUmVhY3QuUmVhY3RFbGVtZW50LCB7XG4gICAgICAgICAgICAgICAga2V5OiBpZHgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IFtpdGVtQm9yZGVyU3R5bGUsIGl0ZW0ucHJvcHMuc3R5bGVdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvRmxleD5cbiAgICAgICAgKSl9XG4gICAgICA8L1ZpZXc+XG4gICAgKTtcbiAgfVxufVxuIl19