From a458c3ace7ec748d62c4c0e6fc0c000b420c4456 Mon Sep 17 00:00:00 2001 From: Igor Shadurin Date: Fri, 15 Dec 2023 13:49:10 +0300 Subject: [PATCH 01/11] feat: display text status of invites --- src/components/Invites/Invites.tsx | 15 +++++++-------- src/locales/ch-CH.json | 5 +++++ src/locales/de-DE.json | 5 +++++ src/locales/en-US.json | 5 +++++ src/locales/es-ES.json | 5 +++++ src/locales/fr-FR.json | 5 +++++ src/locales/hu-HU.json | 5 +++++ src/locales/it-IT.json | 5 +++++ src/locales/jp-JP.json | 5 +++++ src/locales/pt-PT.json | 5 +++++ src/locales/rs-RS.json | 5 +++++ src/locales/sl-SI.json | 5 +++++ src/locales/tr-TR.json | 5 +++++ 13 files changed, 67 insertions(+), 8 deletions(-) diff --git a/src/components/Invites/Invites.tsx b/src/components/Invites/Invites.tsx index 5291459e..532c8dac 100644 --- a/src/components/Invites/Invites.tsx +++ b/src/components/Invites/Invites.tsx @@ -14,7 +14,6 @@ import BackImage from '@media/UI/invite/back.png'; import EditImage from '@media/UI/invite/pencil.png'; import SaveImage from '@media/UI/invite/check-mark.png'; import DeleteImage from '@media/UI/invite/delete.png'; -import DollarImage from '@media/UI/invite/dollar-sign.png'; import EmptyImage from '@media/UI/invite/empty.png'; import copy from 'copy-to-clipboard'; import { ConfirmDeleteModal } from '@components/Modals'; @@ -167,11 +166,15 @@ const Invites: FC = ({ } const inviteStatusText = intl.get(InviteStatusText[status]); + const inviteStatusTextShort = intl.get(`${InviteStatusText[status]}_SHORT`); return { inviteStatusClass: classes[status], inviteStatusText: inviteStatusText ? inviteStatusText : intl.get('STATUS_IS_NOT_AVAILABLE'), + inviteStatusTextShort: inviteStatusTextShort + ? inviteStatusTextShort + : intl.get('STATUS_IS_NOT_AVAILABLE_SHORT'), }; }; @@ -287,13 +290,9 @@ const Invites: FC = ({ setInviteAction(invite, InviteMode.Delete) } /> - {/* onTopUpInvite && onTopUpInvite(invite)}*/} - {/*/>*/} + )}
Date: Wed, 20 Dec 2023 17:23:45 +0100 Subject: [PATCH 02/11] feat: metamask auto login --- package-lock.json | 368 ++++++++++-------- package.json | 2 + .../Connect/Metamask/MetamaskConnect.tsx | 62 +-- .../Modals/PasswordModal/PasswordModal.tsx | 16 +- src/context/MetamaskContext.tsx | 71 +++- src/pages/_app.tsx | 12 +- src/utils/encryption.ts | 58 +++ src/utils/localStorage.ts | 9 + src/utils/metamask.ts | 24 +- 9 files changed, 414 insertions(+), 208 deletions(-) create mode 100644 src/utils/encryption.ts diff --git a/package-lock.json b/package-lock.json index b9d5d7c5..eabae424 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "axios": "^0.21.1", "copy-to-clipboard": "^3.3.3", "cross-blob": "^3.0.1", + "crypto-js": "^4.2.0", "ethers": "^5.6.9", "file-saver": "^2.0.5", "framer-motion": "^10.12.18", @@ -46,6 +47,7 @@ "@tailwindcss/aspect-ratio": "^0.2.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", + "@types/crypto-js": "^4.2.1", "@types/file-saver": "^2.0.5", "@types/jest": "^29.5.1", "@types/node": "^17.0.9", @@ -77,9 +79,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", - "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", + "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", "dev": true }, "node_modules/@ampproject/remapping": { @@ -94,11 +96,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" @@ -142,11 +145,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -270,9 +273,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } @@ -288,22 +291,23 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "license": "MIT", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -423,27 +427,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "license": "MIT", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -484,11 +489,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "license": "MIT", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -496,9 +502,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1994,32 +2000,32 @@ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -2027,12 +2033,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2344,9 +2350,9 @@ } }, "node_modules/@ethersphere/bee-js/node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -7281,6 +7287,12 @@ "@types/har-format": "*" } }, + "node_modules/@types/crypto-js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz", + "integrity": "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==", + "dev": true + }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -8872,18 +8884,22 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.1", - "license": "ISC", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.4", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 4" } }, "node_modules/browserify-zlib": { @@ -17611,8 +17627,15 @@ "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "node_modules/nanoid": { - "version": "3.3.4", - "license": "MIT", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -18711,7 +18734,9 @@ } }, "node_modules/postcss": { - "version": "8.4.17", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "funding": [ { @@ -18721,11 +18746,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -19266,9 +19294,9 @@ } }, "node_modules/react-devtools-core": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.0.tgz", - "integrity": "sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", "peer": true, "dependencies": { "shell-quote": "^1.6.1", @@ -19615,8 +19643,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -23123,9 +23152,9 @@ }, "dependencies": { "@adobe/css-tools": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", - "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", + "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", "dev": true }, "@ampproject/remapping": { @@ -23136,11 +23165,12 @@ } }, "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" } }, "@babel/compat-data": { @@ -23171,11 +23201,11 @@ } }, "@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "requires": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -23269,9 +23299,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -23280,18 +23310,20 @@ } }, "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -23377,20 +23409,22 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.22.5", @@ -23419,17 +23453,19 @@ } }, "@babel/highlight": { - "version": "7.18.6", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==" + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -24355,39 +24391,39 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", - "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -24631,9 +24667,9 @@ }, "dependencies": { "axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -28091,6 +28127,12 @@ "@types/har-format": "*" } }, + "@types/crypto-js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz", + "integrity": "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==", + "dev": true + }, "@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -29259,17 +29301,19 @@ } }, "browserify-sign": { - "version": "4.2.1", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.4", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" } }, "browserify-zlib": { @@ -35473,7 +35517,9 @@ "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "nanoid": { - "version": "3.3.4" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "nanomatch": { "version": "1.2.13", @@ -36179,10 +36225,12 @@ "peer": true }, "postcss": { - "version": "8.4.17", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -36520,9 +36568,9 @@ } }, "react-devtools-core": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.0.tgz", - "integrity": "sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", "peer": true, "requires": { "shell-quote": "^1.6.1", @@ -36782,7 +36830,9 @@ } }, "readable-stream": { - "version": "3.6.0", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", diff --git a/package.json b/package.json index 186b57df..9e89eaba 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "axios": "^0.21.1", "copy-to-clipboard": "^3.3.3", "cross-blob": "^3.0.1", + "crypto-js": "^4.2.0", "ethers": "^5.6.9", "file-saver": "^2.0.5", "framer-motion": "^10.12.18", @@ -59,6 +60,7 @@ "@tailwindcss/aspect-ratio": "^0.2.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", + "@types/crypto-js": "^4.2.1", "@types/file-saver": "^2.0.5", "@types/jest": "^29.5.1", "@types/node": "^17.0.9", diff --git a/src/components/Connect/Metamask/MetamaskConnect.tsx b/src/components/Connect/Metamask/MetamaskConnect.tsx index 6a1c4ccf..d83fd83b 100644 --- a/src/components/Connect/Metamask/MetamaskConnect.tsx +++ b/src/components/Connect/Metamask/MetamaskConnect.tsx @@ -2,6 +2,8 @@ import { Button } from '@components/Buttons'; import MetamaskIcon from '@media/UI/metamask.svg'; import { decryptWallet, + encryptMnemonic, + getBasicSignature, getBasicSignatureWallet, getMetamaskDeeplinkUrl, isMetamaskAvailable, @@ -9,7 +11,7 @@ import { import { useRouter } from 'next/router'; import { getDefaultNetwork, useFdpStorage } from '@context/FdpStorageContext'; import MetamaskNotFoundModal from '@components/Modals/MetamaskNotFoundModal/MetamaskNotFoundModal'; -import { useContext, useEffect, useState } from 'react'; +import { useContext, useState } from 'react'; import UserContext from '@context/UserContext'; import Spinner from '@components/Spinner/Spinner'; import { getInvite, login } from '@utils/invite'; @@ -17,6 +19,7 @@ import PasswordModal from '@components/Modals/PasswordModal/PasswordModal'; import { isMobile } from 'react-device-detect'; import { useMetamask } from '@context/MetamaskContext'; import { Network } from '@data/networks'; +import { setMetamaskMnemonic } from '@utils/localStorage'; interface MetamaskConnectProps { onConnect: () => void; @@ -37,8 +40,12 @@ const MetamaskConnect = ({ onConnect }: MetamaskConnectProps) => { } = useFdpStorage(); const { setErrorMessage, setAddress, setMnemonic } = useContext(UserContext); const router = useRouter(); - const { connectMetamask, metamaskProvider, metamaskWalletAddress } = - useMetamask(); + const { + loading: metamaskLoading, + connectMetamask, + metamaskProvider, + metamaskWalletAddress, + } = useMetamask(); const [network] = useState(getDefaultNetwork()); /** @@ -60,7 +67,10 @@ const MetamaskConnect = ({ onConnect }: MetamaskConnectProps) => { * * @param password Password from modal input */ - const handlePassword = async (password: string): Promise => { + const handlePassword = async ( + password: string, + saveMnemonic: boolean + ): Promise => { try { const wallet = await decryptWallet(localBasicWallet, password); const mnemonic = wallet.mnemonic.phrase; @@ -74,6 +84,17 @@ const MetamaskConnect = ({ onConnect }: MetamaskConnectProps) => { setAddress(wallet.address); setMnemonic(mnemonic); + if (saveMnemonic) { + const signature = await getBasicSignature( + metamaskProvider, + metamaskWalletAddress + ); + + setMetamaskMnemonic(encryptMnemonic(mnemonic, signature)); + } else { + setMetamaskMnemonic(''); + } + router.push('/drive'); } catch (error) { console.error(error); @@ -99,45 +120,28 @@ const MetamaskConnect = ({ onConnect }: MetamaskConnectProps) => { try { setLoading(true); - await connectMetamask(); + const { provider, account } = await connectMetamask(); + + setLocalBasicWallet(await getBasicSignatureWallet(provider, account)); + + setShowPasswordModal(true); } catch (error) { console.error(error); setErrorMessage(String(error.message || error)); + } finally { setLoading(false); } }; - useEffect(() => { - async function run() { - if (!(metamaskProvider && metamaskWalletAddress)) { - return; - } - - try { - setLocalBasicWallet( - await getBasicSignatureWallet(metamaskProvider, metamaskWalletAddress) - ); - - setShowPasswordModal(true); - } catch (e) { - console.error(e); - } finally { - setLoading(false); - } - } - - run(); - }, [metamaskProvider, metamaskWalletAddress]); - return ( <> +
+
+ - + +
+ {showSubscribed && ( + + )}
); }; diff --git a/src/components/Connect/Metamask/MetamaskConnect.tsx b/src/components/Connect/Metamask/MetamaskConnect.tsx index 9917e233..4a9eef7f 100644 --- a/src/components/Connect/Metamask/MetamaskConnect.tsx +++ b/src/components/Connect/Metamask/MetamaskConnect.tsx @@ -65,7 +65,7 @@ const MetamaskConnect = ({ onConnect }: MetamaskConnectProps) => { const wallet = await decryptWallet(localBasicWallet, password); const mnemonic = wallet.mnemonic.phrase; markInviteAsParticipated(); - setFdpStorageType('native', network.config); + setFdpStorageType('native', network.ensConfig, network.datahubConfig); fdpClientRef.current.account.setAccountFromMnemonic(mnemonic); setIsLoggedIn(true); setLoginType('metamask'); diff --git a/src/components/Dialogs/MetamaskMigrationDialog/MetamaskUsernamePassword.tsx b/src/components/Dialogs/MetamaskMigrationDialog/MetamaskUsernamePassword.tsx index d23cc3df..f8a087be 100644 --- a/src/components/Dialogs/MetamaskMigrationDialog/MetamaskUsernamePassword.tsx +++ b/src/components/Dialogs/MetamaskMigrationDialog/MetamaskUsernamePassword.tsx @@ -40,7 +40,7 @@ export default function MetamaskUsernamePassword({ setLoading(true); setErrorMessage(null); - setFdpStorageConfig(network.config); + setFdpStorageConfig(network.ensConfig, network.datahubConfig); const usernameAvailable = await fdpClientRef.current.account.ens.isUsernameAvailable(username); diff --git a/src/components/DirectoryPath/DirectoryPath.tsx b/src/components/DirectoryPath/DirectoryPath.tsx index a8908fae..8a1667e6 100644 --- a/src/components/DirectoryPath/DirectoryPath.tsx +++ b/src/components/DirectoryPath/DirectoryPath.tsx @@ -3,9 +3,11 @@ import PageDownLight from '@media/UI/page-down-light.svg'; import PageDownDark from '@media/UI/page-down-dark.svg'; import { Button } from '@components/Buttons'; import ThemeContext from '@context/ThemeContext'; +import { useLocales } from '@context/LocalesContext'; interface DirectoryPathProps { podName: string; + subscribedPod: boolean; directory: string; onDirectorySelect: (newDirectory: string) => void; onBackToDrive: () => void; @@ -19,6 +21,7 @@ const selectableClasses = 'cursor-pointer hover:bg-color-shade-dark-3-day'; const DirectoryPath = ({ podName, + subscribedPod, directory, onDirectorySelect, onBackToDrive, @@ -29,6 +32,7 @@ const DirectoryPath = ({ const folders = (directory === 'root' ? '' : directory).split('/'); return [folders, folders.slice(-MAX_FOLDERS)]; }, [directory]); + const { intl } = useLocales(); const offset = folders.length - displayedFolders.length; @@ -54,10 +58,13 @@ const DirectoryPath = ({ )} {offset > 0 &&  / ...} {displayedFolders.map((folder, index) => ( diff --git a/src/components/Dropdowns/DriveItemDropdown/DriveItemMenu.tsx b/src/components/Dropdowns/DriveItemDropdown/DriveItemMenu.tsx index f039a7a9..4cafffd6 100644 --- a/src/components/Dropdowns/DriveItemDropdown/DriveItemMenu.tsx +++ b/src/components/Dropdowns/DriveItemDropdown/DriveItemMenu.tsx @@ -17,6 +17,7 @@ import { getFdpPathByDirectory } from '@api/pod'; import { UpdateDriveProps } from '@interfaces/handlers'; import DropdownTransition from '../DropdownTransition'; import { useLocales } from '@context/LocalesContext'; +import { getPodName, isSharedPod } from '@utils/pod'; interface DriveItemMenuProps extends UpdateDriveProps { type: 'folder' | 'file'; @@ -41,13 +42,15 @@ const DriveItemMenu: FC = ({ const [showConfirmDeleteModal, setShowConfirmDeleteModal] = useState(false); const { intl } = useLocales(); const previewLabel = intl.get(type === 'file' ? 'PREVIEW' : 'OPEN'); + const podName = getPodName(activePod); + const canEdit = !isSharedPod(activePod); const handleDownloadClick = async () => { try { const response = await downloadFile(fdpClientRef.current, { filename: data?.name, directory: directoryName, - podName: activePod, + pod: activePod, }); FileSaver.saveAs(response, data?.name); @@ -80,7 +83,7 @@ const DriveItemMenu: FC = ({ try { await deleteFile(fdpClientRef.current, { file_name: itemName, - podName: activePod, + podName, path: formatDirectory(directoryName), }); @@ -95,7 +98,7 @@ const DriveItemMenu: FC = ({ setShowConfirmDeleteModal(false); removeItemFromCache( userAddress, - activePod, + podName, fdpPath, itemName, ContentType.FILE @@ -118,7 +121,7 @@ const DriveItemMenu: FC = ({ try { await deleteDirectory(fdpClientRef.current, { - podName: activePod, + podName, path: deletePath, }); @@ -133,7 +136,7 @@ const DriveItemMenu: FC = ({ setShowConfirmDeleteModal(false); removeItemFromCache( userAddress, - activePod, + podName, fdpPath, itemName, ContentType.DIRECTORY @@ -162,7 +165,7 @@ const DriveItemMenu: FC = ({
- {type === 'file' ? ( + {type === 'file' && canEdit ? ( = ({ ) : null} - {type === 'file' ? ( + {type === 'file' && canEdit ? ( = ({ ) : null} - - {intl.get('DELETE')} - + {canEdit && ( + + {intl.get('DELETE')} + + )}
@@ -198,7 +203,7 @@ const DriveItemMenu: FC = ({ showModal={showShareFileModal} closeModal={() => setShowShareFileModal(false)} fileName={data?.name} - podName={activePod} + podName={podName} path={formatDirectory(directoryName)} /> ) : null} diff --git a/src/components/Dropdowns/PodDropdown/PodDropdownMenu.tsx b/src/components/Dropdowns/PodDropdown/PodDropdownMenu.tsx index 4aedf1c7..013b8871 100644 --- a/src/components/Dropdowns/PodDropdown/PodDropdownMenu.tsx +++ b/src/components/Dropdowns/PodDropdown/PodDropdownMenu.tsx @@ -5,32 +5,43 @@ import PodContext from '@context/PodContext'; import sortAlphabetically from '@utils/sortAlphabetically'; import DropdownTransition from '../DropdownTransition'; import { useLocales } from '@context/LocalesContext'; +import { getPodName } from '@utils/pod'; +import { PodShareInfo } from '@fairdatasociety/fdp-storage/dist/pod/types'; const PodItem = ({ - podName, + pod, onPodSelect, }: { - podName: string; - onPodSelect: (podName: string) => void; + pod: string | PodShareInfo; + onPodSelect: (podName: string | PodShareInfo) => void; }) => { return ( onPodSelect(podName)} + onClick={() => onPodSelect(pod)} > - {podName} + {getPodName(pod)} ); }; const PodDropdownMenu = () => { - const { activePod, pods, setActivePod, setDirectoryName, directoryName } = - useContext(PodContext); + const { + activePod, + pods, + subscribedPods, + setActivePod, + setDirectoryName, + directoryName, + } = useContext(PodContext); const { intl } = useLocales(); + const podName = getPodName(activePod); - const onPodSelect = (podName: string) => { - setActivePod(podName); + const onPodSelect = (pod: string | PodShareInfo) => { + console.log(pod); + + setActivePod(pod); setDirectoryName('root'); }; @@ -39,9 +50,9 @@ const PodDropdownMenu = () => {

- {activePod || intl.get('SELECT_A_POD')} + {podName || intl.get('SELECT_A_POD')}

- {activePod && directoryName !== 'root' && ( + {podName && directoryName !== 'root' && ( {
{sortAlphabetically(pods?.pod_name).map((podName) => ( - + ))} {sortAlphabetically(pods?.shared_pod_name).map((podName) => ( - + + ))} + + {subscribedPods?.length > 0 && ( +
+ {intl.get('SUBSCRIBED')}: +
+ )} + + {subscribedPods?.map((pod) => ( + ))}
diff --git a/src/components/Dropdowns/PodDropdown/PodDropdownToggle.tsx b/src/components/Dropdowns/PodDropdown/PodDropdownToggle.tsx index 2c30dde3..037085a2 100644 --- a/src/components/Dropdowns/PodDropdown/PodDropdownToggle.tsx +++ b/src/components/Dropdowns/PodDropdown/PodDropdownToggle.tsx @@ -8,12 +8,14 @@ import { Button } from '@components/Buttons'; import PageDownLight from '@media/UI/page-down-light.svg'; import PageDownDark from '@media/UI/page-down-dark.svg'; +import { getPodName, isSharedPod } from '@utils/pod'; const PodDropdownToggele = () => { const { theme } = useContext(ThemeContext); const { loading, activePod, setActivePod, setDirectoryName } = useContext(PodContext); const { intl } = useLocales(); + const podName = getPodName(activePod); const onBackToDrive = () => { setActivePod(''); @@ -22,7 +24,7 @@ const PodDropdownToggele = () => { return ( <> - {activePod && ( + {podName && (
diff --git a/src/components/NavigationBars/MainNavigationBar/MainNavigationBar.tsx b/src/components/NavigationBars/MainNavigationBar/MainNavigationBar.tsx index 0678c37c..e7f344e0 100644 --- a/src/components/NavigationBars/MainNavigationBar/MainNavigationBar.tsx +++ b/src/components/NavigationBars/MainNavigationBar/MainNavigationBar.tsx @@ -16,6 +16,7 @@ import NavigationMenuDark from '@media/UI/drive-view-list-dark.svg'; import ThemeContext from '@context/ThemeContext'; import PodContext from '@context/PodContext'; import { Transition } from '@headlessui/react'; +import { getPodName } from '@utils/pod'; // import ActivityDropdown from './ActivityDropdown/ActivityDropdown'; @@ -26,6 +27,7 @@ const MainNavigationBar: FC> = () => { const { metamaskMigrationNotification } = useContext(UserContext); const { setMobileNavigationOpen } = useDialogs(); const { activePod } = useContext(PodContext); + const podName = getPodName(activePod); return (