UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

211 lines (178 loc) 6.11 kB
import _objectSpread from "@babel/runtime/helpers/objectSpread2"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _inherits from "@babel/runtime/helpers/inherits"; import _createSuper from "@babel/runtime/helpers/createSuper"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; var _responsiveMap; import { PureComponent } from 'react'; import isObject from 'lodash/isObject'; import debounce from 'lodash/debounce'; import { isArrayLike } from 'mobx'; import { matchMediaPolifill } from '../_util/mediaQueryListPolyfill'; import { Breakpoint } from './enum'; var enquire; if (typeof window !== 'undefined') { window.matchMedia = window.matchMedia || matchMediaPolifill; // eslint-disable-next-line global-require enquire = require('enquire.js'); } var responsiveMap = (_responsiveMap = {}, _defineProperty(_responsiveMap, Breakpoint.xxl, '(min-width: 1600px)'), _defineProperty(_responsiveMap, Breakpoint.xl, '(min-width: 1200px)'), _defineProperty(_responsiveMap, Breakpoint.lg, '(min-width: 992px)'), _defineProperty(_responsiveMap, Breakpoint.md, '(min-width: 768px)'), _defineProperty(_responsiveMap, Breakpoint.sm, '(min-width: 576px)'), _defineProperty(_responsiveMap, Breakpoint.xs, '(max-width: 575px)'), _responsiveMap); var responsiveArray = Object.keys(responsiveMap); export function isBreakPointMap(item) { if (isObject(item)) { var keys = Object.keys(item); if (keys.length) { return keys.every(function (key) { return key in responsiveMap; }); } } return false; } export function hasBreakPointMap(items) { // eslint-disable-next-line @typescript-eslint/no-use-before-define return items.some(isOrHasBreakPointMap); } function isOrHasBreakPointMap(item) { return isArrayLike(item) ? hasBreakPointMap(item) : isBreakPointMap(item); } var Responsive = /*#__PURE__*/function (_PureComponent) { _inherits(Responsive, _PureComponent); var _super = _createSuper(Responsive); function Responsive() { var _this; _classCallCheck(this, Responsive); _this = _super.apply(this, arguments); _this.state = { breakpoints: {} }; _this.handlers = new Map(); _this.fireUpdate = debounce(function () { var onChange = _this.props.onChange; if (onChange) { onChange(_this.getValues()); } }, 10); return _this; } _createClass(Responsive, [{ key: "isDisabled", value: function isDisabled(props) { var disabled = props.disabled, items = props.items; if (!disabled && items) { return !hasBreakPointMap(items); } return true; } }, { key: "componentDidMount", value: function componentDidMount() { if (!this.isDisabled(this.props)) { this.register(); } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var props = this.props; if (!this.isDisabled(prevProps) && this.isDisabled(props)) { this.unregister(); } if (this.isDisabled(prevProps) && !this.isDisabled(props)) { this.register(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { if (!this.isDisabled(this.props)) { this.unregister(); } } }, { key: "register", value: function register() { var _this2 = this; if (enquire) { var handlers = this.handlers; responsiveArray.forEach(function (breakpoint) { var query = responsiveMap[breakpoint]; var handler = { match: function match() { _this2.setState(function (prevState) { return { breakpoints: _objectSpread(_objectSpread({}, prevState.breakpoints), {}, _defineProperty({}, breakpoint, true)) }; }, _this2.fireUpdate); }, unmatch: function unmatch() { _this2.setState(function (prevState) { return { breakpoints: _objectSpread(_objectSpread({}, prevState.breakpoints), {}, _defineProperty({}, breakpoint, false)) }; }, _this2.fireUpdate); }, // Keep a empty destory to avoid triggering unmatch when unregister destroy: function destroy() {} }; enquire.register(query, handler); handlers.set(query, handler); }); } } }, { key: "unregister", value: function unregister() { var handlers = this.handlers; Object.keys(responsiveMap).forEach(function (breakpoint) { var query = responsiveMap[breakpoint]; var handler = handlers.get(query); if (handler) { enquire.unregister(query, handler); } }); } }, { key: "processValue", value: function processValue(value) { var breakpoints = this.state.breakpoints; if (isArrayLike(value) && hasBreakPointMap(value)) { return value.map(this.processValue, this); } if (isBreakPointMap(value)) { for (var i = 0; i < responsiveArray.length; i++) { var breakpoint = responsiveArray[i]; if (breakpoints[breakpoint] && value[breakpoint] !== undefined) { return value[breakpoint]; } } return undefined; } return value; } }, { key: "getValues", value: function getValues() { var items = this.props.items; if (items) { return items.map(this.processValue, this); } return []; } }, { key: "render", value: function render() { var props = this.props; var children = props.children; if (typeof children === 'function') { return children(this.getValues(), this.isDisabled(props)); } return children; } }]); return Responsive; }(PureComponent); export { Responsive as default }; Responsive.displayName = 'Responsive'; //# sourceMappingURL=Responsive.js.map