@bnorth/components
Version:
bnorth, components, react
336 lines (296 loc) • 10.7 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime-corejs2/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property");
_Object$defineProperty2(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
var _from = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/from"));
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends"));
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutProperties"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
var _react = _interopRequireDefault(require("react"));
var _BaseComponent2 = _interopRequireDefault(require("./BaseComponent"));
var _Panel = _interopRequireWildcard(require("./Panel"));
var _Icon = _interopRequireDefault(require("./Icon"));
/**
* @module
*/
/**
* 轮播组件
* @component
* @exportdefault
* @augments module:BaseComponent.BaseComponent
* @augments module:Panel~PanelContainer
*/
var Carousel =
/*#__PURE__*/
function (_React$Component) {
(0, _inherits2.default)(Carousel, _React$Component);
function Carousel(props) {
var _this;
(0, _classCallCheck2.default)(this, Carousel);
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Carousel).call(this, props));
_this.state = {
selectedIndex: props.selectedIndexDefault
};
return _this;
}
(0, _createClass2.default)(Carousel, [{
key: "prev",
value: function prev() {
var selectedIndex = this.state.selectedIndex;
selectedIndex--;
if (selectedIndex < 0) selectedIndex = _react.default.Children.toArray(this.props.children).filter(function (v) {
return v;
}).length - 1;
this.setState({
selectedIndex: selectedIndex
});
this.go();
}
}, {
key: "next",
value: function next() {
var selectedIndex = this.state.selectedIndex;
selectedIndex = ++selectedIndex % _react.default.Children.toArray(this.props.children).filter(function (v) {
return v;
}).length;
this.setState({
selectedIndex: selectedIndex
});
this.go();
}
}, {
key: "pause",
value: function pause() {
this.isPaused = true;
this.stop();
}
}, {
key: "play",
value: function play() {
this.isPaused = false;
this.go();
}
}, {
key: "go",
value: function go() {
var _this2 = this;
var _this$props = this.props,
autoPlay = _this$props.autoPlay,
interval = _this$props.interval;
this.stop();
if (autoPlay && !this._isPaused && interval) this.timer = setTimeout(function () {
return _this2.next();
}, interval);
}
}, {
key: "stop",
value: function stop() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = undefined;
}
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
this.go();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps, prevState) {
if (prevProps.interval !== this.props.interval || prevProps.autoPlay !== this.props.autoPlay) this.go();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.stop();
}
}, {
key: "render",
value: function render() {
var _classNamePreControll,
_classNamePreControll2,
_this3 = this;
var _BaseComponent = (0, _BaseComponent2.default)(this.props, Carousel),
selectedIndexDefault = _BaseComponent.selectedIndexDefault,
interval = _BaseComponent.interval,
autoPlay = _BaseComponent.autoPlay,
pauseOnHover = _BaseComponent.pauseOnHover,
controller = _BaseComponent.controller,
pager = _BaseComponent.pager,
pagerProps = _BaseComponent.pagerProps,
controllerProps = _BaseComponent.controllerProps,
controllerPrevProps = _BaseComponent.controllerPrevProps,
controllerNextProps = _BaseComponent.controllerNextProps,
children = _BaseComponent.children,
props = (0, _objectWithoutProperties2.default)(_BaseComponent, ["selectedIndexDefault", "interval", "autoPlay", "pauseOnHover", "controller", "pager", "pagerProps", "controllerProps", "controllerPrevProps", "controllerNextProps", "children"]);
var selectedIndex = this.state.selectedIndex;
children = _react.default.Children.toArray(children).filter(function (v) {
return v;
});
var classNameStrController = 'position-absolute margin-h-xxs padding-a-xxs offset-top-center translate-center-y text-weight-border';
var classNamePreControllerPrev = (_classNamePreControll = {}, (0, _defineProperty3.default)(_classNamePreControll, classNameStrController, true), (0, _defineProperty3.default)(_classNamePreControll, "offset-left-start", true), _classNamePreControll);
var classNamePreControllerNext = (_classNamePreControll2 = {}, (0, _defineProperty3.default)(_classNamePreControll2, classNameStrController, true), (0, _defineProperty3.default)(_classNamePreControll2, "offset-right-start", true), _classNamePreControll2);
var classNamePrePager = 'position-absolute padding-a-xs margin-bottom-xs border-radius-rounded offset-bottom-start offset-left-center translate-center-x';
return _react.default.createElement(_Panel.PanelContainer, (0, _extends2.default)({
ctype: "scroll",
selectedIndex: selectedIndex,
onSelectedChange: function onSelectedChange(selectedIndex) {
return _this3.setState({
selectedIndex: selectedIndex
}, function () {
return _this3.go();
});
},
onMouseOver: function onMouseOver(e) {
return pauseOnHover && _this3.pause();
},
onMouseOut: function onMouseOut(e) {
return _this3.isPaused && _this3.play();
}
}, props), children, controller ? _react.default.createElement(_Panel.default, (0, _extends2.default)({
component: _Icon.default,
classNamePre: classNamePreControllerPrev,
"b-size": "xl",
"b-style": "solid",
"b-theme": "mask",
name: "left:<",
onClick: function onClick(e) {
return _this3.prev();
},
panelItemPlain: true
}, controllerProps, controllerPrevProps)) : null, controller ? _react.default.createElement(_Panel.default, (0, _extends2.default)({
component: _Icon.default,
classNamePre: classNamePreControllerNext,
"b-size": "xl",
"b-style": "solid",
"b-theme": "mask",
name: "right:>",
onClick: function onClick(e) {
return _this3.next();
},
panelItemPlain: true
}, controllerProps, controllerPrevProps)) : null, pager ? _react.default.createElement(_Panel.PanelContainer, (0, _extends2.default)({
component: "ol",
ctype: "flex",
selectedIndex: selectedIndex,
panelItemPlain: true,
classNamePre: classNamePrePager,
"b-theme": "mask",
"b-style": "solid"
}, pagerProps), (0, _from.default)({
length: children.length
}, function (v, k) {
return k;
}).map(function (v) {
return _react.default.createElement(_Panel.default, {
key: v,
component: "li",
classNamePre: "width-0em5 height-0em5 border-radius-rounded",
"bc-margin-left-xxs": Boolean(v),
"b-theme": "white",
"b-style": selectedIndex === v ? 'solid' : 'hollow',
"bp-panelTheme-bgOnHollow": false,
onClick: function onClick() {
return _this3.setState({
selectedIndex: v
}, function () {
return _this3.go();
});
}
});
})) : null);
}
}]);
return Carousel;
}(_react.default.Component);
Carousel.defaultProps = {};
/**
* 默认的轮播条目
* @type {number}
*/
Carousel.defaultProps.selectedIndexDefault = 0;
/**
* 轮播间隔
* @type {number}
*/
Carousel.defaultProps.interval = 4000;
/**
* 鼠标滑过时,是否暂停
* @type { boolean}
*/
Carousel.defaultProps.pauseOnHover = false;
/**
* 是否自动播放
* @type { boolean}
*/
Carousel.defaultProps.autoPlay = true;
/**
* 前进后退按钮,true 表示使用默认按钮
* @type {boolean|component}
*/
Carousel.defaultProps.controller = true;
/**
* 后退按钮属性
* @attribute module:Carousel.Carousel.controllerPrevProps
* @type {Object}
*/
/**
* 前进按钮属性
* @attribute module:Carousel.Carousel.controllerNextProps
* @type {Object}
*/
/**
* 分页器组件,true 表示使用默认分页器
* @type {boolean|component}
*/
Carousel.defaultProps.pager = true;
/**
* 分页器属性
* @attribute module:Carousel.Carousel.pagerProps
* @type {Object}
*/
(0, _defineProperty2.default)(Carousel, "Carousel", {
get: function get() {
return Carousel;
},
set: function set(val) {
Carousel = val;
}
});
Carousel.isBnorth = true;
Carousel.defaultProps['b-precast'] = {};
var _default = Carousel;
/**
* 轮播组件条目
* @component
* @augments BaseComponent
* @augments Panel.module:Container~PanelContainer
* @exportdefault
*/
exports.default = _default;
var _Item = function Item(aprops) {
var props = (0, _BaseComponent2.default)(aprops, _Item);
return _react.default.createElement(_Panel.default, props);
};
_Item.defaultProps = {};
(0, _defineProperty2.default)(Carousel, "Item", {
get: function get() {
return _Item;
},
set: function set(val) {
_Item = val;
}
});
_Item.isBnorth = true;
_Item.defaultProps['b-precast'] = {};