From dc52e401bb03d30fc1314fcb9c126673a1444ce2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 21:01:33 +0000 Subject: [PATCH 01/35] build(deps-dev): bump concurrently from 8.2.2 to 9.1.0 Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 8.2.2 to 9.1.0. - [Release notes](https://github.com/open-cli-tools/concurrently/releases) - [Commits](https://github.com/open-cli-tools/concurrently/compare/v8.2.2...v9.1.0) --- updated-dependencies: - dependency-name: concurrently dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 35 +++++------------------------------ package.json | 2 +- 2 files changed, 6 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31ab7221..5fa7f92c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "@typescript-eslint/parser": "^6.21.0", "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", - "concurrently": "^8.2.2", + "concurrently": "^9.1.0", "cross-env": "^7.0.3", "electron": "^33.2.1", "electron-builder": "^25.1.8", @@ -4041,18 +4041,16 @@ } }, "node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.0.tgz", + "integrity": "sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", - "date-fns": "^2.30.0", "lodash": "^4.17.21", "rxjs": "^7.8.1", "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", "yargs": "^17.7.2" @@ -4062,7 +4060,7 @@ "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": "^14.13.0 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" @@ -4583,23 +4581,6 @@ "node": ">=8" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -10749,12 +10730,6 @@ "source-map": "^0.6.0" } }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", diff --git a/package.json b/package.json index 9ed988a6..1b269ac1 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@typescript-eslint/parser": "^6.21.0", "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", - "concurrently": "^8.2.2", + "concurrently": "^9.1.0", "cross-env": "^7.0.3", "electron": "^33.2.1", "electron-builder": "^25.1.8", From c48fb549b4df69e812f147197e862c79f654d919 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:39:03 +0000 Subject: [PATCH 02/35] build(deps): bump react-icons from 5.3.0 to 5.4.0 Bumps [react-icons](https://github.com/react-icons/react-icons) from 5.3.0 to 5.4.0. - [Release notes](https://github.com/react-icons/react-icons/releases) - [Commits](https://github.com/react-icons/react-icons/compare/v5.3.0...v5.4.0) --- updated-dependencies: - dependency-name: react-icons dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9ce6fb3..e6e7f596 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "react": "^18.3.1", "react-content-loader": "^7.0.2", "react-dom": "^18.3.1", - "react-icons": "^5.3.0", + "react-icons": "^5.4.0", "react-intl": "^6.8.9", "react-redux": "^9.1.2", "react-router-dom": "^6.28.0", @@ -9782,9 +9782,9 @@ "license": "MIT" }, "node_modules/react-icons": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz", - "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.4.0.tgz", + "integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==", "license": "MIT", "peerDependencies": { "react": "*" diff --git a/package.json b/package.json index 52affce7..2d782b2b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "react": "^18.3.1", "react-content-loader": "^7.0.2", "react-dom": "^18.3.1", - "react-icons": "^5.3.0", + "react-icons": "^5.4.0", "react-intl": "^6.8.9", "react-redux": "^9.1.2", "react-router-dom": "^6.28.0", From 9757bd4326ddde21a3d0e272e7b403f829e8c1ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:39:22 +0000 Subject: [PATCH 03/35] build(deps): bump react-router-dom from 6.28.0 to 7.0.2 Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.28.0 to 7.0.2. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.0.2/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 74 ++++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9ce6fb3..6e0ff9b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-icons": "^5.3.0", "react-intl": "^6.8.9", "react-redux": "^9.1.2", - "react-router-dom": "^6.28.0", + "react-router-dom": "^7.0.2", "redux-persist": "^6.0.0", "simplebar": "^6.2.7", "simplebar-react": "^3.2.6", @@ -1586,15 +1586,6 @@ } } }, - "node_modules/@remix-run/router": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", - "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", @@ -2202,6 +2193,12 @@ "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -4456,6 +4453,15 @@ "node": ">=10" } }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -9847,35 +9853,43 @@ } }, "node_modules/react-router": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", - "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.2.tgz", + "integrity": "sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.21.0" + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8" + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, "node_modules/react-router-dom": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", - "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.2.tgz", + "integrity": "sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.21.0", - "react-router": "6.28.0" + "react-router": "7.0.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/read-binary-file-arch": { @@ -10525,6 +10539,12 @@ "dev": true, "license": "ISC" }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -11698,6 +11718,12 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 52affce7..9ab606cd 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "react-icons": "^5.3.0", "react-intl": "^6.8.9", "react-redux": "^9.1.2", - "react-router-dom": "^6.28.0", + "react-router-dom": "^7.0.2", "redux-persist": "^6.0.0", "simplebar": "^6.2.7", "simplebar-react": "^3.2.6", From 28de1e66cbf28d56e702975bc0a8103320e07860 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 20:24:55 +0000 Subject: [PATCH 04/35] build(deps-dev): bump vite from 5.4.11 to 6.0.3 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.11 to 6.0.3. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.0.3/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 312 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 159 insertions(+), 155 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9ce6fb3..483aee30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "standard-version": "^9.5.0", "tailwindcss": "^3.4.15", "typescript": "^5.7.2", - "vite": "^5.4.11", + "vite": "^6.0.3", "wait-on": "^8.0.1" }, "engines": { @@ -535,394 +535,387 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -5546,42 +5539,42 @@ "optional": true }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/escalade": { @@ -11906,21 +11899,20 @@ } }, "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", + "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", "dev": true, - "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -11929,19 +11921,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -11962,6 +11960,12 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, diff --git a/package.json b/package.json index 52affce7..8fe9b638 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "standard-version": "^9.5.0", "tailwindcss": "^3.4.15", "typescript": "^5.7.2", - "vite": "^5.4.11", + "vite": "^6.0.3", "wait-on": "^8.0.1" }, "standard-version": { From 31f0041d6f2f6a3936c84c9661ea1012e08ed879 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 20:25:02 +0000 Subject: [PATCH 05/35] build(deps-dev): bump eslint-plugin-react-hooks from 4.6.2 to 5.1.0 Bumps [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) from 4.6.2 to 5.1.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/HEAD/packages/eslint-plugin-react-hooks) --- updated-dependencies: - dependency-name: eslint-plugin-react-hooks dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 11 +++++------ package.json | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9ce6fb3..ba7343f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "electron": "^33.2.1", "electron-builder": "^25.1.8", "eslint": "^8.57.1", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", "husky": "^9.1.7", "lint-staged": "^15.2.10", @@ -5665,16 +5665,15 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react-refresh": { diff --git a/package.json b/package.json index 52affce7..b5a746fa 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "electron": "^33.2.1", "electron-builder": "^25.1.8", "eslint": "^8.57.1", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", "husky": "^9.1.7", "lint-staged": "^15.2.10", From 6c2a6bdbc72a084e65f1a63bb8c4143e78039173 Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Wed, 18 Dec 2024 19:15:52 +0000 Subject: [PATCH 06/35] Update dependabot --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f7d56e2c..2ba36cb5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -34,7 +34,7 @@ updates: reviewers: ["emlowe", "altendky"] - package-ecosystem: "github-actions" - directory: / + directories: ["/", ".github/actions/*"] schedule: interval: "weekly" day: "tuesday" From 3023c92eb22927004644095b99e38dd33beae25e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:37:12 +0000 Subject: [PATCH 07/35] build(deps-dev): bump tailwindcss from 3.4.15 to 3.4.17 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.15 to 3.4.17. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.17/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.15...v3.4.17) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 51 ++++++++++------------------------------------- package.json | 2 +- 2 files changed, 11 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51864545..ce4634e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "climate-tokenization-engine-ui", - "version": "1.2.3", + "version": "1.2.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "climate-tokenization-engine-ui", - "version": "1.2.3", + "version": "1.2.4", "dependencies": { "@reduxjs/toolkit": "^2.4.0", "@types/styled-components": "^5.1.34", @@ -53,7 +53,7 @@ "postcss": "^8.4.49", "prettier": "^3.4.1", "standard-version": "^9.5.0", - "tailwindcss": "^3.4.15", + "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite": "^6.0.3", "wait-on": "^8.0.1" @@ -99,19 +99,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@commitlint/config-conventional": { "version": "19.6.0", "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz", @@ -7672,10 +7659,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "license": "MIT", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "engines": { "node": ">=14" }, @@ -10131,13 +10117,6 @@ "redux": "^5.0.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11366,10 +11345,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", - "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", - "license": "MIT", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -11380,7 +11358,7 @@ "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.6", - "lilconfig": "^2.1.0", + "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", @@ -11402,15 +11380,6 @@ "node": ">=14.0.0" } }, - "node_modules/tailwindcss/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", diff --git a/package.json b/package.json index 039dcff5..35f62324 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "postcss": "^8.4.49", "prettier": "^3.4.1", "standard-version": "^9.5.0", - "tailwindcss": "^3.4.15", + "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite": "^6.0.3", "wait-on": "^8.0.1" From 91981fac46b04728b62afbe7fe4fa55b733f26ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:38:31 +0000 Subject: [PATCH 08/35] build(deps): bump react-intl from 6.8.9 to 7.0.4 Bumps [react-intl](https://github.com/formatjs/formatjs) from 6.8.9 to 7.0.4. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/react-intl@6.8.9...react-intl@7.0.4) --- updated-dependencies: - dependency-name: react-intl dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 130 ++++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 52 insertions(+), 80 deletions(-) diff --git a/package-lock.json b/package-lock.json index a82dc9a2..323f6afc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "react-content-loader": "^7.0.2", "react-dom": "^18.3.1", "react-icons": "^5.4.0", - "react-intl": "^6.8.9", + "react-intl": "^7.0.4", "react-redux": "^9.1.2", "react-router-dom": "^7.0.2", "redux-persist": "^6.0.0", @@ -1046,62 +1046,56 @@ "license": "MIT" }, "node_modules/@formatjs/ecma402-abstract": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", - "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.1.tgz", + "integrity": "sha512-Ip9uV+/MpLXWRk03U/GzeJMuPeOXpJBSB5V1tjA6kJhvqssye5J5LoYLc7Z5IAHb7nR62sRoguzrFiVCP/hnzw==", "dependencies": { - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/intl-localematcher": "0.5.8", + "@formatjs/fast-memoize": "2.2.5", + "@formatjs/intl-localematcher": "0.5.9", + "decimal.js": "10", "tslib": "2" } }, "node_modules/@formatjs/fast-memoize": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.3.tgz", - "integrity": "sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==", - "license": "MIT", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.5.tgz", + "integrity": "sha512-6PoewUMrrcqxSoBXAOJDiW1m+AmkrAj0RiXnOMD59GRaswjXhm3MDhgepXPBgonc09oSirAJTsAggzAGQf6A6g==", "dependencies": { "tslib": "2" } }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz", - "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==", - "license": "MIT", + "version": "2.9.7", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.7.tgz", + "integrity": "sha512-cuEHyRM5VqLQobANOjtjlgU7+qmk9Q3fDQuBiRRJ3+Wp3ZoZhpUPtUfuimZXsir6SaI2TaAJ+SLo9vLnV5QcbA==", "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/icu-skeleton-parser": "1.8.8", + "@formatjs/ecma402-abstract": "2.3.1", + "@formatjs/icu-skeleton-parser": "1.8.11", "tslib": "2" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz", - "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==", - "license": "MIT", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.11.tgz", + "integrity": "sha512-8LlHHE/yL/zVJZHAX3pbKaCjZKmBIO6aJY1mkVh4RMSEu/2WRZ4Ysvv3kKXJ9M8RJLBHdnk1/dUQFdod1Dt7Dw==", "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/ecma402-abstract": "2.3.1", "tslib": "2" } }, "node_modules/@formatjs/intl": { - "version": "2.10.15", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.15.tgz", - "integrity": "sha512-i6+xVqT+6KCz7nBfk4ybMXmbKO36tKvbMKtgFz9KV+8idYFyFbfwKooYk8kGjyA5+T5f1kEPQM5IDLXucTAQ9g==", - "license": "MIT", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-3.0.4.tgz", + "integrity": "sha512-pnetak6R7Xp/ET96O5kx9zRYoQQqr6sbRXWkJHKw0Hr/jr3ls4CddZKq+suwCDuW6p/ior2BhpOSh/WLLcJM6w==", "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/icu-messageformat-parser": "2.9.4", - "@formatjs/intl-displaynames": "6.8.5", - "@formatjs/intl-listformat": "7.7.5", - "intl-messageformat": "10.7.7", + "@formatjs/ecma402-abstract": "2.3.1", + "@formatjs/fast-memoize": "2.2.5", + "@formatjs/icu-messageformat-parser": "2.9.7", + "intl-messageformat": "10.7.10", "tslib": "2" }, "peerDependencies": { - "typescript": "^4.7 || 5" + "typescript": "5" }, "peerDependenciesMeta": { "typescript": { @@ -1109,33 +1103,10 @@ } } }, - "node_modules/@formatjs/intl-displaynames": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.8.5.tgz", - "integrity": "sha512-85b+GdAKCsleS6cqVxf/Aw/uBd+20EM0wDpgaxzHo3RIR3bxF4xCJqH/Grbzx8CXurTgDDZHPdPdwJC+May41w==", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "node_modules/@formatjs/intl-listformat": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.7.5.tgz", - "integrity": "sha512-Wzes10SMNeYgnxYiKsda4rnHP3Q3II4XT2tZyOgnH5fWuHDtIkceuWlRQNsvrI3uiwP4hLqp2XdQTCsfkhXulg==", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", - "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", - "license": "MIT", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.9.tgz", + "integrity": "sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA==", "dependencies": { "tslib": "2" } @@ -4651,6 +4622,11 @@ "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -7114,14 +7090,13 @@ "license": "ISC" }, "node_modules/intl-messageformat": { - "version": "10.7.7", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.7.tgz", - "integrity": "sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==", - "license": "BSD-3-Clause", + "version": "10.7.10", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.10.tgz", + "integrity": "sha512-hp7iejCBiJdW3zmOe18FdlJu8U/JsADSDiBPQhfdSeI8B9POtvPRvPh3nMlvhYayGMKLv6maldhR7y3Pf1vkpw==", "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/icu-messageformat-parser": "2.9.4", + "@formatjs/ecma402-abstract": "2.3.1", + "@formatjs/fast-memoize": "2.2.5", + "@formatjs/icu-messageformat-parser": "2.9.7", "tslib": "2" } }, @@ -9756,25 +9731,22 @@ } }, "node_modules/react-intl": { - "version": "6.8.9", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.8.9.tgz", - "integrity": "sha512-TUfj5E7lyUDvz/GtovC9OMh441kBr08rtIbgh3p0R8iF3hVY+V2W9Am7rb8BpJ/29BH1utJOqOOhmvEVh3GfZg==", - "license": "BSD-3-Clause", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-7.0.4.tgz", + "integrity": "sha512-WGNfCPNcRQhNAZBN+amz2hfR8Kd7jngScJ4WaRZcsaOWsvva1ciStnUIGj9MvOAxPqTf1D78J5OdRdc3l0wgKQ==", "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/icu-messageformat-parser": "2.9.4", - "@formatjs/intl": "2.10.15", - "@formatjs/intl-displaynames": "6.8.5", - "@formatjs/intl-listformat": "7.7.5", + "@formatjs/ecma402-abstract": "2.3.1", + "@formatjs/icu-messageformat-parser": "2.9.7", + "@formatjs/intl": "3.0.4", "@types/hoist-non-react-statics": "3", - "@types/react": "16 || 17 || 18", + "@types/react": "16 || 17 || 18 || 19", "hoist-non-react-statics": "3", - "intl-messageformat": "10.7.7", + "intl-messageformat": "10.7.10", "tslib": "2" }, "peerDependencies": { - "react": "^16.6.0 || 17 || 18", - "typescript": "^4.7 || 5" + "react": "^16.6.0 || 17 || 18 || 19", + "typescript": "5" }, "peerDependenciesMeta": { "typescript": { diff --git a/package.json b/package.json index 61908fde..a60e3e65 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "react-content-loader": "^7.0.2", "react-dom": "^18.3.1", "react-icons": "^5.4.0", - "react-intl": "^6.8.9", + "react-intl": "^7.0.4", "react-redux": "^9.1.2", "react-router-dom": "^7.0.2", "redux-persist": "^6.0.0", From e545ea5648929dd3009b5fbd35e72447dc9f5ef5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:38:34 +0000 Subject: [PATCH 09/35] build(deps): bump @reduxjs/toolkit from 2.4.0 to 2.5.0 Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 2.4.0 to 2.5.0. - [Release notes](https://github.com/reduxjs/redux-toolkit/releases) - [Commits](https://github.com/reduxjs/redux-toolkit/compare/v2.4.0...v2.5.0) --- updated-dependencies: - dependency-name: "@reduxjs/toolkit" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 11 +++++------ package.json | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index a82dc9a2..c32931c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "climate-tokenization-engine-ui", "version": "1.2.4", "dependencies": { - "@reduxjs/toolkit": "^2.4.0", + "@reduxjs/toolkit": "^2.5.0", "@types/styled-components": "^5.1.34", "@xterm/xterm": "^5.5.0", "@zip.js/zip.js": "^2.7.53", @@ -1543,10 +1543,9 @@ } }, "node_modules/@reduxjs/toolkit": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.4.0.tgz", - "integrity": "sha512-wJZEuSKj14tvNfxiIiJws0tQN77/rDqucBq528ApebMIRHyWpCanJVQRxQ8WWZC19iCDKxDsGlbAir3F1layxA==", - "license": "MIT", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.5.0.tgz", + "integrity": "sha512-awNe2oTodsZ6LmRqmkFhtb/KH03hUhxOamEQy411m3Njj3BbFvoBovxo4Q1cBWnV1ErprVj9MlF0UPXkng0eyg==", "dependencies": { "immer": "^10.0.3", "redux": "^5.0.1", @@ -1554,7 +1553,7 @@ "reselect": "^5.1.0" }, "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "peerDependenciesMeta": { diff --git a/package.json b/package.json index 61908fde..9b0469dc 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "electron:package:linux": "npm run clean && npm run build && electron-builder -l -c.extraMetadata.main=build/main.js" }, "dependencies": { - "@reduxjs/toolkit": "^2.4.0", + "@reduxjs/toolkit": "^2.5.0", "@types/styled-components": "^5.1.34", "@xterm/xterm": "^5.5.0", "@zip.js/zip.js": "^2.7.53", From d87f5daaf501382d96e44e10d20d9eff4a461fc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:39:20 +0000 Subject: [PATCH 10/35] build(deps-dev): bump lint-staged from 15.2.10 to 15.2.11 Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.10 to 15.2.11. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.10...v15.2.11) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 31 ++++++++++++++----------------- package.json | 2 +- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index a82dc9a2..cf62e890 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", "husky": "^9.1.7", - "lint-staged": "^15.2.10", + "lint-staged": "^15.2.11", "postcss": "^8.4.49", "prettier": "^3.4.1", "standard-version": "^9.5.0", @@ -4597,11 +4597,10 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -7681,22 +7680,21 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "15.2.10", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", - "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "version": "15.2.11", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.11.tgz", + "integrity": "sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.6", + "debug": "~4.4.0", "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", + "lilconfig": "~3.1.3", + "listr2": "~8.2.5", "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.5.0" + "yaml": "~2.6.1" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -12158,10 +12156,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "license": "ISC", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index 61908fde..c82ebe27 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", "husky": "^9.1.7", - "lint-staged": "^15.2.10", + "lint-staged": "^15.2.11", "postcss": "^8.4.49", "prettier": "^3.4.1", "standard-version": "^9.5.0", From 4983de6c634f59d81e6bc046df81ad26c61afa30 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Fri, 20 Dec 2024 22:04:46 +0500 Subject: [PATCH 11/35] feat: integrate get and post req for address book --- src/renderer/api/index.ts | 1 + .../tokenization-engine/address-book.api.ts | 65 ++++++++ src/renderer/api/tokenization-engine/index.ts | 3 +- .../blocks/buttons/AddNewAddressButton.tsx | 21 +++ .../components/blocks/buttons/index.ts | 1 + .../blocks/forms/AddNewAddressForm.tsx | 147 ++++++++++++++++++ src/renderer/components/blocks/forms/index.ts | 1 + .../components/blocks/layout/LeftNav.tsx | 13 +- .../blocks/modals/AddNewAddressModal.tsx | 34 ++++ .../components/blocks/modals/index.ts | 1 + .../blocks/tables/AddressBookTable.tsx | 72 +++++++++ .../components/blocks/tables/index.ts | 1 + src/renderer/pages/AddressBookPage.tsx | 62 ++++++++ src/renderer/pages/index.ts | 1 + src/renderer/routes/AppNavigator.tsx | 1 + src/renderer/routes/route-constants.ts | 1 + src/renderer/schemas/AddressBook.schemas.ts | 5 + src/renderer/translations/tokens/en-US.json | 11 +- 18 files changed, 437 insertions(+), 4 deletions(-) create mode 100644 src/renderer/api/tokenization-engine/address-book.api.ts create mode 100644 src/renderer/components/blocks/buttons/AddNewAddressButton.tsx create mode 100644 src/renderer/components/blocks/forms/AddNewAddressForm.tsx create mode 100644 src/renderer/components/blocks/modals/AddNewAddressModal.tsx create mode 100644 src/renderer/components/blocks/tables/AddressBookTable.tsx create mode 100644 src/renderer/pages/AddressBookPage.tsx create mode 100644 src/renderer/schemas/AddressBook.schemas.ts diff --git a/src/renderer/api/index.ts b/src/renderer/api/index.ts index 5ac987bd..4d80c717 100644 --- a/src/renderer/api/index.ts +++ b/src/renderer/api/index.ts @@ -2,3 +2,4 @@ export * from './tokenization-engine/projects.api'; export * from './tokenization-engine/system.api'; export * from './tokenization-engine/units.api'; export * from './tokenization-engine/organizations.api'; +export * from './tokenization-engine/address-book.api'; diff --git a/src/renderer/api/tokenization-engine/address-book.api.ts b/src/renderer/api/tokenization-engine/address-book.api.ts new file mode 100644 index 00000000..339e7ec2 --- /dev/null +++ b/src/renderer/api/tokenization-engine/address-book.api.ts @@ -0,0 +1,65 @@ +import { addressBookTag, RECORDS_PER_PAGE, tokenizationEngineApi } from './index'; + +interface Address { + id: string; + name: string; + walletAddress: string; + createdAt: Date; + updatedAt: Date; +} + +interface CreateAddressParams { + name: string; + walletAddress?: string; +} + +interface GetAddressBookParams { + page?: number; + search?: string | null; + order?: string | null; +} + +interface GetAddressBookResponse { + page: number; + pageCount: number; + data: Address[]; +} + +const addressBookApi = tokenizationEngineApi.injectEndpoints({ + endpoints: (builder) => ({ + getAddressBook: builder.query({ + query: ({ page, search, order }: GetAddressBookParams) => { + const params: GetAddressBookParams & { limit: number } = { page, limit: RECORDS_PER_PAGE }; + + if (search) { + params.search = search.replace(/[^a-zA-Z0-9 _.-]+/, ''); + } + + if (order) { + params.order = order; + } + + return { + url: `/address-book`, + params, + method: 'GET', + }; + }, + providesTags: [addressBookTag], + }), + + createAddress: builder.mutation({ + query: (createAddressParams: CreateAddressParams) => ({ + url: '/address-book', + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: createAddressParams, + }), + invalidatesTags: [addressBookTag], + }), + }), +}); + +export const invalidateAddressBookApiTag = addressBookApi.util.invalidateTags; + +export const { useCreateAddressMutation, useGetAddressBookQuery } = addressBookApi; diff --git a/src/renderer/api/tokenization-engine/index.ts b/src/renderer/api/tokenization-engine/index.ts index 313c1317..82c1e963 100644 --- a/src/renderer/api/tokenization-engine/index.ts +++ b/src/renderer/api/tokenization-engine/index.ts @@ -3,6 +3,7 @@ import initialState from '@/store/slices/app/app.initialstate'; export const RECORDS_PER_PAGE = 10; export const projectsTag = 'projects'; +export const addressBookTag = 'addressBook'; export const untokenizedUnitsTag = 'untokenizedUnits'; export const tokenizedUnitsTag = 'tokenizedUnits'; export const projectsByIdsTag = 'projectsByIds'; @@ -46,5 +47,5 @@ export const tokenizationEngineApi = createApi({ baseQuery: baseQueryWithDynamicHost, reducerPath: 'tokenizationEngineApi', endpoints: () => ({}), - tagTypes: [projectsTag, untokenizedUnitsTag, tokenizedUnitsTag, projectsByIdsTag], + tagTypes: [projectsTag, untokenizedUnitsTag, tokenizedUnitsTag, projectsByIdsTag, addressBookTag], }); diff --git a/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx b/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx new file mode 100644 index 00000000..c45524c0 --- /dev/null +++ b/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { AddNewAddressModal, Button } from '@/components'; +import { FormattedMessage } from 'react-intl'; +import { useUrlHash } from '@/hooks'; + +const AddNewAddressButton: React.FC = () => { + const [showAddNewAddressModal, setShowAddNewAddressModal] = useUrlHash('addAddress'); + + return ( + <> + + {showAddNewAddressModal && setShowAddNewAddressModal(false)} />} + + ); +}; + +export { AddNewAddressButton }; diff --git a/src/renderer/components/blocks/buttons/index.ts b/src/renderer/components/blocks/buttons/index.ts index 4e182cc5..f29922e4 100644 --- a/src/renderer/components/blocks/buttons/index.ts +++ b/src/renderer/components/blocks/buttons/index.ts @@ -1,3 +1,4 @@ export * from './ConnectButton'; export * from './FormButton'; export * from './DetokenizeUnitButton'; +export * from './AddNewAddressButton'; diff --git a/src/renderer/components/blocks/forms/AddNewAddressForm.tsx b/src/renderer/components/blocks/forms/AddNewAddressForm.tsx new file mode 100644 index 00000000..c96feb23 --- /dev/null +++ b/src/renderer/components/blocks/forms/AddNewAddressForm.tsx @@ -0,0 +1,147 @@ +import React, { useCallback } from 'react'; +import { ErrorMessage, Field, Form, Formik, FormikHelpers } from 'formik'; +import { Button, FloatingLabel, FormButton } from '@/components'; +import { FormattedMessage, IntlShape, useIntl } from 'react-intl'; +import * as yup from 'yup'; +import { TestContext, ValidationError } from 'yup'; +import { noop } from 'lodash'; + +interface FormProps { + onSubmit: (values: AddNewAddressFormValues) => Promise; + onClearError?: () => void; +} + +export interface AddNewAddressFormValues { + name: string; + walletAddress: string; +} + +const validateWalletAddress = (value: string, context: TestContext, intl: IntlShape): ValidationError | true => { + if (!value) return true; // If empty, required will handle it + + if (value.startsWith('xch')) { + if (/^xch[a-zA-Z0-9]{59}$/.test(value)) { + return true; + } else { + return context.createError({ + message: intl.formatMessage({ + id: 'wallet-addresses-start-with-xch-and-are-62-characters-long', + }), + }); + } + } else if (value.startsWith('txch')) { + if (/^txch[a-zA-Z0-9]{60}$/.test(value)) { + return true; + } else { + return context.createError({ + message: intl.formatMessage({ + id: 'testnet-wallet-addresses-start-with-txch-and-are-63-characters-long', + }), + }); + } + } else { + return context.createError({ + message: intl.formatMessage({ + id: 'wallet-address-must-start-with-xch-or-txch', + }), + }); + } +}; + +const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop }) => { + const intl = useIntl(); + + const validationSchema = yup.object({ + walletAddress: yup + .string() + .required(intl.formatMessage({ id: 'wallet-address-is-required' })) + .test('validate-wallet-address', function (value) { + return validateWalletAddress(value, this, intl); + }), + }); + + const handleSubmit = useCallback( + async (values: AddNewAddressFormValues, { setSubmitting }: FormikHelpers) => { + try { + console.log('values'); + await onSubmit(values); + } finally { + setSubmitting(false); + } + }, + [onSubmit], + ); + + const handleChange = useCallback( + (event, field) => { + onClearError(); + field.onChange(event); // Call Formik's original onChange + }, + [onClearError], + ); + + return ( + + initialValues={{ + name: '', + walletAddress: '', + }} + validationSchema={validationSchema} + onSubmit={handleSubmit} + > + {({ errors, touched, isSubmitting }) => ( +
+
+ + {({ field }) => ( + + )} + + {touched.name && } +
+
+ + {({ field }) => ( + handleChange(event, field)} + /> + )} + + {touched.walletAddress && } +
+
+ +

+ +

+
+ +
+
+ )} + + ); +}; + +export { AddNewAddressForm }; diff --git a/src/renderer/components/blocks/forms/index.ts b/src/renderer/components/blocks/forms/index.ts index 563e15f2..61191a11 100644 --- a/src/renderer/components/blocks/forms/index.ts +++ b/src/renderer/components/blocks/forms/index.ts @@ -1,3 +1,4 @@ export * from './ConnectForm'; export * from './CreateTokenForm'; export * from './DetokenizeUnitForm'; +export * from './AddNewAddressForm'; diff --git a/src/renderer/components/blocks/layout/LeftNav.tsx b/src/renderer/components/blocks/layout/LeftNav.tsx index c96efb1e..4d313e45 100644 --- a/src/renderer/components/blocks/layout/LeftNav.tsx +++ b/src/renderer/components/blocks/layout/LeftNav.tsx @@ -13,8 +13,8 @@ const LeftNav = () => { const isActive = useCallback((path: string) => location.pathname === path, [location]); const coreRegistryMode: boolean = useSelector((state: RootState) => state.app.coreRegistryMode); return ( -
-
+
+
@@ -46,6 +46,15 @@ const LeftNav = () => {

)} + !isActive(ROUTES.ADDRESS_BOOK) && navigate(ROUTES.ADDRESS_BOOK)} + > +

+ +

+
diff --git a/src/renderer/components/blocks/modals/AddNewAddressModal.tsx b/src/renderer/components/blocks/modals/AddNewAddressModal.tsx new file mode 100644 index 00000000..3784462f --- /dev/null +++ b/src/renderer/components/blocks/modals/AddNewAddressModal.tsx @@ -0,0 +1,34 @@ +import { useCreateAddressMutation } from '@/api'; +import { AddNewAddressForm, Modal } from '@/components'; +import React from 'react'; +import { FormattedMessage } from 'react-intl'; + +interface AddNewAddressModalProps { + onClose: () => void; +} + +const AddNewAddressModal: React.FC = ({ onClose }) => { + const [triggerAddressCreation] = useCreateAddressMutation(); + + const handleSubmitAddNewAddress = async (data: { name: string; walletAddress: string }): Promise => { + triggerAddressCreation({ + name: data.name, + walletAddress: data.walletAddress, + }); + }; + + return ( + + +

+ +

+
+ + + +
+ ); +}; + +export { AddNewAddressModal }; diff --git a/src/renderer/components/blocks/modals/index.ts b/src/renderer/components/blocks/modals/index.ts index 568f704f..93a96899 100644 --- a/src/renderer/components/blocks/modals/index.ts +++ b/src/renderer/components/blocks/modals/index.ts @@ -5,3 +5,4 @@ export * from './NoHomeOrgModal'; export * from './SubmitDetokenizationFileModal'; export * from './DetokenizationSuccessModal'; export * from './ConfirmUnitDetokenizationDataModal'; +export * from './AddNewAddressModal'; diff --git a/src/renderer/components/blocks/tables/AddressBookTable.tsx b/src/renderer/components/blocks/tables/AddressBookTable.tsx new file mode 100644 index 00000000..170ecedb --- /dev/null +++ b/src/renderer/components/blocks/tables/AddressBookTable.tsx @@ -0,0 +1,72 @@ +import React, { useMemo } from 'react'; +import { Column, DataTable, PageCounter, Pagination } from '@/components'; +import { DebouncedFunc } from 'lodash'; +import { FormattedMessage } from 'react-intl'; + +interface TableProps { + data: any; + isLoading: boolean; + currentPage: number; + onPageChange: DebouncedFunc<(page: any) => void>; + setOrder?: (sort: string) => void; + onRowClick?: (row: any) => void; + order?: string; + totalPages: number; + totalCount: number; +} + +const AddressBookTable: React.FC = ({ + data, + isLoading, + currentPage, + onPageChange, + onRowClick, + setOrder, + order, + totalPages, + totalCount, +}) => { + const columns = useMemo(() => { + const staticColumns: Column[] = [ + { + title: , + key: 'name', + }, + { + title: , + key: 'walletAddress', + }, + ]; + + return staticColumns; + }, []); + + return ( + <> + + + + + } + /> + + ); +}; + +export { AddressBookTable }; diff --git a/src/renderer/components/blocks/tables/index.ts b/src/renderer/components/blocks/tables/index.ts index a94bc77b..350a2f2c 100644 --- a/src/renderer/components/blocks/tables/index.ts +++ b/src/renderer/components/blocks/tables/index.ts @@ -1,3 +1,4 @@ export * from './UntokenizedUnitListTable'; export * from './SkeletonTable'; export * from './TokenizedUnitListTable'; +export * from './AddressBookTable'; diff --git a/src/renderer/pages/AddressBookPage.tsx b/src/renderer/pages/AddressBookPage.tsx new file mode 100644 index 00000000..8090733d --- /dev/null +++ b/src/renderer/pages/AddressBookPage.tsx @@ -0,0 +1,62 @@ +import React, { useCallback, useEffect } from 'react'; +import { AddNewAddressButton, AddressBookTable, SkeletonTable } from '@/components'; +import { useGetAddressBookQuery } from '@/api'; +import { useColumnOrderHandler, useQueryParamState } from '@/hooks'; +import { FormattedMessage } from 'react-intl'; +import { debounce } from 'lodash'; + +const AddressBookPage: React.FC = () => { + const [currentPage, setCurrentPage] = useQueryParamState('page', '1'); + const [order, setOrder] = useQueryParamState('order', undefined); + const handleSetOrder = useColumnOrderHandler(order, setOrder); + + const { + data: addressBookResponse, + isFetching: addressBookLoading, + error: addressBookError, + } = useGetAddressBookQuery({ page: Number(currentPage) }); + + useEffect(() => { + addressBookResponse; + }, [addressBookResponse]); + + const handlePageChange = useCallback( + debounce((page) => setCurrentPage(page), 800), + [setCurrentPage], + ); + + if (addressBookError) { + return ; + } + + if (addressBookLoading) { + return ; + } + + if (!addressBookResponse) { + return ; + } + + return ( + <> +
+ + +
+ + ); +}; + +export { AddressBookPage }; diff --git a/src/renderer/pages/index.ts b/src/renderer/pages/index.ts index c2cd8b26..f765d394 100644 --- a/src/renderer/pages/index.ts +++ b/src/renderer/pages/index.ts @@ -1,3 +1,4 @@ export * from './ErrorBoundary'; export * from './TokensPage'; export * from './RevertTokensPage'; +export * from './AddressBookPage'; diff --git a/src/renderer/routes/AppNavigator.tsx b/src/renderer/routes/AppNavigator.tsx index ea5a69a4..7c131335 100644 --- a/src/renderer/routes/AppNavigator.tsx +++ b/src/renderer/routes/AppNavigator.tsx @@ -20,6 +20,7 @@ const AppNavigator: React.FC = () => { } /> } /> {!coreRegistryMode && } />} + } /> } /> diff --git a/src/renderer/routes/route-constants.ts b/src/renderer/routes/route-constants.ts index 8732321f..15a0e39d 100644 --- a/src/renderer/routes/route-constants.ts +++ b/src/renderer/routes/route-constants.ts @@ -1,4 +1,5 @@ export default { CREATE_TOKENS: '/create-tokens', REVERT_TOKENS: '/revert-tokens', + ADDRESS_BOOK: '/address-book', }; diff --git a/src/renderer/schemas/AddressBook.schemas.ts b/src/renderer/schemas/AddressBook.schemas.ts new file mode 100644 index 00000000..b66daee3 --- /dev/null +++ b/src/renderer/schemas/AddressBook.schemas.ts @@ -0,0 +1,5 @@ +export interface AddressBook { + id: string; + projectDeveloperName?: string; + walletAddress?: string; +} diff --git a/src/renderer/translations/tokens/en-US.json b/src/renderer/translations/tokens/en-US.json index 5cb4f8f2..c21a841e 100644 --- a/src/renderer/translations/tokens/en-US.json +++ b/src/renderer/translations/tokens/en-US.json @@ -103,5 +103,14 @@ "submit-detokenization-file": "submit detokenization file", "not-available-in-core-registry-mode": "not available in core registry mode", "cannot-connect-to-registry-api-with-current-settings": "Cannot connect to registry API with current settings", - "please-disconnect-to-edit-the-api-url-and-api-key": "Please disconnect to edit the API URL and API key" + "please-disconnect-to-edit-the-api-url-and-api-key": "Please disconnect to edit the API URL and API key", + + "address-book": "address book", + "add-new": "add new", + "add-new-address": "add new address", + "add-address": "add address", + "name": "name", + "delete": "delete", + "edit": "edit", + "cancel": "cancel" } \ No newline at end of file From 4fa9aa8ed768718257ec4ee75e3011a3f83ec6e7 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Mon, 23 Dec 2024 15:05:19 +0500 Subject: [PATCH 12/35] feat: add functionality to delete address book items --- .../tokenization-engine/address-book.api.ts | 14 ++++- .../blocks/modals/AddNewAddressModal.tsx | 31 ++++++++--- .../ConfirmDeleteAddressBookItemModal.tsx | 53 +++++++++++++++++++ .../components/blocks/modals/index.ts | 1 + .../blocks/tables/AddressBookTable.tsx | 27 ++++++++-- .../blocks/widgets/AddressBookActions.tsx | 51 ++++++++++++++++++ .../components/blocks/widgets/index.ts | 1 + 7 files changed, 167 insertions(+), 11 deletions(-) create mode 100644 src/renderer/components/blocks/modals/ConfirmDeleteAddressBookItemModal.tsx create mode 100644 src/renderer/components/blocks/widgets/AddressBookActions.tsx diff --git a/src/renderer/api/tokenization-engine/address-book.api.ts b/src/renderer/api/tokenization-engine/address-book.api.ts index 339e7ec2..097dcb36 100644 --- a/src/renderer/api/tokenization-engine/address-book.api.ts +++ b/src/renderer/api/tokenization-engine/address-book.api.ts @@ -57,9 +57,21 @@ const addressBookApi = tokenizationEngineApi.injectEndpoints({ }), invalidatesTags: [addressBookTag], }), + + deleteAddressBookItem: builder.mutation({ + query: ({ uuid }) => { + return { + url: `/address-book`, + method: 'DELETE', + headers: { 'Content-Type': 'application/json' }, + body: { id: uuid }, + }; + }, + invalidatesTags: [addressBookTag], + }), }), }); export const invalidateAddressBookApiTag = addressBookApi.util.invalidateTags; -export const { useCreateAddressMutation, useGetAddressBookQuery } = addressBookApi; +export const { useCreateAddressMutation, useGetAddressBookQuery, useDeleteAddressBookItemMutation } = addressBookApi; diff --git a/src/renderer/components/blocks/modals/AddNewAddressModal.tsx b/src/renderer/components/blocks/modals/AddNewAddressModal.tsx index 3784462f..e2fa4a4a 100644 --- a/src/renderer/components/blocks/modals/AddNewAddressModal.tsx +++ b/src/renderer/components/blocks/modals/AddNewAddressModal.tsx @@ -1,6 +1,8 @@ import { useCreateAddressMutation } from '@/api'; import { AddNewAddressForm, Modal } from '@/components'; -import React from 'react'; +import { Alert } from 'flowbite-react'; +import React, { useState } from 'react'; +import { HiInformationCircle } from 'react-icons/hi'; import { FormattedMessage } from 'react-intl'; interface AddNewAddressModalProps { @@ -8,13 +10,23 @@ interface AddNewAddressModalProps { } const AddNewAddressModal: React.FC = ({ onClose }) => { - const [triggerAddressCreation] = useCreateAddressMutation(); + const [showAddressCreationFailure, setShowAddressCreationFailure] = useState(false); + const [triggerAddressCreation, { error: addressCreationError }] = useCreateAddressMutation(); const handleSubmitAddNewAddress = async (data: { name: string; walletAddress: string }): Promise => { - triggerAddressCreation({ - name: data.name, - walletAddress: data.walletAddress, - }); + if (data?.name && data?.walletAddress) { + const result = await triggerAddressCreation({ + name: data.name, + walletAddress: data.walletAddress, + }); + if (result?.error || addressCreationError) { + setShowAddressCreationFailure(true); + } else { + onClose(); + } + } else { + setShowAddressCreationFailure(true); + } }; return ( @@ -25,6 +37,13 @@ const AddNewAddressModal: React.FC = ({ onClose }) => {

+ {showAddressCreationFailure && ( + setShowAddressCreationFailure(false)}> +

+ +

+
+ )}
diff --git a/src/renderer/components/blocks/modals/ConfirmDeleteAddressBookItemModal.tsx b/src/renderer/components/blocks/modals/ConfirmDeleteAddressBookItemModal.tsx new file mode 100644 index 00000000..99ccf2a4 --- /dev/null +++ b/src/renderer/components/blocks/modals/ConfirmDeleteAddressBookItemModal.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import { Button, Modal } from '@/components'; +import { FormattedMessage } from 'react-intl'; +import { useDeleteAddressBookItemMutation } from '@/api'; + +interface ConfirmDeleteModalProps { + uuid: string; + onClose: () => void; +} + +const ConfirmDeleteAddressBookItemModal: React.FC = ({ + uuid, + onClose, +}: ConfirmDeleteModalProps) => { + const [triggerDeleteAddressBookItem, { isLoading: addressBookItemDeletionLoading }] = + useDeleteAddressBookItemMutation(); + + const handleConfirm = async () => { + await triggerDeleteAddressBookItem({ uuid }); + onClose(); + }; + + const handleClickClose = async () => { + onClose(); + }; + + return ( + + + + + +

+ . +

+
+ + + + +
+ ); +}; + +export { ConfirmDeleteAddressBookItemModal }; diff --git a/src/renderer/components/blocks/modals/index.ts b/src/renderer/components/blocks/modals/index.ts index 93a96899..57327ca7 100644 --- a/src/renderer/components/blocks/modals/index.ts +++ b/src/renderer/components/blocks/modals/index.ts @@ -6,3 +6,4 @@ export * from './SubmitDetokenizationFileModal'; export * from './DetokenizationSuccessModal'; export * from './ConfirmUnitDetokenizationDataModal'; export * from './AddNewAddressModal'; +export * from './ConfirmDeleteAddressBookItemModal'; diff --git a/src/renderer/components/blocks/tables/AddressBookTable.tsx b/src/renderer/components/blocks/tables/AddressBookTable.tsx index 170ecedb..66c79b87 100644 --- a/src/renderer/components/blocks/tables/AddressBookTable.tsx +++ b/src/renderer/components/blocks/tables/AddressBookTable.tsx @@ -1,10 +1,13 @@ import React, { useMemo } from 'react'; -import { Column, DataTable, PageCounter, Pagination } from '@/components'; -import { DebouncedFunc } from 'lodash'; +import { AddressBookActions, Column, DataTable, PageCounter, Pagination } from '@/components'; +import { DebouncedFunc, partial } from 'lodash'; import { FormattedMessage } from 'react-intl'; +import { AddressBook } from '@/schemas/AddressBook.schemas'; +import { useWildCardUrlHash } from '@/hooks'; interface TableProps { data: any; + isEditable: boolean; isLoading: boolean; currentPage: number; onPageChange: DebouncedFunc<(page: any) => void>; @@ -17,6 +20,7 @@ interface TableProps { const AddressBookTable: React.FC = ({ data, + isEditable, isLoading, currentPage, onPageChange, @@ -26,7 +30,21 @@ const AddressBookTable: React.FC = ({ totalPages, totalCount, }) => { + const [, editAddressModalActive, setEditAddressModalActive] = useWildCardUrlHash('edit-address'); + const columns = useMemo(() => { + const editColumn: Column[] = [ + { + title: '', + key: 'actionColumn', + ignoreChildEvents: true, + ignoreOrderChange: true, + render: (row: AddressBook) => ( + + ), + }, + ]; + const staticColumns: Column[] = [ { title: , @@ -38,8 +56,8 @@ const AddressBookTable: React.FC = ({ }, ]; - return staticColumns; - }, []); + return isEditable ? editColumn.concat(staticColumns) : staticColumns; + }, [isEditable]); return ( <> @@ -65,6 +83,7 @@ const AddressBookTable: React.FC = ({ } /> + {editAddressModalActive &&
edit modal most probably
} ); }; diff --git a/src/renderer/components/blocks/widgets/AddressBookActions.tsx b/src/renderer/components/blocks/widgets/AddressBookActions.tsx new file mode 100644 index 00000000..465d6f67 --- /dev/null +++ b/src/renderer/components/blocks/widgets/AddressBookActions.tsx @@ -0,0 +1,51 @@ +import { noop } from 'lodash'; +import React, { useState } from 'react'; +import { HiDotsVertical } from 'react-icons/hi'; +import { Button, ConfirmDeleteAddressBookItemModal, Tooltip } from '@/components'; +import { FormattedMessage } from 'react-intl'; + +interface AddressBookActionProps { + uuid: string; + openEditModal: (warehouseId: string) => void; + openSplitModal?: (warehouseId: string) => void; +} + +const AddressBookActions: React.FC = ({ + uuid, + openEditModal = noop, +}: AddressBookActionProps) => { + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const handleClickDelete = () => { + setShowDeleteModal(true); + }; + + const handleClickEdit = () => { + openEditModal(uuid); + }; + + return ( + <> + + + + + } + > + + + {showDeleteModal && setShowDeleteModal(false)} />} + + ); +}; + +export { AddressBookActions }; diff --git a/src/renderer/components/blocks/widgets/index.ts b/src/renderer/components/blocks/widgets/index.ts index 144b28d0..c57b38a8 100644 --- a/src/renderer/components/blocks/widgets/index.ts +++ b/src/renderer/components/blocks/widgets/index.ts @@ -1,3 +1,4 @@ export * from './ThemeModeSelector'; export * from './SearchBox'; export * from './SyncIndicator'; +export * from './AddressBookActions'; From 3de7a7ca1bd0e4040f58b21622ee18463bb1b4f6 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Tue, 24 Dec 2024 12:46:59 +0500 Subject: [PATCH 13/35] feat: integrate fucntionality to update address book item --- .../tokenization-engine/address-book.api.ts | 36 +++++++++- .../blocks/buttons/AddNewAddressButton.tsx | 17 +++-- .../blocks/forms/AddNewAddressForm.tsx | 51 ++++++++++----- .../blocks/modals/AddNewAddressModal.tsx | 65 ++++++++++++++++--- .../ConfirmDeleteAddressBookItemModal.tsx | 2 +- .../blocks/tables/AddressBookTable.tsx | 31 +++++++-- .../blocks/widgets/AddressBookActions.tsx | 13 ++-- src/renderer/pages/AddressBookPage.tsx | 4 +- src/renderer/schemas/AddressBook.schemas.ts | 8 ++- src/renderer/translations/tokens/en-US.json | 6 +- 10 files changed, 181 insertions(+), 52 deletions(-) diff --git a/src/renderer/api/tokenization-engine/address-book.api.ts b/src/renderer/api/tokenization-engine/address-book.api.ts index 097dcb36..6959f815 100644 --- a/src/renderer/api/tokenization-engine/address-book.api.ts +++ b/src/renderer/api/tokenization-engine/address-book.api.ts @@ -25,6 +25,10 @@ interface GetAddressBookResponse { data: Address[]; } +interface GetAddressParams { + id: string; +} + const addressBookApi = tokenizationEngineApi.injectEndpoints({ endpoints: (builder) => ({ getAddressBook: builder.query({ @@ -48,6 +52,15 @@ const addressBookApi = tokenizationEngineApi.injectEndpoints({ providesTags: [addressBookTag], }), + getAddress: builder.query({ + query: ({ id }: GetAddressParams) => ({ + url: `/address-book`, + params: { id }, + method: 'GET', + }), + providesTags: (_response, _error, { id }) => [{ type: addressBookTag, id: id }], + }), + createAddress: builder.mutation({ query: (createAddressParams: CreateAddressParams) => ({ url: '/address-book', @@ -69,9 +82,30 @@ const addressBookApi = tokenizationEngineApi.injectEndpoints({ }, invalidatesTags: [addressBookTag], }), + + editAddressBookItem: builder.mutation({ + query: (data) => { + const body: any = {}; + if (data.id) body.id = data.id; + if (data.name) body.name = data.name; + if (data.walletAddress) body.walletAddress = data.walletAddress; + return { + url: `/address-book`, + method: 'PUT', + body, + }; + }, + invalidatesTags: [addressBookTag], + }), }), }); export const invalidateAddressBookApiTag = addressBookApi.util.invalidateTags; -export const { useCreateAddressMutation, useGetAddressBookQuery, useDeleteAddressBookItemMutation } = addressBookApi; +export const { + useCreateAddressMutation, + useGetAddressQuery, + useGetAddressBookQuery, + useDeleteAddressBookItemMutation, + useEditAddressBookItemMutation, +} = addressBookApi; diff --git a/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx b/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx index c45524c0..a6c6961b 100644 --- a/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx +++ b/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx @@ -1,19 +1,22 @@ import React from 'react'; -import { AddNewAddressModal, Button } from '@/components'; +import { Button } from '@/components'; import { FormattedMessage } from 'react-intl'; -import { useUrlHash } from '@/hooks'; +// import { useUrlHash } from '@/hooks'; -const AddNewAddressButton: React.FC = () => { - const [showAddNewAddressModal, setShowAddNewAddressModal] = useUrlHash('addAddress'); +interface AddNewAddressButtonProps { + setActive: (active: boolean) => void; +} + +const AddNewAddressButton: React.FC = ({ setActive }) => { + // const [showAddNewAddressModal, setShowAddNewAddressModal] = useUrlHash('add-address'); return ( <> - - {showAddNewAddressModal && setShowAddNewAddressModal(false)} />} ); }; diff --git a/src/renderer/components/blocks/forms/AddNewAddressForm.tsx b/src/renderer/components/blocks/forms/AddNewAddressForm.tsx index c96feb23..6a762e35 100644 --- a/src/renderer/components/blocks/forms/AddNewAddressForm.tsx +++ b/src/renderer/components/blocks/forms/AddNewAddressForm.tsx @@ -5,15 +5,13 @@ import { FormattedMessage, IntlShape, useIntl } from 'react-intl'; import * as yup from 'yup'; import { TestContext, ValidationError } from 'yup'; import { noop } from 'lodash'; +import { Address } from '@/schemas/AddressBook.schemas'; interface FormProps { - onSubmit: (values: AddNewAddressFormValues) => Promise; + onSubmit: (values: Address) => Promise; onClearError?: () => void; -} - -export interface AddNewAddressFormValues { - name: string; - walletAddress: string; + data?: Address; + onClose: any; } const validateWalletAddress = (value: string, context: TestContext, intl: IntlShape): ValidationError | true => { @@ -48,7 +46,7 @@ const validateWalletAddress = (value: string, context: TestContext, intl: IntlSh } }; -const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop }) => { +const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop, data: address, onClose }) => { const intl = useIntl(); const validationSchema = yup.object({ @@ -61,9 +59,8 @@ const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop }); const handleSubmit = useCallback( - async (values: AddNewAddressFormValues, { setSubmitting }: FormikHelpers) => { + async (values: Address, { setSubmitting }: FormikHelpers
) => { try { - console.log('values'); await onSubmit(values); } finally { setSubmitting(false); @@ -81,16 +78,38 @@ const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop ); return ( - - initialValues={{ - name: '', - walletAddress: '', - }} + + initialValues={ + address + ? address + : { + id: undefined, + name: '', + walletAddress: '', + } + } validationSchema={validationSchema} onSubmit={handleSubmit} > {({ errors, touched, isSubmitting }) => (
+ {/*
+ + {({ field }) => ( + + )} + + {touched.id && } +
*/}
{({ field }) => ( @@ -129,10 +148,10 @@ const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop

- +

- + + ); +}; + +export { AddAddressButton }; diff --git a/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx b/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx deleted file mode 100644 index a6c6961b..00000000 --- a/src/renderer/components/blocks/buttons/AddNewAddressButton.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { Button } from '@/components'; -import { FormattedMessage } from 'react-intl'; -// import { useUrlHash } from '@/hooks'; - -interface AddNewAddressButtonProps { - setActive: (active: boolean) => void; -} - -const AddNewAddressButton: React.FC = ({ setActive }) => { - // const [showAddNewAddressModal, setShowAddNewAddressModal] = useUrlHash('add-address'); - - return ( - <> - - - ); -}; - -export { AddNewAddressButton }; diff --git a/src/renderer/components/blocks/buttons/index.ts b/src/renderer/components/blocks/buttons/index.ts index f29922e4..1a02c91c 100644 --- a/src/renderer/components/blocks/buttons/index.ts +++ b/src/renderer/components/blocks/buttons/index.ts @@ -1,4 +1,4 @@ export * from './ConnectButton'; export * from './FormButton'; export * from './DetokenizeUnitButton'; -export * from './AddNewAddressButton'; +export * from './AddAddressButton'; diff --git a/src/renderer/components/blocks/forms/AddNewAddressForm.tsx b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx similarity index 84% rename from src/renderer/components/blocks/forms/AddNewAddressForm.tsx rename to src/renderer/components/blocks/forms/UpsertAddressForm.tsx index 6a762e35..4d4808ef 100644 --- a/src/renderer/components/blocks/forms/AddNewAddressForm.tsx +++ b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx @@ -46,10 +46,11 @@ const validateWalletAddress = (value: string, context: TestContext, intl: IntlSh } }; -const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop, data: address, onClose }) => { +const UpsertAddressForm: React.FC = ({ onSubmit, onClearError = noop, data: address, onClose }) => { const intl = useIntl(); const validationSchema = yup.object({ + name: yup.string().required('The name must be at least 3 characters').min(3), walletAddress: yup .string() .required(intl.formatMessage({ id: 'wallet-address-is-required' })) @@ -93,35 +94,17 @@ const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop, > {({ errors, touched, isSubmitting }) => ( - {/*
- - {({ field }) => ( - - )} - - {touched.id && } -
*/}
{({ field }) => ( )} @@ -163,4 +146,4 @@ const AddNewAddressForm: React.FC = ({ onSubmit, onClearError = noop, ); }; -export { AddNewAddressForm }; +export { UpsertAddressForm }; diff --git a/src/renderer/components/blocks/forms/index.ts b/src/renderer/components/blocks/forms/index.ts index 61191a11..34ae79bc 100644 --- a/src/renderer/components/blocks/forms/index.ts +++ b/src/renderer/components/blocks/forms/index.ts @@ -1,4 +1,4 @@ export * from './ConnectForm'; export * from './CreateTokenForm'; export * from './DetokenizeUnitForm'; -export * from './AddNewAddressForm'; +export * from './UpsertAddressForm'; diff --git a/src/renderer/components/blocks/modals/AddNewAddressModal.tsx b/src/renderer/components/blocks/modals/UpsertAddressModal.tsx similarity index 90% rename from src/renderer/components/blocks/modals/AddNewAddressModal.tsx rename to src/renderer/components/blocks/modals/UpsertAddressModal.tsx index ba38be8a..a169a676 100644 --- a/src/renderer/components/blocks/modals/AddNewAddressModal.tsx +++ b/src/renderer/components/blocks/modals/UpsertAddressModal.tsx @@ -1,5 +1,5 @@ import { useCreateAddressMutation, useEditAddressMutation, useGetAddressQuery } from '@/api'; -import { AddNewAddressForm, ComponentCenteredSpinner, Modal } from '@/components'; +import { ComponentCenteredSpinner, Modal, UpsertAddressForm } from '@/components'; import { useUrlHash, useWildCardUrlHash } from '@/hooks'; import { Address } from '@/schemas/AddressBook.schemas'; import { Alert } from 'flowbite-react'; @@ -7,11 +7,11 @@ import React, { useMemo, useState } from 'react'; import { HiInformationCircle } from 'react-icons/hi'; import { FormattedMessage } from 'react-intl'; -interface AddNewAddressModalProps { +interface UpsertAddressModalProps { onClose: () => void; } -const AddNewAddressModal: React.FC = ({ onClose }) => { +const UpsertAddressModal: React.FC = ({ onClose }) => { const [showAddressCreationFailure, setShowAddressCreationFailure] = useState(false); const [triggerAddressCreation, { error: addressCreationError }] = useCreateAddressMutation(); const [triggerAddressUpdate] = useEditAddressMutation(); @@ -78,21 +78,21 @@ const AddNewAddressModal: React.FC = ({ onClose }) => {

- +

{showAddressCreationFailure && ( setShowAddressCreationFailure(false)}>

- +

)} - +
); }; -export { AddNewAddressModal }; +export { UpsertAddressModal }; diff --git a/src/renderer/components/blocks/modals/index.ts b/src/renderer/components/blocks/modals/index.ts index d4a3041f..b6f3c4a8 100644 --- a/src/renderer/components/blocks/modals/index.ts +++ b/src/renderer/components/blocks/modals/index.ts @@ -5,5 +5,5 @@ export * from './NoHomeOrgModal'; export * from './SubmitDetokenizationFileModal'; export * from './DetokenizationSuccessModal'; export * from './ConfirmUnitDetokenizationDataModal'; -export * from './AddNewAddressModal'; +export * from './UpsertAddressModal'; export * from './ConfirmDeleteAddressModal'; diff --git a/src/renderer/components/blocks/tables/AddressBookTable.tsx b/src/renderer/components/blocks/tables/AddressBookTable.tsx index 1ce7ca7d..fec428b0 100644 --- a/src/renderer/components/blocks/tables/AddressBookTable.tsx +++ b/src/renderer/components/blocks/tables/AddressBookTable.tsx @@ -1,12 +1,12 @@ import React, { useEffect, useMemo } from 'react'; import { - AddNewAddressButton, - AddNewAddressModal, + AddAddressButton, AddressBookActions, Column, DataTable, PageCounter, Pagination, + UpsertAddressModal, } from '@/components'; import { DebouncedFunc, partial } from 'lodash'; import { FormattedMessage } from 'react-intl'; @@ -61,7 +61,7 @@ const AddressBookTable: React.FC = ({ const staticColumns: Column[] = [ { - title: , + title: , key: 'name', }, { @@ -77,7 +77,7 @@ const AddressBookTable: React.FC = ({ return ( <> - + = ({ } /> - {(createAddressModalActive || editAddressModalActive) && } + {(createAddressModalActive || editAddressModalActive) && } ); }; diff --git a/src/renderer/pages/AddressBookPage.tsx b/src/renderer/pages/AddressBookPage.tsx index 6862639f..cc444c2e 100644 --- a/src/renderer/pages/AddressBookPage.tsx +++ b/src/renderer/pages/AddressBookPage.tsx @@ -40,7 +40,6 @@ const AddressBookPage: React.FC = () => { return ( <>
- {/* */} Date: Tue, 24 Dec 2024 14:23:26 +0500 Subject: [PATCH 18/35] refactor: refactor ConfirmDeleteAddressModal for readability and consistency --- .../modals/ConfirmDeleteAddressModal.tsx | 35 +++++++++++-------- .../blocks/widgets/AddressBookActions.tsx | 2 +- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx b/src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx index 26e4961c..cb28aff0 100644 --- a/src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx +++ b/src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx @@ -4,15 +4,18 @@ import { FormattedMessage } from 'react-intl'; import { useDeleteAddressMutation } from '@/api'; interface ConfirmDeleteModalProps { - uuid: string; + addressId: string; onClose: () => void; } -const ConfirmDeleteAddressModal: React.FC = ({ uuid, onClose }: ConfirmDeleteModalProps) => { - const [triggerDeleteAddressBookItem, { isLoading: addressBookItemDeletionLoading }] = useDeleteAddressMutation(); +const ConfirmDeleteAddressModal: React.FC = ({ + addressId, + onClose, +}: ConfirmDeleteModalProps) => { + const [triggerDeleteAddress, { isLoading: deleteAddressLoading }] = useDeleteAddressMutation(); const handleConfirm = async () => { - await triggerDeleteAddressBookItem({ uuid }); + await triggerDeleteAddress({ uuid: addressId }); onClose(); }; @@ -23,23 +26,25 @@ const ConfirmDeleteAddressModal: React.FC = ({ uuid, on return ( - +

+ +

-

- . +

+

- -
diff --git a/src/renderer/components/blocks/widgets/AddressBookActions.tsx b/src/renderer/components/blocks/widgets/AddressBookActions.tsx index 49246688..9e071192 100644 --- a/src/renderer/components/blocks/widgets/AddressBookActions.tsx +++ b/src/renderer/components/blocks/widgets/AddressBookActions.tsx @@ -42,7 +42,7 @@ const AddressBookActions: React.FC = ({ > - {showDeleteModal && setShowDeleteModal(false)} />} + {showDeleteModal && setShowDeleteModal(false)} />} ); }; From f1feaf9f57dd9a9e29c6b674d3fe3e61a4c06ba4 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Tue, 24 Dec 2024 18:54:19 +0500 Subject: [PATCH 19/35] refactor: update formatted messages and tokens --- .../blocks/forms/UpsertAddressForm.tsx | 2 +- .../blocks/modals/UpsertAddressModal.tsx | 5 +++-- .../blocks/tables/AddressBookTable.tsx | 10 ++++------ .../blocks/widgets/AddressBookActions.tsx | 8 ++++++-- src/renderer/pages/AddressBookPage.tsx | 16 ++++++---------- src/renderer/translations/tokens/en-US.json | 2 +- 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx index 4d4808ef..f68e9f10 100644 --- a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx +++ b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx @@ -99,7 +99,7 @@ const UpsertAddressForm: React.FC = ({ onSubmit, onClearError = noop, {({ field }) => ( = ({ onClose }) => { ); const handleSubmitAddNewAddress = async (data: Address): Promise => { - console.log('Data Received', data); if (data?.name && data?.walletAddress) { if (addressId && !data?.id) { setShowAddressCreationFailure(true); @@ -58,7 +57,9 @@ const UpsertAddressModal: React.FC = ({ onClose }) => { return ( - +

+ +

); }; diff --git a/src/renderer/components/blocks/tables/AddressBookTable.tsx b/src/renderer/components/blocks/tables/AddressBookTable.tsx index fec428b0..6fc4cf2a 100644 --- a/src/renderer/components/blocks/tables/AddressBookTable.tsx +++ b/src/renderer/components/blocks/tables/AddressBookTable.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { AddAddressButton, AddressBookActions, @@ -61,7 +61,7 @@ const AddressBookTable: React.FC = ({ const staticColumns: Column[] = [ { - title: , + title: , key: 'name', }, { @@ -73,18 +73,16 @@ const AddressBookTable: React.FC = ({ return isEditable ? editColumn.concat(staticColumns) : staticColumns; }, [isEditable]); - useEffect(() => console.log(createAddressModalActive), [createAddressModalActive]); - return ( <> = ({ content={ } diff --git a/src/renderer/pages/AddressBookPage.tsx b/src/renderer/pages/AddressBookPage.tsx index cc444c2e..147f13ad 100644 --- a/src/renderer/pages/AddressBookPage.tsx +++ b/src/renderer/pages/AddressBookPage.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect } from 'react'; +import React, { useCallback } from 'react'; import { AddressBookTable, SkeletonTable } from '@/components'; import { useGetAddressBookQuery } from '@/api'; import { useColumnOrderHandler, useQueryParamState } from '@/hooks'; @@ -14,25 +14,21 @@ const AddressBookPage: React.FC = () => { data: addressBookResponse, isFetching: addressBookLoading, error: addressBookError, - } = useGetAddressBookQuery({ page: Number(currentPage) }); - - useEffect(() => { - addressBookResponse; - }, [addressBookResponse]); + } = useGetAddressBookQuery({ page: Number(currentPage), order }); const handlePageChange = useCallback( debounce((page) => setCurrentPage(page), 800), [setCurrentPage], ); - if (addressBookError) { - return ; - } - if (addressBookLoading) { return ; } + if (addressBookError) { + return ; + } + if (!addressBookResponse) { return ; } diff --git a/src/renderer/translations/tokens/en-US.json b/src/renderer/translations/tokens/en-US.json index 33ac4a48..1c23ae8a 100644 --- a/src/renderer/translations/tokens/en-US.json +++ b/src/renderer/translations/tokens/en-US.json @@ -107,7 +107,7 @@ "address-book": "address book", "add-address": "add address", - "developer-name": "Developer Name", + "project-developer": "Project Developer", "delete": "delete", "edit": "edit", "cancel": "cancel", From a90f15fce97b7df815306e9e526ae476eefa0964 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Sat, 28 Dec 2024 00:30:05 +0500 Subject: [PATCH 20/35] feat: add select in create token form --- .../tokenization-engine/address-book.api.ts | 5 +- .../blocks/forms/CreateTokenForm.tsx | 125 ++++++------------ .../blocks/forms/UpsertAddressForm.tsx | 2 +- .../blocks/modals/CreateTokenModal.tsx | 32 ++++- src/renderer/components/proxy/Select.tsx | 6 +- src/renderer/pages/AddressBookPage.tsx | 3 +- 6 files changed, 77 insertions(+), 96 deletions(-) diff --git a/src/renderer/api/tokenization-engine/address-book.api.ts b/src/renderer/api/tokenization-engine/address-book.api.ts index 3772534b..03c7e74f 100644 --- a/src/renderer/api/tokenization-engine/address-book.api.ts +++ b/src/renderer/api/tokenization-engine/address-book.api.ts @@ -5,6 +5,7 @@ interface GetAddressBookParams { page?: number; search?: string | null; order?: string | null; + limit?: number; } interface GetAddressBookResponse { @@ -25,8 +26,8 @@ interface CreateAddressParams { const addressBookApi = tokenizationEngineApi.injectEndpoints({ endpoints: (builder) => ({ getAddressBook: builder.query({ - query: ({ page, search, order }: GetAddressBookParams) => { - const params: GetAddressBookParams & { limit: number } = { page, limit: RECORDS_PER_PAGE }; + query: ({ page, search, order, limit }: GetAddressBookParams) => { + const params: GetAddressBookParams = { page, limit: limit || RECORDS_PER_PAGE }; if (search) { params.search = search.replace(/[^a-zA-Z0-9 _.-]+/, ''); diff --git a/src/renderer/components/blocks/forms/CreateTokenForm.tsx b/src/renderer/components/blocks/forms/CreateTokenForm.tsx index 28dbeec2..c6605c55 100644 --- a/src/renderer/components/blocks/forms/CreateTokenForm.tsx +++ b/src/renderer/components/blocks/forms/CreateTokenForm.tsx @@ -1,117 +1,72 @@ -import React, { useCallback } from 'react'; -import { noop } from 'lodash'; -import { ErrorMessage, Field, Form, Formik } from 'formik'; -import * as yup from 'yup'; -import { TestContext, ValidationError } from 'yup'; -import { FloatingLabel, FormButton, HelperText, Spacer } from '@/components'; +import React, { forwardRef, useImperativeHandle } from 'react'; +import { Field, HelperText, Spacer } from '@/components'; import { FormattedMessage, IntlShape, useIntl } from 'react-intl'; +import { Form, Formik, FormikProps } from 'formik'; +import * as yup from 'yup'; +import { Address } from '@/schemas/Address.schema'; interface FormProps { - onSubmit: (walletAddress: string) => Promise; - onClearError?: () => void; + data?: Address[]; } -const validateWalletAddress = (value: string, context: TestContext, intl: IntlShape): ValidationError | true => { - if (!value) return true; // If empty, required will handle it - - if (value.startsWith('xch')) { - if (/^xch[a-zA-Z0-9]{59}$/.test(value)) { - return true; - } else { - return context.createError({ - message: intl.formatMessage({ - id: 'wallet-addresses-start-with-xch-and-are-62-characters-long', - }), - }); - } - } else if (value.startsWith('txch')) { - if (/^txch[a-zA-Z0-9]{59}$/.test(value)) { - return true; - } else { - return context.createError({ - message: intl.formatMessage({ - id: 'testnet-wallet-addresses-start-with-txch-and-are-63-characters-long', - }), - }); - } - } else { - return context.createError({ - message: intl.formatMessage({ - id: 'wallet-address-must-start-with-xch-or-txch', - }), - }); - } -}; +export interface CreateTokenFormRef { + submitForm: () => Promise; +} -const CreateTokenForm: React.FC = ({ onSubmit, onClearError = noop }) => { +const CreateTokenForm: React.FC = forwardRef(({ data }, ref) => { const intl: IntlShape = useIntl(); + const formikRef = React.useRef>(null); const validationSchema = yup.object({ - walletAddress: yup - .string() - .required(intl.formatMessage({ id: 'wallet-address-is-required' })) - .test('validate-wallet-address', function (value) { - return validateWalletAddress(value, this, intl); - }), + walletAddress: yup.string().required(intl.formatMessage({ id: 'wallet-address-is-required' })), }); - const handleSubmit = useCallback( - async (values: { walletAddress: string }, { setSubmitting }) => { - await onSubmit(values.walletAddress); - setSubmitting(false); - }, - [onSubmit], - ); + useImperativeHandle(ref, () => ({ + submitForm: async () => { + if (formikRef.current) { + const formik = formikRef.current; + if (formik) { + const errors = await formik.validateForm(formik.values); + formik.setTouched(Object.keys(errors).reduce((acc, key) => ({ ...acc, [key]: true }), {})); - const handleChange = useCallback( - (event, field) => { - onClearError(); - field.onChange(event); // Call Formik's original onChange + return [errors, formik.values]; + } + } }, - [onClearError], - ); + })); return ( - - initialValues={{ walletAddress: '' }} - validationSchema={validationSchema} - onSubmit={handleSubmit} - > - {({ errors, touched, isSubmitting }) => ( + {}}> + {() => (
- - {({ field }) => ( - handleChange(event, field)} - /> - )} - - {touched.walletAddress && } + ({ + label: d.name, + value: d.walletAddress, + })) || [] + } + freeform={true} + />
-
- + {/*
+

-
+
*/} )}
); -}; +}); export { CreateTokenForm }; diff --git a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx index f68e9f10..18812a3f 100644 --- a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx +++ b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx @@ -28,7 +28,7 @@ const validateWalletAddress = (value: string, context: TestContext, intl: IntlSh }); } } else if (value.startsWith('txch')) { - if (/^txch[a-zA-Z0-9]{60}$/.test(value)) { + if (/^txch[a-zA-Z0-9]{59}$/.test(value)) { return true; } else { return context.createError({ diff --git a/src/renderer/components/blocks/modals/CreateTokenModal.tsx b/src/renderer/components/blocks/modals/CreateTokenModal.tsx index dcbf957e..a7814e99 100644 --- a/src/renderer/components/blocks/modals/CreateTokenModal.tsx +++ b/src/renderer/components/blocks/modals/CreateTokenModal.tsx @@ -1,10 +1,11 @@ -import React, { useState } from 'react'; -import { ComponentCenteredSpinner, CreateTokenForm, Modal, Table } from '@/components'; +import React, { useRef, useState } from 'react'; +import { Button, ComponentCenteredSpinner, CreateTokenForm, CreateTokenFormRef, Modal, Table } from '@/components'; import { FormattedMessage } from 'react-intl'; -import { useGetProjectQuery, useGetUnitQuery, useTokenizeUnitMutation } from '@/api'; +import { useGetAddressBookQuery, useGetProjectQuery, useGetUnitQuery, useTokenizeUnitMutation } from '@/api'; import { Alert } from 'flowbite-react'; import { HiInformationCircle } from 'react-icons/hi'; import { useWildCardUrlHash } from '@/hooks'; +import { isEmpty } from 'lodash'; interface UpsertModalProps { onTokenizationSuccess: () => void; @@ -27,6 +28,8 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS { skip: showTokenizationFailure }, ); const [triggerTokenizeUnit, { error: tokenizationError }] = useTokenizeUnitMutation(); + const createTokenFormRef = useRef(null); + const { data: addressBookData } = useGetAddressBookQuery({ page: 1, limit: 1000 }); const requiredFieldsPresent = unit && @@ -65,6 +68,24 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS } }; + const handleSubmit = () => { + createTokenFormRef.current + ?.submitForm() + .then(async ([errors, values]) => { + if (!isEmpty(errors)) { + console.error('Form submission error:', errors); + return; + } + + if (values) { + onSubmitTokenization(values.walletAddress); + } + }) + .catch((error) => { + console.error('Form submission error:', error); + }); + }; + const modalBody = () => { if (unitLoading || projectLoading) { return ( @@ -170,7 +191,10 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS
- + +
+
+
); diff --git a/src/renderer/components/proxy/Select.tsx b/src/renderer/components/proxy/Select.tsx index a52a22c6..e90c1f7e 100644 --- a/src/renderer/components/proxy/Select.tsx +++ b/src/renderer/components/proxy/Select.tsx @@ -99,19 +99,19 @@ const Select: React.FC = ({
{dropdownVisible && ( -
    +
      {filteredOptions.map((option, index) => (
    • { - setInputValue(typeof option === 'object' ? option.value : option); + setInputValue(typeof option === 'object' ? option.label : option); setFilteredOptions(options); setDropdownVisible(false); if (onChange) { onChange(typeof option === 'object' ? option.value : option); } }} - className="cursor-pointer px-4 py-2 hover:bg-gray-100" + className="px-4 py-2 cursor-pointer hover:bg-gray-100" > {typeof option === 'object' ? option.label : option}
    • diff --git a/src/renderer/pages/AddressBookPage.tsx b/src/renderer/pages/AddressBookPage.tsx index 147f13ad..e1f1bf52 100644 --- a/src/renderer/pages/AddressBookPage.tsx +++ b/src/renderer/pages/AddressBookPage.tsx @@ -4,6 +4,7 @@ import { useGetAddressBookQuery } from '@/api'; import { useColumnOrderHandler, useQueryParamState } from '@/hooks'; import { FormattedMessage } from 'react-intl'; import { debounce } from 'lodash'; +import { RECORDS_PER_PAGE } from '../api/tokenization-engine/index'; const AddressBookPage: React.FC = () => { const [currentPage, setCurrentPage] = useQueryParamState('page', '1'); @@ -14,7 +15,7 @@ const AddressBookPage: React.FC = () => { data: addressBookResponse, isFetching: addressBookLoading, error: addressBookError, - } = useGetAddressBookQuery({ page: Number(currentPage), order }); + } = useGetAddressBookQuery({ page: Number(currentPage), order, limit: RECORDS_PER_PAGE }); const handlePageChange = useCallback( debounce((page) => setCurrentPage(page), 800), From fb7c6d1bff89336ddacabb1d6e6555e1cc12795d Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Wed, 1 Jan 2025 10:58:27 +0500 Subject: [PATCH 21/35] refactor: remove createAt, updatedAt and update .schema --- .../components/blocks/forms/UpsertAddressForm.tsx | 2 +- .../components/blocks/modals/UpsertAddressModal.tsx | 4 ++-- .../components/blocks/tables/AddressBookTable.tsx | 2 +- src/renderer/schemas/Address.schema.ts | 8 +++----- src/renderer/schemas/AddressBook.schemas.ts | 11 ----------- 5 files changed, 7 insertions(+), 20 deletions(-) delete mode 100644 src/renderer/schemas/AddressBook.schemas.ts diff --git a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx index 18812a3f..f7d4ef30 100644 --- a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx +++ b/src/renderer/components/blocks/forms/UpsertAddressForm.tsx @@ -5,7 +5,7 @@ import { FormattedMessage, IntlShape, useIntl } from 'react-intl'; import * as yup from 'yup'; import { TestContext, ValidationError } from 'yup'; import { noop } from 'lodash'; -import { Address } from '@/schemas/AddressBook.schemas'; +import { Address } from '@/schemas/Address.schema'; interface FormProps { onSubmit: (values: Address) => Promise; diff --git a/src/renderer/components/blocks/modals/UpsertAddressModal.tsx b/src/renderer/components/blocks/modals/UpsertAddressModal.tsx index 6e8ef399..9b8419ff 100644 --- a/src/renderer/components/blocks/modals/UpsertAddressModal.tsx +++ b/src/renderer/components/blocks/modals/UpsertAddressModal.tsx @@ -1,7 +1,7 @@ import { useCreateAddressMutation, useEditAddressMutation, useGetAddressQuery } from '@/api'; import { ComponentCenteredSpinner, Modal, UpsertAddressForm } from '@/components'; import { useUrlHash, useWildCardUrlHash } from '@/hooks'; -import { Address } from '@/schemas/AddressBook.schemas'; +import { Address } from '@/schemas/Address.schema'; import { Alert } from 'flowbite-react'; import React, { useMemo, useState } from 'react'; import { HiInformationCircle } from 'react-icons/hi'; @@ -33,7 +33,7 @@ const UpsertAddressModal: React.FC = ({ onClose }) => { } const result = addressId ? await triggerAddressUpdate({ ...data, id: data.id! }) - : await triggerAddressCreation(data); + : await triggerAddressCreation({ ...data, name: data.name! }); if (result?.error || addressCreationError) { setShowAddressCreationFailure(true); } else { diff --git a/src/renderer/components/blocks/tables/AddressBookTable.tsx b/src/renderer/components/blocks/tables/AddressBookTable.tsx index 6fc4cf2a..b2172bd7 100644 --- a/src/renderer/components/blocks/tables/AddressBookTable.tsx +++ b/src/renderer/components/blocks/tables/AddressBookTable.tsx @@ -10,7 +10,7 @@ import { } from '@/components'; import { DebouncedFunc, partial } from 'lodash'; import { FormattedMessage } from 'react-intl'; -import { Address } from '@/schemas/AddressBook.schemas'; +import { Address } from '@/schemas/Address.schema'; import { useUrlHash, useWildCardUrlHash } from '@/hooks'; interface TableProps { diff --git a/src/renderer/schemas/Address.schema.ts b/src/renderer/schemas/Address.schema.ts index 23f425b0..74d65730 100644 --- a/src/renderer/schemas/Address.schema.ts +++ b/src/renderer/schemas/Address.schema.ts @@ -1,7 +1,5 @@ export interface Address { - id: string; - name: string; - walletAddress: string; - createdAt: Date; - updatedAt: Date; + id?: string; + name?: string; + walletAddress?: string; } diff --git a/src/renderer/schemas/AddressBook.schemas.ts b/src/renderer/schemas/AddressBook.schemas.ts deleted file mode 100644 index 57f490b6..00000000 --- a/src/renderer/schemas/AddressBook.schemas.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface AddressBook { - id?: string; - projectDeveloperName?: string; - walletAddress?: string; -} - -export interface Address { - id?: string; - name: string; - walletAddress: string; -} From d00745654ccaad469f0b07a0002c1ac2880ed875 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Wed, 1 Jan 2025 11:00:29 +0500 Subject: [PATCH 22/35] refactor: rename `UpsertAddressModal` to `UpsertWalletAddressModal` --- ...rtAddressModal.tsx => UpsertWalletAddressModal.tsx} | 10 +++++----- src/renderer/components/blocks/modals/index.ts | 2 +- .../components/blocks/tables/AddressBookTable.tsx | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) rename src/renderer/components/blocks/modals/{UpsertAddressModal.tsx => UpsertWalletAddressModal.tsx} (89%) diff --git a/src/renderer/components/blocks/modals/UpsertAddressModal.tsx b/src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx similarity index 89% rename from src/renderer/components/blocks/modals/UpsertAddressModal.tsx rename to src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx index 9b8419ff..dcbfa36d 100644 --- a/src/renderer/components/blocks/modals/UpsertAddressModal.tsx +++ b/src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx @@ -7,11 +7,11 @@ import React, { useMemo, useState } from 'react'; import { HiInformationCircle } from 'react-icons/hi'; import { FormattedMessage } from 'react-intl'; -interface UpsertAddressModalProps { +interface UpsertWalletAddressModalProps { onClose: () => void; } -const UpsertAddressModal: React.FC = ({ onClose }) => { +const UpsertWalletAddressModal: React.FC = ({ onClose }) => { const [showAddressCreationFailure, setShowAddressCreationFailure] = useState(false); const [triggerAddressCreation, { error: addressCreationError }] = useCreateAddressMutation(); const [triggerAddressUpdate] = useEditAddressMutation(); @@ -25,7 +25,7 @@ const UpsertAddressModal: React.FC = ({ onClose }) => { { skip: !addressId }, ); - const handleSubmitAddNewAddress = async (data: Address): Promise => { + const handleWalletAddress = async (data: Address): Promise => { if (data?.name && data?.walletAddress) { if (addressId && !data?.id) { setShowAddressCreationFailure(true); @@ -90,10 +90,10 @@ const UpsertAddressModal: React.FC = ({ onClose }) => {

      )} - + ); }; -export { UpsertAddressModal }; +export { UpsertWalletAddressModal }; diff --git a/src/renderer/components/blocks/modals/index.ts b/src/renderer/components/blocks/modals/index.ts index b6f3c4a8..6b2fd393 100644 --- a/src/renderer/components/blocks/modals/index.ts +++ b/src/renderer/components/blocks/modals/index.ts @@ -5,5 +5,5 @@ export * from './NoHomeOrgModal'; export * from './SubmitDetokenizationFileModal'; export * from './DetokenizationSuccessModal'; export * from './ConfirmUnitDetokenizationDataModal'; -export * from './UpsertAddressModal'; +export * from './UpsertWalletAddressModal'; export * from './ConfirmDeleteAddressModal'; diff --git a/src/renderer/components/blocks/tables/AddressBookTable.tsx b/src/renderer/components/blocks/tables/AddressBookTable.tsx index b2172bd7..cb790540 100644 --- a/src/renderer/components/blocks/tables/AddressBookTable.tsx +++ b/src/renderer/components/blocks/tables/AddressBookTable.tsx @@ -6,7 +6,7 @@ import { DataTable, PageCounter, Pagination, - UpsertAddressModal, + UpsertWalletAddressModal, } from '@/components'; import { DebouncedFunc, partial } from 'lodash'; import { FormattedMessage } from 'react-intl'; @@ -98,7 +98,9 @@ const AddressBookTable: React.FC = ({ } /> - {(createAddressModalActive || editAddressModalActive) && } + {(createAddressModalActive || editAddressModalActive) && ( + + )} ); }; From e704ef46a2c97328fc2a17a8de19e6c17fc14a82 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Wed, 1 Jan 2025 11:03:46 +0500 Subject: [PATCH 23/35] refactor: rename `ConfirmDeleteAddressModal` to `ConfirmDeleteWalletAddressModal` --- ...dressModal.tsx => ConfirmDeleteWalletAddressModal.tsx} | 8 ++++---- src/renderer/components/blocks/modals/index.ts | 2 +- .../components/blocks/widgets/AddressBookActions.tsx | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) rename src/renderer/components/blocks/modals/{ConfirmDeleteAddressModal.tsx => ConfirmDeleteWalletAddressModal.tsx} (85%) diff --git a/src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx b/src/renderer/components/blocks/modals/ConfirmDeleteWalletAddressModal.tsx similarity index 85% rename from src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx rename to src/renderer/components/blocks/modals/ConfirmDeleteWalletAddressModal.tsx index cb28aff0..75b578ea 100644 --- a/src/renderer/components/blocks/modals/ConfirmDeleteAddressModal.tsx +++ b/src/renderer/components/blocks/modals/ConfirmDeleteWalletAddressModal.tsx @@ -3,15 +3,15 @@ import { Button, Modal } from '@/components'; import { FormattedMessage } from 'react-intl'; import { useDeleteAddressMutation } from '@/api'; -interface ConfirmDeleteModalProps { +interface ConfirmDeleteWalletAddressModalProps { addressId: string; onClose: () => void; } -const ConfirmDeleteAddressModal: React.FC = ({ +const ConfirmDeleteWalletAddressModal: React.FC = ({ addressId, onClose, -}: ConfirmDeleteModalProps) => { +}: ConfirmDeleteWalletAddressModalProps) => { const [triggerDeleteAddress, { isLoading: deleteAddressLoading }] = useDeleteAddressMutation(); const handleConfirm = async () => { @@ -51,4 +51,4 @@ const ConfirmDeleteAddressModal: React.FC = ({ ); }; -export { ConfirmDeleteAddressModal }; +export { ConfirmDeleteWalletAddressModal }; diff --git a/src/renderer/components/blocks/modals/index.ts b/src/renderer/components/blocks/modals/index.ts index 6b2fd393..0dbde0d0 100644 --- a/src/renderer/components/blocks/modals/index.ts +++ b/src/renderer/components/blocks/modals/index.ts @@ -6,4 +6,4 @@ export * from './SubmitDetokenizationFileModal'; export * from './DetokenizationSuccessModal'; export * from './ConfirmUnitDetokenizationDataModal'; export * from './UpsertWalletAddressModal'; -export * from './ConfirmDeleteAddressModal'; +export * from './ConfirmDeleteWalletAddressModal'; diff --git a/src/renderer/components/blocks/widgets/AddressBookActions.tsx b/src/renderer/components/blocks/widgets/AddressBookActions.tsx index e9b1d073..92f5202d 100644 --- a/src/renderer/components/blocks/widgets/AddressBookActions.tsx +++ b/src/renderer/components/blocks/widgets/AddressBookActions.tsx @@ -1,7 +1,7 @@ import { noop } from 'lodash'; import React, { useState } from 'react'; import { HiDotsVertical } from 'react-icons/hi'; -import { Button, ConfirmDeleteAddressModal, Tooltip } from '@/components'; +import { Button, ConfirmDeleteWalletAddressModal, Tooltip } from '@/components'; import { FormattedMessage } from 'react-intl'; interface AddressBookActionProps { @@ -46,7 +46,9 @@ const AddressBookActions: React.FC = ({ > - {showDeleteModal && setShowDeleteModal(false)} />} + {showDeleteModal && ( + setShowDeleteModal(false)} /> + )} ); }; From 1230e79389e0493deda29ee22612fa021709431c Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Wed, 1 Jan 2025 11:07:49 +0500 Subject: [PATCH 24/35] refactor: rename `UpsertAddressForm` to `UpsertWalletAddressForm` --- .../{UpsertAddressForm.tsx => UpsertWalletAddressForm.tsx} | 4 ++-- src/renderer/components/blocks/forms/index.ts | 2 +- .../components/blocks/modals/UpsertWalletAddressModal.tsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/renderer/components/blocks/forms/{UpsertAddressForm.tsx => UpsertWalletAddressForm.tsx} (96%) diff --git a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx b/src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx similarity index 96% rename from src/renderer/components/blocks/forms/UpsertAddressForm.tsx rename to src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx index f7d4ef30..79a2a6a9 100644 --- a/src/renderer/components/blocks/forms/UpsertAddressForm.tsx +++ b/src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx @@ -46,7 +46,7 @@ const validateWalletAddress = (value: string, context: TestContext, intl: IntlSh } }; -const UpsertAddressForm: React.FC = ({ onSubmit, onClearError = noop, data: address, onClose }) => { +const UpsertWalletAddressForm: React.FC = ({ onSubmit, onClearError = noop, data: address, onClose }) => { const intl = useIntl(); const validationSchema = yup.object({ @@ -146,4 +146,4 @@ const UpsertAddressForm: React.FC = ({ onSubmit, onClearError = noop, ); }; -export { UpsertAddressForm }; +export { UpsertWalletAddressForm }; diff --git a/src/renderer/components/blocks/forms/index.ts b/src/renderer/components/blocks/forms/index.ts index 34ae79bc..39a4eaa4 100644 --- a/src/renderer/components/blocks/forms/index.ts +++ b/src/renderer/components/blocks/forms/index.ts @@ -1,4 +1,4 @@ export * from './ConnectForm'; export * from './CreateTokenForm'; export * from './DetokenizeUnitForm'; -export * from './UpsertAddressForm'; +export * from './UpsertWalletAddressForm'; diff --git a/src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx b/src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx index dcbfa36d..efb95a2c 100644 --- a/src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx +++ b/src/renderer/components/blocks/modals/UpsertWalletAddressModal.tsx @@ -1,5 +1,5 @@ import { useCreateAddressMutation, useEditAddressMutation, useGetAddressQuery } from '@/api'; -import { ComponentCenteredSpinner, Modal, UpsertAddressForm } from '@/components'; +import { ComponentCenteredSpinner, Modal, UpsertWalletAddressForm } from '@/components'; import { useUrlHash, useWildCardUrlHash } from '@/hooks'; import { Address } from '@/schemas/Address.schema'; import { Alert } from 'flowbite-react'; @@ -90,7 +90,7 @@ const UpsertWalletAddressModal: React.FC = ({ onC

      )} - + ); From 12a54ab72a357965c6e04cf33324d6e28f075598 Mon Sep 17 00:00:00 2001 From: newweborder007 Date: Wed, 1 Jan 2025 11:10:33 +0500 Subject: [PATCH 25/35] refactor: rename `AddAddressButton` to `AddWalletAddressButton` --- .../{AddAddressButton.tsx => AddWalletAddressButton.tsx} | 6 +++--- src/renderer/components/blocks/buttons/index.ts | 2 +- src/renderer/components/blocks/tables/AddressBookTable.tsx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) rename src/renderer/components/blocks/buttons/{AddAddressButton.tsx => AddWalletAddressButton.tsx} (67%) diff --git a/src/renderer/components/blocks/buttons/AddAddressButton.tsx b/src/renderer/components/blocks/buttons/AddWalletAddressButton.tsx similarity index 67% rename from src/renderer/components/blocks/buttons/AddAddressButton.tsx rename to src/renderer/components/blocks/buttons/AddWalletAddressButton.tsx index ecd89116..80accd33 100644 --- a/src/renderer/components/blocks/buttons/AddAddressButton.tsx +++ b/src/renderer/components/blocks/buttons/AddWalletAddressButton.tsx @@ -2,11 +2,11 @@ import React from 'react'; import { Button } from '@/components'; import { FormattedMessage } from 'react-intl'; -interface AddAddressButtonProps { +interface AddWalletAddressButtonProps { setActive: (active: boolean) => void; } -const AddAddressButton: React.FC = ({ setActive }) => { +const AddWalletAddressButton: React.FC = ({ setActive }) => { return ( <>
- {/*
- -

- -

-
-
*/} )} From f042ea2bbdfa953599dc36ab130e68df559bcd05 Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Wed, 8 Jan 2025 12:02:01 +0000 Subject: [PATCH 28/35] Update license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 7e8bb6bb..ef0cf9fb 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2024 Chia Network Inc. + Copyright 2025 Chia Network Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 1f7e203381ef71d46181078385a373f67bacb76f Mon Sep 17 00:00:00 2001 From: William Wills Date: Thu, 9 Jan 2025 14:26:48 -0500 Subject: [PATCH 29/35] fix: connect form wallet address regex fix: tokenization button not showing processing --- src/renderer/App.tsx | 1 - .../components/blocks/forms/ConnectForm.tsx | 2 +- .../blocks/forms/CreateTokenForm.tsx | 13 +++---- .../blocks/modals/CreateTokenModal.tsx | 35 ++++++++----------- src/renderer/translations/tokens/en-US.json | 1 - 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 2f986b7a..008b2982 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -108,7 +108,6 @@ function App() { if (event.origin === window.origin) { const message = event.data; if (message?.selectedLocale && message.selectedLocale !== appStore.locale) { - console.log('selected locale', message.selectedLocale); dispatch(setLocale(message.selectedLocale)); } } diff --git a/src/renderer/components/blocks/forms/ConnectForm.tsx b/src/renderer/components/blocks/forms/ConnectForm.tsx index d70dfc27..755021f1 100644 --- a/src/renderer/components/blocks/forms/ConnectForm.tsx +++ b/src/renderer/components/blocks/forms/ConnectForm.tsx @@ -16,7 +16,7 @@ const validationSchema = yup.object({ .required('Server Address is required') .matches( // eslint-disable-next-line no-useless-escape - /^(https?:\/\/(www\.)?)?([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}|localhost|[a-z0-9]+)(:[0-9]{1,5})?(\/.*)?$/, + /^(https?:\/\/(www\.)?)?([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}|localhost|[a-z0-9]+|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?$/, 'Please enter a valid server address', ), apiKey: yup.string(), diff --git a/src/renderer/components/blocks/forms/CreateTokenForm.tsx b/src/renderer/components/blocks/forms/CreateTokenForm.tsx index e355bc98..cb20d615 100644 --- a/src/renderer/components/blocks/forms/CreateTokenForm.tsx +++ b/src/renderer/components/blocks/forms/CreateTokenForm.tsx @@ -10,7 +10,7 @@ interface FormProps extends React.RefAttributes { } export interface CreateTokenFormRef { - submitForm: () => Promise; + submitForm: () => Promise; } const CreateTokenForm: React.FC = forwardRef(({ data }, ref) => { @@ -28,8 +28,9 @@ const CreateTokenForm: React.FC = forwardRef ({ ...acc, [key]: true }), {})); - - return [errors, formik.values]; + if (formik.values?.walletAddress) { + return formik.values.walletAddress; + } } } }, @@ -48,9 +49,9 @@ const CreateTokenForm: React.FC = forwardRef ({ - label: d.name || '', - value: d.walletAddress || '', + data?.map((addressData) => ({ + label: addressData.name || '', + value: addressData.walletAddress || '', })) || [] } freeform={true} diff --git a/src/renderer/components/blocks/modals/CreateTokenModal.tsx b/src/renderer/components/blocks/modals/CreateTokenModal.tsx index a7814e99..73647381 100644 --- a/src/renderer/components/blocks/modals/CreateTokenModal.tsx +++ b/src/renderer/components/blocks/modals/CreateTokenModal.tsx @@ -5,7 +5,6 @@ import { useGetAddressBookQuery, useGetProjectQuery, useGetUnitQuery, useTokeniz import { Alert } from 'flowbite-react'; import { HiInformationCircle } from 'react-icons/hi'; import { useWildCardUrlHash } from '@/hooks'; -import { isEmpty } from 'lodash'; interface UpsertModalProps { onTokenizationSuccess: () => void; @@ -17,6 +16,7 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS const urlHashValues: string[] = tokenizeUrlFragment?.replace('tokenize-', '')?.split('^'); const warehouseUnitId = urlHashValues?.length >= 1 ? urlHashValues[0] : ''; const warehouseProjectId = urlHashValues?.length >= 2 ? urlHashValues[1] : ''; + const [tokenizationProcessing, setTokenizationProcessing] = useState(false); const [showTokenizationFailure, setShowTokenizationFailure] = useState(false); const { data: unit, isLoading: unitLoading } = useGetUnitQuery( @@ -42,8 +42,15 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS unit?.unitBlockEnd && unit?.unitCount; - const onSubmitTokenization = async (walletAddress: string) => { + const onSubmitTokenization = async () => { setShowTokenizationFailure(false); + setTokenizationProcessing(true); + + const walletAddress = await createTokenFormRef.current?.submitForm(); + if (!walletAddress) { + setTokenizationProcessing(false); + return; + } if (unit && project && requiredFieldsPresent) { const submitData = { @@ -66,24 +73,8 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS } else { setShowTokenizationFailure(true); } - }; - const handleSubmit = () => { - createTokenFormRef.current - ?.submitForm() - .then(async ([errors, values]) => { - if (!isEmpty(errors)) { - console.error('Form submission error:', errors); - return; - } - - if (values) { - onSubmitTokenization(values.walletAddress); - } - }) - .catch((error) => { - console.error('Form submission error:', error); - }); + setTokenizationProcessing(false); }; const modalBody = () => { @@ -194,7 +185,11 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS
- +
); diff --git a/src/renderer/translations/tokens/en-US.json b/src/renderer/translations/tokens/en-US.json index 1c23ae8a..e372fe3d 100644 --- a/src/renderer/translations/tokens/en-US.json +++ b/src/renderer/translations/tokens/en-US.json @@ -104,7 +104,6 @@ "not-available-in-core-registry-mode": "not available in core registry mode", "cannot-connect-to-registry-api-with-current-settings": "Cannot connect to registry API with current settings", "please-disconnect-to-edit-the-api-url-and-api-key": "Please disconnect to edit the API URL and API key", - "address-book": "address book", "add-address": "add address", "project-developer": "Project Developer", From 2343de148ddadef1129ffd6cd6704bd5129d6314 Mon Sep 17 00:00:00 2001 From: William Wills Date: Fri, 17 Jan 2025 12:58:52 -0500 Subject: [PATCH 30/35] fix: tokenization modal wallet address validations --- .../blocks/forms/CreateTokenForm.tsx | 112 ++++++++++-------- .../blocks/forms/UpsertWalletAddressForm.tsx | 37 +----- .../blocks/modals/CreateTokenModal.tsx | 13 +- src/renderer/components/form/index.ts | 1 + src/renderer/components/form/validations.ts | 36 ++++++ src/renderer/components/proxy/Select.tsx | 6 +- 6 files changed, 116 insertions(+), 89 deletions(-) create mode 100644 src/renderer/components/form/validations.ts diff --git a/src/renderer/components/blocks/forms/CreateTokenForm.tsx b/src/renderer/components/blocks/forms/CreateTokenForm.tsx index cb20d615..b7d69b25 100644 --- a/src/renderer/components/blocks/forms/CreateTokenForm.tsx +++ b/src/renderer/components/blocks/forms/CreateTokenForm.tsx @@ -1,66 +1,84 @@ import React, { forwardRef, useImperativeHandle } from 'react'; -import { Field, HelperText, Spacer } from '@/components'; +import { Field, HelperText, Spacer, validateWalletAddress } from '@/components'; import { FormattedMessage, IntlShape, useIntl } from 'react-intl'; import { Form, Formik, FormikProps } from 'formik'; import * as yup from 'yup'; import { Address } from '@/schemas/Address.schema'; interface FormProps extends React.RefAttributes { - data?: Address[]; + addressBookRecords: Address[]; + onValidityChange: (isValid: boolean) => void; } export interface CreateTokenFormRef { - submitForm: () => Promise; + submitForm: () => Promise; } -const CreateTokenForm: React.FC = forwardRef(({ data }, ref) => { - const intl: IntlShape = useIntl(); - const formikRef = React.useRef>(null); +const CreateTokenForm: React.FC = forwardRef( + ({ addressBookRecords, onValidityChange }, ref) => { + const intl: IntlShape = useIntl(); + const formikRef = React.useRef>(null); - const validationSchema = yup.object({ - walletAddress: yup.string().required(intl.formatMessage({ id: 'wallet-address-is-required' })), - }); + const validationSchema = yup.object({ + walletAddress: yup + .string() + .required(intl.formatMessage({ id: 'wallet-address-is-required' })) + .test('validate-wallet-address', function (walletAddress) { + return validateWalletAddress(walletAddress, this, intl); + }), + name: yup.string().optional(), + }); - useImperativeHandle(ref, () => ({ - submitForm: async () => { - if (formikRef.current) { - const formik = formikRef.current; - if (formik) { - const errors = await formik.validateForm(formik.values); - formik.setTouched(Object.keys(errors).reduce((acc, key) => ({ ...acc, [key]: true }), {})); - if (formik.values?.walletAddress) { - return formik.values.walletAddress; + useImperativeHandle(ref, () => ({ + submitForm: async () => { + if (formikRef.current) { + const formik = formikRef.current; + if (formik) { + const errors = await formik.validateForm(formik.values); + formik.setTouched(Object.keys(errors).reduce((acc, key) => ({ ...acc, [key]: true }), {})); + if (formik.values?.walletAddress) { + return formik.values.walletAddress; + } } } - } - }, - })); + }, + })); - return ( - {}}> - {() => ( -
-
- - - - - ({ - label: addressData.name || '', - value: addressData.walletAddress || '', - })) || [] - } - freeform={true} - /> -
-
- )} -
- ); -}); + return ( + + innerRef={formikRef} + initialValues={{ walletAddress: '', name: '' }} + validationSchema={validationSchema} + onSubmit={() => {}} + > + {({ isValid }) => { + onValidityChange(isValid); + + return ( +
+
+ + + + + ({ + label: addressRecord.name || '', + value: addressRecord.walletAddress || '', + }))} + freeform={true} + /> +
+
+ ); + }} + + ); + }, +); export { CreateTokenForm }; diff --git a/src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx b/src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx index 79a2a6a9..44aa03b6 100644 --- a/src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx +++ b/src/renderer/components/blocks/forms/UpsertWalletAddressForm.tsx @@ -1,9 +1,8 @@ import React, { useCallback } from 'react'; import { ErrorMessage, Field, Form, Formik, FormikHelpers } from 'formik'; -import { Button, FloatingLabel, FormButton } from '@/components'; -import { FormattedMessage, IntlShape, useIntl } from 'react-intl'; +import { Button, FloatingLabel, FormButton, validateWalletAddress } from '@/components'; +import { FormattedMessage, useIntl } from 'react-intl'; import * as yup from 'yup'; -import { TestContext, ValidationError } from 'yup'; import { noop } from 'lodash'; import { Address } from '@/schemas/Address.schema'; @@ -14,38 +13,6 @@ interface FormProps { onClose: any; } -const validateWalletAddress = (value: string, context: TestContext, intl: IntlShape): ValidationError | true => { - if (!value) return true; // If empty, required will handle it - - if (value.startsWith('xch')) { - if (/^xch[a-zA-Z0-9]{59}$/.test(value)) { - return true; - } else { - return context.createError({ - message: intl.formatMessage({ - id: 'wallet-addresses-start-with-xch-and-are-62-characters-long', - }), - }); - } - } else if (value.startsWith('txch')) { - if (/^txch[a-zA-Z0-9]{59}$/.test(value)) { - return true; - } else { - return context.createError({ - message: intl.formatMessage({ - id: 'testnet-wallet-addresses-start-with-txch-and-are-63-characters-long', - }), - }); - } - } else { - return context.createError({ - message: intl.formatMessage({ - id: 'wallet-address-must-start-with-xch-or-txch', - }), - }); - } -}; - const UpsertWalletAddressForm: React.FC = ({ onSubmit, onClearError = noop, data: address, onClose }) => { const intl = useIntl(); diff --git a/src/renderer/components/blocks/modals/CreateTokenModal.tsx b/src/renderer/components/blocks/modals/CreateTokenModal.tsx index 73647381..cad21e57 100644 --- a/src/renderer/components/blocks/modals/CreateTokenModal.tsx +++ b/src/renderer/components/blocks/modals/CreateTokenModal.tsx @@ -17,6 +17,7 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS const warehouseUnitId = urlHashValues?.length >= 1 ? urlHashValues[0] : ''; const warehouseProjectId = urlHashValues?.length >= 2 ? urlHashValues[1] : ''; const [tokenizationProcessing, setTokenizationProcessing] = useState(false); + const [creatTokenFormValid, setCreateTokenFormValid] = useState(false); const [showTokenizationFailure, setShowTokenizationFailure] = useState(false); const { data: unit, isLoading: unitLoading } = useGetUnitQuery( @@ -182,10 +183,18 @@ const CreateTokenModal: React.FC = ({ onClose, onTokenizationS
- +
-