Skip to content
Snippets Groups Projects
index.js 3.13 KiB
Newer Older
  • Learn to ignore specific revisions
  • import Head from "next/head";
    
    import Container from "../components/content/Container";
    import Main from "../components/content/Main";
    import SearchInput from "../components/inputs/SearchInput";
    import BoldGradientHeading from "../components/titles/BoldGradientHeading";
    
    import CryptoChartCard from "../components/cards/CryptoChartCard";
    import { cryptoChartOptions } from "../constants";
    
    import { useCryptoList } from "../queries";
    
    import numeral from "numeral";
    import Wrapper from "../components/content/Wrapper";
    import Sidebar from "../components/sidebar/Sidebar";
    
    import { Tabs, Tab } from "../components/tabs/Tab";
    import { CollectionIcon, TableIcon } from "@heroicons/react/outline";
    
    SaifFGit's avatar
    SaifFGit committed
    import { useState } from "react";
    
    
    export default function Home() {
    
    SaifFGit's avatar
    SaifFGit committed
      const [searchText, setSearchText] = useState("");
    
      const listOfCoins = useCryptoList("usd", 21, false);
    
    SaifFGit's avatar
    SaifFGit committed
      const filteredCoins = listOfCoins.data
        ?.filter((coin) => {
          return coin.name.toLowerCase().includes(searchText.toLowerCase());
        })
        .map((coin) => {
          return (
            <CryptoChartCard
              key={coin.symbol}
              currencyId={coin.id}
              currencyName={coin.name}
              symbol={coin.symbol.toUpperCase()}
              icon={coin.image}
              info={"$" + numeral(coin.current_price).format("0,0.[0000000]")}
              detail={
                numeral(coin.price_change_percentage_24h).format("+0.0[00]") + "%"
              }
              detailColor={
                coin.price_change_percentage_24h > 0
                  ? "text-green-500"
                  : "text-red-500"
              }
              options={cryptoChartOptions(
                coin.price_change_percentage_24h > 0 ? ["#3DBAA2"] : ["#FF7A68"],
                true
              )}
              type="area"
            />
          );
        });
    
      return (
        <div>
          <Head>
            <title>CryptoMetrics</title>
            <meta name="description" content="CryptoMetrics" />
            <link rel="icon" href="/favicon.ico" />
          </Head>
    
          <Wrapper>
            <Sidebar />
            <Main>
              <Container>
                {/* Header */}
                <div className="flex flex-row justify-between">
                  {/* Main Project Title */}
                  <BoldGradientHeading>Home</BoldGradientHeading>
                  {/* Search Field */}
    
    SaifFGit's avatar
    SaifFGit committed
                  <SearchInput onChange={(e) => setSearchText(e?.target.value)} />
    
                {/* Main Content */}
                <Tabs>
                  <Tab
                    id="card-view"
                    content={<CollectionIcon className="w-6 h-6 dark:text-white" />}
                  >
                    <div className="flex flex-wrap gap-x-10 gap-y-10 mt-3">
                      {!listOfCoins.isLoading && filteredCoins}
                    </div>
                  </Tab>
                  <Tab
                    id="list-view"
                    content={<TableIcon className="w-6 h-6 dark:text-white" />}
                  >
                    {/* TODO: Add Table Component Here */}
                    <div className="flex flex-wrap gap-x-10 gap-y-10 mt-3">
                      <h1 className="dark:text-white">TABLE</h1>
                    </div>
                  </Tab>
                </Tabs>
    
              </Container>
            </Main>
          </Wrapper>