wix-style-react
Version:
wix-style-react
226 lines (167 loc) • 8.9 kB
JavaScript
'use strict';
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 _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, _temp2;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _classnames3 = require('classnames');
var _classnames4 = _interopRequireDefault(_classnames3);
var _Focusable = require('../common/Focusable');
var _AddItemLarge = require('wix-ui-icons-common/system/AddItemLarge');
var _AddItemLarge2 = _interopRequireDefault(_AddItemLarge);
var _AddItemMedium = require('wix-ui-icons-common/system/AddItemMedium');
var _AddItemMedium2 = _interopRequireDefault(_AddItemMedium);
var _AddItemSmall = require('wix-ui-icons-common/system/AddItemSmall');
var _AddItemSmall2 = _interopRequireDefault(_AddItemSmall);
var _Add = require('../new-icons/Add');
var _Add2 = _interopRequireDefault(_Add);
var _ActionText = require('./components/ActionText');
var _ActionText2 = _interopRequireDefault(_ActionText);
var _Tooltip = require('../Tooltip');
var _Tooltip2 = _interopRequireDefault(_Tooltip);
var _AddMedia = require('wix-ui-icons-common/system/AddMedia');
var _AddMedia2 = _interopRequireDefault(_AddMedia);
var _AddItem = require('./AddItem.scss');
var _AddItem2 = _interopRequireDefault(_AddItem);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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 ICONS = {
large: _react2.default.createElement(_AddItemLarge2.default, { 'data-hook': 'additem-icon' }),
medium: _react2.default.createElement(_AddItemMedium2.default, { 'data-hook': 'additem-icon' }),
small: _react2.default.createElement(_AddItemSmall2.default, { 'data-hook': 'additem-icon' }),
tiny: _react2.default.createElement(_Add2.default, {
'data-hook': 'additem-icon',
width: '26',
height: '26',
style: { flexShrink: 0 }
}),
custom: _react2.default.createElement(_AddMedia2.default, { 'data-hook': 'additem-icon', width: '31', height: '31' })
};
var DEFAULT_TOOLTIP_PROPS = {
showDelay: 0,
hideDelay: 0,
theme: 'dark',
align: 'center',
placement: 'top'
};
var AddItem = (_temp2 = _class = function (_Component) {
_inherits(AddItem, _Component);
function AddItem() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, AddItem);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = AddItem.__proto__ || Object.getPrototypeOf(AddItem)).call.apply(_ref, [this].concat(args))), _this), _this.renderIcon = function () {
var _this$props = _this.props,
size = _this$props.size,
theme = _this$props.theme;
var image = theme === 'image';
return ICONS[image ? 'custom' : size];
}, _this.renderText = function () {
var _this$props2 = _this.props,
children = _this$props2.children,
disabled = _this$props2.disabled,
theme = _this$props2.theme,
size = _this$props2.size;
if (!children || theme === 'image') {
return null;
}
return typeof children === 'string' ? _react2.default.createElement(
_ActionText2.default,
{ disabled: disabled, size: size },
children
) : children;
}, _this.renderContent = function () {
var _classnames;
var _this$props3 = _this.props,
tooltipContent = _this$props3.tooltipContent,
theme = _this$props3.theme,
alignItems = _this$props3.alignItems,
size = _this$props3.size,
disabled = _this$props3.disabled;
var box = (0, _classnames4.default)(_AddItem2.default.box, _AddItem2.default[alignItems], (_classnames = {}, _defineProperty(_classnames, _AddItem2.default.row, size === 'tiny'), _defineProperty(_classnames, _AddItem2.default[theme], theme === 'image'), _classnames));
var container = _react2.default.createElement(
'div',
{ className: box },
_this.renderIcon(),
_this.renderText()
);
var tooltipProps = _extends({}, DEFAULT_TOOLTIP_PROPS, {
content: tooltipContent
}, _this.props.tooltipProps);
return tooltipProps.content && !disabled ? _react2.default.createElement(
_Tooltip2.default,
_extends({ dataHook: 'additem-tooltip' }, tooltipProps),
container
) : container;
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(AddItem, [{
key: 'render',
value: function render() {
var _classnames2;
var _props = this.props,
dataHook = _props.dataHook,
onClick = _props.onClick,
disabled = _props.disabled,
theme = _props.theme,
focusableOnFocus = _props.focusableOnFocus,
focusableOnBlur = _props.focusableOnBlur;
var disable = disabled && theme !== 'image';
var image = theme === 'image';
var root = (0, _classnames4.default)(_AddItem2.default.root, (_classnames2 = {}, _defineProperty(_classnames2, _AddItem2.default[theme], !image), _defineProperty(_classnames2, _AddItem2.default.wrapped, image), _defineProperty(_classnames2, _AddItem2.default.disabled, disable), _classnames2));
return _react2.default.createElement(
'div',
_extends({
className: root,
'data-hook': dataHook,
onClick: disabled ? null : onClick,
onFocus: focusableOnFocus,
onBlur: focusableOnBlur
}, (0, _Focusable.focusableStates)(this.props), {
tabIndex: disabled ? null : 0
}),
this.renderContent()
);
}
}]);
return AddItem;
}(_react.Component), _class.displayName = 'AddItem', _class.propTypes = {
/** Any component or string */
children: _propTypes2.default.node,
/** Apply disabled styles */
disabled: _propTypes2.default.bool,
/** The theme of component */
theme: _propTypes2.default.oneOf(['dashes', 'plain', 'filled', 'image']),
/** Switching content alignment */
alignItems: _propTypes2.default.oneOf(['center', 'right', 'left']),
/** Size to control icon and spacing */
size: _propTypes2.default.oneOf(['large', 'medium', 'small', 'tiny']),
/** Click event handler */
onClick: _propTypes2.default.func,
/** used for testing */
dataHook: _propTypes2.default.string,
/** Tooltip props, leave undefined for no tooltip */
tooltipProps: _propTypes2.default.shape(_Tooltip2.default.propTypes),
/** Content of the tooltip, leave undefined for no tooltip */
tooltipContent: _propTypes2.default.string,
/** Focusable proptype */
focusableOnFocus: _propTypes2.default.func,
/** Focusable proptype */
focusableOnBlur: _propTypes2.default.func
}, _class.defaultProps = {
theme: 'dashes',
size: 'tiny',
alignItems: 'center'
}, _temp2);
exports.default = (0, _Focusable.withFocusable)(AddItem);