CryptoPageContent.tsx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. 'use client';
  2. import { useEffect, useState } from 'react';
  3. import { createPortal } from 'react-dom';
  4. import { CryptoProvider } from '@/contexts/cryptoProvider';
  5. import CryptoDashboard from './CryptoDashboard';
  6. import CryptoSidebar from './CryptoSidebar';
  7. import PopupModal from '@/app/component/PopupModal';
  8. import Styles from '@/app/styles/common.module.scss';
  9. import type { TickerRestData } from '@/types/crypto';
  10. type Props = {
  11. initialTickers: TickerRestData[];
  12. };
  13. export default function CryptoPageContent({ initialTickers }: Props) {
  14. const [containerEl, setContainerEl] = useState<HTMLElement | null>(null);
  15. useEffect(() => {
  16. setContainerEl(document.getElementById('container'));
  17. return () => setContainerEl(null);
  18. }, []);
  19. return (
  20. <CryptoProvider>
  21. <PopupModal position='main' />
  22. <CryptoDashboard />
  23. {containerEl && createPortal(
  24. <aside id='aside' className={Styles.aside}>
  25. <CryptoSidebar initialTickers={initialTickers} />
  26. </aside>,
  27. containerEl
  28. )}
  29. </CryptoProvider>
  30. );
  31. }