react95-native
Version:
Refreshed Windows 95 style UI components for your React Native app
86 lines (74 loc) • 3.14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getSelectOptions;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _theming = require("../../core/theming");
var _styles = require("../../styles/styles");
var _ = require("../..");
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; }
const SelectItem = ({
isSelected,
onPress,
option,
theme
}) => {
const [isPressed, setIsPressed] = (0, _react.useState)(false);
return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableHighlight, {
onPress: () => onPress(option),
onHideUnderlay: () => setIsPressed(false),
onShowUnderlay: () => setIsPressed(true),
underlayColor: "none" // delay to prevent item highlighting on scroll
,
delayPressIn: 70,
activeOpacity: 1
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: [styles.center, styles.optionWrapper, {
borderColor: isPressed ? theme.focusSecondary : 'transparent',
backgroundColor: isPressed || isSelected ? theme.hoverBackground : theme.canvas
}]
}, /*#__PURE__*/_react.default.createElement(_.Text, {
style: [styles.optionText, {
color: isPressed || isSelected ? theme.canvasTextInvert : theme.canvasText
}]
}, option.label)));
};
const SelectItemWithTheme = (0, _theming.withTheme)(SelectItem);
const selectHeight = _styles.blockSizes.md + 2;
const styles = _reactNative.StyleSheet.create({
center: {
flexGrow: 1,
flex: 1,
height: '100%',
justifyContent: 'center'
},
optionWrapper: {
height: selectHeight - 4,
borderWidth: 2,
borderStyle: 'dotted'
},
optionText: {
fontSize: 16,
paddingLeft: 6
}
});
function getSelectOptions({
options,
values,
onChange,
theme
}) {
const selectedOptions = options.filter(option => values.includes(option.value));
const optionItems = options.map(option => /*#__PURE__*/_react.default.createElement(SelectItemWithTheme, {
theme: theme,
key: option.value,
option: option,
isSelected: selectedOptions.includes(option),
onPress: onChange
}));
return [selectedOptions, optionItems];
}
//# sourceMappingURL=SelectBase.js.map