reactstrap-modifiers.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { PopperData, CustomModifiers } from '~/interfaces/popper-data';
  2. // Conditional modifiers
  3. // To prevent flickering. only happened when `right` is true and persist props should be enabled
  4. const modifiersForRightAlign: CustomModifiers = {
  5. applyStyle: {
  6. enabled: true,
  7. },
  8. computeStyle: {
  9. enabled: true,
  10. fn: (data: PopperData): PopperData => {
  11. const popperRect = data.offsets.popper;
  12. // Calculate transform styles
  13. const newTransform = `translate3d(${popperRect.left - window.innerWidth + popperRect.width}px, ${popperRect.top}px, 0px)`;
  14. const styles = {
  15. top: '0px',
  16. right: '0px',
  17. willChange: 'transform',
  18. transform: newTransform,
  19. };
  20. data.styles = { ...data.styles, ...styles };
  21. return data;
  22. },
  23. },
  24. preventOverflow: { boundariesElement: 'viewport' },
  25. };
  26. export const getCustomModifiers = (alignRight?: boolean): CustomModifiers => {
  27. return (
  28. alignRight
  29. ? modifiersForRightAlign
  30. : { preventOverflow: { boundariesElement: 'viewport' } }
  31. );
  32. };