wix-style-react
Version:
241 lines (196 loc) • 10.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.accordionSectionItemBuilder = exports.accordionItemBuilder = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _AccordionSt = require("./Accordion.st.css");
var _AccordionItem = _interopRequireDefault(require("./AccordionItem"));
var _context = require("../WixStyleReactProvider/context");
var _AccordionSectionItem = _interopRequireDefault(require("./AccordionSectionItem"));
var _constants = require("./constants");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var Accordion = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(Accordion, _React$Component);
var _super = _createSuper(Accordion);
function Accordion(props) {
var _this;
(0, _classCallCheck2["default"])(this, Accordion);
_this = _super.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_findOpenIndexes", function (items, initial) {
return items.map(function (item, index) {
return initial && item.initiallyOpen || item.open ? index : null;
}).filter(function (index) {
return index !== null;
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_compareOpenItems", function (currentItems, prevItems) {
if (prevItems.length !== currentItems.length) {
return false;
}
for (var i = 0; i < prevItems.length; i++) {
if (prevItems[i].open !== currentItems[i].open) {
return false;
}
}
return true;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "componentDidUpdate", function (prevProps) {
if (!_this._compareOpenItems(_this.props.items, prevProps.items)) {
_this.setState({
openIndexes: _this._findOpenIndexes(_this.props.items)
});
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_toggle", function (index) {
return function () {
return _this.setState(function (_ref) {
var openIndexes = _ref.openIndexes;
return {
openIndexes: openIndexes.includes(index) ? openIndexes.filter(function (i) {
return i !== index;
}) : _this.props.multiple ? [].concat((0, _toConsumableArray2["default"])(openIndexes), [index]) : [index]
};
});
};
});
_this.state = {
openIndexes: _this._findOpenIndexes(_this.props.items, true)
};
return _this;
}
(0, _createClass2["default"])(Accordion, [{
key: "render",
value: function render() {
var _this2 = this;
var openIndexes = this.state.openIndexes;
var _this$props = this.props,
dataHook = _this$props.dataHook,
items = _this$props.items,
skin = _this$props.skin,
hideShadow = _this$props.hideShadow,
size = _this$props.size,
horizontalPadding = _this$props.horizontalPadding,
transitionSpeed = _this$props.transitionSpeed,
onAnimationEnter = _this$props.onAnimationEnter,
onAnimationExit = _this$props.onAnimationExit;
return /*#__PURE__*/_react["default"].createElement(_context.WixStyleReactContext.Consumer, null, function (_ref2) {
var reducedSpacingAndImprovedLayout = _ref2.reducedSpacingAndImprovedLayout;
var defaultSize = reducedSpacingAndImprovedLayout ? 'small' : 'large';
return /*#__PURE__*/_react["default"].createElement("div", {
"data-hook": dataHook,
className: _AccordionSt.classes.accordion,
"data-transition-speed": transitionSpeed,
"data-horizontal-padding": horizontalPadding,
"data-skin": skin
}, items.map(function (item, index, allItems) {
var uncontrolledProps = {
onToggle: _this2._toggle(index),
open: openIndexes.includes(index),
onAnimationEnter: onAnimationEnter,
onAnimationExit: onAnimationExit
};
var last = index === allItems.length - 1;
var internalProps = {
className: (0, _AccordionSt.st)(_AccordionSt.classes.item, {
last: last
}),
key: index,
skin: skin,
hideShadow: hideShadow,
size: size || defaultSize,
horizontalPadding: horizontalPadding,
last: last,
transitionSpeed: transitionSpeed
};
if (typeof item.render === 'function') {
return item.render(uncontrolledProps, internalProps);
} else {
return /*#__PURE__*/_react["default"].createElement(_AccordionItem["default"], (0, _extends2["default"])({}, uncontrolledProps, item, internalProps));
}
}));
});
}
}]);
return Accordion;
}(_react["default"].Component);
(0, _defineProperty2["default"])(Accordion, "displayName", 'Accordion');
(0, _defineProperty2["default"])(Accordion, "propTypes", {
/** Applied as data-hook HTML attribute that can be used to create driver in testing */
dataHook: _propTypes["default"].string,
/** allow multiple rows to be opened simultaneously */
multiple: _propTypes["default"].bool,
/** Accordion skin color */
skin: _propTypes["default"].oneOf(['standard', 'light', 'neutral']),
/** Hide Accordion shadow effect */
hideShadow: _propTypes["default"].bool,
/** Change items size */
size: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']),
/** Change horizontal padding */
horizontalPadding: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']),
/** Change expand and collapse animation speed */
transitionSpeed: _propTypes["default"].oneOf(['slow', 'medium', 'fast']),
/** Callback fired immediately after the animation is started */
onAnimationEnter: _propTypes["default"].func,
/** Callback fired immediately after the animation is ended */
onAnimationExit: _propTypes["default"].func,
/** accordion items nodes */
items: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].shape({
render: _propTypes["default"].func
})), _propTypes["default"].arrayOf(_propTypes["default"].shape({
title: _propTypes["default"].node,
subtitle: _propTypes["default"].node,
icon: _propTypes["default"].node,
children: _propTypes["default"].node,
expandLabel: _propTypes["default"].node,
collapseLabel: _propTypes["default"].node,
showLabel: _propTypes["default"].oneOf(['hover', 'always']),
buttonType: _propTypes["default"].oneOf(['textButton', 'button', 'node']),
disabled: _propTypes["default"].bool,
onToggle: _propTypes["default"].func,
onMouseEnter: _propTypes["default"].func,
onMouseleave: _propTypes["default"].func,
open: _propTypes["default"].bool,
initiallyOpen: _propTypes["default"].bool
}))])
});
(0, _defineProperty2["default"])(Accordion, "defaultProps", {
items: [],
multiple: false,
skin: _constants.skins.standard,
horizontalPadding: _constants.horizontalPaddings.large,
hideShadow: false,
transitionSpeed: 'medium'
});
var accordionItemBuilder = function accordionItemBuilder(item) {
return _objectSpread(_objectSpread({}, item), {}, {
render: function render(uncontrolledProps, internalProps) {
return /*#__PURE__*/_react["default"].createElement(_AccordionItem["default"], (0, _extends2["default"])({}, uncontrolledProps, item, internalProps));
}
});
};
exports.accordionItemBuilder = accordionItemBuilder;
var accordionSectionItemBuilder = function accordionSectionItemBuilder(item) {
return _objectSpread(_objectSpread({}, item), {}, {
render: function render(uncontrolledProps, internalProps) {
return /*#__PURE__*/_react["default"].createElement(_AccordionSectionItem["default"], (0, _extends2["default"])({}, uncontrolledProps, item, internalProps));
}
});
};
exports.accordionSectionItemBuilder = accordionSectionItemBuilder;
var _default = Accordion;
exports["default"] = _default;