diff --git a/.github/workflows/website-integrity.yml b/.github/workflows/website-integrity.yml index 908922253fb6..9b2b5bea0619 100644 --- a/.github/workflows/website-integrity.yml +++ b/.github/workflows/website-integrity.yml @@ -23,14 +23,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 - - name: Fetch remote docs - run: cd website && pnpm fetch-remote-docs - - - name: Fetch API reference - run: cd website && pnpm fetch-api-reference - - - name: Fix pages structure - run: cd website && pnpm fix-pages-structure + - name: Run pre-build scripts + run: pnpm prebuild:ci - name: Build run: pnpm build diff --git a/Dockerfile b/Dockerfile index c657bb3612b4..e05fac2a3a5d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,9 +18,7 @@ WORKDIR /app COPY . ./ RUN pnpm install --frozen-lockfile -RUN cd website && pnpm fetch-remote-docs -RUN cd website && pnpm fetch-api-reference -RUN cd website && pnpm fix-pages-structure +RUN pnpm prebuild:ci RUN pnpm build FROM nginx:1.16.0-alpine diff --git a/package.json b/package.json index 00908f834835..42e8bdef6236 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "turbo run dev", "build": "NODE_OPTIONS='--max_old_space_size=8192' turbo run build", + "prebuild:ci": "turbo run prebuild:ci", "check": "pnpm typecheck && pnpm lint && pnpm prettier:check", "check:fix": "pnpm lint:fix; pnpm prettier", "lint": "eslint . --ignore-path .gitignore --max-warnings 0", diff --git a/packages/og-image/package.json b/packages/og-image/package.json index ec7ff036e8d9..ea372ed7e5a0 100644 --- a/packages/og-image/package.json +++ b/packages/og-image/package.json @@ -16,7 +16,7 @@ "yoga-wasm-web": "^0.3.3" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20250430.0", + "@cloudflare/workers-types": "^4.20250502.0", "@types/react": "^18.3.20", "jest-image-snapshot": "^6.4.0", "tsx": "^4.19.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7d0674b5d18..3109a1fa0ab3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: version: 0.3.3 devDependencies: '@cloudflare/workers-types': - specifier: ^4.20250430.0 - version: 4.20250430.0 + specifier: ^4.20250502.0 + version: 4.20250502.0 '@types/react': specifier: ^18.3.20 version: 18.3.20 @@ -86,7 +86,7 @@ importers: version: 2.1.9(@types/node@22.15.3)(jsdom@24.1.3) wrangler: specifier: ^3.114.8 - version: 3.114.8(@cloudflare/workers-types@4.20250430.0) + version: 3.114.8(@cloudflare/workers-types@4.20250502.0) packages/rehype-unwrap-images: dependencies: @@ -130,8 +130,8 @@ importers: specifier: ^6.5.14 version: 6.5.14(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(dayjs@1.11.13)(hardhat@2.14.1(typescript@5.8.3))(next@14.2.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1))(react@18.3.1))(typescript@5.8.3) '@edgeandnode/go': - specifier: ^9.4.14 - version: 9.4.14(4c0e2a82a7be43483b9a72278c7d451e) + specifier: ^10.0.2 + version: 10.0.2(bff3751af905338b0dae382088ea3bb2) '@emotion/react': specifier: ^11.14.0 version: 11.14.0(@types/react@18.3.20)(react@18.3.1) @@ -478,8 +478,8 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20250430.0': - resolution: {integrity: sha512-JWAX7ZhQ7KjkdJwASgG58MZ/pQ15brlnZ9/0YBwDQ0hrJ/LaK392aTRFlj2r/PRKDZ5dOuujRywNYaNpfeFiEA==} + '@cloudflare/workers-types@4.20250502.0': + resolution: {integrity: sha512-bUvF+vTpCpbB05orD+P04IpfBVWg7IjGVPfeH848coip9+MqVRMEqE65BaoxxswkDw1L/Tl13gLvpLz74FudWg==} '@corex/deepmerge@4.0.43': resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} @@ -566,12 +566,12 @@ packages: next: optional: true - '@edgeandnode/go@9.4.14': - resolution: {integrity: sha512-ZiKE3KC2GdyJaL4UOiF3O+uM6UM2QL4nDbG38vWFBvd2Ni0+p6TuiazhqhOn3fd/vh7WpmU8q1vI4zSHzAh4+w==} + '@edgeandnode/go@10.0.2': + resolution: {integrity: sha512-pTEzMxNjonzNdfykiNlGCYAdHUDruIhnyyyG+OrDSierPZnuIz2ucraBtxq5/f0LL/qldOubKfWt8WFQJ/ujVQ==} peerDependencies: '@edgeandnode/common': ^7.0.4 - '@edgeandnode/ens': ^2.1.4 - '@edgeandnode/gds': ^6.5.12 + '@edgeandnode/ens': ^2.1.5 + '@edgeandnode/gds': ^6.5.14 '@emotion/react': ^11 '@tanstack/react-query': ^5 graphql: '>=16.9' @@ -4049,8 +4049,8 @@ packages: browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -9182,7 +9182,7 @@ snapshots: '@cloudflare/workerd-windows-64@1.20250408.0': optional: true - '@cloudflare/workers-types@4.20250430.0': {} + '@cloudflare/workers-types@4.20250502.0': {} '@corex/deepmerge@4.0.43': {} @@ -9355,7 +9355,7 @@ snapshots: - typescript - utf-8-validate - '@edgeandnode/go@9.4.14(4c0e2a82a7be43483b9a72278c7d451e)': + '@edgeandnode/go@10.0.2(bff3751af905338b0dae382088ea3bb2)': dependencies: '@edgeandnode/common': 7.0.4(hardhat@2.14.1(typescript@5.8.3)) '@edgeandnode/ens': 2.1.5(typescript@5.8.3)(viem@2.28.3(typescript@5.8.3)(zod@3.24.3)) @@ -9369,6 +9369,7 @@ snapshots: '@react-aria/utils': 3.28.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': 5.75.1(react@18.3.1) '@theme-ui/css': 0.17.2(@emotion/react@11.14.0(@types/react@18.3.20)(react@18.3.1)) + '@web3icons/react': 4.0.13(react@18.3.1)(typescript@5.8.3) escape-string-regexp: 5.0.0 graphql: 16.8.0 graphql-request: 7.1.2(graphql@16.8.0) @@ -9384,6 +9385,7 @@ snapshots: - '@types/react' - '@types/react-dom' - ts-node + - typescript '@emnapi/core@1.4.3': dependencies: @@ -13651,7 +13653,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.3): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 caniuse-lite: 1.0.30001716 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -13802,12 +13804,12 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - browserslist@4.24.4: + browserslist@4.24.5: dependencies: caniuse-lite: 1.0.30001716 electron-to-chromium: 1.5.149 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.5) bs58@4.0.1: dependencies: @@ -19469,9 +19471,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 - update-browserslist-db@1.1.3(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -19803,7 +19805,7 @@ snapshots: workerpool@6.5.1: {} - wrangler@3.114.8(@cloudflare/workers-types@4.20250430.0): + wrangler@3.114.8(@cloudflare/workers-types@4.20250502.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@cloudflare/unenv-preset': 2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250408.0) @@ -19816,7 +19818,7 @@ snapshots: unenv: 2.0.0-rc.14 workerd: 1.20250408.0 optionalDependencies: - '@cloudflare/workers-types': 4.20250430.0 + '@cloudflare/workers-types': 4.20250502.0 fsevents: 2.3.3 sharp: 0.33.5 transitivePeerDependencies: diff --git a/turbo.json b/turbo.json index ab816e313d16..7cdd91048f0d 100644 --- a/turbo.json +++ b/turbo.json @@ -10,6 +10,9 @@ "outputs": ["dist/**"], "dependsOn": ["^build"] }, + "prebuild:ci": { + "cache": false + }, "typecheck": { "dependsOn": ["^build"] }, diff --git a/website/package.json b/website/package.json index 9607195c5710..ebd7855eed13 100644 --- a/website/package.json +++ b/website/package.json @@ -8,6 +8,7 @@ "predev": "tsup ./src/i18n.ts --format esm", "build": "rm -rf .next && rm -rf out && next build", "prebuild": "pnpm predev", + "prebuild:ci": "pnpm fetch-remote-docs && pnpm fetch-api-reference && pnpm fix-pages-structure", "postbuild": "next-sitemap --config next-sitemap.config.mjs && node scripts/sitemap-ci.js", "typecheck": "tsc", "fetch-remote-docs": "tsx scripts/fetch-remote-docs.ts", @@ -19,7 +20,7 @@ "@docsearch/react": "^3.9.0", "@edgeandnode/common": "^7.0.4", "@edgeandnode/gds": "^6.5.14", - "@edgeandnode/go": "^9.4.14", + "@edgeandnode/go": "^10.0.2", "@emotion/react": "^11.14.0", "@graphprotocol/contracts": "6.2.1", "@pinax/graph-networks-registry": "^0.6.7", diff --git a/website/src/HomePage.tsx b/website/src/HomePage.tsx index 96a7b8e9f4e1..f00d53b95975 100644 --- a/website/src/HomePage.tsx +++ b/website/src/HomePage.tsx @@ -1,10 +1,7 @@ import { NetworkType } from '@pinax/graph-networks-registry' -import { useData } from 'nextra/hooks' -import type { ComponentPropsWithoutRef } from 'react' -import { classNames, ExperimentalLink, Tooltip } from '@edgeandnode/gds' +import { ButtonOrLink, ExperimentalLink, Tooltip } from '@edgeandnode/gds' import { - Clock, Firehose, GraphExplorer, GraphNode, @@ -17,9 +14,9 @@ import { NetworkIcon } from '@edgeandnode/go' import { Card, Heading, TimeIcon } from '@/components' import { useI18n } from '@/i18n' -import { getSupportedNetworks } from '@/supportedNetworks' +import { type SupportedNetwork } from '@/supportedNetworks' -export default function HomePage() { +export default function HomePage({ supportedNetworks }: { supportedNetworks: SupportedNetwork[] }) { const { t } = useI18n() return ( @@ -141,7 +138,38 @@ export default function HomePage() { , ])}

- +
+ +

@@ -247,35 +275,3 @@ export default function HomePage() { ) } - -function SupportedNetworks({ className, ...props }: ComponentPropsWithoutRef<'div'>) { - const { supportedNetworks } = useData() as { supportedNetworks: Awaited> } - - return ( -
-
    - {supportedNetworks - // TODO: Don't filter out testnets that don't have a mainnet - .filter((network) => network.networkType === NetworkType.Mainnet) - // Filter out networks that are either duplicates (same logo, same or similar short name) or irrelevant in this view - .filter( - (network) => - !network.caip2Id.startsWith('beacon:') && - !['boba-bnb', 'eos-evm', 'polygon-zkevm', 'solana-accounts'].includes(network.id), - ) - // TODO: Fix Zora mono logo in web3icons - .filter((network) => network.id !== 'zora') - .map((network) => ( - -
  • - -
  • -
    - ))} -
-
- ) -} diff --git a/website/src/components/Callout.tsx b/website/src/components/Callout.tsx index 83a1bfb88c97..7a3e3ce684d4 100644 --- a/website/src/components/Callout.tsx +++ b/website/src/components/Callout.tsx @@ -45,9 +45,9 @@ export const Callout = ({ className={classNames([ `flex gap-2 rounded-8 border p-4 ps-3 data-[variant=important]:border-solar-500/50 - data-[variant=info]:border-astro-500/50 + data-[variant=info]:border-galactic-500/50 data-[variant=important]:bg-solar-500/10 - data-[variant=info]:bg-astro-500/10 + data-[variant=info]:bg-galactic-500/10 --:my-8 --:last:mb-0 -:is-[li>*]:my-4`, className, ])} @@ -55,7 +55,7 @@ export const Callout = ({ >
{variant === 'info' ? ( - + ) : ( )} diff --git a/website/src/pages/[locale]/[...404].mdx b/website/src/pages/[locale]/[...404].mdx index 026e8c381fa9..730a088945b3 100644 --- a/website/src/pages/[locale]/[...404].mdx +++ b/website/src/pages/[locale]/[...404].mdx @@ -1,5 +1,4 @@ import { translate } from '@edgeandnode/gds' -import { RemoteContent } from 'nextra/components' import { buildDynamicMDX } from 'nextra/remote' import { supportedLocales, translations } from '@/i18n' @@ -22,8 +21,7 @@ hideTableOfContents: true hideContentHeader: true hideContentFooter: true unwrapContent: true ---- -` +---` const mdx = await buildDynamicMDX(rawMdx, { codeHighlight: false }) const { pageMap } = await import(`.next/static/chunks/nextra-page-map-${locale}.mjs`) return { @@ -34,4 +32,4 @@ unwrapContent: true } } - + diff --git a/website/src/pages/[locale]/index.mdx b/website/src/pages/[locale]/index.mdx index 988829ebf698..5ec8da26076c 100644 --- a/website/src/pages/[locale]/index.mdx +++ b/website/src/pages/[locale]/index.mdx @@ -1,7 +1,6 @@ {/* We use `index.mdx` instead of `index.tsx` to render the page in the Nextra theme's `Layout` */} import { translate } from '@edgeandnode/gds' -import { RemoteContent } from 'nextra/components' import { buildDynamicMDX } from 'nextra/remote' import HomePage from '@/HomePage' @@ -22,19 +21,17 @@ title: ${t('index.title')} hideTableOfContents: true hideContentHeader: true unwrapContent: true ---- -` +---` const mdx = await buildDynamicMDX(rawMdx, { codeHighlight: false }) const { pageMap } = await import(`.next/static/chunks/nextra-page-map-${locale}.mjs`) + const supportedNetworks = await getSupportedNetworks() return { props: { ...mdx, __nextra_pageMap: pageMap, - ssg: { - supportedNetworks: await getSupportedNetworks(), - }, + supportedNetworks, }, } } - + diff --git a/website/src/pages/[locale]/supported-networks/[id].mdx b/website/src/pages/[locale]/supported-networks/[id].mdx index 2dfaa978c14b..c6e4d7e3fbd9 100644 --- a/website/src/pages/[locale]/supported-networks/[id].mdx +++ b/website/src/pages/[locale]/supported-networks/[id].mdx @@ -1,10 +1,9 @@ import { translate } from '@edgeandnode/gds' -import { RemoteContent } from 'nextra/components' import { buildDynamicMDX } from 'nextra/remote' -import { NetworkPage } from '@/supportedNetworks/components' import { supportedLocales, translations } from '@/i18n' import { getSupportedNetworks } from '@/supportedNetworks' +import NetworkDetailsPage from '@/supportedNetworks/NetworkDetailsPage' export const getStaticPaths = async () => { const networks = await getSupportedNetworks() @@ -34,15 +33,13 @@ export const getStaticProps = async ({ params }) => { } } const rawMdx = `--- -title: ${network.id} +title: ${network.fullName} hideTableOfContents: true hideContentHeader: true unwrapContent: true hideContentFooter: true parentRouteKey: supported-networks ---- -# Network Details -` +---` const mdx = await buildDynamicMDX(rawMdx, { codeHighlight: false }) const { pageMap } = await import(`.next/static/chunks/nextra-page-map-${locale}.mjs`) return { @@ -50,13 +47,8 @@ parentRouteKey: supported-networks ...mdx, __nextra_pageMap: pageMap, network, - ssg: { - network, - }, }, } } -export default function NetworkDetailPage({ network }) { - return -} + diff --git a/website/src/pages/ar/supported-networks.mdx b/website/src/pages/ar/supported-networks.mdx index ac7050638264..ac8ea6df8253 100644 --- a/website/src/pages/ar/supported-networks.mdx +++ b/website/src/pages/ar/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/cs/supported-networks.mdx b/website/src/pages/cs/supported-networks.mdx index 863814948ba7..3c04b4dbbafb 100644 --- a/website/src/pages/cs/supported-networks.mdx +++ b/website/src/pages/cs/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/de/supported-networks.mdx b/website/src/pages/de/supported-networks.mdx index 1ae4bd5d095b..835ce6df9b0d 100644 --- a/website/src/pages/de/supported-networks.mdx +++ b/website/src/pages/de/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio verlässt sich auf die Stabilität und Zuverlässigkeit der zugrundeliegenden Technologien, z.B. JSON-RPC, Firehose und Substreams Endpunkte. - Subgraphs, die die Gnosis-Kette indizieren, können jetzt mit dem gnosis- Netzwerkidentifikator eingesetzt werden. diff --git a/website/src/pages/en/supported-networks.mdx b/website/src/pages/en/supported-networks.mdx index ef2c28393033..8860d1f382dd 100644 --- a/website/src/pages/en/supported-networks.mdx +++ b/website/src/pages/en/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/es/supported-networks.mdx b/website/src/pages/es/supported-networks.mdx index 93a003ce8005..3b3d7eb14227 100644 --- a/website/src/pages/es/supported-networks.mdx +++ b/website/src/pages/es/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/fr/supported-networks.mdx b/website/src/pages/fr/supported-networks.mdx index c1b6ee3fd39c..5ce0074ba40c 100644 --- a/website/src/pages/fr/supported-networks.mdx +++ b/website/src/pages/fr/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio repose sur la stabilité et la fiabilité des technologies sous-jacentes, comme les endpoints JSON-RPC, Firehose et Substreams. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/hi/supported-networks.mdx b/website/src/pages/hi/supported-networks.mdx index 9ddc02928dbf..8a1e715d3525 100644 --- a/website/src/pages/hi/supported-networks.mdx +++ b/website/src/pages/hi/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - सबग्राफ स्टूडियो निर्भर करता है अंतर्निहित प्रौद्योगिकियों की स्थिरता और विश्वसनीयता पर, जैसे JSON-RPC, फायरहोस और सबस्ट्रीम्स एंडपॉइंट्स। - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/it/supported-networks.mdx b/website/src/pages/it/supported-networks.mdx index ef2c28393033..8860d1f382dd 100644 --- a/website/src/pages/it/supported-networks.mdx +++ b/website/src/pages/it/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/ja/supported-networks.mdx b/website/src/pages/ja/supported-networks.mdx index 4e138e5575cc..90213669311f 100644 --- a/website/src/pages/ja/supported-networks.mdx +++ b/website/src/pages/ja/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/ko/supported-networks.mdx b/website/src/pages/ko/supported-networks.mdx index ef2c28393033..8860d1f382dd 100644 --- a/website/src/pages/ko/supported-networks.mdx +++ b/website/src/pages/ko/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/mr/supported-networks.mdx b/website/src/pages/mr/supported-networks.mdx index ef2c28393033..8860d1f382dd 100644 --- a/website/src/pages/mr/supported-networks.mdx +++ b/website/src/pages/mr/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/nl/supported-networks.mdx b/website/src/pages/nl/supported-networks.mdx index 9ba4b8d0ab99..bf73c201439e 100644 --- a/website/src/pages/nl/supported-networks.mdx +++ b/website/src/pages/nl/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/pl/supported-networks.mdx b/website/src/pages/pl/supported-networks.mdx index c49e9c3853b2..aef5668b103a 100644 --- a/website/src/pages/pl/supported-networks.mdx +++ b/website/src/pages/pl/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/pt/supported-networks.mdx b/website/src/pages/pt/supported-networks.mdx index f3c79fbff592..248c3aebdae1 100644 --- a/website/src/pages/pt/supported-networks.mdx +++ b/website/src/pages/pt/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - O Subgraph Studio depende da estabilidade e da confiança das tecnologias subjacentes, por exemplo, JSON-RPC, Firehose e endpoints dos Substreams. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/ro/supported-networks.mdx b/website/src/pages/ro/supported-networks.mdx index 554c558ded7e..bcd50c91681b 100644 --- a/website/src/pages/ro/supported-networks.mdx +++ b/website/src/pages/ro/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/ru/supported-networks.mdx b/website/src/pages/ru/supported-networks.mdx index 6399dfa3844c..bef59cd934b9 100644 --- a/website/src/pages/ru/supported-networks.mdx +++ b/website/src/pages/ru/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio полагается на стабильность и надежность базовых технологий, например, таких, как JSON-RPC, Firehose и конечных точек Substreams. - Субграфы, индексирующие Gnosis Chain, теперь можно развертывать с идентификатором сети `gnosis`. diff --git a/website/src/pages/sv/supported-networks.mdx b/website/src/pages/sv/supported-networks.mdx index 01776006c980..d91330162c93 100644 --- a/website/src/pages/sv/supported-networks.mdx +++ b/website/src/pages/sv/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/tr/supported-networks.mdx b/website/src/pages/tr/supported-networks.mdx index baee4073b30c..faa9ea814c32 100644 --- a/website/src/pages/tr/supported-networks.mdx +++ b/website/src/pages/tr/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio, örneğin JSON-RPC, Firehose ve Substreams uç noktaları gibi temel teknolojilerin istikrarlılığına ve güvenilirliğine bel bağlar. - Gnosis Chain'i endeksleyen subgraph'ler artık `gnosis` ağ tanımlayıcısı ile dağıtılabilir. diff --git a/website/src/pages/uk/supported-networks.mdx b/website/src/pages/uk/supported-networks.mdx index 6cac2ffa4bac..5f03298564b4 100644 --- a/website/src/pages/uk/supported-networks.mdx +++ b/website/src/pages/uk/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/ur/supported-networks.mdx b/website/src/pages/ur/supported-networks.mdx index 709ff2193c44..15117baa5291 100644 --- a/website/src/pages/ur/supported-networks.mdx +++ b/website/src/pages/ur/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/vi/supported-networks.mdx b/website/src/pages/vi/supported-networks.mdx index f2af01f61c81..aadae2b787a5 100644 --- a/website/src/pages/vi/supported-networks.mdx +++ b/website/src/pages/vi/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio relies on the stability and reliability of the underlying technologies, for example JSON-RPC, Firehose and Substreams endpoints. - Subgraphs indexing Gnosis Chain can now be deployed with the `gnosis` network identifier. diff --git a/website/src/pages/zh/supported-networks.mdx b/website/src/pages/zh/supported-networks.mdx index e45f7dfbe97c..1bf28caeabfd 100644 --- a/website/src/pages/zh/supported-networks.mdx +++ b/website/src/pages/zh/supported-networks.mdx @@ -4,7 +4,7 @@ hideTableOfContents: true hideContentHeader: true --- -import { getSupportedNetworksStaticProps, SupportedNetworksTable } from '@/supportedNetworks' +import { getSupportedNetworksStaticProps, NetworksTable } from '@/supportedNetworks' import { Heading } from '@/components' import { useI18n } from '@/i18n' @@ -14,7 +14,7 @@ export const getStaticProps = getSupportedNetworksStaticProps {useI18n().t('index.supportedNetworks.title')} - + - Subgraph Studio依赖于底层技术的稳定性和可靠性,例如JSON-RPC、Firehose和Substreams端点。 - 现在可以使用`gnosis`网络标识符部署索引Gnosis链的子图。 diff --git a/website/src/supportedNetworks/NetworkDetailsPage.tsx b/website/src/supportedNetworks/NetworkDetailsPage.tsx new file mode 100644 index 000000000000..c71c5548fa9d --- /dev/null +++ b/website/src/supportedNetworks/NetworkDetailsPage.tsx @@ -0,0 +1,108 @@ +import { ExperimentalCopyButton, ExperimentalDescriptionList, ExperimentalLink } from '@edgeandnode/gds' +import { NetworkIcon } from '@edgeandnode/go' + +import { Card, TimeIcon } from '@/components' +import { useI18n } from '@/i18n' + +import { + evmNoTokenAPICards, + evmSubgraphsOnlyCards, + evmWithTokenAPICards, + nonEvmNoTokenAPICards, + nonEvmWithTokenAPICards, +} from './ResourceCards' +import { getIconVariant, type SupportedNetwork } from './utils' + +export default function NetworkDetailsPage({ network }: { network: SupportedNetwork }) { + const { t } = useI18n() + const cards = (() => { + if (network.evm) { + if (network.subgraphs && !network.substreams) { + return evmSubgraphsOnlyCards + } else if (network.tokenApi) { + return evmWithTokenAPICards + } else { + return evmNoTokenAPICards + } + } else { + if (network.tokenApi) { + return nonEvmWithTokenAPICards + } else { + return nonEvmNoTokenAPICards + } + } + })() + + return ( +
+
+ +

{network.fullName}

+
+ +
+
+
+ + + {network.networkType} + + {network.graphNode?.protocol && ( + + {network.graphNode.protocol} + + )} + {network.id && ( + } + > + {network.id} + + )} + {network.caip2Id && ( + } + > + {network.caip2Id} + + )} + {network.nativeToken && ( + + {network.nativeToken} + + )} + {network.docsUrl && ( + + + {network.docsUrl} + + + )} + +
+
+
+ +
+ +

{t('index.supportedNetworks.guides')}

+
+ {cards.map((card) => ( + } + className="col-span-full [&:nth-child(-n+3)]:lg:col-span-2 [&:nth-child(-n+3)]:lg:min-h-64 [&:nth-child(n+4)]:lg:col-span-3" + icon={card.icon} + /> + ))} +
+
+ ) +} diff --git a/website/src/supportedNetworks/NetworksTable.tsx b/website/src/supportedNetworks/NetworksTable.tsx new file mode 100644 index 000000000000..ecde36dbfa26 --- /dev/null +++ b/website/src/supportedNetworks/NetworksTable.tsx @@ -0,0 +1,155 @@ +import { useMemo, useState } from 'react' + +import { + ButtonOrLink, + DottedRingsSpinner, + ExperimentalButton, + ExperimentalCopyButton, + ExperimentalLink, + ExperimentalSearch, + ExperimentalToggleChip, + Text, + useDebounce, +} from '@edgeandnode/gds' +import { Check, EyeClosed } from '@edgeandnode/gds/icons' +import { NetworkIcon } from '@edgeandnode/go' + +import { Callout, Table } from '@/components' +import { useI18n } from '@/i18n' + +import { getIconVariant, type SupportedNetwork } from './utils' + +export function NetworksTable({ networks }: { networks: SupportedNetwork[] }) { + const { t } = useI18n() + const [immediateSearchQuery, setSearchQuery] = useState('') + const [immediateShowTestnets, setShowTestnets] = useState(false) + + const searchQuery = useDebounce(immediateSearchQuery, 200) + const showTestnets = useDebounce(immediateShowTestnets, 200) + + const filteredNetworks = useMemo(() => { + let filteredNetworks = networks + // Filter by testnet + if (!showTestnets) { + filteredNetworks = filteredNetworks.filter((network) => String(network.networkType) !== 'testnet') + } + // Filter by search + if (searchQuery) { + const query = searchQuery.toLowerCase() + filteredNetworks = filteredNetworks.filter( + (network) => + network.id.toLowerCase().includes(query) || + network.shortName.toLowerCase().includes(query) || + network.fullName.toLowerCase().includes(query), + ) + } + return filteredNetworks + }, [networks, searchQuery, showTestnets]) + + return ( + <> + +

+ {t('index.supportedNetworks.infoText')}{' '} + + {t('index.supportedNetworks.infoLink')} + + . +

+
+ +
+
+ setSearchQuery(value)} + className="w-full" + /> +
+ { + setShowTestnets(!immediateShowTestnets) + }} + > + {t('index.supportedNetworks.showTestnets')} + +
+ + {filteredNetworks.length === 0 ? ( +
+
+ + + +
+

{t('index.supportedNetworks.emptySearch.title')}

+

+ {t('index.supportedNetworks.emptySearch.description', [searchQuery])} +

+
+ setSearchQuery('')}> + {t('index.supportedNetworks.emptySearch.clearSearch')} + +
+
+ ) : ( + + + + + + + + + + + {filteredNetworks.map((network) => ( + + + + + + + + + ))} + +
+ {t('index.supportedNetworks.tableHeaders.name')} + + {t('index.supportedNetworks.tableHeaders.id')} + + {t('index.supportedNetworks.tableHeaders.subgraphs')} + + {t('index.supportedNetworks.tableHeaders.substreams')} + + {t('index.supportedNetworks.tableHeaders.firehose')} + + {t('index.supportedNetworks.tableHeaders.tokenapi')} +
+ + + + {network.shortName} + + + + +
+ {network.id} +
+ +
+
+
{network.subgraphs ? : null}{network.substreams ? : null}{network.firehose ? : null}{network.tokenApi ? : null}
+ )} + + ) +} diff --git a/website/src/supportedNetworks/components/ResourceCards.tsx b/website/src/supportedNetworks/ResourceCards.tsx similarity index 98% rename from website/src/supportedNetworks/components/ResourceCards.tsx rename to website/src/supportedNetworks/ResourceCards.tsx index 7c000b4f0b06..a5af8a07e001 100644 --- a/website/src/supportedNetworks/components/ResourceCards.tsx +++ b/website/src/supportedNetworks/ResourceCards.tsx @@ -73,7 +73,7 @@ export const evmNoTokenAPICards = [ titleKey: 'index.networkGuides.evm.billing.title' as const, descriptionKey: 'index.networkGuides.evm.billing.description' as const, minutes: 5, - icon: , + icon: , // TODO: Is this really the right icon for this? }, { href: 'https://thegraph.com/docs/en/subgraphs/explorer/', diff --git a/website/src/supportedNetworks/components/EmptySearchResults.tsx b/website/src/supportedNetworks/components/EmptySearchResults.tsx deleted file mode 100644 index 41f2edcb225a..000000000000 --- a/website/src/supportedNetworks/components/EmptySearchResults.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Button, DottedRingsSpinner } from '@edgeandnode/gds' -import { EyeClosed } from '@edgeandnode/gds/icons' - -import { useI18n } from '@/i18n' - -interface EmptySearchResultsProps { - searchQuery: string - onClearSearch: () => void - showTestnets: boolean - onToggleTestnets: () => void -} - -export const EmptySearchResults = ({ searchQuery, onClearSearch }: EmptySearchResultsProps) => { - const { t } = useI18n() - - return ( -
-
- - - -
-

{t('index.supportedNetworks.emptySearch.title')}

-

- {t('index.supportedNetworks.emptySearch.description', [searchQuery])} -

-
- -
-
- ) -} diff --git a/website/src/supportedNetworks/components/NetworkDetailsPage.tsx b/website/src/supportedNetworks/components/NetworkDetailsPage.tsx deleted file mode 100644 index d78786407d48..000000000000 --- a/website/src/supportedNetworks/components/NetworkDetailsPage.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { Card, TimeIcon } from '@/components' -import { useI18n } from '@/i18n' - -import { isEVMNetwork, type Network, type NetworkData, type ProcessedNetwork, supportsTokenAPI } from '../utils' - -import { - evmNoTokenAPICards, - evmSubgraphsOnlyCards, - evmWithTokenAPICards, - nonEvmNoTokenAPICards, - nonEvmWithTokenAPICards, -} from './ResourceCards' - -type NetworkDetailsPageProps = { - network: Network | ProcessedNetwork | NetworkData -} - -interface NetworkFeatures { - supportsSubgraphs: boolean - supportsSubstreams: boolean - supportsTokenAPI: boolean -} - -function getNetworkFeatures(network: Network | ProcessedNetwork | NetworkData): NetworkFeatures { - if ('subgraphs' in network && typeof network.subgraphs === 'boolean') { - const processedNetwork = network - return { - supportsSubgraphs: processedNetwork.subgraphs, - supportsSubstreams: processedNetwork.substreams, - supportsTokenAPI: processedNetwork.tokenapi, - } - } - - return { - supportsSubgraphs: 'services' in network && Boolean(network.services.subgraphs?.length), - supportsSubstreams: 'services' in network && Boolean(network.services.substreams?.length), - supportsTokenAPI: supportsTokenAPI(network.id), - } -} - -function getResourceCardsConfig(isEVM: boolean, features: NetworkFeatures) { - const { supportsSubgraphs, supportsSubstreams, supportsTokenAPI } = features - - if (isEVM) { - if (supportsSubgraphs && !supportsSubstreams) { - return evmSubgraphsOnlyCards - } - if (supportsTokenAPI) { - return evmWithTokenAPICards - } - return evmNoTokenAPICards - } - - return supportsTokenAPI ? nonEvmWithTokenAPICards : nonEvmNoTokenAPICards -} - -function NetworkDetailsPage({ network }: NetworkDetailsPageProps) { - const { t } = useI18n() - const isEVM = isEVMNetwork(network) - const features = getNetworkFeatures(network) - const cards = getResourceCardsConfig(isEVM, features) - - return ( - <> -

{t('index.supportedNetworks.guides')}

-
- {cards.map((card) => ( - } - className="col-span-full [&:nth-child(-n+3)]:lg:col-span-2 [&:nth-child(-n+3)]:lg:min-h-64 [&:nth-child(n+4)]:lg:col-span-3" - icon={card.icon} - /> - ))} -
- - ) -} - -export default NetworkDetailsPage diff --git a/website/src/supportedNetworks/components/NetworkFilters.tsx b/website/src/supportedNetworks/components/NetworkFilters.tsx deleted file mode 100644 index 17545b403b57..000000000000 --- a/website/src/supportedNetworks/components/NetworkFilters.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { memo } from 'react' - -import { ExperimentalSearch, ExperimentalToggleChip } from '@edgeandnode/gds' - -import { useI18n } from '@/i18n' - -interface NetworkFiltersProps { - searchQuery: string - setSearchQuery: (value: string) => void - showTestnets: boolean - onToggleTestnets: () => void -} - -export const NetworkFilters = ({ - searchQuery, - setSearchQuery, - showTestnets, - onToggleTestnets, -}: NetworkFiltersProps) => { - const { t } = useI18n() - - return ( -
-
- setSearchQuery(value)} - className="w-full" - /> -
- - {t('index.supportedNetworks.showTestnets')} - -
- ) -} diff --git a/website/src/supportedNetworks/components/NetworkPage.tsx b/website/src/supportedNetworks/components/NetworkPage.tsx deleted file mode 100644 index 40b33c14701e..000000000000 --- a/website/src/supportedNetworks/components/NetworkPage.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { NetworkType } from '@pinax/graph-networks-registry' -import Head from 'next/head' -import { useData } from 'nextra/hooks' -import { memo } from 'react' - -import { ExperimentalCopyButton, ExperimentalDescriptionList, ExperimentalLink, Skeleton } from '@edgeandnode/gds' -import { NetworkIcon } from '@edgeandnode/go' - -import { useI18n } from '@/i18n' - -import { getIconVariant, type Network, shouldShowSkeleton } from '../utils' - -import NetworkDetailsPage from './NetworkDetailsPage' - -interface NetworkPageProps { - network?: Network -} - -export const NetworkPage = memo(({ network }: NetworkPageProps) => { - const data = useData() - const contextNetwork = data?.ssg?.network || data?.network - const networkData: Network = network || - contextNetwork || { - id: '', - fullName: '', - networkType: NetworkType.Mainnet, - caip2Id: '', - } - - const { t } = useI18n() - - return ( - <> - - {networkData.fullName} - -
-
- {networkData.caip2Id ? ( -
- {shouldShowSkeleton(networkData.id) ? ( - - ) : ( - - )} -
- ) : null} -

{networkData.fullName}

-
- -
-
-
- - - {networkData.networkType} - - {networkData.graphNode?.protocol && ( - - {networkData.graphNode.protocol} - - )} - {networkData.id && ( - } - > - {networkData.id} - - )} - {networkData.caip2Id && ( - } - > - {networkData.caip2Id} - - )} - {networkData.nativeToken && ( - - {networkData.nativeToken} - - )} - {networkData.docsUrl && ( - - - {networkData.docsUrl} - - - )} - -
-
-
- -
- - -
- - ) -}) - -NetworkPage.displayName = 'NetworkPage' diff --git a/website/src/supportedNetworks/components/NetworkRow.tsx b/website/src/supportedNetworks/components/NetworkRow.tsx deleted file mode 100644 index b55987e66198..000000000000 --- a/website/src/supportedNetworks/components/NetworkRow.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { memo } from 'react' - -import { ButtonOrLink, ExperimentalCopyButton, Skeleton } from '@edgeandnode/gds' -import { Check } from '@edgeandnode/gds/icons' -import { NetworkIcon } from '@edgeandnode/go' - -import { getIconVariant, shouldShowSkeleton } from '@/supportedNetworks/utils' - -interface NetworkRowProps { - network: { - id: string - shortName: string - caip2Id: string - subgraphs: boolean - substreams: boolean - firehose: boolean - tokenapi: boolean - } - locale: string -} - -export const NetworkRow = memo(({ network, locale }: NetworkRowProps) => { - return ( - - - - - {shouldShowSkeleton(network.id) ? ( - - ) : ( - - )} - {network.shortName} - - - - - -
- {network.id} -
- -
-
- - {network.subgraphs ? : null} - {network.substreams ? : null} - {network.firehose ? : null} - {network.tokenapi ? : null} - - ) -}) diff --git a/website/src/supportedNetworks/components/NetworksTable.tsx b/website/src/supportedNetworks/components/NetworksTable.tsx deleted file mode 100644 index ae13ed5848ea..000000000000 --- a/website/src/supportedNetworks/components/NetworksTable.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { memo } from 'react' - -import { Text } from '@edgeandnode/gds' - -import { Table } from '@/components' -import { useI18n } from '@/i18n' - -import { NetworkRow } from './NetworkRow' -import { SkeletonRow } from './SkeletonRow' - -interface NetworksTableProps { - networks: any[] - isLoading: boolean - locale: string -} - -export const NetworksTable = memo(({ networks, isLoading, locale }: NetworksTableProps) => { - const { t } = useI18n() - - // Generate skeleton rows for loading state - const skeletonRows = Array.from({ length: 20 }, (_, index) => ) - - return ( - - - - - - - - - - - {isLoading - ? skeletonRows - : networks.map((network) => )} - -
- {t('index.supportedNetworks.tableHeaders.name')} - - {t('index.supportedNetworks.tableHeaders.id')} - - {t('index.supportedNetworks.tableHeaders.subgraphs')} - - {t('index.supportedNetworks.tableHeaders.substreams')} - - {t('index.supportedNetworks.tableHeaders.firehose')} - - {t('index.supportedNetworks.tableHeaders.tokenapi')} -
- ) -}) diff --git a/website/src/supportedNetworks/components/SkeletonRow.tsx b/website/src/supportedNetworks/components/SkeletonRow.tsx deleted file mode 100644 index 99c00e9125ee..000000000000 --- a/website/src/supportedNetworks/components/SkeletonRow.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { memo } from 'react' - -import { Skeleton } from '@edgeandnode/gds' - -export const SkeletonRow = memo(() => { - return ( - - -
- - -
- - - - - - - - - - - - - - - - - - ) -}) diff --git a/website/src/supportedNetworks/components/index.ts b/website/src/supportedNetworks/components/index.ts deleted file mode 100644 index eafd7e14d666..000000000000 --- a/website/src/supportedNetworks/components/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './EmptySearchResults' -export * from './NetworkDetailsPage' -export * from './NetworkFilters' -export * from './NetworkPage' -export * from './NetworkRow' -export * from './NetworksTable' -export * from './SkeletonRow' diff --git a/website/src/supportedNetworks/index.tsx b/website/src/supportedNetworks/index.tsx index a2b052311b68..538545e9a757 100644 --- a/website/src/supportedNetworks/index.tsx +++ b/website/src/supportedNetworks/index.tsx @@ -1,109 +1,3 @@ -import { NetworksRegistry } from '@pinax/graph-networks-registry' -import { useRouter } from 'next/router' -import { useMemo, useState } from 'react' - -import { ExperimentalLink } from '@edgeandnode/gds' - -import { Callout } from '@/components' -import { useI18n } from '@/i18n' - -import { EmptySearchResults, NetworkFilters, NetworksTable } from './components' -import type { NetworkData, ProcessedNetwork } from './utils' -import { processNetworksData } from './utils' - -export async function getSupportedNetworks(): Promise { - const registry = await NetworksRegistry.fromLatestVersion() - return processNetworksData(registry.networks as NetworkData[]) -} - -export async function getSupportedNetworksStaticProps() { - return { - props: { - networks: await getSupportedNetworks(), - }, - } -} - -export function SupportedNetworksTable({ - networks, -}: Awaited>['props']) { - const { t } = useI18n() - const router = useRouter() - const { locale = 'en' } = router - const [searchQuery, setSearchQuery] = useState('') - const [showTestnets, setShowTestnets] = useState(false) - - const filteredNetworks = useMemo(() => { - let filtered = networks - - // Filter by testnet - if (!showTestnets) { - filtered = filtered.filter((network) => String(network.networkType) !== 'testnet') - } - - // Filter by search - if (searchQuery) { - const query = searchQuery.toLowerCase() - filtered = filtered.filter( - (network) => - network.id.toLowerCase().includes(query) || - network.shortName.toLowerCase().includes(query) || - network.fullName.toLowerCase().includes(query), - ) - } - - return filtered - }, [networks, searchQuery, showTestnets]) - - const noResults = filteredNetworks.length === 0 && searchQuery !== '' - - return ( - <> - -

- {t('index.supportedNetworks.infoText')}{' '} - - {t('index.supportedNetworks.infoLink')} - - . -

-
- - { - if (!showTestnets) { - if (noResults) { - setSearchQuery('') - } - setShowTestnets(true) - } else { - setShowTestnets(false) - } - }} - /> - - {filteredNetworks.length > 0 ? ( - - ) : ( - setSearchQuery('')} - showTestnets={showTestnets} - onToggleTestnets={() => { - if (!showTestnets) { - if (noResults) { - setSearchQuery('') - } - setShowTestnets(true) - } else { - setShowTestnets(false) - } - }} - /> - )} - - ) -} +export * from './NetworkDetailsPage' +export * from './NetworksTable' +export * from './utils' diff --git a/website/src/supportedNetworks/utils.ts b/website/src/supportedNetworks/utils.ts index f0517c581fc9..ad0fa27a50a5 100644 --- a/website/src/supportedNetworks/utils.ts +++ b/website/src/supportedNetworks/utils.ts @@ -1,31 +1,30 @@ -import { NetworkType } from '@pinax/graph-networks-registry' +import { NetworksRegistry } from '@pinax/graph-networks-registry' -// Networks that should use the "mono" icon variant +// Networks that should use the "mono" icon variant (TODO: add this feature to web3icons?) export const MONO_ICON_NETWORKS = [ + 'arweave-mainnet', + 'autonomys-taurus', + 'expchain-testnet', + 'fraxtal', + 'lens', + 'lens-testnet', + 'linea', + 'linea-sepolia', + 'lumia', + 'mbase', + 'megaeth-testnet', + 'soneium', + 'soneium-testnet', + 'sonic', + 'stellar', 'vana', 'vana-moksha', 'xlayer-mainnet', 'xlayer-sepolia', 'zksync-era', 'zksync-era-sepolia', - 'sonic', - 'soneium-testnet', - 'soneium', - 'linea-sepolia', - 'linea', - 'lens-testnet', - 'expchain-testnet', - 'autonomys-taurus', - 'arweave-mainnet', - 'fraxtal', - 'lumia', - 'mbase', - 'megaeth-testnet', ] -// TODO(@hayderkg, @benface, @0xa3k5): Add network icons to GDS for these networks -export const MISSING_ICON_NETWORKS: string[] = [] - // Networks with Token API support (TODO: remove once the registry has this information) export const TOKEN_API_NETWORKS = ['mainnet', 'base', 'bsc', 'arbitrum-one', 'matic', 'optimism'] @@ -33,80 +32,38 @@ export const getIconVariant = (networkId: string): 'mono' | 'branded' => { return MONO_ICON_NETWORKS.includes(networkId) ? 'mono' : 'branded' } -export const shouldShowSkeleton = (networkId: string): boolean => { - return MISSING_ICON_NETWORKS.includes(networkId) || !networkId -} - -export const supportsTokenAPI = (networkId: string): boolean => { - return TOKEN_API_NETWORKS.includes(networkId) -} - -export interface Network { - id: string - fullName: string - shortName?: string - networkType: NetworkType - graphNode?: { - protocol: string - } - caip2Id: string - nativeToken?: string - docsUrl?: string -} - -export interface NetworkData { - id: string - shortName: string - fullName: string - networkType: NetworkType - caip2Id: string - services: { - subgraphs?: any[] - substreams?: any[] - firehose?: any[] - } -} - -export interface ProcessedNetwork { - id: string - shortName: string - fullName: string - networkType: NetworkType - caip2Id: string - subgraphs: boolean - substreams: boolean - firehose: boolean - tokenapi: boolean - services: { - subgraphs?: any[] - substreams?: any[] - firehose?: any[] - } -} - -export const processNetworksData = (networks: NetworkData[]): ProcessedNetwork[] => { - return networks +export async function getSupportedNetworks() { + const registry = await NetworksRegistry.fromLatestVersion() + return registry.networks .flatMap((network) => { + const evm = network.caip2Id.startsWith('eip155:') const subgraphs = Boolean(network.services.subgraphs?.length) const substreams = Boolean(network.services.substreams?.length) const firehose = Boolean(network.services.firehose?.length) - const tokenapi = TOKEN_API_NETWORKS.includes(network.id) - if (!subgraphs && !substreams && !firehose && !tokenapi) { + const tokenApi = TOKEN_API_NETWORKS.includes(network.id) + if (!subgraphs && !substreams && !firehose && !tokenApi) { return [] } return [ { ...network, + evm, subgraphs, substreams, firehose, - tokenapi, + tokenApi, }, ] }) .sort((a, b) => a.fullName.localeCompare(b.fullName)) } -export const isEVMNetwork = (network: Network | NetworkData): boolean => { - return network.caip2Id.startsWith('eip155:') +export type SupportedNetwork = Awaited>[number] + +export async function getSupportedNetworksStaticProps() { + return { + props: { + networks: await getSupportedNetworks(), + }, + } }