Skip to content
Related Articles
Open in App
Not now

Related Articles

React Suite Popover Container and prevent overflow

Improve Article
Save Article
  • Last Updated : 18 Aug, 2022
Improve Article
Save Article

React Suite is a library of React components, sensible UI design, and a friendly development experience. It is supported in all major browsers. It provides pre-built components of React which can be used easily in any web application.

In this article, we’ll learn about React Suite Popover Container and prevent overflow. The Popover Component is used to show the popup information that is triggered on any event over the parent window. The preventOverflow prop helps in positioning the popover components in the scrolling container.

Syntax:

function App() {
  <PreventOverflowContainer>
  {(getContainer) => (
    <Whisper
      preventOverflow
      container={...}
      speaker={...}
    >
      ...
    </Whisper>
  )}
</PreventOverflowContainer>
}

Creating React Application And Installing Module:

Step 1: Create a React application using the given command:

npm create-react-app projectname

Step 2: After creating your project, move to it using the given command:

cd projectname

Step 3: Now Install the rsuite node package using the given command:

npm install rsuite

Project Structure: Now your project structure should look like the following:

 

Example 1: Below example demonstrates the popover in a container with a preventOverflow prop.

Javascript




import "rsuite/dist/rsuite.min.css";
import { Popover, Whisper, Button } from "rsuite";
import { useEffect, useRef } from "react";
 
 
function PreventOverflowContainer({ children, height = 500 }) {
  const dataContainer = useRef();
  const dataContent = useRef();
 
  const conStyles = {
    overflow: 'auto',
    position: 'relative'
  };
 
  const disStyles = {
    height: '400%',
    width: '230%',
    justifyContent: 'center',
    alignItems: 'center',
    display: 'flex',
    flexWrap: 'wrap'
  };
 
  useEffect(() => {
    dataContainer.current.scrollTop =
        dataContent.current.clientHeight / 2 - 60;
         
    dataContainer.current.scrollLeft =
      dataContent.current.clientWidth / 2 -
      dataContainer.current.clientWidth / 2;
  }, [dataContainer, dataContent]);
 
  return (
    <div style={{ ...conStyles, height }}
      ref={dataContainer}>
      <div style={disStyles} ref={dataContent}>
        {children(() => dataContainer.current)}
      </div>
    </div>
  );
}
 
const speaker = (
  <Popover title="GeeksforGeeks" style={{ width: 200 }}>
     
 
<p>Welcome to the India's no.1 coding platform.</p>
 
 
  </Popover>
);
 
export default function App() {
  return (
    <div>
      <div style={{ textAlign: "center" }}>
        <h2>GeeksforGeeks</h2>
        <h4 style={{ color: "green" }}>
          React Suite Popover Container and prevent overflow
        </h4>
      </div>
      <div style={{ padding: 20, textAlign: "center" }}>
        <div>
          <PreventOverflowContainer height={300}>
            {(getContainer) => (
              <Whisper
                preventOverflow
                trigger="click"
                controlId="control-id-container"
                container={getContainer}
                speaker={speaker}
                 
              >
                <Button appearance="primary"
                  color="green">Click</Button>
              </Whisper>
            )}
          </PreventOverflowContainer>
        </div>
      </div>
    </div>
  );
}


Output:

 

Example 2: Below example demonstrates the popover in a container with a preventOverflow and followCursor prop.

Javascript




import "rsuite/dist/rsuite.min.css";
import { Popover, Whisper, Button } from "rsuite";
import { useEffect, useRef } from "react";
 
 
function PreventOverflowContainer({ children, height = 500 }) {
  const dataContainer = useRef();
  const dataContent = useRef();
 
  const conStyles = {
    overflow: 'auto',
    position: 'relative'
  };
 
  const disStyles = {
    height: '400%',
    width: '230%',
    justifyContent: 'center',
    alignItems: 'center',
    display: 'flex',
    flexWrap: 'wrap'
  };
 
  useEffect(() => {
    dataContainer.current.scrollTop =
      dataContent.current.clientHeight / 2 - 60;
    dataContainer.current.scrollLeft =
      dataContent.current.clientWidth / 2 -
      dataContainer.current.clientWidth / 2;
  }, [dataContainer, dataContent]);
 
  return (
    <div style={{ ...conStyles, height }}
      ref={dataContainer}>
      <div style={disStyles} ref={dataContent}>
        {children(() => dataContainer.current)}
      </div>
    </div>
  );
}
 
const speaker = (
  <Popover title="GeeksforGeeks" style={{ width: 200 }}>
     
 
<p>Welcome to the India's no.1 coding platform.</p>
 
 
  </Popover>
);
 
export default function App() {
  return (
    <div>
      <div style={{ textAlign: "center" }}>
        <h2>GeeksforGeeks</h2>
        <h4 style={{ color: "green" }}>
          React Suite Popover Container and prevent overflow
        </h4>
      </div>
      <div style={{ padding: 20, textAlign: "center" }}>
        <div>
          <PreventOverflowContainer height={300}>
            {(getContainer) => (
              <Whisper
                preventOverflow
                trigger="click"
                controlId="control-id-container"
                container={getContainer}
                speaker={speaker}
                followCursor
              >
                <Button appearance="primary"
                  color="green">Click</Button>
              </Whisper>
            )}
          </PreventOverflowContainer>
        </div>
      </div>
    </div>
  );
}


Output:

 

Reference: https://rsuitejs.com/components/popover/#container-and-prevent-overflow


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!