'use client';
import { useEffect, useState, useCallback } from 'react';
import { createPortal } from 'react-dom';
import { CryptoProvider, useCryptoContext } from '@/contexts/cryptoProvider';
import CryptoDashboard from './CryptoDashboard';
import CryptoSidebar from './CryptoSidebar';
import MobileCoinList from './MobileCoinList';
import PopupModal from '@/app/component/PopupModal';
import Styles from '@/app/styles/common.module.scss';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faChevronLeft } from '@fortawesome/free-solid-svg-icons';
import type { TickerRestData } from '@/types/crypto';
import './mobile-coin-list.scss';
type Props = {
initialTickers: TickerRestData[];
};
function MobileBackButton({ onBack }: { onBack: () => void }) {
const { selectedMarket, tickerMeta } = useCryptoContext();
const meta = tickerMeta.get(selectedMarket);
const displayName = meta?.korName ?? selectedMarket.split('-')[1] ?? selectedMarket;
return (
);
}
export default function CryptoPageContent({ initialTickers }: Props) {
const [containerEl, setContainerEl] = useState(null);
const [isMobile, setIsMobile] = useState(false);
const [mobileView, setMobileView] = useState<'list' | 'detail'>('list');
useEffect(() => {
setContainerEl(document.getElementById('container'));
return () => setContainerEl(null);
}, []);
useEffect(() => {
const mq = window.matchMedia('(max-width: 1125px)');
setIsMobile(mq.matches);
const handler = (e: MediaQueryListEvent) => {
setIsMobile(e.matches);
if (!e.matches) setMobileView('list');
};
mq.addEventListener('change', handler);
return () => mq.removeEventListener('change', handler);
}, []);
// 하단 탭바 "코인" 클릭 시 목록으로 복귀
useEffect(() => {
const handler = () => setMobileView('list');
window.addEventListener('crypto:showList', handler);
return () => window.removeEventListener('crypto:showList', handler);
}, []);
const handleSelectCoin = useCallback(() => {
setMobileView('detail');
}, []);
const handleBack = useCallback(() => {
setMobileView('list');
}, []);
return (
{isMobile ? (
mobileView === 'list' ? (
) : (
<>
>
)
) : (
)}
{!isMobile && containerEl && createPortal(
,
containerEl
)}
);
}