From f7bacd106b0f32d42e9583a14a24acf483f7db08 Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Fri, 27 Sep 2024 14:51:45 +0100 Subject: [PATCH] feat: `create fuels` template revamp (#3125) Co-authored-by: Daniel Bate Co-authored-by: Dhaiwat --- .changeset/tame-moons-clean.md | 5 + apps/create-fuels-counter-guide/.env.example | 3 +- apps/create-fuels-counter-guide/.gitignore | 4 +- .../eslint.config.js | 17 +- .../fuel-toolchain.toml | 4 +- .../fuels.config.ts | 6 +- apps/create-fuels-counter-guide/index.html | 2 +- apps/create-fuels-counter-guide/package.json | 12 +- .../playwright.config.ts | 4 +- .../postcss.config.js | 2 +- .../public/copy.svg | 1 - .../public/{fuel.ico => favicon.ico} | Bin .../public/logo_white.png | Bin 0 -> 33809 bytes apps/create-fuels-counter-guide/src/App.tsx | 102 + .../src/components/Button.tsx | 29 +- .../src/components/Contract.tsx | 139 + .../src/components/Faucet.tsx | 100 + .../src/components/FuelLogo.tsx | 14 - .../src/components/Info.tsx | 47 + .../src/components/Input.tsx | 19 - .../src/components/Layout.tsx | 117 - .../src/components/Link.tsx | 23 - .../src/components/LocalFaucet.tsx | 62 + .../src/components/Predicate.tsx | 220 + .../src/components/Script.tsx | 108 + .../src/components/Wallet.tsx | 75 + .../src/components/WalletDisplay.tsx | 38 - .../src/hooks/useActiveWallet.tsx | 62 - .../src/hooks/useBrowserWallet.tsx | 42 - .../src/hooks/useBurnerWallet.tsx | 50 - .../src/hooks/useFaucet.tsx | 24 - .../src/hooks/useNotification.tsx | 49 + .../src/hooks/useRouter.ts | 35 + apps/create-fuels-counter-guide/src/index.css | 78 + apps/create-fuels-counter-guide/src/lib.ts | 41 - apps/create-fuels-counter-guide/src/lib.tsx | 43 + apps/create-fuels-counter-guide/src/main.tsx | 48 +- .../src/routeTree.gen.ts | 118 - .../src/routes/__root.tsx | 76 - .../src/routes/faucet.lazy.tsx | 88 - .../src/routes/index.lazy.tsx | 156 - .../src/routes/predicate.lazy.tsx | 246 - .../src/routes/script.lazy.tsx | 98 - .../src/sway-api/contract-ids.json | 2 +- .../sway-programs/contract/src/main.sw | 5 +- .../tailwind.config.js | 32 +- .../test/ui/test-ui.sh | 0 .../test/ui/ui.test.ts | 52 +- .../create-fuels-counter-guide/vite.config.ts | 5 +- .../vitest.config.mts | 3 + apps/docs-snippets/package.json | 2 +- apps/docs/spell-check-custom-words.txt | 3 +- .../deploying-a-dapp-to-testnet.md | 10 +- .../src/guide/creating-a-fuel-dapp/index.md | 31 +- .../working-with-predicates.md | 23 +- ...ng-a-fuel-dapp-create-fuels-end-result.png | Bin 203169 -> 287173 bytes ...ng-a-fuel-dapp-create-fuels-split-view.png | Bin 1719910 -> 1633036 bytes .../creating-a-fuel-dapp-wallet-list.png | Bin 0 -> 149510 bytes .../working-with-predicates-end-result.png | Bin 213800 -> 386562 bytes package.json | 6 +- playwright-tests/create-fuels.test.ts | 73 +- pnpm-lock.yaml | 5171 ++++++++++++----- scripts/tests-ui.sh | 2 + scripts/tests-validate.sh | 4 +- templates/nextjs/.env.example | 3 +- templates/nextjs/env | 3 +- templates/nextjs/fuels.config.ts | 9 +- templates/nextjs/package.json | 5 +- templates/nextjs/public/close.svg | 4 - templates/nextjs/public/copy.svg | 1 - .../nextjs/public/{fuel.ico => favicon.ico} | Bin templates/nextjs/public/hamburger.svg | 6 - templates/nextjs/public/logo_white.png | Bin 0 -> 33809 bytes templates/nextjs/src/app/faucet/page.tsx | 104 - templates/nextjs/src/app/layout.tsx | 71 +- templates/nextjs/src/app/page.tsx | 209 +- templates/nextjs/src/app/predicate/page.tsx | 189 - templates/nextjs/src/app/script/page.tsx | 95 - templates/nextjs/src/components/Button.tsx | 29 +- templates/nextjs/src/components/Contract.tsx | 115 + templates/nextjs/src/components/Faucet.tsx | 99 + templates/nextjs/src/components/FuelLogo.tsx | 14 - templates/nextjs/src/components/Info.tsx | 49 + templates/nextjs/src/components/Input.tsx | 19 - templates/nextjs/src/components/Layout.tsx | 22 - .../nextjs/src/components/LocalFaucet.tsx | 66 + templates/nextjs/src/components/Navbar.tsx | 146 - templates/nextjs/src/components/Predicate.tsx | 198 + templates/nextjs/src/components/Script.tsx | 112 + templates/nextjs/src/components/Wallet.tsx | 75 + .../nextjs/src/components/WalletDisplay.tsx | 38 - .../nextjs/src/hooks/useActiveWallet.tsx | 62 - .../nextjs/src/hooks/useBrowserWallet.tsx | 42 - .../nextjs/src/hooks/useBurnerWallet.tsx | 50 - templates/nextjs/src/hooks/useFaucet.tsx | 24 - .../nextjs/src/hooks/useNotification.tsx | 49 + templates/nextjs/src/hooks/useRouter.ts | 35 + templates/nextjs/src/lib.ts | 37 - templates/nextjs/src/lib.tsx | 40 + templates/nextjs/src/styles/globals.css | 78 + .../nextjs/src/sway-api/contract-ids.json | 4 +- templates/nextjs/tailwind.config.ts | 28 +- templates/nextjs/test/ui/ui.test.ts | 24 +- templates/vite/.env.example | 3 +- templates/vite/env | 3 +- templates/vite/eslint.config.js | 17 +- templates/vite/fuels.config.ts | 4 +- templates/vite/index.html | 24 +- templates/vite/package.json | 9 +- templates/vite/postcss.config.js | 2 +- templates/vite/public/close.svg | 4 - templates/vite/public/copy.svg | 1 - .../vite/public/{fuel.ico => favicon.ico} | Bin templates/vite/public/hamburger.svg | 6 - templates/vite/public/logo_white.png | Bin 0 -> 33809 bytes templates/vite/src/App.tsx | 101 + templates/vite/src/components/Button.tsx | 29 +- templates/vite/src/components/Contract.tsx | 115 + templates/vite/src/components/Faucet.tsx | 100 + templates/vite/src/components/FuelLogo.tsx | 14 - templates/vite/src/components/Info.tsx | 49 + templates/vite/src/components/Input.tsx | 19 - templates/vite/src/components/Layout.tsx | 17 - templates/vite/src/components/Link.tsx | 23 - templates/vite/src/components/LocalFaucet.tsx | 66 + templates/vite/src/components/Navbar.tsx | 146 - templates/vite/src/components/Predicate.tsx | 197 + templates/vite/src/components/Script.tsx | 111 + templates/vite/src/components/Wallet.tsx | 75 + .../vite/src/components/WalletDisplay.tsx | 38 - templates/vite/src/hooks/useActiveWallet.tsx | 62 - templates/vite/src/hooks/useBrowserWallet.tsx | 42 - templates/vite/src/hooks/useBurnerWallet.tsx | 50 - templates/vite/src/hooks/useFaucet.tsx | 24 - templates/vite/src/hooks/useNotification.tsx | 49 + templates/vite/src/hooks/useRouter.ts | 35 + templates/vite/src/index.css | 78 + templates/vite/src/lib.ts | 39 - templates/vite/src/lib.tsx | 40 + templates/vite/src/main.tsx | 48 +- templates/vite/src/routeTree.gen.ts | 160 - templates/vite/src/routes/__root.tsx | 80 - templates/vite/src/routes/faucet.lazy.tsx | 107 - templates/vite/src/routes/index.lazy.tsx | 123 - templates/vite/src/routes/predicate.lazy.tsx | 192 - templates/vite/src/routes/script.lazy.tsx | 98 - templates/vite/src/sway-api/contract-ids.json | 2 +- templates/vite/tailwind.config.js | 32 +- templates/vite/test/ui/ui.test.ts | 24 +- templates/vite/vite.config.ts | 5 +- 150 files changed, 7103 insertions(+), 5345 deletions(-) create mode 100644 .changeset/tame-moons-clean.md delete mode 100644 apps/create-fuels-counter-guide/public/copy.svg rename apps/create-fuels-counter-guide/public/{fuel.ico => favicon.ico} (100%) create mode 100644 apps/create-fuels-counter-guide/public/logo_white.png create mode 100644 apps/create-fuels-counter-guide/src/App.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/Contract.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/Faucet.tsx delete mode 100644 apps/create-fuels-counter-guide/src/components/FuelLogo.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/Info.tsx delete mode 100644 apps/create-fuels-counter-guide/src/components/Input.tsx delete mode 100644 apps/create-fuels-counter-guide/src/components/Layout.tsx delete mode 100644 apps/create-fuels-counter-guide/src/components/Link.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/LocalFaucet.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/Predicate.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/Script.tsx create mode 100644 apps/create-fuels-counter-guide/src/components/Wallet.tsx delete mode 100644 apps/create-fuels-counter-guide/src/components/WalletDisplay.tsx delete mode 100644 apps/create-fuels-counter-guide/src/hooks/useActiveWallet.tsx delete mode 100644 apps/create-fuels-counter-guide/src/hooks/useBrowserWallet.tsx delete mode 100644 apps/create-fuels-counter-guide/src/hooks/useBurnerWallet.tsx delete mode 100644 apps/create-fuels-counter-guide/src/hooks/useFaucet.tsx create mode 100644 apps/create-fuels-counter-guide/src/hooks/useNotification.tsx create mode 100644 apps/create-fuels-counter-guide/src/hooks/useRouter.ts delete mode 100644 apps/create-fuels-counter-guide/src/lib.ts create mode 100644 apps/create-fuels-counter-guide/src/lib.tsx delete mode 100644 apps/create-fuels-counter-guide/src/routeTree.gen.ts delete mode 100644 apps/create-fuels-counter-guide/src/routes/__root.tsx delete mode 100644 apps/create-fuels-counter-guide/src/routes/faucet.lazy.tsx delete mode 100644 apps/create-fuels-counter-guide/src/routes/index.lazy.tsx delete mode 100644 apps/create-fuels-counter-guide/src/routes/predicate.lazy.tsx delete mode 100644 apps/create-fuels-counter-guide/src/routes/script.lazy.tsx mode change 100755 => 100644 apps/create-fuels-counter-guide/test/ui/test-ui.sh create mode 100644 apps/docs/src/public/creating-a-fuel-dapp-wallet-list.png delete mode 100644 templates/nextjs/public/close.svg delete mode 100644 templates/nextjs/public/copy.svg rename templates/nextjs/public/{fuel.ico => favicon.ico} (100%) delete mode 100644 templates/nextjs/public/hamburger.svg create mode 100644 templates/nextjs/public/logo_white.png delete mode 100644 templates/nextjs/src/app/faucet/page.tsx delete mode 100644 templates/nextjs/src/app/predicate/page.tsx delete mode 100644 templates/nextjs/src/app/script/page.tsx create mode 100644 templates/nextjs/src/components/Contract.tsx create mode 100644 templates/nextjs/src/components/Faucet.tsx delete mode 100644 templates/nextjs/src/components/FuelLogo.tsx create mode 100644 templates/nextjs/src/components/Info.tsx delete mode 100644 templates/nextjs/src/components/Input.tsx delete mode 100644 templates/nextjs/src/components/Layout.tsx create mode 100644 templates/nextjs/src/components/LocalFaucet.tsx delete mode 100644 templates/nextjs/src/components/Navbar.tsx create mode 100644 templates/nextjs/src/components/Predicate.tsx create mode 100644 templates/nextjs/src/components/Script.tsx create mode 100644 templates/nextjs/src/components/Wallet.tsx delete mode 100644 templates/nextjs/src/components/WalletDisplay.tsx delete mode 100644 templates/nextjs/src/hooks/useActiveWallet.tsx delete mode 100644 templates/nextjs/src/hooks/useBrowserWallet.tsx delete mode 100644 templates/nextjs/src/hooks/useBurnerWallet.tsx delete mode 100644 templates/nextjs/src/hooks/useFaucet.tsx create mode 100644 templates/nextjs/src/hooks/useNotification.tsx create mode 100644 templates/nextjs/src/hooks/useRouter.ts delete mode 100644 templates/nextjs/src/lib.ts create mode 100644 templates/nextjs/src/lib.tsx delete mode 100644 templates/vite/public/close.svg delete mode 100644 templates/vite/public/copy.svg rename templates/vite/public/{fuel.ico => favicon.ico} (100%) delete mode 100644 templates/vite/public/hamburger.svg create mode 100644 templates/vite/public/logo_white.png create mode 100644 templates/vite/src/App.tsx create mode 100644 templates/vite/src/components/Contract.tsx create mode 100644 templates/vite/src/components/Faucet.tsx delete mode 100644 templates/vite/src/components/FuelLogo.tsx create mode 100644 templates/vite/src/components/Info.tsx delete mode 100644 templates/vite/src/components/Input.tsx delete mode 100644 templates/vite/src/components/Layout.tsx delete mode 100644 templates/vite/src/components/Link.tsx create mode 100644 templates/vite/src/components/LocalFaucet.tsx delete mode 100644 templates/vite/src/components/Navbar.tsx create mode 100644 templates/vite/src/components/Predicate.tsx create mode 100644 templates/vite/src/components/Script.tsx create mode 100644 templates/vite/src/components/Wallet.tsx delete mode 100644 templates/vite/src/components/WalletDisplay.tsx delete mode 100644 templates/vite/src/hooks/useActiveWallet.tsx delete mode 100644 templates/vite/src/hooks/useBrowserWallet.tsx delete mode 100644 templates/vite/src/hooks/useBurnerWallet.tsx delete mode 100644 templates/vite/src/hooks/useFaucet.tsx create mode 100644 templates/vite/src/hooks/useNotification.tsx create mode 100644 templates/vite/src/hooks/useRouter.ts delete mode 100644 templates/vite/src/lib.ts create mode 100644 templates/vite/src/lib.tsx delete mode 100644 templates/vite/src/routeTree.gen.ts delete mode 100644 templates/vite/src/routes/__root.tsx delete mode 100644 templates/vite/src/routes/faucet.lazy.tsx delete mode 100644 templates/vite/src/routes/index.lazy.tsx delete mode 100644 templates/vite/src/routes/predicate.lazy.tsx delete mode 100644 templates/vite/src/routes/script.lazy.tsx diff --git a/.changeset/tame-moons-clean.md b/.changeset/tame-moons-clean.md new file mode 100644 index 00000000000..42d7a85bb8b --- /dev/null +++ b/.changeset/tame-moons-clean.md @@ -0,0 +1,5 @@ +--- +"create-fuels": patch +--- + +feat: `create fuels` template revamp diff --git a/apps/create-fuels-counter-guide/.env.example b/apps/create-fuels-counter-guide/.env.example index e9a1ac1f1de..2bc55e185bf 100644 --- a/apps/create-fuels-counter-guide/.env.example +++ b/apps/create-fuels-counter-guide/.env.example @@ -1,2 +1,3 @@ VITE_FUEL_NODE_PORT=4000 -VITE_DAPP_ENVIRONMENT=local \ No newline at end of file +VITE_DAPP_ENVIRONMENT=local +VITE_GENESIS_WALLET_PRIVATE_KEY=0x01 \ No newline at end of file diff --git a/apps/create-fuels-counter-guide/.gitignore b/apps/create-fuels-counter-guide/.gitignore index 7ea0ef9b6b2..e88e6b4af18 100644 --- a/apps/create-fuels-counter-guide/.gitignore +++ b/apps/create-fuels-counter-guide/.gitignore @@ -33,5 +33,5 @@ src/sway-api/index.ts sway-programs/**/out .turbo -playwright-report -test-results \ No newline at end of file +test-results +playwright-report \ No newline at end of file diff --git a/apps/create-fuels-counter-guide/eslint.config.js b/apps/create-fuels-counter-guide/eslint.config.js index c4bc8f33c0b..714d9a5246c 100644 --- a/apps/create-fuels-counter-guide/eslint.config.js +++ b/apps/create-fuels-counter-guide/eslint.config.js @@ -1,8 +1,8 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import tseslint from 'typescript-eslint' +import js from '@eslint/js'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; export default tseslint.config({ extends: [js.configs.recommended, ...tseslint.configs.recommended], @@ -18,9 +18,6 @@ export default tseslint.config({ }, rules: { ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], + 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], }, -}) +}); diff --git a/apps/create-fuels-counter-guide/fuel-toolchain.toml b/apps/create-fuels-counter-guide/fuel-toolchain.toml index cf8d5119a82..8bf9fc3664b 100644 --- a/apps/create-fuels-counter-guide/fuel-toolchain.toml +++ b/apps/create-fuels-counter-guide/fuel-toolchain.toml @@ -2,5 +2,5 @@ channel = "testnet" [components] -forc = "0.63.1" -fuel-core = "0.34.0" +forc = "0.63.5" +fuel-core = "0.35.0" diff --git a/apps/create-fuels-counter-guide/fuels.config.ts b/apps/create-fuels-counter-guide/fuels.config.ts index 1c0ea70a379..0d70c7d00bc 100644 --- a/apps/create-fuels-counter-guide/fuels.config.ts +++ b/apps/create-fuels-counter-guide/fuels.config.ts @@ -1,7 +1,7 @@ // #region fuels-config-file-env import { createConfig } from 'fuels'; import dotenv from 'dotenv'; -import { NODE_URL } from './src/lib'; +import { providerUrl } from './src/lib'; dotenv.config({ path: ['.env.local', '.env'], @@ -14,8 +14,8 @@ export default createConfig({ workspace: './sway-programs', // Path to your Sway workspace output: './src/sway-api', // Where your generated types will be saved fuelCorePort, - providerUrl: NODE_URL, - fuelCorePath: 'fuels-core', + providerUrl, forcPath: 'fuels-forc', + fuelCorePath: 'fuels-core', }); // #endregion fuels-config-file-env \ No newline at end of file diff --git a/apps/create-fuels-counter-guide/index.html b/apps/create-fuels-counter-guide/index.html index 999540e98ed..fda9ea040f7 100644 --- a/apps/create-fuels-counter-guide/index.html +++ b/apps/create-fuels-counter-guide/index.html @@ -3,7 +3,7 @@ - + Fuel dApp diff --git a/apps/create-fuels-counter-guide/package.json b/apps/create-fuels-counter-guide/package.json index aa3507ae139..8f3698d79f4 100644 --- a/apps/create-fuels-counter-guide/package.json +++ b/apps/create-fuels-counter-guide/package.json @@ -17,24 +17,22 @@ "@fuels/connectors": "^0.27.1", "@fuels/react": "^0.27.1", "@tanstack/react-query": "^5.55.4", - "@tanstack/react-router": "^1.58.3", - "fuels": "workspace:*", + "clsx": "2.1.1", "@wagmi/connectors": "^5.1.12", "@wagmi/core": "^2.13.6", "dotenv": "^16.4.5", + "fuels": "workspace:*", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-hot-toast": "^2.4.1", - "react-use": "^17.5.1" + "react-toastify": "^10.0.5" }, "devDependencies": { + "@vitejs/plugin-react": "^4.3.1", "@eslint/js": "^9.10.0", - "@tanstack/router-plugin": "^1.56.4", "@types/node": "^22.5.5", "@playwright/test": "^1.47.2", "@types/react": "^18.3.8", "@types/react-dom": "^18.3", - "@vitejs/plugin-react-swc": "^3.7.0", "autoprefixer": "^10.4.20", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", @@ -45,6 +43,6 @@ "typescript": "~5.6.2", "typescript-eslint": "^8.5.0", "vite": "^5.4.7", - "vitest": "^2.0.5" + "vitest": "~2.0.5" } } diff --git a/apps/create-fuels-counter-guide/playwright.config.ts b/apps/create-fuels-counter-guide/playwright.config.ts index f085454c869..93a1f056062 100644 --- a/apps/create-fuels-counter-guide/playwright.config.ts +++ b/apps/create-fuels-counter-guide/playwright.config.ts @@ -37,6 +37,6 @@ export default defineConfig({ command: 'pnpm run fuels:dev', port: 4000, reuseExistingServer: !process.env.CI, - } - ] + }, + ], }); diff --git a/apps/create-fuels-counter-guide/postcss.config.js b/apps/create-fuels-counter-guide/postcss.config.js index 2e7af2b7f1a..2aa7205d4b4 100644 --- a/apps/create-fuels-counter-guide/postcss.config.js +++ b/apps/create-fuels-counter-guide/postcss.config.js @@ -3,4 +3,4 @@ export default { tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/apps/create-fuels-counter-guide/public/copy.svg b/apps/create-fuels-counter-guide/public/copy.svg deleted file mode 100644 index 132dc32ce7c..00000000000 --- a/apps/create-fuels-counter-guide/public/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/create-fuels-counter-guide/public/fuel.ico b/apps/create-fuels-counter-guide/public/favicon.ico similarity index 100% rename from apps/create-fuels-counter-guide/public/fuel.ico rename to apps/create-fuels-counter-guide/public/favicon.ico diff --git a/apps/create-fuels-counter-guide/public/logo_white.png b/apps/create-fuels-counter-guide/public/logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..39bfbae892b72618a6de9a2778db1b72657820ee GIT binary patch literal 33809 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 CnJfkX literal 0 HcmV?d00001 diff --git a/apps/create-fuels-counter-guide/src/App.tsx b/apps/create-fuels-counter-guide/src/App.tsx new file mode 100644 index 00000000000..0ab05d2a1c4 --- /dev/null +++ b/apps/create-fuels-counter-guide/src/App.tsx @@ -0,0 +1,102 @@ +import { useConnectUI, useIsConnected, useNetwork } from "@fuels/react"; +import { useEffect } from "react"; + +import { useRouter } from "./hooks/useRouter"; +import Button from "./components/Button"; +import Info from "./components/Info"; +import Wallet from "./components/Wallet"; +import Contract from "./components/Contract"; +import Predicate from "./components/Predicate"; +import Script from "./components/Script"; +import Faucet from "./components/Faucet"; +import { providerUrl } from './lib' + +function App() { + const { connect } = useConnectUI(); + const { isConnected, refetch } = useIsConnected(); + const { network } = useNetwork(); + const { view, views, setRoute } = useRouter(); + const isConnectedToCorrectNetwork = network?.url === providerUrl; + + + useEffect(() => { + refetch(); + }, [refetch]); + + return ( +

+
+ + +
+
+
+ +
+
+ {!isConnected && ( +
+ +
+ )} + + {isConnected && !isConnectedToCorrectNetwork && ( +
+

+ You are connected to the wrong network. Please switch to{" "} + + {providerUrl} + +  in your wallet. +

+
+ )} + + {isConnected && isConnectedToCorrectNetwork && ( +
+
+ {views.map((viewName) => ( + + ))} +
+ + {view === "wallet" && } + {view === "contract" && } + {view === "predicate" && } + {view === "script" && - - - \ No newline at end of file + +
+ + + diff --git a/templates/vite/package.json b/templates/vite/package.json index de5ccf3f546..d0fc36f802b 100644 --- a/templates/vite/package.json +++ b/templates/vite/package.json @@ -16,23 +16,22 @@ "@fuels/connectors": "^0.27.1", "@fuels/react": "^0.27.1", "@tanstack/react-query": "^5.55.4", - "@tanstack/react-router": "^1.58.3", + "clsx": "2.1.1", "@wagmi/connectors": "^5.1.12", "@wagmi/core": "^2.13.6", "dotenv": "^16.4.5", "fuels": "workspace:*", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-hot-toast": "^2.4.1", - "react-use": "^17.5.1" + "react-toastify": "^10.0.5" }, "devDependencies": { + "@vitejs/plugin-react": "^4.3.1", "@eslint/js": "^9.10.0", "@tanstack/router-plugin": "^1.56.4", "@playwright/test": "^1.47.2", "@types/react": "^18.3.8", "@types/react-dom": "^18.3", - "@vitejs/plugin-react-swc": "^3.7.0", "autoprefixer": "^10.4.20", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", @@ -43,6 +42,6 @@ "typescript": "~5.6.2", "typescript-eslint": "^8.5.0", "vite": "^5.4.7", - "vitest": "^2.0.5" + "vitest": "~2.0.5" } } diff --git a/templates/vite/postcss.config.js b/templates/vite/postcss.config.js index 2e7af2b7f1a..2aa7205d4b4 100644 --- a/templates/vite/postcss.config.js +++ b/templates/vite/postcss.config.js @@ -3,4 +3,4 @@ export default { tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/templates/vite/public/close.svg b/templates/vite/public/close.svg deleted file mode 100644 index 68c77b1b014..00000000000 --- a/templates/vite/public/close.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/templates/vite/public/copy.svg b/templates/vite/public/copy.svg deleted file mode 100644 index 132dc32ce7c..00000000000 --- a/templates/vite/public/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/vite/public/fuel.ico b/templates/vite/public/favicon.ico similarity index 100% rename from templates/vite/public/fuel.ico rename to templates/vite/public/favicon.ico diff --git a/templates/vite/public/hamburger.svg b/templates/vite/public/hamburger.svg deleted file mode 100644 index 6e4f6fd75ca..00000000000 --- a/templates/vite/public/hamburger.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/templates/vite/public/logo_white.png b/templates/vite/public/logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..39bfbae892b72618a6de9a2778db1b72657820ee GIT binary patch literal 33809 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 CnJfkX literal 0 HcmV?d00001 diff --git a/templates/vite/src/App.tsx b/templates/vite/src/App.tsx new file mode 100644 index 00000000000..ba054a3e70d --- /dev/null +++ b/templates/vite/src/App.tsx @@ -0,0 +1,101 @@ +import { useConnectUI, useIsConnected, useNetwork } from "@fuels/react"; +import { useEffect } from "react"; + +import { useRouter } from "./hooks/useRouter"; +import Button from "./components/Button"; +import Info from "./components/Info"; +import Wallet from "./components/Wallet"; +import Contract from "./components/Contract"; +import Predicate from "./components/Predicate"; +import Script from "./components/Script"; +import Faucet from "./components/Faucet"; +import { providerUrl } from "./lib.tsx"; + +function App() { + const { connect } = useConnectUI(); + const { isConnected, refetch } = useIsConnected(); + const { network } = useNetwork(); + const { view, views, setRoute } = useRouter(); + const isConnectedToCorrectNetwork = network?.url === providerUrl; + + useEffect(() => { + refetch(); + }, [refetch]); + + return ( +

+
+ + +
+
+
+ +
+
+ {!isConnected && ( +
+ +
+ )} + + {isConnected && !isConnectedToCorrectNetwork && ( +
+

+ You are connected to the wrong network. Please switch to{" "} + + {providerUrl} + +  in your wallet. +

+
+ )} + + {isConnected && isConnectedToCorrectNetwork && ( +
+
+ {views.map((viewName) => ( + + ))} +
+ + {view === "wallet" && } + {view === "contract" && } + {view === "predicate" && } + {view === "script" &&