diff --git a/app/[locale]/get-eth/_components/get-eth.tsx b/app/[locale]/get-eth/_components/get-eth.tsx deleted file mode 100644 index a2a1bfa5472..00000000000 --- a/app/[locale]/get-eth/_components/get-eth.tsx +++ /dev/null @@ -1,372 +0,0 @@ -"use client" - -import type { ReactNode } from "react" - -import type { ChildOnlyProp, PageWithContributorsProps } from "@/lib/types" - -import CalloutBanner from "@/components/CalloutBanner" -import CardList, { - type CardProps as CardListCardProps, -} from "@/components/CardList" -import CentralizedExchanges from "@/components/CentralizedExchanges" -import Emoji from "@/components/Emoji" -import EthPriceCard from "@/components/EthPriceCard" -import FeedbackCard from "@/components/FeedbackCard" -import FileContributors from "@/components/FileContributors" -import { Image } from "@/components/Image" -import MainArticle from "@/components/MainArticle" -import Translation from "@/components/Translation" -import { Alert, AlertContent, AlertDescription } from "@/components/ui/alert" -import { ButtonLink } from "@/components/ui/buttons/Button" -import { - Card, - CardContent, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card" -import { Divider } from "@/components/ui/divider" -import { Stack } from "@/components/ui/flex" -import InlineLink from "@/components/ui/Link" - -import { cn } from "@/lib/utils/cn" -import { trackCustomEvent } from "@/lib/utils/matomo" - -import { useBreakpointValue } from "@/hooks/useBreakpointValue" -import { useTranslation } from "@/hooks/useTranslation" -import uniswap from "@/public/images/dapps/uni.png" -import dapps from "@/public/images/doge-computer.png" -import bancor from "@/public/images/exchanges/bancor.png" -import hero from "@/public/images/get-eth.png" -import wallet from "@/public/images/wallet.png" - -type CardProps = { - children: ReactNode - emoji: string - title: ReactNode - description: ReactNode -} - -const StyledCard = ({ children, emoji, title, description }: CardProps) => ( - - - - {title} - - -

{description}

-
- {children} -
-) - -const TwoColumnContent = (props: ChildOnlyProp) => ( -
-) - -type Props = PageWithContributorsProps & { - lastDataUpdateDate: string -} - -const GetEthPage = ({ - lastDataUpdateDate, - contributors, - lastEditLocaleTimestamp, -}: Props) => { - const { t } = useTranslation("page-get-eth") - - const walletImageWidth = useBreakpointValue({ - base: "full", - sm: "60%", - md: "50%", - }) - - const tokenSwaps: CardListCardProps[] = [ - { - title: "Uniswap", - link: "https://app.uniswap.org/#/swap", - image: uniswap, - alt: "", - }, - { - title: "Bancor", - link: "https://www.carbondefi.xyz/", - image: bancor, - alt: "", - }, - ] - - const safetyArticles: CardListCardProps[] = [ - { - title: t("page-get-eth-article-protecting-yourself"), - link: "https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds", - description: t("page-get-eth-article-protecting-yourself-desc"), - }, - { - title: t("page-get-eth-article-keeping-crypto-safe"), - link: "https://blog.coinbase.com/the-keys-to-keeping-your-crypto-safe-96d497cce6cf", - description: t("page-get-eth-article-keeping-crypto-safe-desc"), - }, - ] - - return ( - - -
- {t("page-get-eth-hero-image-alt")} -
-

- {t("page-get-eth-where-to-buy-title")} -

-

- {t("page-get-eth-where-to-buy-desc")} -

-
- - - trackCustomEvent({ - eventCategory: "Search by country button", - eventAction: "click", - eventName: "search_by_country", - }) - } - > - {t("page-get-eth-search-by-country")} - -
-
- -
- - - {t("page-get-eth-cex-link-desc")} - - - - - {t("page-get-eth-daos-link-desc")} - - - - - {t("page-get-eth-wallets-link")} - - - - } - > - {t("page-get-eth-try-dex")} - - - - {t("page-get-eth-wallets-link")} - - - - - {t("page-get-eth-staking-link-desc")} - - -
- - -

- - {t("common:listing-policy-disclaimer")}{" "} - - {t("listing-policy-raise-issue-link")} - - -

- - - - - {t("page-get-eth-new-to-eth")}{" "} - - {t("page-get-eth-whats-eth-link")} - - - - -
- -
- -
- - -

- {t("page-get-eth-dexs")} -

- - -

- {t("page-get-eth-what-are-DEX's")} -

-

{t("page-get-eth-dexs-desc")}

-

- {t("page-get-eth-dexs-desc-2")}{" "} - - {t("page-get-eth-smart-contract-link")} - -

-

{t("page-get-eth-dexs-desc-3")}

-

{t("page-get-eth-need-wallet")}

- - {t("page-get-eth-get-wallet-btn")} - - - - - - - - -
- - -

- {t("page-get-eth-other-cryptos")} -

-

{t("page-get-eth-swapping")}

- - - - - - - - -
-
-
- - - - -

- {t("page-get-eth-keep-it-safe")} -

- - - -

- {t("page-get-eth-community-safety")} -

- -
- - - -

{t("page-get-eth-description")}

-

{t("page-get-eth-security")}

-
- -

- {t("page-get-eth-protect-eth-in-wallet")} -

-

{t("page-get-eth-protect-eth-desc")}

- - {t("page-get-eth-your-address-wallet-link")} - -
- -

- {t("page-get-eth-your-address")} -

-

{t("page-get-eth-your-address-desc")}

-
-

- 0x0125e2478d69eXaMpLe81766fef5c120d30fb53f -

-

- {t("page-get-eth-do-not-copy")} -

-
-

{t("page-get-eth-your-address-desc-3")}

-
- -

- {t("page-get-eth-wallet-instructions")} -

-

{t("page-get-eth-wallet-instructions-lost")}

-
-
-
-
- - - - -
- - {t("page-get-eth-checkout-dapps-btn")} - -
-
- - - - -
-
- ) -} - -export default GetEthPage diff --git a/app/[locale]/get-eth/page.tsx b/app/[locale]/get-eth/page.tsx index 266e46d288a..9ed51123fc9 100644 --- a/app/[locale]/get-eth/page.tsx +++ b/app/[locale]/get-eth/page.tsx @@ -1,22 +1,97 @@ import { pick } from "lodash" +import dynamic from "next/dynamic" import { getMessages, getTranslations, setRequestLocale, } from "next-intl/server" +import type { ReactNode } from "react" +import type { ChildOnlyProp } from "@/lib/types" import type { CommitHistory, Lang } from "@/lib/types" +import CalloutBanner from "@/components/CalloutBanner" +import CardList, { + type CardProps as CardListCardProps, +} from "@/components/CardList" +import Emoji from "@/components/Emoji" +import EthPriceCard from "@/components/EthPriceCard" +import FeedbackCard from "@/components/FeedbackCard" +import FileContributors from "@/components/FileContributors" import I18nProvider from "@/components/I18nProvider" +import { Image } from "@/components/Image" +import MainArticle from "@/components/MainArticle" +import Translation from "@/components/Translation" +import { Alert, AlertContent, AlertDescription } from "@/components/ui/alert" +import { ButtonLink } from "@/components/ui/buttons/Button" +import { + Card, + CardContent, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { Divider } from "@/components/ui/divider" +import { Stack } from "@/components/ui/flex" +import InlineLink from "@/components/ui/Link" +import { Skeleton } from "@/components/ui/skeleton" +import { cn } from "@/lib/utils/cn" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getLastGitCommitDateByPath } from "@/lib/utils/gh" import { getMetadata } from "@/lib/utils/metadata" +import { screens } from "@/lib/utils/screen" import { getRequiredNamespacesForPage } from "@/lib/utils/translations" -import GetEthPage from "./_components/get-eth" - import { routing } from "@/i18n/routing" +import uniswap from "@/public/images/dapps/uni.png" +import dapps from "@/public/images/doge-computer.png" +import bancor from "@/public/images/exchanges/bancor.png" +import hero from "@/public/images/get-eth.png" +import wallet from "@/public/images/wallet.png" + +const CentralizedExchanges = dynamic( + () => import("@/components/CentralizedExchanges").then((mod) => mod.default), + { + ssr: false, + loading: () => ( +
+
+ + +
+ +
+ + +
+
+ ), + } +) + +type CardProps = { + children: ReactNode + emoji: string + title: ReactNode + description: ReactNode +} + +const StyledCard = ({ children, emoji, title, description }: CardProps) => ( + + + + {title} + + +

{description}

+
+ {children} +
+) +const TwoColumnContent = (props: ChildOnlyProp) => ( +
+) export default async function Page({ params, @@ -24,17 +99,46 @@ export default async function Page({ params: Promise<{ locale: Lang }> }) { const { locale } = await params + const t = await getTranslations({ locale, namespace: "page-get-eth" }) - setRequestLocale(locale) + const tokenSwaps: CardListCardProps[] = [ + { + title: "Uniswap", + link: "https://app.uniswap.org/#/swap", + image: uniswap, + alt: "", + }, + { + title: "Bancor", + link: "https://www.carbondefi.xyz/", + image: bancor, + alt: "", + }, + ] + + const safetyArticles: CardListCardProps[] = [ + { + title: t("page-get-eth-article-protecting-yourself"), + link: "https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds", + description: t("page-get-eth-article-protecting-yourself-desc"), + }, + { + title: t("page-get-eth-article-keeping-crypto-safe"), + link: "https://blog.coinbase.com/the-keys-to-keeping-your-crypto-safe-96d497cce6cf", + description: t("page-get-eth-article-keeping-crypto-safe-desc"), + }, + ] const lastDataUpdateDate = getLastGitCommitDateByPath( "src/data/exchangesByCountry.ts" ) + setRequestLocale(locale) + // Get i18n messages const allMessages = await getMessages({ locale }) const requiredNamespaces = getRequiredNamespacesForPage("/get-eth") - const pickedMessages = pick(allMessages, requiredNamespaces) + const messages = pick(allMessages, requiredNamespaces) const commitHistoryCache: CommitHistory = {} const { contributors, lastEditLocaleTimestamp } = @@ -45,13 +149,269 @@ export default async function Page({ ) return ( - - - + + +
+ {t("page-get-eth-hero-image-alt")} +
+

+ {t("page-get-eth-where-to-buy-title")} +

+

+ {t("page-get-eth-where-to-buy-desc")} +

+
+ + + {t("page-get-eth-search-by-country")} + +
+
+ +
+ + + {t("page-get-eth-cex-link-desc")} + + + + + {t("page-get-eth-daos-link-desc")} + + + + + {t("page-get-eth-wallets-link")} + + + + } + > + {t("page-get-eth-try-dex")} + + + + {t("page-get-eth-wallets-link")} + + + + + {t("page-get-eth-staking-link-desc")} + + +
+ + +

+ + {t("common:listing-policy-disclaimer")}{" "} + + {t("listing-policy-raise-issue-link")} + + +

+ + + + + {t("page-get-eth-new-to-eth")}{" "} + + {t("page-get-eth-whats-eth-link")} + + + + +
+ +
+
+

{t("page-get-eth-exchanges-header")}

+

+ {t("page-get-eth-exchanges-intro")} +

+ + {/* CLIENT SIDE */} + + + +
+
+ + +

+ {t("page-get-eth-dexs")} +

+ + +

+ {t("page-get-eth-what-are-DEX's")} +

+

{t("page-get-eth-dexs-desc")}

+

+ {t("page-get-eth-dexs-desc-2")}{" "} + + {t("page-get-eth-smart-contract-link")} + +

+

{t("page-get-eth-dexs-desc-3")}

+

{t("page-get-eth-need-wallet")}

+ + {t("page-get-eth-get-wallet-btn")} + + + + + + + + +
+ + +

+ {t("page-get-eth-other-cryptos")} +

+

{t("page-get-eth-swapping")}

+ + + + + + + + +
+
+
+ + + + +

+ {t("page-get-eth-keep-it-safe")} +

+ + + +

+ {t("page-get-eth-community-safety")} +

+ +
+ + + +

{t("page-get-eth-description")}

+

{t("page-get-eth-security")}

+
+ +

+ {t("page-get-eth-protect-eth-in-wallet")} +

+

{t("page-get-eth-protect-eth-desc")}

+ + {t("page-get-eth-your-address-wallet-link")} + +
+ +

+ {t("page-get-eth-your-address")} +

+

{t("page-get-eth-your-address-desc")}

+
+

+ 0x0125e2478d69eXaMpLe81766fef5c120d30fb53f +

+

+ {t("page-get-eth-do-not-copy")} +

+
+

{t("page-get-eth-your-address-desc-3")}

+
+ +

+ {t("page-get-eth-wallet-instructions")} +

+

{t("page-get-eth-wallet-instructions-lost")}

+
+
+
+
+ + + + +
+ + {t("page-get-eth-checkout-dapps-btn")} + +
+
+ + + + +
+
) } diff --git a/src/components/CentralizedExchanges/index.tsx b/src/components/CentralizedExchanges/index.tsx index 3c2bb2ff3ff..99ed3dd7650 100644 --- a/src/components/CentralizedExchanges/index.tsx +++ b/src/components/CentralizedExchanges/index.tsx @@ -1,3 +1,5 @@ +"use client" + import { useLocale } from "next-intl" import type { ChildOnlyProp, Lang } from "@/lib/types" @@ -79,11 +81,7 @@ const CentralizedExchanges = ({ const lastUpdated = getLocaleTimestamp(locale as Lang, lastDataUpdateDate) return ( -
-

{t("page-get-eth-exchanges-header")}

-

- {t("page-get-eth-exchanges-intro")} -

+ <>