UNPKG

tuya-panel-kit

Version:

a functional component library for developing tuya device panels!

162 lines (129 loc) 5.14 kB
Object.defineProperty(exports, "__esModule", { value: true }); var _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; }; var _jsxFileName = 'src/components/button-brick/index.js'; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _reactNative = require('react-native'); var _button = require('./button'); var _button2 = _interopRequireDefault(_button); var _utils = require('../../utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var getTheme = _utils.ThemeUtils.getTheme, ThemeConsumer = _utils.ThemeUtils.ThemeConsumer, parseToStyle = _utils.ThemeUtils.parseToStyle; var keysNeedToMerge = { wrapperStyle: { bgWidth: 'width', bgHeight: 'height', bgRadius: 'borderRadius', bgBorderWidth: 'borderWidth', bgBorder: 'borderColor', margin: 'margin', padding: 'padding', bgColor: 'backgroundColor' }, textStyle: { fontSize: 'fontSize', fontColor: 'color' } }; var ThemedBrickButton = function ThemedBrickButton(props) { var localTheme = props.theme, rest = _objectWithoutProperties(props, ['theme']); return _react2.default.createElement( ThemeConsumer, { __source: { fileName: _jsxFileName, lineNumber: 28 } }, function (globalTheme) { var theme = _extends({}, globalTheme, { brickButton: _extends({}, globalTheme.brickButton, localTheme) }); var propsWithTheme = _extends({ theme: theme }, rest); var type = propsWithTheme.type; var newGlobal = _extends({}, globalTheme.global); var brand = newGlobal.brand; var isBorderType = type === 'primaryBorder'; var themedProps = { wrapperStyle: { backgroundColor: isBorderType ? 'transparent' : brand, borderColor: isBorderType ? brand : 'transparent' }, textStyle: { color: isBorderType ? brand : '#fff' }, style: {}, loadingColor: getTheme(propsWithTheme, 'brickButton.loadingColor'), loadingBackground: getTheme(propsWithTheme, 'brickButton.loadingBackground') }; var keys = Object.keys(keysNeedToMerge); var keysFromThemeButton = keys.reduce(function (pre, cur) { return [].concat(_toConsumableArray(pre), _toConsumableArray(Object.keys(keysNeedToMerge[cur]))); }, []); keysFromThemeButton.forEach(function (key) { var path = 'brickButton.' + key; var _idx = keys.findIndex(function (it) { return key in keysNeedToMerge[it]; }); var result = getTheme(propsWithTheme, path); if (_idx !== -1 && result) { var indexer = keys[_idx]; var _target = themedProps[indexer]; var curKey = keysNeedToMerge[indexer][key]; if (['margin', 'padding'].includes(curKey)) { curKey === 'padding' && _extends(_target, parseToStyle(result, curKey)); curKey === 'margin' && _extends(themedProps, { style: parseToStyle(result, curKey) }); } else { _target[curKey] = result; } } }); if (isBorderType) { themedProps.wrapperStyle = _extends({}, themedProps.wrapperStyle, { backgroundColor: 'transparent', borderColor: brand }); themedProps.textStyle = _extends({}, themedProps.textStyle, { color: brand }); } return _react2.default.createElement(_button2.default, _extends({}, themedProps, rest, { __source: { fileName: _jsxFileName, lineNumber: 86 } })); } ); }; ThemedBrickButton.propTypes = _extends({}, _button2.default.propTypes, { theme: _propTypes2.default.shape({ fontSize: _propTypes2.default.number, fontColor: _reactNative.ColorPropType, bgRadius: _propTypes2.default.number, bgHeight: _propTypes2.default.number, bgWidth: _propTypes2.default.number, margin: _propTypes2.default.array, padding: _propTypes2.default.array, bgColor: _reactNative.ColorPropType, bgBorder: _reactNative.ColorPropType, bgBorderWidth: _propTypes2.default.number, loadingColor: _reactNative.ColorPropType, loadingBackground: _reactNative.ColorPropType }) }); ThemedBrickButton.defaultProps = { theme: null }; exports.default = ThemedBrickButton;