@flexis/ui
Version:
Styleless React Components
205 lines (187 loc) • 12.8 kB
JavaScript
import _extends from "@babel/runtime-corejs3/helpers/extends";
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/objectWithoutProperties";
import _classCallCheck from "@babel/runtime-corejs3/helpers/classCallCheck";
import _createClass from "@babel/runtime-corejs3/helpers/createClass";
import _possibleConstructorReturn from "@babel/runtime-corejs3/helpers/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime-corejs3/helpers/getPrototypeOf";
import _inherits from "@babel/runtime-corejs3/helpers/inherits";
import { __decorate } from "tslib";
import React from 'react';
var _createElement = React.createElement;
var PureComponent = React.PureComponent;
import PropTypes from 'prop-types';
import { Bind, omit } from '../../helpers';
import { style, classes } from './ScrollArea.st.css';
var ScrollArea =
/** @class */
function () {
var ScrollArea = /*#__PURE__*/function (_PureComponent) {
_inherits(ScrollArea, _PureComponent);
function ScrollArea() {
var _this;
_classCallCheck(this, ScrollArea);
_this = _possibleConstructorReturn(this, _getPrototypeOf(ScrollArea).apply(this, arguments));
_this.state = {
topShadow: false,
rightShadow: false,
bottomShadow: false,
leftShadow: false
};
_this.isHiddenScrollbar = false;
_this.scroller = null;
return _this;
}
_createClass(ScrollArea, [{
key: "render",
value: function render() {
var _this$props = this.props,
className = _this$props.className,
ignoreTopShadow = _this$props.ignoreTopShadow,
ignoreRightShadow = _this$props.ignoreRightShadow,
ignoreBottomShadow = _this$props.ignoreBottomShadow,
ignoreLeftShadow = _this$props.ignoreLeftShadow,
hideXScrollbar = _this$props.hideXScrollbar,
hideYScrollbar = _this$props.hideYScrollbar,
children = _this$props.children,
props = _objectWithoutProperties(_this$props, ["className", "ignoreTopShadow", "ignoreRightShadow", "ignoreBottomShadow", "ignoreLeftShadow", "hideXScrollbar", "hideYScrollbar", "children"]);
var _this$state = this.state,
topShadow = _this$state.topShadow,
rightShadow = _this$state.rightShadow,
bottomShadow = _this$state.bottomShadow,
leftShadow = _this$state.leftShadow;
return _createElement("div", _extends({}, omit(props, ['y2xScroll']), {
className: style(classes.root, className)
}), _createElement("div", {
ref: this.onScrollerRef,
className: style(classes.scroller, {
hideXScrollbar: hideXScrollbar,
hideYScrollbar: hideYScrollbar
}),
onScroll: this.onScroll,
onWheel: this.onWheel
}, children), _createElement("div", {
className: style(classes.shadow, {
'top': true,
'active': topShadow && !ignoreTopShadow
})
}), _createElement("div", {
className: style(classes.shadow, {
'right': true,
'active': rightShadow && !ignoreRightShadow
})
}), _createElement("div", {
className: style(classes.shadow, {
'bottom': true,
'active': bottomShadow && !ignoreBottomShadow
})
}), _createElement("div", {
className: style(classes.shadow, {
'left': true,
'active': leftShadow && !ignoreLeftShadow
})
}));
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
this.setShadow(this.scroller);
this.hideScroll(this.scroller);
}
}, {
key: "onScrollerRef",
value: function onScrollerRef(ref) {
this.scroller = ref;
this.setShadow(ref);
this.hideScroll(ref);
}
}, {
key: "onScroll",
value: function onScroll(_ref) {
var currentTarget = _ref.currentTarget;
this.setShadow(currentTarget);
}
}, {
key: "onWheel",
value: function onWheel(event) {
var isHiddenScrollbar = this.isHiddenScrollbar;
var y2xScroll = this.props.y2xScroll;
var deltaY = event.deltaY,
currentTarget = event.currentTarget;
if (y2xScroll && !isHiddenScrollbar) {
event.preventDefault();
currentTarget.scrollLeft -= deltaY;
}
}
}, {
key: "setShadow",
value: function setShadow(element) {
if (!element) {
return;
}
var scrollLeft = element.scrollLeft,
scrollTop = element.scrollTop,
scrollWidth = element.scrollWidth,
scrollHeight = element.scrollHeight,
clientWidth = element.clientWidth,
clientHeight = element.clientHeight;
this.setState(function () {
return {
topShadow: scrollTop > 0,
rightShadow: scrollLeft + clientWidth < scrollWidth,
bottomShadow: scrollTop + clientHeight < scrollHeight,
leftShadow: scrollLeft > 0
};
});
}
}, {
key: "hideScroll",
value: function hideScroll(element) {
if (!element) {
return;
}
var _this$props2 = this.props,
hideXScrollbar = _this$props2.hideXScrollbar,
hideYScrollbar = _this$props2.hideYScrollbar;
var xOffset = element.offsetHeight - element.clientHeight;
var yOffset = element.offsetWidth - element.clientWidth;
this.isHiddenScrollbar = !xOffset;
if (hideXScrollbar) {
element.style.marginBottom = "-".concat(xOffset, "px");
} else {
element.style.marginBottom = '0';
}
if (hideYScrollbar) {
element.style.marginRight = "-".concat(yOffset, "px");
} else {
element.style.marginRight = '0';
}
}
}]);
return ScrollArea;
}(PureComponent);
process.env.NODE_ENV !== "production" ? ScrollArea.propTypes = {
ignoreTopShadow: PropTypes.bool,
ignoreRightShadow: PropTypes.bool,
ignoreBottomShadow: PropTypes.bool,
ignoreLeftShadow: PropTypes.bool,
hideXScrollbar: PropTypes.bool,
hideYScrollbar: PropTypes.bool,
y2xScroll: PropTypes.bool,
children: PropTypes.node
} : void 0;
ScrollArea.defaultProps = {
ignoreTopShadow: false,
ignoreRightShadow: false,
ignoreBottomShadow: false,
ignoreLeftShadow: false,
hideXScrollbar: false,
hideYScrollbar: false,
y2xScroll: false
};
__decorate([Bind()], ScrollArea.prototype, "onScrollerRef", null);
__decorate([Bind()], ScrollArea.prototype, "onScroll", null);
__decorate([Bind()], ScrollArea.prototype, "onWheel", null);
return ScrollArea;
}();
export default ScrollArea;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1Njcm9sbEFyZWEvU2Nyb2xsQXJlYS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxPQUFPLEtBQVAsTUFNTyxPQU5QOzs7QUFPQSxPQUFPLFNBQVAsTUFBc0IsWUFBdEI7QUFDQSxTQUVDLElBRkQsRUFHQyxJQUhELFFBSU8sZUFKUDtBQUtBLFNBQ0MsS0FERCxFQUVDLE9BRkQsUUFHTyxxQkFIUDs7QUE0QkEsSUFBQSxVQUFBO0FBQUE7QUFBQSxZQUFBO0FBQUEsTUFBcUIsVUFBckI7QUFBQTs7QUFBQSwwQkFBQTtBQUFBOztBQUFBOzs7QUF1QkMsWUFBQSxLQUFBLEdBQVE7QUFDUCxRQUFBLFNBQVMsRUFBSyxLQURQO0FBRVAsUUFBQSxXQUFXLEVBQUcsS0FGUDtBQUdQLFFBQUEsWUFBWSxFQUFFLEtBSFA7QUFJUCxRQUFBLFVBQVUsRUFBSTtBQUpQLE9BQVI7QUFPUSxZQUFBLGlCQUFBLEdBQW9CLEtBQXBCO0FBQ0EsWUFBQSxRQUFBLEdBQTJCLElBQTNCO0FBL0JUO0FBd0xDOztBQXhMRDtBQUFBO0FBQUEsK0JBaUNPO0FBQUEsMEJBWUQsS0FBSyxLQVpKO0FBQUEsWUFHSixTQUhJLGVBR0osU0FISTtBQUFBLFlBSUosZUFKSSxlQUlKLGVBSkk7QUFBQSxZQUtKLGlCQUxJLGVBS0osaUJBTEk7QUFBQSxZQU1KLGtCQU5JLGVBTUosa0JBTkk7QUFBQSxZQU9KLGdCQVBJLGVBT0osZ0JBUEk7QUFBQSxZQVFKLGNBUkksZUFRSixjQVJJO0FBQUEsWUFTSixjQVRJLGVBU0osY0FUSTtBQUFBLFlBVUosUUFWSSxlQVVKLFFBVkk7QUFBQSxZQVdELEtBWEM7O0FBQUEsMEJBa0JELEtBQUssS0FsQko7QUFBQSxZQWNKLFNBZEksZUFjSixTQWRJO0FBQUEsWUFlSixXQWZJLGVBZUosV0FmSTtBQUFBLFlBZ0JKLFlBaEJJLGVBZ0JKLFlBaEJJO0FBQUEsWUFpQkosVUFqQkksZUFpQkosVUFq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