diff --git a/ui/package-lock.json b/ui/package-lock.json
index b92367ac1..a1383bcc9 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -30,8 +30,8 @@
"react-hook-form": "^7.42.1",
"react-infinite-scroll-component": "^6.1.0",
"react-redux": "^8.0.5",
- "react-router": "^5.1.0",
- "react-router-dom": "^5.1.0",
+ "react-router": "^6.8.0",
+ "react-router-dom": "^6.8.0",
"react-scroll": "^1.8.9",
"react-simple-code-editor": "^0.13.1",
"use-http": "^1.0.27",
@@ -3785,6 +3785,14 @@
}
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.1.tgz",
+ "integrity": "sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@restart/hooks": {
"version": "0.4.7",
"resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz",
@@ -4612,7 +4620,7 @@
"version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz",
"integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@types/react": "*"
}
@@ -9548,19 +9556,6 @@
"he": "bin/he"
}
},
- "node_modules/history": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
- "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
- "dependencies": {
- "@babel/runtime": "^7.1.2",
- "loose-envify": "^1.2.0",
- "resolve-pathname": "^3.0.0",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0",
- "value-equal": "^1.0.1"
- }
- },
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
@@ -14024,19 +14019,6 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
- "node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/path-to-regexp/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
- },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -16056,39 +16038,33 @@
}
},
"node_modules/react-router": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
- "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.0.tgz",
+ "integrity": "sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==",
"dependencies": {
- "@babel/runtime": "^7.12.13",
- "history": "^4.9.0",
- "hoist-non-react-statics": "^3.1.0",
- "loose-envify": "^1.3.1",
- "path-to-regexp": "^1.7.0",
- "prop-types": "^15.6.2",
- "react-is": "^16.6.0",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0"
+ "@remix-run/router": "1.3.1"
+ },
+ "engines": {
+ "node": ">=14"
},
"peerDependencies": {
- "react": ">=15"
+ "react": ">=16.8"
}
},
"node_modules/react-router-dom": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz",
- "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.0.tgz",
+ "integrity": "sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==",
"dependencies": {
- "@babel/runtime": "^7.12.13",
- "history": "^4.9.0",
- "loose-envify": "^1.3.1",
- "prop-types": "^15.6.2",
- "react-router": "5.3.4",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0"
+ "@remix-run/router": "1.3.1",
+ "react-router": "6.8.0"
+ },
+ "engines": {
+ "node": ">=14"
},
"peerDependencies": {
- "react": ">=15"
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
}
},
"node_modules/react-scripts": {
@@ -16477,11 +16453,6 @@
"node": ">=8"
}
},
- "node_modules/resolve-pathname": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
- "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
- },
"node_modules/resolve-url-loader": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz",
@@ -17886,16 +17857,6 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
- "node_modules/tiny-invariant": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
- "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
- },
- "node_modules/tiny-warning": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
- "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
- },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -18089,6 +18050,20 @@
"is-typedarray": "^1.0.0"
}
},
+ "node_modules/typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -18399,11 +18374,6 @@
"resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz",
"integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg=="
},
- "node_modules/value-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
- "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
- },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -20912,13 +20882,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz",
"integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@csstools/selector-specificity": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz",
"integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@eslint/eslintrc": {
"version": "1.3.3",
@@ -21985,6 +21957,11 @@
"reselect": "^4.1.7"
}
},
+ "@remix-run/router": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.1.tgz",
+ "integrity": "sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw=="
+ },
"@restart/hooks": {
"version": "0.4.7",
"resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz",
@@ -22322,7 +22299,8 @@
"version": "14.4.3",
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz",
"integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@tootallnate/once": {
"version": "1.1.2",
@@ -22634,7 +22612,7 @@
"version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz",
"integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@types/react": "*"
}
@@ -23083,13 +23061,15 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"acorn-node": {
"version": "1.8.2",
@@ -23428,7 +23408,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -23489,7 +23470,8 @@
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz",
"integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"babel-plugin-polyfill-corejs2": {
"version": "0.3.3",
@@ -23704,7 +23686,8 @@
"bootstrap": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
- "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ=="
+ "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
+ "requires": {}
},
"brace-expansion": {
"version": "1.1.11",
@@ -24266,7 +24249,8 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz",
"integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"css-has-pseudo": {
"version": "3.0.4",
@@ -24340,7 +24324,8 @@
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz",
"integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"css-select": {
"version": "4.3.0",
@@ -24455,7 +24440,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
"integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"csso": {
"version": "4.2.0",
@@ -25434,7 +25420,8 @@
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"eslint-plugin-testing-library": {
"version": "5.9.1",
@@ -25979,7 +25966,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"chalk": {
"version": "4.1.2",
@@ -26348,19 +26336,6 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
- "history": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
- "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
- "requires": {
- "@babel/runtime": "^7.1.2",
- "loose-envify": "^1.2.0",
- "resolve-pathname": "^3.0.0",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0",
- "value-equal": "^1.0.1"
- }
- },
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
@@ -26575,7 +26550,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"idb": {
"version": "7.1.1",
@@ -27675,7 +27651,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/jest-fast-check/-/jest-fast-check-1.0.2.tgz",
"integrity": "sha512-XuPENBGUN2gaTdPxgPJwFsYp0oj+MieRLpBha0flMxfI01zPHgGkZjGSLThimmsU5XFTGhJYZGVnift7UmsSuw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"jest-get-type": {
"version": "29.2.0",
@@ -28059,7 +28036,8 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"jest-regex-util": {
"version": "27.5.1",
@@ -29797,21 +29775,6 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "requires": {
- "isarray": "0.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
- }
- }
- },
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -29974,7 +29937,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz",
"integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-calc": {
"version": "8.2.4",
@@ -30084,25 +30048,29 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
"integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-discard-duplicates": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
"integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-discard-empty": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
"integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-discard-overridden": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
"integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-double-position-gradients": {
"version": "3.1.2",
@@ -30127,7 +30095,8 @@
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz",
"integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-focus-visible": {
"version": "6.0.4",
@@ -30151,13 +30120,15 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
"integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-gap-properties": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz",
"integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-image-set-function": {
"version": "4.0.7",
@@ -30183,7 +30154,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz",
"integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-js": {
"version": "4.0.0",
@@ -30229,13 +30201,15 @@
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz",
"integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-media-minmax": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz",
"integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-merge-longhand": {
"version": "5.1.7",
@@ -30303,7 +30277,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-modules-local-by-default": {
"version": "4.0.0",
@@ -30368,7 +30343,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
"integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-normalize-display-values": {
"version": "5.1.0",
@@ -30473,7 +30449,8 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
"integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-place": {
"version": "7.0.5",
@@ -30573,7 +30550,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
"integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-selector-not": {
"version": "6.0.1",
@@ -31026,7 +31004,8 @@
"react-hook-form": {
"version": "7.42.1",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.42.1.tgz",
- "integrity": "sha512-2UIGqwMZksd5HS55crTT1ATLTr0rAI4jS7yVuqTaoRVDhY2Qc4IyjskCmpnmdYqUNOYFy04vW253tb2JRVh+IQ=="
+ "integrity": "sha512-2UIGqwMZksd5HS55crTT1ATLTr0rAI4jS7yVuqTaoRVDhY2Qc4IyjskCmpnmdYqUNOYFy04vW253tb2JRVh+IQ==",
+ "requires": {}
},
"react-infinite-scroll-component": {
"version": "6.1.0",
@@ -31097,33 +31076,20 @@
"dev": true
},
"react-router": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
- "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.0.tgz",
+ "integrity": "sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==",
"requires": {
- "@babel/runtime": "^7.12.13",
- "history": "^4.9.0",
- "hoist-non-react-statics": "^3.1.0",
- "loose-envify": "^1.3.1",
- "path-to-regexp": "^1.7.0",
- "prop-types": "^15.6.2",
- "react-is": "^16.6.0",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0"
+ "@remix-run/router": "1.3.1"
}
},
"react-router-dom": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz",
- "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.0.tgz",
+ "integrity": "sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==",
"requires": {
- "@babel/runtime": "^7.12.13",
- "history": "^4.9.0",
- "loose-envify": "^1.3.1",
- "prop-types": "^15.6.2",
- "react-router": "5.3.4",
- "tiny-invariant": "^1.0.2",
- "tiny-warning": "^1.0.0"
+ "@remix-run/router": "1.3.1",
+ "react-router": "6.8.0"
}
},
"react-scripts": {
@@ -31194,7 +31160,8 @@
"react-simple-code-editor": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.13.1.tgz",
- "integrity": "sha512-XYeVwRZwgyKtjNIYcAEgg2FaQcCZwhbarnkJIV20U2wkCU9q/CPFBo8nRXrK4GXUz3AvbqZFsZRrpUTkqqEYyQ=="
+ "integrity": "sha512-XYeVwRZwgyKtjNIYcAEgg2FaQcCZwhbarnkJIV20U2wkCU9q/CPFBo8nRXrK4GXUz3AvbqZFsZRrpUTkqqEYyQ==",
+ "requires": {}
},
"react-transition-group": {
"version": "4.4.5",
@@ -31266,7 +31233,8 @@
"redux-thunk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz",
- "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q=="
+ "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==",
+ "requires": {}
},
"regenerate": {
"version": "1.4.2",
@@ -31425,11 +31393,6 @@
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
- "resolve-pathname": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
- "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
- },
"resolve-url-loader": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz",
@@ -31646,7 +31609,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -32160,7 +32124,8 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz",
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"stylehacks": {
"version": "5.1.1",
@@ -32483,16 +32448,6 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
- "tiny-invariant": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
- "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
- },
- "tiny-warning": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
- "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
- },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -32647,6 +32602,13 @@
"is-typedarray": "^1.0.0"
}
},
+ "typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "dev": true,
+ "peer": true
+ },
"unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -32762,7 +32724,8 @@
"urs": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/urs/-/urs-0.0.8.tgz",
- "integrity": "sha512-LaSSPpr91XrVA3vW2zPupw4K6DSQEDKdL4yQZX1mO2fpljIMpB5zctrjRvxLurelWSgKsHsCmfHNCImscryirQ=="
+ "integrity": "sha512-LaSSPpr91XrVA3vW2zPupw4K6DSQEDKdL4yQZX1mO2fpljIMpB5zctrjRvxLurelWSgKsHsCmfHNCImscryirQ==",
+ "requires": {}
},
"use-http": {
"version": "1.0.27",
@@ -32785,12 +32748,14 @@
"use-ssr": {
"version": "1.0.24",
"resolved": "https://registry.npmjs.org/use-ssr/-/use-ssr-1.0.24.tgz",
- "integrity": "sha512-0MFps7ezL57/3o0yl4CvrHLlp9z20n1rQZV/lSRz7if+TUoM6POU1XdOvEjIgjgKeIhTEye1U0khrIYWCTWw4g=="
+ "integrity": "sha512-0MFps7ezL57/3o0yl4CvrHLlp9z20n1rQZV/lSRz7if+TUoM6POU1XdOvEjIgjgKeIhTEye1U0khrIYWCTWw4g==",
+ "requires": {}
},
"use-sync-external-store": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
- "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA=="
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "requires": {}
},
"util-deprecate": {
"version": "1.0.2",
@@ -32876,11 +32841,6 @@
"resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz",
"integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg=="
},
- "value-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
- "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
- },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -33106,7 +33066,8 @@
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "dev": true
+ "dev": true,
+ "requires": {}
}
}
},
@@ -33559,7 +33520,8 @@
"version": "7.5.9",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"xml-name-validator": {
"version": "3.0.0",
diff --git a/ui/package.json b/ui/package.json
index 06da9c141..d4dcb645e 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -26,8 +26,8 @@
"react-hook-form": "^7.42.1",
"react-infinite-scroll-component": "^6.1.0",
"react-redux": "^8.0.5",
- "react-router": "^5.1.0",
- "react-router-dom": "^5.1.0",
+ "react-router": "^6.8.0",
+ "react-router-dom": "^6.8.0",
"react-scroll": "^1.8.9",
"react-simple-code-editor": "^0.13.1",
"use-http": "^1.0.27",
diff --git a/ui/src/app/App.js b/ui/src/app/App.js
index 77a41a73e..82f67f8a0 100644
--- a/ui/src/app/App.js
+++ b/ui/src/app/App.js
@@ -1,15 +1,13 @@
import React from 'react';
import {
- BrowserRouter as Router,
- Redirect,
-} from "react-router-dom";
-
-import {
- Switch,
+ BrowserRouter,
+ Navigate,
+ Routes,
Route,
-} from "react-router";
+} from "react-router-dom";
import { QueryParamProvider } from 'use-query-params';
import { Provider as HttpProvider } from 'use-http';
+import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6';
import Button from 'react-bootstrap/Button';
import './App.scss';
@@ -23,7 +21,6 @@ import { UserProvider } from './core/user/UserContext';
import { Metadata } from './metadata/Metadata';
import { Attribute } from './metadata/Attribute';
import { NotificationList } from './notifications/component/NotificationList';
-import { UserConfirmation, ConfirmWindow } from './core/components/UserConfirmation';
import { NewSource } from './metadata/new/NewSource';
import { NewProvider } from './metadata/new/NewProvider';
import { Filter } from './metadata/Filter';
@@ -36,6 +33,8 @@ import { ProtectRoute } from './core/components/ProtectRoute';
import { IdpConfiguration } from './admin/IdpConfiguration';
import { DynamicRegistration } from './dynamic-registration/DynamicRegistration';
+// import { useBlocker } from './core/hooks/useBlocker';
+
function App() {
const [showTimeout] = React.useState();
@@ -68,64 +67,55 @@ function App() {
-
- {(message, confirm, confirmCallback, setConfirm, getConfirmation) =>
-
-
-
-
-
-
-
-
-
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
-
-
-
-
-
- }
-
+
+
+
+
+
+ } />
+ } />
+ } />
+
+ } />
+
+
+
+ } />
+
+
+
+ } />
+
+
+
+ } />
+ } />
+
+
+
+ } />
+
+
+
+ } />
+
+
+
+ } />
+ } />
+
+
+
+
+
+
diff --git a/ui/src/app/admin/Groups.js b/ui/src/app/admin/Groups.js
index 0e2e062c5..10648eb43 100644
--- a/ui/src/app/admin/Groups.js
+++ b/ui/src/app/admin/Groups.js
@@ -1,5 +1,5 @@
import React, { Fragment } from 'react';
-import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { GroupsProvider } from './hoc/GroupsProvider';
import { NewGroup } from './container/NewGroup';
import { EditGroup } from './container/EditGroup';
@@ -8,36 +8,34 @@ import Spinner from '../core/components/Spinner';
export function Groups() {
- let { path, url } = useRouteMatch();
-
return (
<>
-
-
+
+
{(groups, onDelete) =>
}
} />
-
+
{(groups, onDelete, loading) =>
{ loading ?
: }
}
} />
-
+
{(groups, onDelete, loading) =>
{ loading ?
: }
}
} />
-
-
+
} />
-
+
>
);
}
\ No newline at end of file
diff --git a/ui/src/app/admin/IdpConfiguration.js b/ui/src/app/admin/IdpConfiguration.js
index 50bacf1e6..0be793f53 100644
--- a/ui/src/app/admin/IdpConfiguration.js
+++ b/ui/src/app/admin/IdpConfiguration.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { ConfigurationsProvider } from './hoc/ConfigurationsProvider';
import { NewConfiguration } from './container/NewConfiguration';
import { EditConfiguration } from './container/EditConfiguration';
@@ -7,19 +7,17 @@ import { ConfigurationList } from './container/ConfigurationList';
export function IdpConfiguration() {
- let { path, url } = useRouteMatch();
-
return (
<>
-
-
+
+
{(configurations, onDelete) =>
}
} />
-
+
{(configurations) =>
@@ -27,17 +25,17 @@ export function IdpConfiguration() {
} />
-
+
{(configurations) =>
}
} />
-
-
+
} />
-
+
>
);
}
\ No newline at end of file
diff --git a/ui/src/app/admin/Roles.js b/ui/src/app/admin/Roles.js
index f8ac571b9..f73e34ce9 100644
--- a/ui/src/app/admin/Roles.js
+++ b/ui/src/app/admin/Roles.js
@@ -1,34 +1,31 @@
import React from 'react';
-import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { RolesProvider } from './hoc/RolesProvider';
import { NewRole } from './container/NewRole';
import { EditRole } from './container/EditRole';
import { RoleList } from './container/RoleList';
export function Roles() {
-
- let { path, url } = useRouteMatch();
-
return (
<>
-
-
+
+
{(roles, onDelete) =>
}
} />
-
+
} />
-
+
} />
-
-
+
} />
-
+
>
);
}
\ No newline at end of file
diff --git a/ui/src/app/admin/container/ConfigurationList.js b/ui/src/app/admin/container/ConfigurationList.js
index d255784fa..37032f81e 100644
--- a/ui/src/app/admin/container/ConfigurationList.js
+++ b/ui/src/app/admin/container/ConfigurationList.js
@@ -58,7 +58,7 @@ export function ConfigurationList({ configurations, onDelete, loading }) {
-
+
Create new configuration
@@ -82,7 +82,7 @@ export function ConfigurationList({ configurations, onDelete, loading }) {
{(configurations?.length > 0) ? configurations.map((c, i) =>
|
-
+
{c.name}
|
diff --git a/ui/src/app/admin/container/EditConfiguration.js b/ui/src/app/admin/container/EditConfiguration.js
index d1950afdf..30e653f39 100644
--- a/ui/src/app/admin/container/EditConfiguration.js
+++ b/ui/src/app/admin/container/EditConfiguration.js
@@ -1,6 +1,6 @@
import React from 'react';
import { useDispatch } from 'react-redux';
-import { Prompt, useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useConfiguration } from '../hooks';
import { ConfigurationForm } from '../component/ConfigurationForm';
@@ -12,7 +12,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faSpinner } from '@fortawesome/free-solid-svg-icons';
export function EditConfiguration({ configurations }) {
- const history = useHistory();
+ const navigate = useNavigate();
const notifier = useDispatch();
const translator = useTranslator();
const { id } = useParams();
@@ -27,7 +27,7 @@ export function EditConfiguration({ configurations }) {
let toast;
const resp = await put(`${config.resourceId}`, config);
if (response.ok) {
- gotoList({ refresh: true });
+ gotoList();
toast = createNotificationAction(`Updated configuration successfully.`, NotificationTypes.SUCCESS);
} else {
toast = createNotificationAction(`${resp.errorCode} - ${translator(resp.errorMessage)}`, NotificationTypes.ERROR);
@@ -51,19 +51,19 @@ export function EditConfiguration({ configurations }) {
gotoList();
};
- const gotoList = (state = null) => {
+ const gotoList = () => {
setBlocking(false);
- history.push(`/configurations`, state);
+ navigate(`/configurations`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/admin/container/EditGroup.js b/ui/src/app/admin/container/EditGroup.js
index 7e2d72acf..ef5f1da5b 100644
--- a/ui/src/app/admin/container/EditGroup.js
+++ b/ui/src/app/admin/container/EditGroup.js
@@ -1,7 +1,6 @@
import React from 'react';
import { useDispatch } from 'react-redux';
-import { Prompt, useHistory } from 'react-router-dom';
-import { useParams } from 'react-router-dom';
+import { useParams, useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useGroups } from '../hooks';
import { Schema } from '../../form/Schema';
@@ -21,7 +20,7 @@ export function EditGroup({ groups }) {
const notifier = useDispatch();
const translator = useTranslator();
- const history = useHistory();
+ const navigate = useNavigate();
const { put, response, loading } = useGroups();
@@ -45,19 +44,19 @@ export function EditGroup({ groups }) {
gotoDetail();
};
- const gotoDetail = (state = null) => {
+ const gotoDetail = () => {
setBlocking(false);
- history.push(`/groups`, state);
+ navigate(`/groups`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/admin/container/EditRole.js b/ui/src/app/admin/container/EditRole.js
index d3a4e43fb..d362731a1 100644
--- a/ui/src/app/admin/container/EditRole.js
+++ b/ui/src/app/admin/container/EditRole.js
@@ -1,6 +1,6 @@
import React from 'react';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import { useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useRoles } from '../hooks';
@@ -21,7 +21,7 @@ export function EditRole() {
const notifier = useDispatch();
const translator = useTranslator();
- const history = useHistory();
+ const navigate = useNavigate();
const { put, response, loading } = useRoles();
@@ -45,19 +45,19 @@ export function EditRole() {
gotoDetail();
};
- const gotoDetail = (state = null) => {
+ const gotoDetail = () => {
setBlocking(false);
- history.push(`/roles`, state);
+ navigate(`/roles`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/admin/container/GroupsList.js b/ui/src/app/admin/container/GroupsList.js
index 35dd4625d..6172695a4 100644
--- a/ui/src/app/admin/container/GroupsList.js
+++ b/ui/src/app/admin/container/GroupsList.js
@@ -28,7 +28,7 @@ export function GroupsList({ groups, onDelete }) {
-
+
Add new group
@@ -56,7 +56,7 @@ export function GroupsList({ groups, onDelete }) {
{group.description || ''} |
{group.approversList?.length > 0 ? group.approversList[0].approverGroupIds.join(', ') : '-'} |
-
diff --git a/ui/src/app/admin/container/NewConfiguration.js b/ui/src/app/admin/container/NewConfiguration.js
index bc3131c6a..fa17062ab 100644
--- a/ui/src/app/admin/container/NewConfiguration.js
+++ b/ui/src/app/admin/container/NewConfiguration.js
@@ -1,6 +1,6 @@
import React from 'react';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useConfiguration } from '../hooks';
import { Schema } from '../../form/Schema';
@@ -13,7 +13,7 @@ import { PropertiesProvider } from '../hoc/PropertiesProvider';
import { useDispatch } from 'react-redux';
export function NewConfiguration({ configurations }) {
- const history = useHistory();
+ const navigate = useNavigate();
const notifier = useDispatch();
const translator = useTranslator();
@@ -41,19 +41,19 @@ export function NewConfiguration({ configurations }) {
const gotoList = (state = null) => {
setBlocking(false);
- history.push(`/configurations`, state);
+ navigate(`/configurations`);
};
const [configuration] = React.useState({});
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/admin/container/NewGroup.js b/ui/src/app/admin/container/NewGroup.js
index 7bebbe49e..587f8f330 100644
--- a/ui/src/app/admin/container/NewGroup.js
+++ b/ui/src/app/admin/container/NewGroup.js
@@ -1,6 +1,6 @@
import React from 'react';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useGroups } from '../hooks';
import { Schema } from '../../form/Schema';
@@ -13,7 +13,7 @@ import { BASE_PATH } from '../../App.constant';
import { useDispatch } from 'react-redux';
export function NewGroup({ groups }) {
- const history = useHistory();
+ const navigate = useNavigate();
const notifier = useDispatch();
const translator = useTranslator();
@@ -41,17 +41,17 @@ export function NewGroup({ groups }) {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/groups`, state);
+ navigate(`/groups`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/admin/container/NewRole.js b/ui/src/app/admin/container/NewRole.js
index 19b6a04d7..a818508ca 100644
--- a/ui/src/app/admin/container/NewRole.js
+++ b/ui/src/app/admin/container/NewRole.js
@@ -1,6 +1,6 @@
import React from 'react';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useRoles } from '../hooks';
import { Schema } from '../../form/Schema';
@@ -13,7 +13,7 @@ import { BASE_PATH } from '../../App.constant';
import { useDispatch } from 'react-redux';
export function NewRole() {
- const history = useHistory();
+ const navigate = useNavigate();
const notifier = useDispatch();
const translator = useTranslator();
@@ -41,17 +41,17 @@ export function NewRole() {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/roles`, state);
+ navigate(`/roles`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/admin/container/RoleList.js b/ui/src/app/admin/container/RoleList.js
index 4bec939e8..a20ef9c4c 100644
--- a/ui/src/app/admin/container/RoleList.js
+++ b/ui/src/app/admin/container/RoleList.js
@@ -28,7 +28,7 @@ export function RoleList({ roles, onDelete }) {
-
+
Add new role
@@ -49,7 +49,7 @@ export function RoleList({ roles, onDelete }) {
{role.name} |
-
+
Edit
diff --git a/ui/src/app/core/components/ProtectRoute.js b/ui/src/app/core/components/ProtectRoute.js
index c8a7a299f..964026ae5 100644
--- a/ui/src/app/core/components/ProtectRoute.js
+++ b/ui/src/app/core/components/ProtectRoute.js
@@ -1,13 +1,14 @@
import React from 'react';
-import { Redirect } from 'react-router-dom';
+import { Navigate } from 'react-router-dom';
import { isUndefined } from 'lodash';
import { useCurrentUser, useIsAdmin } from '../user/UserContext';
export function ProtectRoute({ children, redirectTo, ...rest }) {
const user = useCurrentUser();
const isAdmin = useIsAdmin();
+
if (isUndefined(user?.role)) {
return <>>
}
- return isAdmin ? children : ;
-}
\ No newline at end of file
+ return isAdmin ? children : ;
+}
diff --git a/ui/src/app/core/components/ProtectRoute.test.js b/ui/src/app/core/components/ProtectRoute.test.js
index 477707774..9ecc515dd 100644
--- a/ui/src/app/core/components/ProtectRoute.test.js
+++ b/ui/src/app/core/components/ProtectRoute.test.js
@@ -11,7 +11,7 @@ jest.mock('../user/UserContext', () => ({
}));
const renderWithRouter = (ui, { route = '/' } = {}) => {
- window.history.pushState({}, 'Test page', route)
+ window.navigateState({}, 'Test page', route)
return render(ui, { wrapper: BrowserRouter })
}
diff --git a/ui/src/app/core/components/UserConfirmation.js b/ui/src/app/core/components/UserConfirmation.js
index 2b264f625..16e7d3c10 100644
--- a/ui/src/app/core/components/UserConfirmation.js
+++ b/ui/src/app/core/components/UserConfirmation.js
@@ -2,7 +2,7 @@ import React from 'react';
import Modal from 'react-bootstrap/Modal';
import Button from 'react-bootstrap/Button';
import Translate from '../../i18n/components/translate';
-import { useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import { reload } from '../utility/window';
export function UserConfirmation({children}) {
@@ -21,14 +21,14 @@ export function UserConfirmation({children}) {
export function ConfirmWindow ({message, confirm, setConfirm, confirmCallback}) {
- const history = useHistory();
+ const navigate = useNavigate();
const allowTransition = () => {
setConfirm(false);
confirmCallback(true);
- if (history.location.pathname.includes('provider/new')) {
+ /*if (history.location.pathname.includes('provider/new')) {
reload();
- }
+ }*/
}
const blockTransition = () => {
diff --git a/ui/src/app/core/components/UserConfirmation.test.js b/ui/src/app/core/components/UserConfirmation.test.js
index 58f73c3b8..ceb48f48d 100644
--- a/ui/src/app/core/components/UserConfirmation.test.js
+++ b/ui/src/app/core/components/UserConfirmation.test.js
@@ -16,7 +16,7 @@ jest.mock('../utility/window', () => ({
const mockIncludes = jest.fn();
jest.mock('react-router-dom', () => ({
- useHistory: () => ({
+ useNavigate: () => ({
location: {
pathname: {
includes: mockIncludes
diff --git a/ui/src/app/core/hooks/useBlocker.tsx b/ui/src/app/core/hooks/useBlocker.tsx
new file mode 100644
index 000000000..0fd76a5fc
--- /dev/null
+++ b/ui/src/app/core/hooks/useBlocker.tsx
@@ -0,0 +1,39 @@
+import * as React from "react";
+import { UNSAFE_NavigationContext as NavigationContext } from "react-router-dom";
+
+///console.log(router);
+
+export function useBlocker(blocker, when = true) {
+ const { navigator } = React.useContext(NavigationContext);
+
+ console.log(navigator);
+
+ React.useEffect(() => {
+ if (!when) return;
+
+ const unblock = navigator.block((tx) => {
+ const autoUnblockingTx = {
+ ...tx,
+ retry() {
+ unblock();
+ tx.retry();
+ },
+ };
+
+ blocker(autoUnblockingTx);
+ });
+
+ return unblock;
+ }, [navigator, blocker, when]);
+}
+
+export default function usePrompt(message, when = true) {
+ const blocker = React.useCallback(
+ (tx) => {
+ if (window.confirm(message)) tx.retry();
+ },
+ [message]
+ );
+
+ useBlocker(blocker, when);
+}
diff --git a/ui/src/app/dashboard/view/ActionsTab.js b/ui/src/app/dashboard/view/ActionsTab.js
index 030f870a1..5c716ce02 100644
--- a/ui/src/app/dashboard/view/ActionsTab.js
+++ b/ui/src/app/dashboard/view/ActionsTab.js
@@ -4,7 +4,7 @@ import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Badge from 'react-bootstrap/Badge';
import Nav from 'react-bootstrap/Nav';
-import { Switch, Route, useRouteMatch, Redirect, NavLink } from 'react-router-dom';
+import { Routes, Route, Navigate, NavLink } from 'react-router-dom';
import { MetadataActions } from '../../admin/container/MetadataActions';
import UserActions from '../../admin/container/UserActions';
@@ -25,8 +25,6 @@ import { useIsAdmin, useIsApprover } from '../../core/user/UserContext';
export function ActionsTab() {
- const { path, url } = useRouteMatch();
-
const {data: users, isFetching: loadingUsers, isError: usersError} = useGetNewUsersQuery();
const {data: disabledSources, isFetching: loadingSources, isError: enableSourcesError} = useGetDisabledSourcesQuery();
const {data: unApprovedSources, isFetching: loadingApprovals, isError: approveSourcesError} = useGetUnapprovedSourcesQuery();
@@ -70,7 +68,7 @@ export function ActionsTab() {
>
{state.enableSources &&
-
+
Enable Metadata Sources
{ disabledSources?.length ? {disabledSources?.length} : '' }
@@ -78,7 +76,7 @@ export function ActionsTab() {
}
{isApprover && state.approveSources &&
-
+
Approve Metadata Sources
{ unApprovedSources?.length ? {unApprovedSources?.length} : '' }
@@ -86,7 +84,7 @@ export function ActionsTab() {
}
{state.enableRegistrations &&
-
+
Enable Dynamic Registrations
{ disabledRegistrations?.length ? {disabledRegistrations?.length} : '' }
@@ -94,7 +92,7 @@ export function ActionsTab() {
}
{isApprover && state.approveRegistrations &&
-
+
Approve Dynamic Registrations
{ unApprovedRegistrations?.length ? {unApprovedRegistrations?.length} : '' }
@@ -102,7 +100,7 @@ export function ActionsTab() {
}
{isAdmin && state.users &&
-
+
User Access Request
{ users?.length ? {users?.length} : '' }
@@ -111,11 +109,9 @@ export function ActionsTab() {
-
-
-
-
-
+
+ } />
+
{({approve, remove}) =>
} />
-
+
{({approve}) =>
} />
-
+
{({enable, remove}) =>
@@ -149,8 +145,8 @@ export function ActionsTab() {
}
-
-
+ } />
+
{({enable}) =>
@@ -165,15 +161,15 @@ export function ActionsTab() {
}
-
-
+ } />
+
{loadingUsers && }
} />
-
+
diff --git a/ui/src/app/dashboard/view/Dashboard.js b/ui/src/app/dashboard/view/Dashboard.js
index b9618d7f2..09f6ad8b6 100644
--- a/ui/src/app/dashboard/view/Dashboard.js
+++ b/ui/src/app/dashboard/view/Dashboard.js
@@ -1,7 +1,7 @@
import React from 'react';
import Nav from 'react-bootstrap/Nav';
-import { Switch, Route, Redirect, useRouteMatch } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { NavLink } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
@@ -22,8 +22,6 @@ import { useGetDisabledRegistrationsQuery, useGetUnapprovedRegistrationsQuery }
export function Dashboard () {
- const { path, url } = useRouteMatch();
-
const isAdmin = useIsAdmin();
const isApprover = useIsApprover();
@@ -57,26 +55,26 @@ export function Dashboard () {
-
-
-
-
-
-
-
-
- } />
-
+
+ } />
+ } />
+ } />
+ } />
+
} />
-
+
} />
-
-
-
-
+ } />
+
}
diff --git a/ui/src/app/dynamic-registration/DynamicRegistration.js b/ui/src/app/dynamic-registration/DynamicRegistration.js
index b3d08c046..dd3bd933e 100644
--- a/ui/src/app/dynamic-registration/DynamicRegistration.js
+++ b/ui/src/app/dynamic-registration/DynamicRegistration.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Switch, Route, useRouteMatch } from 'react-router-dom';
+import { Routes, Route } from 'react-router-dom';
import { DynamicRegistrationDetail } from './view/DynamicRegistrationDetail';
@@ -8,21 +8,19 @@ import { DynamicRegistrationCreate } from './view/DynamicRegistrationCreate';
export function DynamicRegistration () {
- const { path } = useRouteMatch();
-
return (
-
-
+
+
} />
-
+
} />
-
+
} />
-
+
)
}
\ No newline at end of file
diff --git a/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js b/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js
index 69a266490..768ff3172 100644
--- a/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js
+++ b/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js
@@ -1,5 +1,5 @@
import React, { Fragment, useMemo } from 'react';
-import { useHistory } from 'react-router';
+import { useNavigate } from 'react-router';
import { DeleteConfirmation } from '../../core/components/DeleteConfirmation';
import {
@@ -11,7 +11,7 @@ import {
export function DynamicRegistrationActions ({ children }) {
- const history = useHistory();
+ const navigate = useNavigate();
const [remove, {isSuccess: isDeleteSuccess}] = useDeleteDynamicRegistrationMutation();
const [approve] = useApproveDynamicRegistrationMutation();
@@ -28,9 +28,9 @@ export function DynamicRegistrationActions ({ children }) {
React.useEffect(() => {
if (isDeleteSuccess) {
- history.push('/dashboard/dynamic-registration');
+ navigate('/dashboard/dynamic-registration');
}
- }, [isDeleteSuccess, history]);
+ }, [isDeleteSuccess, navigate]);
return (
diff --git a/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js b/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js
index 5d707e32a..822d7c781 100644
--- a/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js
+++ b/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js
@@ -1,5 +1,5 @@
import React, {Fragment} from 'react';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { Schema } from '../../form/Schema';
@@ -11,16 +11,16 @@ import Spinner from '../../core/components/Spinner';
export function DynamicRegistrationCreate () {
- const history = useHistory();
+ const navigate = useNavigate();
const [create, {isSuccess, isLoading: loading}] = useCreateDynamicRegistrationMutation();
const save = React.useCallback(async (registration) => await create({registration}), [create]);
- const gotoDetail = React.useCallback((state = null) => {
+ const gotoDetail = React.useCallback(() => {
setBlocking(false);
- history.push(`/dashboard/dynamic-registration`, state);
- }, [history]);
+ navigate(`/dashboard/dynamic-registration`);
+ }, [navigate]);
React.useEffect(() => {
if (isSuccess) {
@@ -32,12 +32,12 @@ export function DynamicRegistrationCreate () {
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js b/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js
index 7d5d800ea..f21eff8d0 100644
--- a/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js
+++ b/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Link, useHistory, useParams } from 'react-router-dom';
+import { Link, useNavigate, useParams } from 'react-router-dom';
import Form from 'react-bootstrap/Form';
import Translate from '../../i18n/components/translate';
import FormattedDate from '../../core/components/FormattedDate';
@@ -21,12 +21,12 @@ import { GroupsProvider } from '../../admin/hoc/GroupsProvider';
export function DynamicRegistrationDetail () {
const { id } = useParams();
- const history = useHistory();
+ const navigate = useNavigate();
const { data: detail } = useSelectDynamicRegistrationQuery({id});
const edit = (section) => {
- history.push(`/dynamic-registration/${id}/edit`);
+ navigate(`/dynamic-registration/${id}/edit`);
};
const isAdmin = useIsAdmin();
diff --git a/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js b/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js
index 5050d6c0d..8198ee124 100644
--- a/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js
+++ b/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js
@@ -1,5 +1,5 @@
import React, { Fragment, useCallback } from 'react';
-import { Prompt, useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { Schema } from '../../form/Schema';
@@ -12,7 +12,7 @@ import Spinner from '../../core/components/Spinner';
export function DynamicRegistrationEdit () {
const { id } = useParams();
- const history = useHistory();
+ const navigate = useNavigate();
const [update, {isSuccess}] = useUpdateDynamicRegistrationMutation();
const {data: detail, isFetching: loading} = useSelectDynamicRegistrationQuery({id});
@@ -21,10 +21,10 @@ export function DynamicRegistrationEdit () {
gotoDetail();
};
- const gotoDetail = useCallback((state = null) => {
+ const gotoDetail = useCallback(() => {
setBlocking(false);
- history.push(`/dynamic-registration/${id}`, state);
- }, [id, history]);
+ navigate(`/dynamic-registration/${id}`);
+ }, [id, navigate]);
const [blocking, setBlocking] = React.useState(false);
@@ -38,12 +38,12 @@ export function DynamicRegistrationEdit () {
{detail &&
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/Attribute.js b/ui/src/app/metadata/Attribute.js
index 2a9847d19..3026dedaa 100644
--- a/ui/src/app/metadata/Attribute.js
+++ b/ui/src/app/metadata/Attribute.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { MetadataAttributes } from './hoc/MetadataAttributes';
import { NewAttribute } from './new/NewAttribute';
import { MetadataAttributeEdit } from './view/MetadataAttributeEdit';
@@ -10,35 +10,33 @@ import { MetadataAttributeBundleEdit } from './view/MetadataAttributeBundleEdit'
export function Attribute() {
- let { path, url } = useRouteMatch();
-
return (
-
-
+
+
{(entities, onDelete) =>
}
} />
-
+
} />
-
+
} />
-
+
} />
-
+
} />
-
+
} />
-
-
+
} />
-
+
);
}
\ No newline at end of file
diff --git a/ui/src/app/metadata/Filter.js b/ui/src/app/metadata/Filter.js
index 4c1bc707c..881873d1e 100644
--- a/ui/src/app/metadata/Filter.js
+++ b/ui/src/app/metadata/Filter.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { MetadataFilterList } from './editor/MetadataFilterList';
import MetadataFilterSelector from './hoc/MetadataFilterSelector';
import MetadataSchema from './hoc/MetadataSchema';
@@ -9,11 +9,9 @@ import { EditFilter } from './view/EditFilter';
export function Filter() {
- const { path, url } = useRouteMatch();
-
return (
-
-
+
+
{(entity) =>
@@ -22,17 +20,17 @@ export function Filter() {
}
} />
-
+
} />
-
+
} />
-
-
+
} />
-
+
);
}
\ No newline at end of file
diff --git a/ui/src/app/metadata/Metadata.js b/ui/src/app/metadata/Metadata.js
index 604156d8d..426f99f07 100644
--- a/ui/src/app/metadata/Metadata.js
+++ b/ui/src/app/metadata/Metadata.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom';
+import { Routes, Route, Navigate } from 'react-router-dom';
import { MetadataOptions } from './view/MetadataOptions';
import { MetadataDetail } from './component/MetadataDetail';
import { MetadataHistory } from './view/MetadataHistory';
@@ -15,52 +15,50 @@ import { MetadataConfirmRestore } from './view/MetadataConfirmRestore';
export function Metadata () {
- const { url, path } = useRouteMatch();
-
return (
{(entity, reload) =>
-
-
+
+
} />
-
+
} />
-
+
} />
-
+
} />
-
+
} />
-
+
} />
-
+
} />
-
+
} />
- {
-
+ {
} />}
-
+
}
diff --git a/ui/src/app/metadata/component/MetadataViewToggle.js b/ui/src/app/metadata/component/MetadataViewToggle.js
index 59975b9fb..bdb32cff5 100644
--- a/ui/src/app/metadata/component/MetadataViewToggle.js
+++ b/ui/src/app/metadata/component/MetadataViewToggle.js
@@ -11,11 +11,18 @@ export function MetadataViewToggle () {
<>
{xml ?
-
+
+ isActive ? 'btn btn-primary' : 'btn btn-outline-primary'
+ }
+ aria-pressed="true">
Toggle view:
Options
-
+
+ isActive ? 'btn btn-primary' : 'btn btn-outline-primary'
+ }>
Toggle view:
XML
diff --git a/ui/src/app/metadata/domain/filter/component/MetadataFilterEditorList.js b/ui/src/app/metadata/domain/filter/component/MetadataFilterEditorList.js
index befeef819..94216054f 100644
--- a/ui/src/app/metadata/domain/filter/component/MetadataFilterEditorList.js
+++ b/ui/src/app/metadata/domain/filter/component/MetadataFilterEditorList.js
@@ -56,7 +56,7 @@ export function MetadataFilterEditorList ({provider, filters, onDelete, onUpdate
|
-
+
Edit
diff --git a/ui/src/app/metadata/editor/MetadataEditor.js b/ui/src/app/metadata/editor/MetadataEditor.js
index 0ae86bf51..cf488cbe7 100644
--- a/ui/src/app/metadata/editor/MetadataEditor.js
+++ b/ui/src/app/metadata/editor/MetadataEditor.js
@@ -1,7 +1,7 @@
import React from 'react';
import { faCogs, faExclamationTriangle, faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { useHistory, useParams, Prompt } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Button from 'react-bootstrap/Button';
import Alert from 'react-bootstrap/Alert';
@@ -34,7 +34,7 @@ export function MetadataEditor ({ restore, current, reload }) {
const notificationDispatch = useDispatch();
const { data } = useMetadataEntities(type, {}, []);
- const history = useHistory();
+ const navigate = useNavigate();
const definition = React.useContext(MetadataDefinitionContext);
const schema = React.useContext(MetadataSchemaContext);
const base = React.useContext(MetadataObjectContext);
@@ -72,14 +72,14 @@ export function MetadataEditor ({ restore, current, reload }) {
const gotoDetail = (state = null) => {
setBlocking(false);
- setTimeout(() => history.push(`/metadata/${type}/${id}`, state) );
+ setTimeout(() => navigate(`/metadata/${type}/${id}`) );
};
const onNavigate = (path) => {
const resetBlock = blocking;
setBlocking(false);
setTimeout(() => {
- history.push(restore ? `../${path}/edit` : path);
+ navigate(restore ? `../edit` : `../edit/${path}`);
setBlocking(resetBlock);
});
};
@@ -94,12 +94,12 @@ export function MetadataEditor ({ restore, current, reload }) {
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/editor/MetadataFilterList.js b/ui/src/app/metadata/editor/MetadataFilterList.js
index b67000c5a..a888a6efc 100644
--- a/ui/src/app/metadata/editor/MetadataFilterList.js
+++ b/ui/src/app/metadata/editor/MetadataFilterList.js
@@ -1,7 +1,7 @@
import React from 'react';
import { faArrowLeft, faCogs, faPlus } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { useHistory, useParams } from 'react-router-dom';
+import { generatePath, matchPath, useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataDefinitionContext, MetadataSchemaContext } from '../hoc/MetadataSchema';
@@ -20,13 +20,13 @@ export function MetadataFilterList() {
const translator = useTranslator();
- const history = useHistory();
+ const navigate = useNavigate();
const definition = React.useContext(MetadataDefinitionContext);
const schema = React.useContext(MetadataSchemaContext);
const current = React.useContext(MetadataObjectContext);
const onNavigate = (path) => {
- history.push(`../edit/${path}`);
+ navigate(generatePath(`/metadata/provider/${id}/edit/${path}`));
};
return (
@@ -44,7 +44,7 @@ export function MetadataFilterList() {
-
+
Return to Provider
@@ -55,7 +55,7 @@ export function MetadataFilterList() {
current={section}
base={`/metadata/${type}/${id}/edit`}
format='dropdown'>
-
@@ -64,7 +64,7 @@ export function MetadataFilterList() {
-
+
Add Filter
@@ -79,7 +79,7 @@ export function MetadataFilterList() {
current={section}
base={`/metadata/${type}/${id}/edit`}
format='tabs'>
-
diff --git a/ui/src/app/metadata/new/NewAttribute.js b/ui/src/app/metadata/new/NewAttribute.js
index 01b9c8fae..f7bee6e03 100644
--- a/ui/src/app/metadata/new/NewAttribute.js
+++ b/ui/src/app/metadata/new/NewAttribute.js
@@ -3,7 +3,7 @@ import { faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Button from 'react-bootstrap/Button';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataAttributeEditor } from '../editor/MetadataAttributeEditor';
import { useMetadataAttribute } from '../hooks/api';
@@ -15,7 +15,7 @@ import { createNotificationAction, NotificationTypes } from '../../store/notific
import { useDispatch } from 'react-redux';
export function NewAttribute() {
- const history = useHistory();
+ const navigate = useNavigate();
const dispatch = useDispatch();
@@ -45,17 +45,17 @@ export function NewAttribute() {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/metadata/attributes`, state);
+ navigate(`/metadata/attributes`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/new/NewBundle.js b/ui/src/app/metadata/new/NewBundle.js
index 25d2903c8..955d0352e 100644
--- a/ui/src/app/metadata/new/NewBundle.js
+++ b/ui/src/app/metadata/new/NewBundle.js
@@ -3,7 +3,7 @@ import { faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Button from 'react-bootstrap/Button';
-import { Prompt, useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { AttributeBundleDefinition } from '../domain/attribute/AttributeBundleDefinition';
@@ -13,7 +13,7 @@ import { AttributeBundleEditor } from '../editor/AttributeBundleEditor';
import { AttributeBundleApi } from '../hoc/attribute/AttributeBundleApi';
export function NewBundle() {
- const history = useHistory();
+ const navigate = useNavigate();
const definition = AttributeBundleDefinition;
@@ -25,19 +25,19 @@ export function NewBundle() {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/metadata/attributes/bundles`, state);
+ navigate(`/metadata/attributes/bundles`);
};
return (
{(load, find, create, update, remove, loading) =>
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/new/NewFilter.js b/ui/src/app/metadata/new/NewFilter.js
index 197d2534d..bf5c064af 100644
--- a/ui/src/app/metadata/new/NewFilter.js
+++ b/ui/src/app/metadata/new/NewFilter.js
@@ -2,7 +2,7 @@ import React from 'react';
import { faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Button from 'react-bootstrap/Button';
-import { Prompt, useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataFilterEditor } from '../editor/MetadataFilterEditor';
import { MetadataForm } from '../hoc/MetadataFormContext';
@@ -15,7 +15,7 @@ import { useDispatch } from 'react-redux';
export function NewFilter() {
const { id } = useParams();
- const history = useHistory();
+ const navigate = useNavigate();
const types = useMetadataFilterTypes();
const dispatch = useDispatch();
@@ -41,7 +41,7 @@ export function NewFilter() {
const gotoDetail = (state = null) => {
setBlocking(false);
setTimeout(() => {
- history.push(`/metadata/provider/${id}`, state);
+ navigate(`/metadata/provider/${id}`);
});
};
@@ -49,19 +49,19 @@ export function NewFilter() {
const resetBlock = blocking;
setBlocking(false);
setTimeout(() => {
- history.push(path);
+ navigate(path);
setBlocking(resetBlock);
});
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/new/NewSource.js b/ui/src/app/metadata/new/NewSource.js
index 3908165e5..e98821f46 100644
--- a/ui/src/app/metadata/new/NewSource.js
+++ b/ui/src/app/metadata/new/NewSource.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { NavLink, Redirect, Route, Switch, useRouteMatch } from 'react-router-dom';
+import { NavLink, Navigate, Route, Routes } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataSchema } from '../hoc/MetadataSchema';
import { MetadataWizard } from '../view/MetadataWizard';
@@ -12,12 +12,12 @@ import { useMetadataSourceProtocols } from '../hooks/api';
export function NewSource() {
- const { path, url } = useRouteMatch();
-
const [showNav, setShowNav] = React.useState(true);
const protocols = useMetadataSourceProtocols();
+ const btnClasses = 'btn btn-lg btn-block d-flex flex-column justify-content-center align-items-center';
+
return (
@@ -38,10 +38,11 @@ export function NewSource() {
+ className={({ isActive }) =>
+ isActive ? `${btnClasses} btn-primary` : `${btnClasses} btn-secondary`
+ }>
Upload/URL
@@ -51,11 +52,12 @@ export function NewSource() {
+ className={({ isActive }) =>
+ isActive ? `${btnClasses} btn-info` : `${btnClasses} btn-secondary`
+ }>
Create
@@ -65,11 +67,12 @@ export function NewSource() {
+ className={({ isActive }) =>
+ isActive ? `${btnClasses} btn-warning` : `${btnClasses} btn-secondary`
+ }>
Copy
@@ -79,8 +82,8 @@ export function NewSource() {
>}
-
-
+
+
{(data, onRestart) =>
@@ -97,18 +100,18 @@ export function NewSource() {
} />
-
+
} />
-
+
{ setShowNav(s) } } />
} />
-
-
+
} />
-
+
diff --git a/ui/src/app/metadata/view/EditFilter.js b/ui/src/app/metadata/view/EditFilter.js
index 204c72f55..32838a785 100644
--- a/ui/src/app/metadata/view/EditFilter.js
+++ b/ui/src/app/metadata/view/EditFilter.js
@@ -3,7 +3,7 @@ import { faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Button from 'react-bootstrap/Button';
-import { Prompt, useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataFilterEditor } from '../editor/MetadataFilterEditor';
import { MetadataForm } from '../hoc/MetadataFormContext';
@@ -20,7 +20,7 @@ export function EditFilter() {
const { id, filterId } = useParams();
const filter = useMetadataFilterObject();
- const history = useHistory();
+ const navigate = useNavigate();
const { update, loading } = useMetadataUpdater(`${API_BASE_PATH}${getMetadataPath('provider')}/${id}/Filters/${filterId}`, filter);
@@ -30,7 +30,7 @@ export function EditFilter() {
const resetBlock = blocking;
setBlocking(false);
setTimeout(() => {
- history.push(path);
+ navigate(path);
setBlocking(resetBlock);
});
};
@@ -52,17 +52,17 @@ export function EditFilter() {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/metadata/provider/${id}`, state);
+ navigate(`/metadata/provider/${id}`);
};
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
Edit filter
diff --git a/ui/src/app/metadata/view/MetadataAttributeBundleEdit.js b/ui/src/app/metadata/view/MetadataAttributeBundleEdit.js
index 4948fc86f..a08082395 100644
--- a/ui/src/app/metadata/view/MetadataAttributeBundleEdit.js
+++ b/ui/src/app/metadata/view/MetadataAttributeBundleEdit.js
@@ -3,7 +3,7 @@ import { faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Button from 'react-bootstrap/Button';
-import { Prompt, useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataAttributeEditor } from '../editor/MetadataAttributeEditor';
@@ -15,7 +15,7 @@ import { AttributeBundleApi } from '../hoc/attribute/AttributeBundleApi';
export function MetadataAttributeBundleEdit() {
const { id } = useParams();
- const history = useHistory();
+ const navigate = useNavigate();
const definition = AttributeBundleDefinition;
@@ -27,7 +27,7 @@ export function MetadataAttributeBundleEdit() {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/metadata/attributes/bundles`, state);
+ navigate(`/metadata/attributes/bundles`);
};
return (
@@ -35,12 +35,12 @@ export function MetadataAttributeBundleEdit() {
{(load, find, create, update, remove, loading) =>
{(bundle) =>
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/view/MetadataAttributeBundles.js b/ui/src/app/metadata/view/MetadataAttributeBundles.js
index c1f977372..b0e805e19 100644
--- a/ui/src/app/metadata/view/MetadataAttributeBundles.js
+++ b/ui/src/app/metadata/view/MetadataAttributeBundles.js
@@ -29,7 +29,7 @@ export function MetadataAttributeBundles() {
-
+
Add new bundle
@@ -51,7 +51,7 @@ export function MetadataAttributeBundles() {
{ bundle.name } |
|
-
+
Edit
diff --git a/ui/src/app/metadata/view/MetadataAttributeEdit.js b/ui/src/app/metadata/view/MetadataAttributeEdit.js
index dc617d523..5ef0b14be 100644
--- a/ui/src/app/metadata/view/MetadataAttributeEdit.js
+++ b/ui/src/app/metadata/view/MetadataAttributeEdit.js
@@ -3,7 +3,7 @@ import { faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Button from 'react-bootstrap/Button';
-import { Prompt, useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { MetadataAttributeEditor } from '../editor/MetadataAttributeEditor';
import { useMetadataAttribute } from '../hooks/api';
@@ -16,7 +16,7 @@ import { useDispatch } from 'react-redux';
export function MetadataAttributeEdit() {
const { id } = useParams();
- const history = useHistory();
+ const navigate = useNavigate();
const definition = CustomAttributeDefinition;
@@ -55,7 +55,7 @@ export function MetadataAttributeEdit() {
const gotoDetail = (state = null) => {
setBlocking(false);
- history.push(`/metadata/attributes`, state);
+ navigate(`/metadata/attributes`);
};
const [attribute, setAttribute] = React.useState();
@@ -67,12 +67,12 @@ export function MetadataAttributeEdit() {
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
diff --git a/ui/src/app/metadata/view/MetadataAttributeList.js b/ui/src/app/metadata/view/MetadataAttributeList.js
index a60101f3c..6b5431f40 100644
--- a/ui/src/app/metadata/view/MetadataAttributeList.js
+++ b/ui/src/app/metadata/view/MetadataAttributeList.js
@@ -31,7 +31,7 @@ export function MetadataAttributeList ({entities, onDelete}) {
-
+
Add new attribute
@@ -63,7 +63,7 @@ export function MetadataAttributeList ({entities, onDelete}) {
{attr.helpText} |
{attr.defaultValue?.toString()} |
-
+
Edit
diff --git a/ui/src/app/metadata/view/MetadataCopy.js b/ui/src/app/metadata/view/MetadataCopy.js
index 5156fc6a2..5a0d44673 100644
--- a/ui/src/app/metadata/view/MetadataCopy.js
+++ b/ui/src/app/metadata/view/MetadataCopy.js
@@ -2,14 +2,14 @@ import React from 'react';
import { CopySource } from '../copy/CopySource';
import { SaveCopy } from '../copy/SaveCopy';
import { useMetadataEntity } from '../hooks/api';
-import { useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useDispatch } from 'react-redux';
export function MetadataCopy ({ onShowNav }) {
const { post, response, loading } = useMetadataEntity('source');
- const history = useHistory();
+ const navigate = useNavigate();
const dispatch = useDispatch();
@@ -35,7 +35,7 @@ export function MetadataCopy ({ onShowNav }) {
async function save (data) {
await post('', data);
if (response.ok) {
- history.push('/');
+ navigate('/');
} else {
const { errorCode, errorMessage, cause } = response.data;
dispatch(createNotificationAction(
diff --git a/ui/src/app/metadata/view/MetadataHistory.js b/ui/src/app/metadata/view/MetadataHistory.js
index 6df6a7c2e..09cac6981 100644
--- a/ui/src/app/metadata/view/MetadataHistory.js
+++ b/ui/src/app/metadata/view/MetadataHistory.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { useHistory, useParams } from 'react-router-dom';
+import { useNavigate, useParams } from 'react-router-dom';
import { Link } from 'react-router-dom';
import queryString from 'query-string';
import Button from 'react-bootstrap/Button';
@@ -22,7 +22,7 @@ const sortVersionsByDate = (versions) => {
export function MetadataHistory () {
const { type, id } = useParams();
- const history = useHistory();
+ const navigate = useNavigate();
const { data, loading } = useMetadataHistory(type, id, {
cachePolicy: 'no-cache'
@@ -42,7 +42,7 @@ export function MetadataHistory () {
const path = `/metadata/${type}/${id}/configuration/compare?${queryString.stringify({versions: s.map(s => s.id)}, {
skipNull: true,
})}`;
- history.push(path);
+ navigate(path);
};
const [selected, setSelected] = React.useState([]);
diff --git a/ui/src/app/metadata/view/MetadataOptions.js b/ui/src/app/metadata/view/MetadataOptions.js
index 9d0f5e8d5..5ae6202d8 100644
--- a/ui/src/app/metadata/view/MetadataOptions.js
+++ b/ui/src/app/metadata/view/MetadataOptions.js
@@ -1,7 +1,7 @@
import React, { useMemo } from 'react';
import { faArrowDown, faArrowUp, faHistory, faPlus, faToggleOff, faToggleOn, faTrash } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { Link, useHistory, useParams } from 'react-router-dom';
+import { Link, useNavigate, useParams } from 'react-router-dom';
import Button from 'react-bootstrap/Button';
import { scroller } from 'react-scroll';
@@ -28,7 +28,7 @@ export function MetadataOptions ({reload}) {
const definition = React.useContext(MetadataDefinitionContext);
const schema = React.useContext(MetadataSchemaContext);
const processed = useMetadataSchema(definition, schema);
- const history = useHistory();
+ const navigate = useNavigate();
const { type, id } = useParams();
@@ -42,10 +42,10 @@ export function MetadataOptions ({reload}) {
});
};
- const redirectOnDelete = () => history.push('/dashboard');
+ const redirectOnDelete = () => navigate('/dashboard');
const edit = (section) => {
- history.push(`/metadata/${type}/${id}/edit/${section}`);
+ navigate(`/metadata/${type}/${id}/edit/${section}`);
}
const canFilter = FilterableProviders.indexOf(definition.type) > -1;
diff --git a/ui/src/app/metadata/view/MetadataUpload.js b/ui/src/app/metadata/view/MetadataUpload.js
index 09868aac2..d21cce890 100644
--- a/ui/src/app/metadata/view/MetadataUpload.js
+++ b/ui/src/app/metadata/view/MetadataUpload.js
@@ -1,7 +1,7 @@
import React from 'react';
import Form from 'react-bootstrap/Form';
import { useForm } from "react-hook-form";
-import { useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import Button from 'react-bootstrap/Button';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import { faAsterisk, faSave, faSpinner } from '@fortawesome/free-solid-svg-icons';
@@ -16,7 +16,7 @@ import { useDispatch } from 'react-redux';
export function MetadataUpload() {
- const history = useHistory();
+ const navigate = useNavigate();
const dispatch = useDispatch();
const [saving, setSaving] = React.useState(false);
@@ -50,7 +50,7 @@ export function MetadataUpload() {
if (response.ok) {
setSaving(false);
- history.push('/dashboard');
+ navigate('/dashboard');
} else {
let msg;
if (f) {
diff --git a/ui/src/app/metadata/view/MetadataWizard.js b/ui/src/app/metadata/view/MetadataWizard.js
index c41c57ea6..264a2d022 100644
--- a/ui/src/app/metadata/view/MetadataWizard.js
+++ b/ui/src/app/metadata/view/MetadataWizard.js
@@ -6,13 +6,13 @@ import { MetadataProviderWizard } from '../wizard/MetadataProviderWizard';
import { Wizard } from '../wizard/Wizard';
import { useMetadataEntity } from '../hooks/api';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
-import { Prompt, useHistory } from 'react-router-dom';
+import { Prompt, useNavigate } from 'react-router-dom';
import { useTranslator } from '../../i18n/hooks';
import { useDispatch } from 'react-redux';
export function MetadataWizard ({type, data, onCallback, onContinue}) {
- const history = useHistory();
+ const navigate = useNavigate();
const translator = useTranslator();
const { post, loading, response } = useMetadataEntity(type === 'source' ? 'source' : 'provider');
@@ -23,7 +23,7 @@ export function MetadataWizard ({type, data, onCallback, onContinue}) {
const gotoDetail = () => {
setTimeout(() => {
- history.push(`/dashboard/metadata/manager/${type === 'source' ? 'resolvers' : 'providers'}`);
+ navigate(`/dashboard/metadata/manager/${type === 'source' ? 'resolvers' : 'providers'}`);
}, 1);
};
@@ -50,12 +50,12 @@ export function MetadataWizard ({type, data, onCallback, onContinue}) {
return (
-
`message.unsaved-editor`
}
- />
+ />*/}
{type === 'source' ?
| | | |