import React, { useRef } from 'react';
import {
ChakraProvider,
Box,
Portal,
extendTheme,
useDisclosure,
Heading,
Button,
Text,
VStack,
HStack,
} from '@chakra-ui/react';
const theme = extendTheme({
styles: {
global: {
body: {
fontFamily: 'Roboto, sans-serif',
bg: 'gray.100',
},
},
},
});
const geeksData = {
customContainer: `Explore Python,
JavaScript, React, and more!`,
nestedPortals: `Learn about Python,
JavaScript, and React.`,
optOutNesting: 'Join our MERN Stack Course!',
};
function App() {
const { isOpen: customContainerOpen,
onToggle: customContainerToggle } = useDisclosure();
const { isOpen: nestedPortalsOpen,
onToggle: nestedPortalsToggle } = useDisclosure();
const { isOpen: optOutNestingOpen,
onToggle: optOutNestingToggle } = useDisclosure();
const containerRef = useRef();
return (
<ChakraProvider theme={theme}>
<Box maxW="800px" mx="auto"
mt="8" textAlign="center">
<Heading as="h1"
color="green.500" mb="4">
GeeksforGeeks
</Heading>
<Heading as="h1"
color="black.500" mb="4">
Chakra UI Other Portal
</Heading>
<Box bg='red.400' color='white'
p="4" mb="4" borderRadius="md">
<Text fontSize="lg">
Unlock the World of Coding
using GeeksforGeeks,
</Text>
<Portal containerRef={containerRef}>
<Text fontSize="lg">
{geeksData.customContainer}
</Text>
</Portal>
<Box ref={containerRef}
bg='yellow.500' p="4">
<Text fontSize="lg">
Container: Hey Geek !
Dive In React World,
</Text>
<Button onClick={customContainerToggle}
mt="2" colorScheme="teal" size="sm">
Explore Content
</Button>
</Box>
</Box>
<Box bg='teal.500'
color='white' p="4" mb="4" borderRadius="md">
<Text fontSize="lg">
Welcome to the GeeksforGeeks Portal,
</Text>
<Portal>
<Text fontSize="lg">
{geeksData.nestedPortals}
</Text>
</Portal>
</Box>
<Box bg='red.400'
color='white' ref={containerRef}
p="4" mb="4" borderRadius="md">
<Button onClick={nestedPortalsToggle}
colorScheme="teal" size="sm">
Learn More
</Button>
</Box>
<Box bg='teal.500'
color='white' p="4"
mb="4" borderRadius="md">
<Text fontSize="lg">
Embark on a Learning Journey with GFG,
</Text>
<Portal appendToParentPortal={false}>
<Text fontSize="lg">
{geeksData.optOutNesting}
</Text>
</Portal>
</Box>
<Box style={{ background: 'red' }}
ref={containerRef} p="4"
mb="4" borderRadius="md">
<Button onClick={optOutNestingToggle}
colorScheme="teal" size="sm">
Join Course
</Button>
</Box>
<VStack spacing="4">
<Text fontSize="sm" color="gray.500">
Explore more GeeksforGeeks
content with interactive portals!
</Text>
<Text fontSize="sm" color="gray.500">
Powered by GFG
</Text>
</VStack>
</Box>
</ChakraProvider>
);
}
export default App;