componentDidUpdate()

in packages/eui/src/components/popover/popover.tsx [452:488]


  componentDidUpdate(prevProps: Props) {
    // The popover is being opened.
    if (!prevProps.isOpen && this.props.isOpen) {
      this.onOpenPopover();
    }

    // ensure recalculation of panel position on prop updates
    if (
      this.props.isOpen &&
      (prevProps.anchorPosition !== this.props.anchorPosition ||
        prevProps.buffer !== this.props.buffer ||
        prevProps.offset !== this.props.offset ||
        prevProps.panelPaddingSize !== this.props.panelPaddingSize)
    ) {
      this.positionPopoverFluid();
    }

    // update scroll listener
    if (prevProps.repositionOnScroll !== this.props.repositionOnScroll) {
      if (this.props.repositionOnScroll) {
        window.addEventListener('scroll', this.positionPopoverFixed, true);
      } else {
        window.removeEventListener('scroll', this.positionPopoverFixed, true);
      }
    }

    // The popover is being closed.
    if (prevProps.isOpen && !this.props.isOpen) {
      // If the user has just closed the popover, queue up the removal of the content after the
      // transition is complete.
      this.closingTransitionTimeout = window.setTimeout(() => {
        this.setState({
          isClosing: false,
        });
      }, closingTransitionTime);
    }
  }