UNPKG

wix-style-react

Version:
208 lines (171 loc) • 7.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.ThemeOptions = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _class, _temp; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _WixComponent2 = require('../WixComponent'); var _WixComponent3 = _interopRequireDefault(_WixComponent2); var _TextLinkLayout = require('./TextLinkLayout.scss'); var _TextLinkLayout2 = _interopRequireDefault(_TextLinkLayout); var _Text = require('../../Text'); var _Text2 = _interopRequireDefault(_Text); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var ICON_SIZES = { small: '18px', medium: '24px' }; var addIcon = function addIcon(className, icon) { var size = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'medium'; return icon ? _react2.default.createElement( 'div', { className: className, 'data-hook': className === _TextLinkLayout2.default.prefix ? 'prefix-icon' : 'suffix-icon' }, _react2.default.cloneElement(icon, { size: ICON_SIZES[size] }) ) : null; }; var ThemeOptions = exports.ThemeOptions = { NORMAL: { type: 'normal', color: { hover: '#4eb7f5', normal: '#3899ec' } }, DARK_BACKGROUND: { type: 'darkBackground', color: { hover: '#f0f4f7', normal: '#f0f4f7' } }, GREYSCALE: { type: 'greyScale', color: { hover: '#162d3d', normal: '#162d3d' } }, DISABLED: { type: 'disabled', color: { hover: '#cbd3dc', normal: '#cbd3dc' } } }; var TextLinkLayout = (_temp = _class = function (_WixComponent) { _inherits(TextLinkLayout, _WixComponent); function TextLinkLayout(props) { _classCallCheck(this, TextLinkLayout); var _this = _possibleConstructorReturn(this, (TextLinkLayout.__proto__ || Object.getPrototypeOf(TextLinkLayout)).call(this, props)); _this.state = { isHover: false }; _this.setHover = _this.setHover.bind(_this); return _this; } _createClass(TextLinkLayout, [{ key: 'setHover', value: function setHover(hover) { this.setState({ isHover: hover }); } }, { key: 'getColor', value: function getColor() { var _props = this.props, theme = _props.theme, darkBackground = _props.darkBackground, disabled = _props.disabled; var isHover = this.state.isHover; if (disabled) { return ThemeOptions.DISABLED.color.normal; } //this should be deprecated if (darkBackground) { return ThemeOptions.DARK_BACKGROUND.color.normal; } switch (theme) { case ThemeOptions.DARK_BACKGROUND.type: return ThemeOptions.DARK_BACKGROUND.color.normal; case ThemeOptions.GREYSCALE.type: return ThemeOptions.GREYSCALE.color.normal; default: { var color = ThemeOptions.NORMAL.color; return isHover ? color.hover : color.normal; } } } }, { key: 'render', value: function render() { var _this2 = this; var isHover = this.state.isHover; var _props2 = this.props, underlineStyle = _props2.underlineStyle, size = _props2.size, children = _props2.children, display = _props2.display, disabled = _props2.disabled, prefixIcon = _props2.prefixIcon, suffixIcon = _props2.suffixIcon, ellipsis = _props2.ellipsis; var color = this.getColor(); var displayStyle = prefixIcon || suffixIcon ? 'flex' : display; var containerStyles = { color: color, display: displayStyle, background: 'none', cursor: disabled ? 'default' : 'pointer' }; var textStyles = { color: color, textDecoration: underlineStyle === 'hover' && isHover && !disabled || underlineStyle === 'always' ? 'underline' : 'none' }; return _react2.default.createElement( 'div', { role: 'link', style: containerStyles, onMouseLeave: function onMouseLeave() { return _this2.setHover(false); }, onMouseEnter: function onMouseEnter() { return _this2.setHover(true); } }, addIcon(_TextLinkLayout2.default.prefix, prefixIcon, size), _react2.default.createElement( _Text2.default, { ellipsis: ellipsis, style: textStyles, size: size, 'data-hook': 'text-element' }, children ), addIcon(_TextLinkLayout2.default.suffix, suffixIcon, size) ); } }]); return TextLinkLayout; }(_WixComponent3.default), _class.propTypes = { children: _propTypes2.default.node, underlineStyle: _propTypes2.default.oneOf(['always', 'hover', 'never']), darkBackground: _propTypes2.default.bool, theme: _propTypes2.default.oneOf(['normal', 'darkBackground', 'greyScale']), size: _propTypes2.default.oneOf(['small', 'medium']), display: _propTypes2.default.oneOf(['block', 'inline-block']), disabled: _propTypes2.default.bool, prefixIcon: _propTypes2.default.node, suffixIcon: _propTypes2.default.node, ellipsis: _propTypes2.default.bool }, _class.defaultProps = { underlineStyle: 'hover', darkBackground: false, //TODO - this should be deprecated theme: ThemeOptions.NORMAL.type, size: 'medium', display: 'block', disabled: false, ellipsis: false }, _temp); exports.default = TextLinkLayout;