responsiveObserve.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.responsiveMap = exports.responsiveArray = exports.default = void 0;
  7. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  8. var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var responsiveArray = ['xxxl', 'xxl', 'xl', 'lg', 'md', 'sm', 'xs'];
  10. exports.responsiveArray = responsiveArray;
  11. var responsiveMap = {
  12. xs: '(max-width: 575px)',
  13. sm: '(min-width: 576px)',
  14. md: '(min-width: 768px)',
  15. lg: '(min-width: 992px)',
  16. xl: '(min-width: 1200px)',
  17. xxl: '(min-width: 1600px)',
  18. xxxl: '(min-width: 2000px)'
  19. };
  20. exports.responsiveMap = responsiveMap;
  21. var subscribers = new Map();
  22. var subUid = -1;
  23. var screens = {};
  24. var responsiveObserve = {
  25. matchHandlers: {},
  26. dispatch: function dispatch(pointMap) {
  27. screens = pointMap;
  28. subscribers.forEach(function (func) {
  29. return func(screens);
  30. });
  31. return subscribers.size >= 1;
  32. },
  33. subscribe: function subscribe(func) {
  34. if (!subscribers.size) this.register();
  35. subUid += 1;
  36. subscribers.set(subUid, func);
  37. func(screens);
  38. return subUid;
  39. },
  40. unsubscribe: function unsubscribe(token) {
  41. subscribers.delete(token);
  42. if (!subscribers.size) this.unregister();
  43. },
  44. unregister: function unregister() {
  45. var _this = this;
  46. Object.keys(responsiveMap).forEach(function (screen) {
  47. var matchMediaQuery = responsiveMap[screen];
  48. var handler = _this.matchHandlers[matchMediaQuery];
  49. handler === null || handler === void 0 ? void 0 : handler.mql.removeListener(handler === null || handler === void 0 ? void 0 : handler.listener);
  50. });
  51. subscribers.clear();
  52. },
  53. register: function register() {
  54. var _this2 = this;
  55. Object.keys(responsiveMap).forEach(function (screen) {
  56. var matchMediaQuery = responsiveMap[screen];
  57. var listener = function listener(_ref) {
  58. var matches = _ref.matches;
  59. _this2.dispatch((0, _objectSpread3.default)((0, _objectSpread3.default)({}, screens), {}, (0, _defineProperty2.default)({}, screen, matches)));
  60. };
  61. var mql = window.matchMedia(matchMediaQuery);
  62. mql.addListener(listener);
  63. _this2.matchHandlers[matchMediaQuery] = {
  64. mql: mql,
  65. listener: listener
  66. };
  67. listener(mql);
  68. });
  69. }
  70. };
  71. var _default = responsiveObserve;
  72. exports.default = _default;