Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

usePopperMarginModifiers.js 1.9 KiB

3 lat temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. exports.__esModule = true;
  4. exports.default = usePopperMarginModifiers;
  5. var _react = require("react");
  6. var _hasClass = _interopRequireDefault(require("dom-helpers/hasClass"));
  7. function getMargins(element) {
  8. var styles = getComputedStyle(element);
  9. var top = parseFloat(styles.marginTop) || 0;
  10. var right = parseFloat(styles.marginRight) || 0;
  11. var bottom = parseFloat(styles.marginBottom) || 0;
  12. var left = parseFloat(styles.marginLeft) || 0;
  13. return {
  14. top: top,
  15. right: right,
  16. bottom: bottom,
  17. left: left
  18. };
  19. }
  20. function usePopperMarginModifiers() {
  21. var overlayRef = (0, _react.useRef)(null);
  22. var margins = (0, _react.useRef)(null);
  23. return [(0, _react.useCallback)(function (overlay) {
  24. if (!overlay || !((0, _hasClass.default)(overlay, 'popover') || (0, _hasClass.default)(overlay, 'dropdown-menu'))) return;
  25. margins.current = getMargins(overlay);
  26. overlay.style.margin = 0;
  27. overlayRef.current = overlay;
  28. }, []), [(0, _react.useMemo)(function () {
  29. return {
  30. name: 'offset',
  31. options: {
  32. offset: function offset(_ref) {
  33. var placement = _ref.placement;
  34. if (!margins.current) return [0, 0];
  35. var _margins$current = margins.current,
  36. top = _margins$current.top,
  37. left = _margins$current.left,
  38. bottom = _margins$current.bottom,
  39. right = _margins$current.right;
  40. switch (placement.split('-')[0]) {
  41. case 'top':
  42. return [0, bottom];
  43. case 'left':
  44. return [0, right];
  45. case 'bottom':
  46. return [0, top];
  47. case 'right':
  48. return [0, left];
  49. default:
  50. return [0, 0];
  51. }
  52. }
  53. }
  54. };
  55. }, [margins])]];
  56. }
  57. module.exports = exports["default"];