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-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-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")}
-
+ <>
+ >
)
}
diff --git a/src/components/EthPriceCard.tsx b/src/components/EthPriceCard.tsx
index 657aa5aa0fb..e4c6e073b1c 100644
--- a/src/components/EthPriceCard.tsx
+++ b/src/components/EthPriceCard.tsx
@@ -1,3 +1,5 @@
+"use client"
+
import { useEffect, useState } from "react"
import { useLocale } from "next-intl"
import { MdInfoOutline } from "react-icons/md"
diff --git a/src/components/Select/index.tsx b/src/components/Select/index.tsx
index 8f907c8a57c..73f44dd1391 100644
--- a/src/components/Select/index.tsx
+++ b/src/components/Select/index.tsx
@@ -1,3 +1,5 @@
+"use client"
+
import ReactSelect, {
type ActionMeta,
type GroupBase,