From c18382a623581217ec49592d0378f914430c98fa Mon Sep 17 00:00:00 2001 From: Aziz Jalel Date: Wed, 14 Jun 2023 07:29:36 -0700 Subject: [PATCH] big updage --- .prettierrc | 9 - eslintrc.js | 9 +- package-lock.json | 849 ++++++++++++++++++++++++++++- package.json | 16 +- src/components/CircularBar.jsx | 169 ++++++ src/components/Connect.jsx | 39 +- src/components/Content.jsx | 397 +++++++++++--- src/components/Header.jsx | 37 +- src/components/Hero.jsx | 2 +- src/components/Nav.jsx | 60 +- src/firebase/config.js | 11 +- src/firebase/createUserDocument.js | 20 +- src/firebase/submitContract.js | 22 + src/index.jsx | 58 +- src/pages/addContract.js | 741 +++++++++++++++---------- src/pages/contractPage.js | 126 +++++ src/pages/dashboard.js | 55 +- src/pages/homepage.js | 226 +++++--- src/pages/smart-contracts.js | 413 ++++++++++++++ src/styles/style.css | 93 +++- 20 files changed, 2763 insertions(+), 589 deletions(-) delete mode 100644 .prettierrc create mode 100644 src/components/CircularBar.jsx create mode 100644 src/firebase/submitContract.js create mode 100644 src/pages/contractPage.js create mode 100644 src/pages/smart-contracts.js diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index ac10de6..0000000 --- a/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ - -{ - "semi": true, - "tabWidth": 2, - "printWidth": 100, - "singleQuote": true, - "trailingComma": "none", - "jsxBracketSameLine": true -} diff --git a/eslintrc.js b/eslintrc.js index 8fd0afe..69be00a 100644 --- a/eslintrc.js +++ b/eslintrc.js @@ -4,7 +4,7 @@ module.exports = { es2021: true, node: true }, - extends: ['eslint:recommended', 'plugin:react/recommended', 'plugin:prettier/recommended'], + extends: ['eslint:recommended', 'plugin:react/recommended'], overrides: [], parserOptions: { ecmaFeatures: { @@ -14,8 +14,7 @@ module.exports = { sourceType: 'module' }, - plugins: ['react'], - rules: { - 'prettier/prettier': 'warn' - } + plugins: ['react'] + + }; diff --git a/package-lock.json b/package-lock.json index 0bd89e7..3fc5ce2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,21 +8,35 @@ "name": "indexsc", "version": "0.1.0", "dependencies": { - "@headlessui/react": "^1.7.7", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@fortawesome/free-solid-svg-icons": "^6.4.0", + "@fortawesome/react-fontawesome": "^0.2.0", + "@headlessui/react": "^1.7.15", "@heroicons/react": "^1.0.6", + "@mui/material": "^5.13.4", "@tailwindcss/forms": "^0.5.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@textea/json-viewer": "^3.0.0", + "@tippyjs/react": "^4.2.6", "daisyui": "^2.46.1", + "ethereum-indexer-browser": "^0.6.5", + "ethereum-indexer-js-processor": "^0.6.4", "firebase": "^9.15.0", "firebaseui": "^6.0.2", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hook-form": "^7.44.3", "react-router-dom": "^6.6.2", "react-scripts": "^5.0.1", + "react-tippy": "^1.4.0", + "react-tooltip": "^5.13.1", + "reactive-button": "^1.3.13", "tailwindcss": "^3.2.4", + "tippy.js": "^6.3.7", "web-vitals": "^2.1.4", "web3": "^1.8.1", "web3-utils": "^1.8.1" @@ -1835,9 +1849,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", - "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2175,6 +2189,147 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "node_modules/@eslint/eslintrc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", @@ -3081,6 +3236,65 @@ "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.9.0.tgz", "integrity": "sha512-BpiZLBWdLFw+qFel9p3Zs1jD6QmH7Ii4aTDu6+vx8ShdidChZUXqDhYJly4ZjSgQh54miXbBgBrk0S+jTIh/Qg==" }, + "node_modules/@floating-ui/core": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", + "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.9.tgz", + "integrity": "sha512-sosQxsqgxMNkV3C+3UqTS6LxP7isRLwX8WMepp843Rb3/b0Wz8+MdUkxJksByip3C2WwLugLHN1b4ibn//zKwQ==", + "dependencies": { + "@floating-ui/core": "^1.2.6" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", + "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", + "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.4.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", + "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.4.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, "node_modules/@grpc/grpc-js": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", @@ -3158,9 +3372,9 @@ } }, "node_modules/@headlessui/react": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.7.tgz", - "integrity": "sha512-BqDOd/tB9u2tA0T3Z0fn18ktw+KbVwMnkxxsGPIH2hzssrQhKB5n/6StZOyvLYP/FsYtvuXfi9I0YowKPv2c1w==", + "version": "1.7.15", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.15.tgz", + "integrity": "sha512-OTO0XtoRQ6JPB1cKNFYBZv2Q0JMqMGNhYP1CjPvcJvjz8YGokz8oAj89HIYZGN0gZzn/4kk9iUpmMF4Q21Gsqw==", "dependencies": { "client-only": "^0.0.1" }, @@ -4060,6 +4274,237 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/material": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.4.tgz", + "integrity": "sha512-Yq+4f1KLPa/Szd3xqra2hbOAf2Usl8GbubncArM6LIp40mBLtXIdPE29MNtHsbtuzz4g+eidrETgoi3wdbEYfQ==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-beta.4", + "@mui/core-downloads-tracker": "^5.13.4", + "@mui/system": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/private-theming": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.2.tgz", + "integrity": "sha512-TPyWmRJPt0JPVxacZISI4o070xEJ7ftxpVtu6LWuYVOUOINlhoGOclam4iV8PDT3EMQEHuUrwU49po34UdWLlw==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz", + "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -4088,6 +4533,28 @@ "node": ">=4.0" } }, + "node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4169,6 +4636,15 @@ } } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -4665,6 +5141,35 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@textea/json-viewer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@textea/json-viewer/-/json-viewer-3.0.0.tgz", + "integrity": "sha512-rO/JdEcr4dfki0B+nZNAcEMCVCAjLfi0tGgZhm1/33Md5dlVbQAtxaR4rFU5W+tHom9tBBnsTT7d7T1JHkmjAg==", + "dependencies": { + "clsx": "^1.2.1", + "copy-to-clipboard": "^3.3.3", + "zustand": "^4.3.7" + }, + "peerDependencies": { + "@emotion/react": "^11", + "@emotion/styled": "^11", + "@mui/material": "^5", + "react": "^17 || ^18", + "react-dom": "^17 || ^18" + } + }, + "node_modules/@tippyjs/react": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", + "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", + "dependencies": { + "tippy.js": "^6.3.1" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -4994,6 +5499,22 @@ "@types/react": "*" } }, + "node_modules/@types/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-1vz2yObaQkLL7YFe/pme2cpvDsCwI1WXIfL+5eLz0MI9gFG24Re16RzUsI8t9XZn9ZWvgLNDrJBmrqXJO7GNQQ==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -5404,6 +5925,29 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@wagmi/chains": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@wagmi/chains/-/chains-0.2.25.tgz", + "integrity": "sha512-Gah0bgR+14navwxi7xTL2oFB8YgK4qoBPye1b8ucccIwF3Z8Zg1u2gVTDFAyPT4lyB+ZVqwYKs3Y/IkFNG5O4Q==", + "funding": [ + { + "type": "gitcoin", + "url": "https://wagmi.sh/gitcoin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "typescript": ">=4.9.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -5550,6 +6094,20 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, + "node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, "node_modules/abortcontroller-polyfill": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", @@ -6941,6 +7499,11 @@ "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "node_modules/clean-css": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", @@ -6986,6 +7549,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -7272,6 +7843,14 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, "node_modules/core-js": { "version": "3.27.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz", @@ -7855,9 +8434,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/d": { "version": "1.0.1", @@ -8265,6 +8844,15 @@ "utila": "~0.4" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -9430,6 +10018,36 @@ "setimmediate": "^1.0.5" } }, + "node_modules/ethereum-indexer": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/ethereum-indexer/-/ethereum-indexer-0.6.4.tgz", + "integrity": "sha512-KR7ArzFs8e1CP0pfTCJ57GQezTtN8sPL+LP6D+d5l9HW7KyW+C1sox6bZ0oT8oXthrvMeC5ug2NtMwz8V2Bw4Q==", + "dependencies": { + "named-logs": "^0.2.2", + "viem": "^0.1.21" + } + }, + "node_modules/ethereum-indexer-browser": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/ethereum-indexer-browser/-/ethereum-indexer-browser-0.6.5.tgz", + "integrity": "sha512-U9TMFEBvXJaK6lht3/eCW7diLUpyeoWifiJiBb/g+qKPDCZmk2ceAgatnfdbLXoVzMqEVf5KpXR7AymAX3BjtA==", + "dependencies": { + "ethereum-indexer": "0.6.4", + "idb-keyval": "^6.2.0", + "named-logs": "^0.2.2", + "sveltore": "^0.0.2", + "use-stores": "^0.1.0" + } + }, + "node_modules/ethereum-indexer-js-processor": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/ethereum-indexer-js-processor/-/ethereum-indexer-js-processor-0.6.4.tgz", + "integrity": "sha512-MNN1/0SCJZz78BigGlH/zhDUGyden4kwv5ekW1eREfmoYQ03eR0Gdh0EoPtNbPQo8fx3wEvQkUoNfFcHyppt/Q==", + "dependencies": { + "ethereum-indexer": "0.6.4", + "named-logs": "^0.2.2" + } + }, "node_modules/ethereumjs-util": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", @@ -9821,6 +10439,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -10583,6 +11206,19 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -10872,6 +11508,11 @@ "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" }, + "node_modules/idb-keyval": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", + "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" + }, "node_modules/identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", @@ -11452,6 +12093,14 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -14211,6 +14860,11 @@ "buffer": "^5.5.0" } }, + "node_modules/named-logs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/named-logs/-/named-logs-0.2.2.tgz", + "integrity": "sha512-uXvQSEp8W99elz/UFpmptvRkjbr+UwJRfONsTND/W4ncqLlio0hfIBKe2HUhz3pPHhNd1XUoHyf1cn8Pgxt4oA==" + }, "node_modules/nano-json-stream-parser": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", @@ -14972,6 +15626,16 @@ "node": ">=4" } }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/postcss": { "version": "8.4.21", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", @@ -16599,6 +17263,21 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-hook-form": { + "version": "7.44.3", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.44.3.tgz", + "integrity": "sha512-/tHId6p2ViAka1wECMw8FEPn/oz/w226zehHrJyQ1oIzCBNMIJCaj6ZkQcv+MjDxYh9MWR7RQic7Qqwe4a5nkw==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -16744,6 +17423,51 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/react-tippy": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-tippy/-/react-tippy-1.4.0.tgz", + "integrity": "sha512-r/hM5XK9Ztr2ZY7IWKuRmISTlUPS/R6ddz6PO2EuxCgW+4JBcGZRPU06XcVPRDCOIiio8ryBQFrXMhFMhsuaHA==", + "dependencies": { + "popper.js": "^1.11.1" + } + }, + "node_modules/react-tooltip": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.13.1.tgz", + "integrity": "sha512-9NstDFdjyy6cIH9zjeT70zXTHlW/TIGCOWQmhkAyqLFeQioLg1FXvb9ec7AxSpn0zyFUkFSLdFYxZRuewti3Aw==", + "dependencies": { + "@floating-ui/dom": "^1.0.0", + "classnames": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/reactive-button": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/reactive-button/-/reactive-button-1.3.13.tgz", + "integrity": "sha512-IOjpOBn+39rEaYK97FvubWPz+KUCTahbRNoPqduwOsUxle0hHAv5lVd6fynuO+hFc3ECZS4mVRAq0AIyB/kF+w==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -18104,6 +18828,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18138,6 +18867,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sveltore": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/sveltore/-/sveltore-0.0.2.tgz", + "integrity": "sha512-MqUEo9y7Mh4qy5sNEF05+t7sxhGHYa5dv25+xZSulxFMHFlAYUIPAVXp3Eeu6XtpdV0w6P3izmzgwJf07+3UOw==" + }, "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -18634,6 +19368,14 @@ "node": ">=0.10.0" } }, + "node_modules/tippy.js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "dependencies": { + "@popperjs/core": "^2.9.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -18658,6 +19400,11 @@ "node": ">=8.0" } }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -18992,6 +19739,19 @@ "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" }, + "node_modules/use-stores": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/use-stores/-/use-stores-0.1.0.tgz", + "integrity": "sha512-tOrRU5GZlkU5NWsSplQo1oQpmS4Yh5AXOJBnR7Rku/ocpfa1qUZGy1gr+CGyC7NHcggA6ARs9jvkDTv3B9Ks1Q==" + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/utf-8-validate": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", @@ -19105,6 +19865,52 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, + "node_modules/viem": { + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/viem/-/viem-0.1.26.tgz", + "integrity": "sha512-6oSGhDtgb64hjhBxOu5TPy9WT5rMww2iFuDASIOAB6kHJQ2NIVJabrnA/BQoBXbv3SJyyX/622enh5YX8MYTYg==", + "dependencies": { + "@noble/hashes": "^1.1.2", + "@noble/secp256k1": "^1.7.1", + "@wagmi/chains": "~0.2.11", + "abitype": "~0.7.1", + "idna-uts46-hx": "^4.1.2", + "isomorphic-ws": "^5.0.0", + "ws": "^8.12.0" + } + }, + "node_modules/viem/node_modules/idna-uts46-hx": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-4.1.2.tgz", + "integrity": "sha512-EAB3egrcalcTQHcjA7yzXXkE4E09TIFerR//4yUYGYCeCfXmkU0LgsGJgYSIQA1lQunfsn4ZCWJhbelgl3cdiQ==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=16.15.1", + "npm": ">=8.11.1" + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -20473,6 +21279,29 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz", + "integrity": "sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 138a2a8..4f6f708 100644 --- a/package.json +++ b/package.json @@ -3,21 +3,35 @@ "version": "0.1.0", "private": true, "dependencies": { - "@headlessui/react": "^1.7.7", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@fortawesome/free-solid-svg-icons": "^6.4.0", + "@fortawesome/react-fontawesome": "^0.2.0", + "@headlessui/react": "^1.7.15", "@heroicons/react": "^1.0.6", + "@mui/material": "^5.13.4", "@tailwindcss/forms": "^0.5.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@textea/json-viewer": "^3.0.0", + "@tippyjs/react": "^4.2.6", "daisyui": "^2.46.1", + "ethereum-indexer-browser": "^0.6.5", + "ethereum-indexer-js-processor": "^0.6.4", "firebase": "^9.15.0", "firebaseui": "^6.0.2", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hook-form": "^7.44.3", "react-router-dom": "^6.6.2", "react-scripts": "^5.0.1", + "react-tippy": "^1.4.0", + "react-tooltip": "^5.13.1", + "reactive-button": "^1.3.13", "tailwindcss": "^3.2.4", + "tippy.js": "^6.3.7", "web-vitals": "^2.1.4", "web3": "^1.8.1", "web3-utils": "^1.8.1" diff --git a/src/components/CircularBar.jsx b/src/components/CircularBar.jsx new file mode 100644 index 0000000..754cbfc --- /dev/null +++ b/src/components/CircularBar.jsx @@ -0,0 +1,169 @@ +import React from 'react'; + +function shadeColor(color, percent) { + let R = parseInt(color.substring(1, 3), 16); + let G = parseInt(color.substring(3, 5), 16); + let B = parseInt(color.substring(5, 7), 16); + + R = parseInt(`${(R * (100 + percent)) / 100}`, 10); + G = parseInt(`${(G * (100 + percent)) / 100}`, 10); + B = parseInt(`${(B * (100 + percent)) / 100}`, 10); + + R = R < 255 ? R : 255; + G = G < 255 ? G : 255; + B = B < 255 ? B : 255; + + const RR = R.toString(16).length === 1 ? `0${R.toString(16)}` : R.toString(16); + const GG = G.toString(16).length === 1 ? `0${G.toString(16)}` : G.toString(16); + const BB = B.toString(16).length === 1 ? `0${B.toString(16)}` : B.toString(16); + + return `#${RR}${GG}${BB}`; +} + +const DEFAULT_RADIUS = 60; +const MAX_VALUE = 10; + +const Direction = { + CLOCKSWISE: -1, + ANTI_CLOCKWISE: 1, +}; + +type Props = { + maxValue?: number, + selectedValue?: number, + radius?: number, + strokeWidth?: number, + label?: string, + activeStrokeColor?: string, + inactiveStrokeColor?: string, + labelFontSize?: number, + valueFontSize?: number, + withGradient?: boolean, + anticlockwise?: boolean, + initialAngularDisplacement?: number, + backgroundColor?: string, + textColor?: string, +}; + +const CircularProgressBar = ({ + maxValue, + selectedValue, + radius, + strokeWidth, + label, + activeStrokeColor, + inactiveStrokeColor, + backgroundColor, + textColor, + labelFontSize, + valueFontSize, + withGradient, + anticlockwise, + initialAngularDisplacement, +}: Props) => { + // ---- PIE calculation funciton -------- + const generatePie = (value) => { + const x = radius - Math.cos((2 * Math.PI) / (100 / value)) * radius; + const y = radius + Math.sin((2 * Math.PI) / (100 / value)) * radius; + const long = value <= 50 ? 0 : 1; + const d = `M${radius} ${radius} L${radius} ${0} A${radius} ${radius} 0 ${long} 1 ${y} ${x} Z`; + + return d; + }; + + // ---- PIE Area calculation -------- + const calculatePieValue = (numberOfBars) => { + const angle = 360 / numberOfBars; + const pieValue = Math.floor(angle / 4); + return pieValue < 1 ? 1 : Math.floor(angle / 4); + }; + + // ---- PIE render funciton -------- + const renderPie = (i) => { + const DIRECTION = anticlockwise ? Direction.ANTI_CLOCKWISE : Direction.CLOCKSWISE; + // Rotation Calculation + const primaryRotationAngle = (maxValue - 1) * (360 / maxValue); + const rotationAngle = DIRECTION * initialAngularDisplacement + + -1 * DIRECTION * primaryRotationAngle + + i * DIRECTION * primaryRotationAngle; + const rotationTransformation = `rotate(${rotationAngle}, ${radius}, ${radius})`; + + const pieValue = calculatePieValue(maxValue); + const dValue = generatePie(pieValue); + + const activeColor = withGradient + ? shadeColor(activeStrokeColor, ((i + 1) * maxValue) / 50) + : activeStrokeColor; + + const fillColor = selectedValue > 0 && i <= selectedValue + ? activeColor : inactiveStrokeColor; + + return ( + + ); + }; + + // ---- Creates a circle by combining the Pie(s) -------- + const renderOuterCircle = () => [...Array(maxValue + 1)].map((e, i) => renderPie(i)); + + const labelView = ( + + {label} + + ); + + const textValueY = label ? radius : radius + valueFontSize / 3; + + // -------- MAIN Render -------- + return ( + + {renderOuterCircle()} + + {/* This is the overlay circle */} + + + + {selectedValue} + + {!!label.length && labelView} + + ); +}; + +CircularProgressBar.defaultProps = { + maxValue: MAX_VALUE, + selectedValue: 0, + radius: DEFAULT_RADIUS, + strokeWidth: DEFAULT_RADIUS / 10, + label: '', + activeStrokeColor: '#05a168', + inactiveStrokeColor: '#ddd', + backgroundColor: '#fff', + textColor: '#000', + labelFontSize: Math.floor(DEFAULT_RADIUS / 3), + valueFontSize: Math.floor(DEFAULT_RADIUS / 2.5), + withGradient: false, + anticlockwise: false, + initialAngularDisplacement: 0, +}; + +export default CircularProgressBar; \ No newline at end of file diff --git a/src/components/Connect.jsx b/src/components/Connect.jsx index fbc13ad..c583b8f 100644 --- a/src/components/Connect.jsx +++ b/src/components/Connect.jsx @@ -1,21 +1,21 @@ /* eslint-disable no-unused-vars */ /* eslint-disable react/no-unescaped-entities */ -import React, { useState, useEffect, useContext } from 'react'; -import PropTypes from 'prop-types'; +import React, { useState, useEffect, useContext } from "react"; +import PropTypes from "prop-types"; // import Modal from 'react-bootstrap/Modal'; // import Button from 'react-bootstrap/Button'; // import Form from 'react-bootstrap/Form'; // import m from './Magic'; -import { useRef } from 'react'; -import { useLogin } from '../hooks/useLogin'; -import { useLogout } from '../hooks/useLogout'; +import { useRef } from "react"; +import { useLogin } from "../hooks/useLogin"; +import { useLogout } from "../hooks/useLogout"; -import { AuthContext } from '../contexts/AuthContext'; +import { AuthContext } from "../contexts/AuthContext"; // m.auth; const styleButton = { - width: '-webkit-fill-available' + width: "-webkit-fill-available", }; const Connect = ({ display, setDisplay }) => { @@ -25,10 +25,10 @@ const Connect = ({ display, setDisplay }) => { const user = useContext(AuthContext); let connected = false; if (user.user != null) { - console.log('user connected: ', user); + // console.log('user connected: ', user); connected = true; } else { - console.log('user not connected ', user); + // console.log('user not connected ', user); } const displayButton = () => { @@ -40,9 +40,12 @@ const Connect = ({ display, setDisplay }) => { onClick={() => { setDisplay(false); login(); - }}> + }} + > - {isPending ? 'Loading...' : 'Github Login'} + + {isPending ? "Loading..." : "Github"} + ); } else if (connected === true && display === true) { @@ -53,9 +56,12 @@ const Connect = ({ display, setDisplay }) => { onClick={() => { setDisplay(false); logout(); - }}> + }} + > - {isPending ? 'Loading...' : 'Logout'} + + {isPending ? "Loading..." : "Sign Out"} + {/* // add a button to go to dashboard */} @@ -64,7 +70,10 @@ const Connect = ({ display, setDisplay }) => { }; return ( -
+
{displayButton()} {/* setShowModal(false)} /> */} @@ -74,7 +83,7 @@ const Connect = ({ display, setDisplay }) => { Connect.propTypes = { display: PropTypes.bool.isRequired, - setDisplay: PropTypes.func.isRequired + setDisplay: PropTypes.func.isRequired, }; // ShowModal.propTypes = { // show: PropTypes.bool.isRequired, diff --git a/src/components/Content.jsx b/src/components/Content.jsx index a819808..d31060b 100644 --- a/src/components/Content.jsx +++ b/src/components/Content.jsx @@ -1,108 +1,348 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; // ES6 import { Link } from 'react-router-dom'; -const Content = ({ userData }) => { +import { doc, getDoc } from 'firebase/firestore'; +import { db as fsDatabase } from '../firebase/config'; +import { v4 as uuid4 } from 'uuid'; +import { Menu, Transition } from '@headlessui/react'; +import { DownloadIcon, TrashIcon, CheckIcon, RefreshIcon } from '@heroicons/react/outline'; +import Tippy from '@tippyjs/react'; +import 'tippy.js/dist/tippy.css'; // optional for styling +import 'tippy.js/themes/light-border.css'; + +const Content = ({ userData, searchQuery }) => { // console.log('userData', userData); + const [contracts, setContracts] = useState([]); + const [contractsLoaded, setContractsLoaded] = useState(false); + + // console.log('contracts', contracts); + useEffect(() => { + const fetchContracts = async () => { + if (userData === null) { + return; + } + const contractIds = userData.smart_contracts; + // console.log('contractIds', contractIds); + const contract = contractIds.map(async (contractId) => { + const getSc = await getDoc(doc(fsDatabase, 'contracts', contractId)); + let scData; + if (getSc.exists()) { + scData = getSc.data(); + scData.id = contractId; + } else { + // doc.data() will be undefined in this case + scData = null; + } + return scData; + }); + //waity for all promises to resolve + const contractsResolved = await Promise.all(contract); + + setContracts(contractsResolved); + setContractsLoaded(true); + }; + fetchContracts(); + + }, [userData]); + + // filter contracts based on searchQuery on contract.name and contract.address + useEffect(() => { + console.log('searchQuery', searchQuery, contracts) + if (searchQuery === '' || !contractsLoaded) { + return; + } + const filteredContracts = contracts.filter((contract) => { + return contract.name.toLowerCase().includes(searchQuery.toLowerCase()) || + contract.address.toLowerCase().includes(searchQuery.toLowerCase()); + } + ); + setContracts(filteredContracts); + }, [searchQuery, contractsLoaded]); + + // filter contracts based on searchQuery on contract.name and contract.address + useEffect(() => { + console.log('searchQuery', searchQuery, contracts) + if (searchQuery === '') { + return; + } + const filteredContracts = contracts.filter((contract) => { + return contract.name.toLowerCase().includes(searchQuery.toLowerCase()) || + contract.address.toLowerCase().includes(searchQuery.toLowerCase()); + } + ); + setContracts(filteredContracts); + }, [searchQuery]); + + if (userData === null) { return ( <> //
); } + const getEventBadges = (events) => { + const eventNames = Object.keys(events); + const firstThreeEvents = eventNames.slice(0, 3); + const remainingEventsCount = eventNames.length - firstThreeEvents.length; + + const badgeColors = [ + 'bg-red-50', + 'bg-yellow-50', + 'bg-green-50', + 'bg-blue-50', + 'bg-indigo-50', + 'bg-purple-50', + 'bg-pink-50', + ]; + + if (remainingEventsCount === 0) { + // Display a single badge with the number of events on mobile + return ( + <> + ( + + {eventName} + + ))} + placement="top" + theme="light-border" + animateFill={true} + arrow={false} + > + + {eventNames.length} events + + +
+ {firstThreeEvents.map((eventName, index) => ( + + {eventName} + + ))} +
+ + ); + } else { + // Display the first three events and a badge for the remaining events + return ( + <> +
+ + {eventNames.map((eventName, index) => ( + + {eventName} + + ))} + + + )} + placement="top" + theme="light-border" + animateFill={true} + arrow={false} + > + + {eventNames.length} events + + +
+
+ {firstThreeEvents.map((eventName, index) => ( + + {eventName} + + ))} + + {(eventNames.slice(3)).map((eventName, index) => ( + + {eventName} + + ))} +
} + placement="top" + theme="light-border" + animateFill={true} + arrow={false} + > + + +{remainingEventsCount} more + + +
+ + ); + } + }; return (
-
-

+
+

{/* {console.log('content data', userData)} */} Smart Contracts[{userData.smart_contracts.length}]

-
- +
+ Add new contract - - View all - + +
-

Sept 09, 2020

+

Summary

{/* +$87.01 */}
-
-
- {/*
- -
*/} -
-

Alias1

- - 0x0000... - -
-
-
-
- - Syncing - - -
- -
-
-
-
-
-

Alias2

- - 0x0000... - -
-
-
-
- - Complete - - -
- -
-
-
-
-
-

Alias3

- - 0x0000... - + {contracts.slice(0, 4).map((contract) => ( +
+
+
+

+ + {/* ellipse width 60% */} + {/* show name and between parenthesis (0x0000...) */} + {contract.name} ({contract.address.slice(0, 6)}...{contract.address.slice(-4)}) + + +

+ {getEventBadges(contract.events)} +
-
-
-
- Pending - +
+
+ + {contract.status === 'pending' ? ( + <> + Syncing + + ) : ( + 'Complete' + )} + + +
+ + + + + + +
+ + {({ active }) => ( + + )} + + {/* add divider headless*/} + + + + {({ active }) => ( + + )} + + + {({ active }) => ( + + )} + +
+
+
+
-
-
+ ))} +
@@ -117,7 +357,8 @@ const Content = ({ userData }) => { //prop types Content.propTypes = { - userData: PropTypes.object + userData: PropTypes.object, + searchQuery: PropTypes.string, }; export default Content; diff --git a/src/components/Header.jsx b/src/components/Header.jsx index b090c48..5ad2f2b 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,14 +1,16 @@ //export Header -import React, { useState, useContext } from 'react'; +import React, { useState, useContext } from "react"; // import css // import '../styles/style.css'; // import '../styles/icons.css'; -import Connect from './Connect'; -import { AuthContext } from '../contexts/AuthContext'; +import Connect from "./Connect"; +import { AuthContext } from "../contexts/AuthContext"; // Path: indexsc/src/components/Header.jsx +import PropTypes from "prop-types"; -const Header = () => { +const Header = ({ onSearch }) => { const [showConnect, setShowConnect] = useState(false); + const user = useContext(AuthContext); // const display = () => { // return ; @@ -16,10 +18,15 @@ const Header = () => { return (
-

indexsc.

+

smoldata.

- + @@ -27,15 +34,17 @@ const Header = () => {
@@ -45,4 +54,10 @@ const Header = () => { ); }; +// proptypes +// Header.propTypes = { +Header.propTypes = { + onSearch: PropTypes.func.isRequired, +}; + export default Header; diff --git a/src/components/Hero.jsx b/src/components/Hero.jsx index dbb9a28..55385b3 100644 --- a/src/components/Hero.jsx +++ b/src/components/Hero.jsx @@ -16,7 +16,7 @@ const Hero = ({ userData }) => {

Welcome to your dashboard, {userData ? userData.displayName : ''}
- {userData ? userData.smart_contracts.length : 0} Smart Contracts active + {userData ? userData.smart_contracts.length : 0} Smart Contracts indexed

{/*
Available funds to invest: $435.00{' '} diff --git a/src/components/Nav.jsx b/src/components/Nav.jsx index 8eaae0d..b2b27f7 100644 --- a/src/components/Nav.jsx +++ b/src/components/Nav.jsx @@ -1,40 +1,70 @@ -import React from 'react'; +import React from "react"; +import { useNavigate, useLocation } from "react-router-dom"; + // import css const Nav = () => { + const navigate = useNavigate(); + const location = useLocation(); + const [activeTab, setActiveTab] = React.useState("overview"); + + React.useEffect(() => { + const path = location.pathname; + if (path === "/") { + setActiveTab("overview"); + } else if (path === "/smart-contracts") { + setActiveTab("smart-contracts"); + } + }, [location]); + + const handleOverviewClick = () => { + setActiveTab("overview"); + navigate("/"); + }; + + const handleSmartContractsClick = () => { + setActiveTab("smart-contracts"); + navigate("/smart-contracts"); + }; + return ( -

} /> */} - } /> - - -
+ +
+ {/* */} +
+
+ {user && ( +
+
+ )} + + + + } /> + {/* 404: Not Found} /> */} + } /> + } /> + } /> + + +
+
+
+ ); }; diff --git a/src/pages/addContract.js b/src/pages/addContract.js index a5c9144..ce85101 100644 --- a/src/pages/addContract.js +++ b/src/pages/addContract.js @@ -1,8 +1,28 @@ -import React, { useState } from 'react'; -import { pick } from 'lodash'; -import { PropTypes } from 'prop-types'; - +/* eslint-disable no-unused-vars */ +import React, { useState } from "react"; +import { pick } from "lodash"; +import { PropTypes } from "prop-types"; +import { addContract } from "../firebase/submitContract"; //import web3 cdn in browser +import { useForm, useFieldArray } from "react-hook-form"; +import { db as fsDatabase } from "../firebase/config"; +import { + doc as fDoc, + updateDoc as fUpdate, + arrayUnion, +} from "firebase/firestore"; +import { fetchUser } from "../firebase/fetchUser"; +import { ExternalLinkIcon } from "@heroicons/react/solid"; +import { useNavigate } from "react-router-dom"; +import ReactiveButton from "reactive-button"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + faCircleNotch, + faThumbsUp, + faBomb, + faCross, + faX, +} from "@fortawesome/free-solid-svg-icons"; function DateComp(props) { const [startDate, setStartDate] = useState( @@ -10,17 +30,14 @@ function DateComp(props) { ); const [endDate, setEndDate] = useState(new Date()); const [error, setError] = useState(null); - const handleStartDateChange = (event) => { const newStartDate = new Date(event.target.value); if (newStartDate > endDate) { - setError('Start date should be less than end date'); - document.getElementById('save').disabled = true; - + setError("Start date should be less than end date"); + document.getElementById("save").disabled = true; } else if (endDate.getTime() - newStartDate.getTime() > 5184000000) { - setError('Date range should not be more than 2 months'); - document.getElementById('save').disabled = true; - + setError("Date range should not be more than 2 months"); + document.getElementById("save").disabled = true; } else { setError(null); setStartDate(newStartDate); @@ -31,13 +48,11 @@ function DateComp(props) { const handleEndDateChange = (event) => { const newEndDate = new Date(event.target.value); if (newEndDate < startDate) { - setError('End date should be greater than start date'); - document.getElementById('save').disabled = true; - + setError("End date should be greater than start date"); + document.getElementById("save").disabled = true; } else if (newEndDate.getTime() - startDate.getTime() > 5184000000) { - setError('Date range should not be more than 2 months'); - document.getElementById('save').disabled = true; - + setError("Date range should not be more than 2 months"); + document.getElementById("save").disabled = true; } else { setError(null); setEndDate(newEndDate); @@ -48,7 +63,9 @@ function DateComp(props) { return (
-

Timeframe

+

+ Timeframe +

Choose the timeframe you want to index your smart contract for.

@@ -58,11 +75,17 @@ function DateComp(props) {
-