Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
eue
Commits
cac25e0d
Commit
cac25e0d
authored
Jul 24, 2021
by
Spark
Browse files
GUI + doe SGG + EMD
parent
c0a4250c
Changes
10
Hide whitespace changes
Inline
Side-by-side
client/package-lock.json
View file @
cac25e0d
...
...
@@ -11,7 +11,7 @@
"@testing-library/react": "^11.2.7",
"@testing-library/user-event": "^12.8.3",
"axios": "^0.21.1",
"bootstrap": "^
4.6.0
",
"bootstrap": "^
5.0.2
",
"chart.js": "^3.4.0",
"moment": "^2.29.1",
"ngx-spinner": "^12.0.0",
...
...
@@ -20,7 +20,7 @@
"pg": "^8.6.0",
"pg-hstore": "^2.3.4",
"react": "^17.0.2",
"react-bootstrap": "^
1.6.1
",
"react-bootstrap": "^
2.0.0-beta.4
",
"react-chartjs-2": "^3.0.3",
"react-copy-to-clipboard": "^5.0.3",
"react-dom": "^17.0.2",
...
...
@@ -31,6 +31,7 @@
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"react-select": "^4.3.1",
"react-use": "^17.2.4",
"sass": "^1.35.1",
"sequelize": "^6.6.5",
...
...
@@ -1844,6 +1845,97 @@
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
},
"node_modules/@emotion/cache": {
"version": "11.4.0",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz",
"integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==",
"dependencies": {
"@emotion/memoize": "^0.7.4",
"@emotion/sheet": "^1.0.0",
"@emotion/utils": "^1.0.0",
"@emotion/weak-memoize": "^0.2.5",
"stylis": "^4.0.3"
}
},
"node_modules/@emotion/hash": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
"integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
},
"node_modules/@emotion/memoize": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz",
"integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ=="
},
"node_modules/@emotion/react": {
"version": "11.4.0",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.4.0.tgz",
"integrity": "sha512-4XklWsl9BdtatLoJpSjusXhpKv9YVteYKh9hPKP1Sxl+mswEFoUe0WtmtWjxEjkA51DQ2QRMCNOvKcSlCQ7ivg==",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@emotion/cache": "^11.4.0",
"@emotion/serialize": "^1.0.2",
"@emotion/sheet": "^1.0.1",
"@emotion/utils": "^1.0.0",
"@emotion/weak-memoize": "^0.2.5",
"hoist-non-react-statics": "^3.3.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0",
"react": ">=16.8.0"
},
"peerDependenciesMeta": {
"@babel/core": {
"optional": true
},
"@types/react": {
"optional": true
}
}
},
"node_modules/@emotion/react/node_modules/@babel/runtime": {
"version": "7.14.8",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz",
"integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==",
"dependencies": {
"regenerator-runtime": "^0.13.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@emotion/serialize": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz",
"integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==",
"dependencies": {
"@emotion/hash": "^0.8.0",
"@emotion/memoize": "^0.7.4",
"@emotion/unitless": "^0.7.5",
"@emotion/utils": "^1.0.0",
"csstype": "^3.0.2"
}
},
"node_modules/@emotion/sheet": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.1.tgz",
"integrity": "sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g=="
},
"node_modules/@emotion/unitless": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
"integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
},
"node_modules/@emotion/utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz",
"integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA=="
},
"node_modules/@emotion/weak-memoize": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"node_modules/@eslint/eslintrc": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
...
...
@@ -5438,16 +5530,15 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
"node_modules/bootstrap": {
"version": "
4.6.0
",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
4.6.0
.tgz",
"integrity": "sha512-
Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw
==",
"version": "
5.0.2
",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
5.0.2
.tgz",
"integrity": "sha512-
1Ge963tyEQWJJ+8qtXFU6wgmAVj9gweEjibUdbmcCEYsn38tVwRk8107rk2vzt6cfQcRr3SlZ8aQBqaD8aqf+Q
==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/bootstrap"
},
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.16.1"
"@popperjs/core": "^2.9.2"
}
},
"node_modules/brace-expansion": {
...
...
@@ -13340,12 +13431,6 @@
"node": ">=8"
}
},
"node_modules/jquery": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
"peer": true
},
"node_modules/js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
...
...
@@ -13877,6 +13962,11 @@
"node": ">= 0.6"
}
},
"node_modules/memoize-one": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
"integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
},
"node_modules/memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
...
...
@@ -15765,17 +15855,6 @@
"node": ">=6"
}
},
"node_modules/popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
"deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
"peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/portfinder": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
...
...
@@ -17436,9 +17515,9 @@
}
},
"node_modules/react-bootstrap": {
"version": "
1.6.1
",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
1.6.1
.tgz",
"integrity": "sha512-
ojEPQ6OtyIMdLg0Smofk+85PKN6MLKQX3bU0Vwmok/4yNa8DQ2vCGhO2IgHJvT+ERQZ4X+gAQcdn6msAHSwLBg
==",
"version": "
2.0.0-beta.4
",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
2.0.0-beta.4
.tgz",
"integrity": "sha512-
ETCvuZV78orCqGg4XA4WrhytXxTcnvshPDveSc3uK2mvnj6IRQue5O5188xsazbD3nnhX52T63uQjM4HjeRBEw
==",
"dependencies": {
"@babel/runtime": "^7.14.0",
"@restart/context": "^2.1.4",
...
...
@@ -17453,14 +17532,14 @@
"invariant": "^2.2.4",
"prop-types": "^15.7.2",
"prop-types-extra": "^1.1.0",
"react-overlays": "^5.
0
.1",
"react-overlays": "^5.
1
.1",
"react-transition-group": "^4.4.1",
"uncontrollable": "^7.2.1",
"warning": "^4.0.3"
},
"peerDependencies": {
"react": ">=16.
8
.0",
"react-dom": ">=16.
8
.0"
"react": ">=16.
14
.0",
"react-dom": ">=16.
14
.0"
}
},
"node_modules/react-bootstrap/node_modules/@babel/runtime": {
...
...
@@ -17680,6 +17759,17 @@
"react-dom": "^16 || ^17"
}
},
"node_modules/react-input-autosize": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz",
"integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==",
"dependencies": {
"prop-types": "^15.5.8"
},
"peerDependencies": {
"react": "^16.3.0 || ^17.0.0"
}
},
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
...
...
@@ -17720,9 +17810,9 @@
}
},
"node_modules/react-overlays": {
"version": "5.1.
0
",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
0
.tgz",
"integrity": "sha512-
Qp8dqDIIYgQoHxOGVKHwvQUkDe70/Ja/6dn8iCQAXyPvvpks3+T8scLTZLK8MPBBu+X8ustas6y4U6M6zdmCjA
==",
"version": "5.1.
1
",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
1
.tgz",
"integrity": "sha512-
eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q
==",
"dependencies": {
"@babel/runtime": "^7.13.8",
"@popperjs/core": "^2.8.6",
...
...
@@ -17739,9 +17829,9 @@
}
},
"node_modules/react-overlays/node_modules/@babel/runtime": {
"version": "7.14.
6
",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
6
.tgz",
"integrity": "sha512-
/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYw
g==",
"version": "7.14.
8
",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
8
.tgz",
"integrity": "sha512-
twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+e
g==",
"dependencies": {
"regenerator-runtime": "^0.13.4"
},
...
...
@@ -17962,6 +18052,24 @@
"semver": "bin/semver"
}
},
"node_modules/react-select": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/react-select/-/react-select-4.3.1.tgz",
"integrity": "sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q==",
"dependencies": {
"@babel/runtime": "^7.12.0",
"@emotion/cache": "^11.4.0",
"@emotion/react": "^11.1.1",
"memoize-one": "^5.0.0",
"prop-types": "^15.6.0",
"react-input-autosize": "^3.0.0",
"react-transition-group": "^4.3.0"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0"
}
},
"node_modules/react-transition-group": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
...
...
@@ -25017,6 +25125,84 @@
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
},
"@emotion/cache": {
"version": "11.4.0",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz",
"integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==",
"requires": {
"@emotion/memoize": "^0.7.4",
"@emotion/sheet": "^1.0.0",
"@emotion/utils": "^1.0.0",
"@emotion/weak-memoize": "^0.2.5",
"stylis": "^4.0.3"
}
},
"@emotion/hash": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
"integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
},
"@emotion/memoize": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz",
"integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ=="
},
"@emotion/react": {
"version": "11.4.0",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.4.0.tgz",
"integrity": "sha512-4XklWsl9BdtatLoJpSjusXhpKv9YVteYKh9hPKP1Sxl+mswEFoUe0WtmtWjxEjkA51DQ2QRMCNOvKcSlCQ7ivg==",
"requires": {
"@babel/runtime": "^7.13.10",
"@emotion/cache": "^11.4.0",
"@emotion/serialize": "^1.0.2",
"@emotion/sheet": "^1.0.1",
"@emotion/utils": "^1.0.0",
"@emotion/weak-memoize": "^0.2.5",
"hoist-non-react-statics": "^3.3.1"
},
"dependencies": {
"@babel/runtime": {
"version": "7.14.8",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz",
"integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
}
}
},
"@emotion/serialize": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz",
"integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==",
"requires": {
"@emotion/hash": "^0.8.0",
"@emotion/memoize": "^0.7.4",
"@emotion/unitless": "^0.7.5",
"@emotion/utils": "^1.0.0",
"csstype": "^3.0.2"
}
},
"@emotion/sheet": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.1.tgz",
"integrity": "sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g=="
},
"@emotion/unitless": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
"integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
},
"@emotion/utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz",
"integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA=="
},
"@emotion/weak-memoize": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"@eslint/eslintrc": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
...
...
@@ -27789,9 +27975,9 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
"bootstrap": {
"version": "
4.6.0
",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
4.6.0
.tgz",
"integrity": "sha512-
Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw
==",
"version": "
5.0.2
",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
5.0.2
.tgz",
"integrity": "sha512-
1Ge963tyEQWJJ+8qtXFU6wgmAVj9gweEjibUdbmcCEYsn38tVwRk8107rk2vzt6cfQcRr3SlZ8aQBqaD8aqf+Q
==",
"requires": {}
},
"brace-expansion": {
...
...
@@ -33792,12 +33978,6 @@
}
}
},
"jquery": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
"peer": true
},
"js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
...
...
@@ -34222,6 +34402,11 @@
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"memoize-one": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
"integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
},
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
...
...
@@ -35659,12 +35844,6 @@
"ts-pnp": "^1.1.6"
}
},
"popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
"peer": true
},
"portfinder": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
...
...
@@ -37018,9 +37197,9 @@
}
},
"react-bootstrap": {
"version": "
1.6.1
",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
1.6.1
.tgz",
"integrity": "sha512-
ojEPQ6OtyIMdLg0Smofk+85PKN6MLKQX3bU0Vwmok/4yNa8DQ2vCGhO2IgHJvT+ERQZ4X+gAQcdn6msAHSwLBg
==",
"version": "
2.0.0-beta.4
",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
2.0.0-beta.4
.tgz",
"integrity": "sha512-
ETCvuZV78orCqGg4XA4WrhytXxTcnvshPDveSc3uK2mvnj6IRQue5O5188xsazbD3nnhX52T63uQjM4HjeRBEw
==",
"requires": {
"@babel/runtime": "^7.14.0",
"@restart/context": "^2.1.4",
...
...
@@ -37035,7 +37214,7 @@
"invariant": "^2.2.4",
"prop-types": "^15.7.2",
"prop-types-extra": "^1.1.0",
"react-overlays": "^5.
0
.1",
"react-overlays": "^5.
1
.1",
"react-transition-group": "^4.4.1",
"uncontrollable": "^7.2.1",
"warning": "^4.0.3"
...
...
@@ -37207,6 +37386,14 @@
"prop-types": "^15.6.0"
}
},
"react-input-autosize": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz",
"integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==",
"requires": {
"prop-types": "^15.5.8"
}
},
"react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
...
...
@@ -37236,9 +37423,9 @@
"requires": {}
},
"react-overlays": {
"version": "5.1.
0
",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
0
.tgz",
"integrity": "sha512-
Qp8dqDIIYgQoHxOGVKHwvQUkDe70/Ja/6dn8iCQAXyPvvpks3+T8scLTZLK8MPBBu+X8ustas6y4U6M6zdmCjA
==",
"version": "5.1.
1
",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
1
.tgz",
"integrity": "sha512-
eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q
==",
"requires": {
"@babel/runtime": "^7.13.8",
"@popperjs/core": "^2.8.6",
...
...
@@ -37251,9 +37438,9 @@
},
"dependencies": {
"@babel/runtime": {
"version": "7.14.
6
",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
6
.tgz",
"integrity": "sha512-
/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYw
g==",
"version": "7.14.
8
",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
8
.tgz",
"integrity": "sha512-
twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+e
g==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
...
...
@@ -37434,6 +37621,20 @@
}
}
},
"react-select": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/react-select/-/react-select-4.3.1.tgz",
"integrity": "sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q==",
"requires": {
"@babel/runtime": "^7.12.0",
"@emotion/cache": "^11.4.0",
"@emotion/react": "^11.1.1",
"memoize-one": "^5.0.0",
"prop-types": "^15.6.0",
"react-input-autosize": "^3.0.0",
"react-transition-group": "^4.3.0"
}
},
"react-transition-group": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
client/package.json
View file @
cac25e0d
...
...
@@ -7,7 +7,7 @@
"@testing-library/react"
:
"^11.2.7"
,
"@testing-library/user-event"
:
"^12.8.3"
,
"axios"
:
"^0.21.1"
,
"bootstrap"
:
"^
4.6.0
"
,
"bootstrap"
:
"^
5.0.2
"
,
"chart.js"
:
"^3.4.0"
,
"moment"
:
"^2.29.1"
,
"ngx-spinner"
:
"^12.0.0"
,
...
...
@@ -16,7 +16,7 @@
"pg"
:
"^8.6.0"
,
"pg-hstore"
:
"^2.3.4"
,
"react"
:
"^17.0.2"
,
"react-bootstrap"
:
"^
1.6.1
"
,
"react-bootstrap"
:
"^
2.0.0-beta.4
"
,
"react-chartjs-2"
:
"^3.0.3"
,
"react-copy-to-clipboard"
:
"^5.0.3"
,
"react-dom"
:
"^17.0.2"
,
...
...
@@ -27,6 +27,7 @@
"react-redux"
:
"^7.2.4"
,
"react-router-dom"
:
"^5.2.0"
,
"react-scripts"
:
"4.0.3"
,
"react-select"
:
"^4.3.1"
,
"react-use"
:
"^17.2.4"
,
"sass"
:
"^1.35.1"
,
"sequelize"
:
"^6.6.5"
,
...
...
client/src/App.js
View file @
cac25e0d
import
React
from
'
react
'
;
import
{
BrowserRouter
as
Router
,
Route
}
from
'
react-router-dom
'
;
import
{
BrowserRouter
as
Router
,
Route
,
Switch
}
from
'
react-router-dom
'
;
import
'
./App.css
'
;
import
Home
from
'
./pages/Home
'
;
import
SignupPage
from
'
./pages/SignupPage
'
;
import
LoginPage
from
'
./pages/LoginPage
'
;
import
LocalCodePage
from
'
./pages/LocalCodePage
'
;
import
PrivateRoute
from
'
./utils/PrivateRoutes
'
;
import
PageNotFound
from
'
./components/PageNotFound
'
;
function
App
()
{
return
(
<
Router
>
<>
<
Switch
>
<
Route
exact
path
=
'
/
'
component
=
{
Home
}
/
>
<
Route
exact
path
=
'
/signup
'
component
=
{
SignupPage
}
/
>
<
Route
exact
path
=
'
/login
'
component
=
{
LoginPage
}
/
>
<
Route
exact
path
=
'
/local_code
'
component
=
{
LocalCodePage
}
/
>
<
/
>
<
Route
path
=
'
/signup
'
component
=
{
SignupPage
}
/
>
<
Route
path
=
'
/login
'
component
=
{
LoginPage
}
/
>
<
PrivateRoute
path
=
'
/local_code
'
>
<
LocalCodePage
/>
<
/PrivateRoute
>
<
Route
component
=
{
PageNotFound
}
/
>
<
/Switch
>
<
/Router
>
);
...
...
client/src/Utils/Auth.js
View file @
cac25e0d
import
axios
from
'
axios
'
;
import
{
useState
}
from
'
react
'
;
import
Oauth
from
'
./Oauth
'
;
export
function
handleLogin
({
userId
,
role
,
name
,
tel
,
email
})
{
localStorage
.
setItem
(
'
id
'
,
userId
)
...
...
@@ -17,7 +15,7 @@ export async function handleLogout() {
}
export
function
isLogined
()
{
const
userId
=
localStorage
.
getItem
(
'
id
'
)
const
userId
=
localStorage
.
getItem
(
'
nickname
'
)
if
(
userId
)
{
return
userId
}
else
{
...
...
client/src/Utils/Oauth.js
View file @
cac25e0d
import
{
Spinner
,
Button
,
Row
,
Alert
}
from
'
react-bootstrap
'
;
import
Swal
from
'
sweetalert2
'
import
'
../App.css
'
...
...
@@ -85,19 +84,4 @@ export function kakaoLogout() {
}
})
})
}
export
function
Loading
()
{
return
(
<
Row
className
=
'
d-block
'
>
<
Button
id
=
'
formbtn
'
className
=
'
d-flex justify-content-center align-items-center m-auto
'
style
=
{{
width
:
'
200px
'
,
height
:
'
200px
'
,
flexDirection
:
'
column
'
}}
disabled
>
<
Spinner
animation
=
"
border
"
role
=
"
status
"
>
<
span
className
=
"
sr-only
"
>
Loading
...
<
/span
>
<
/Spinner
>
<
br
/>
Loading
...
<
/Button
>
<
/Row
>
)
}
\ No newline at end of file
client/src/Utils/PrivateRoutes.js
0 → 100644
View file @
cac25e0d
import
React
from
'
react
'
;
import
{
Redirect
,
Route
}
from
'
react-router-dom
'
;
import
{
isLogined
}
from
'
../utils/Auth
'
;
function
PrivateRoute
({
path
,
children
})
{
if
(
isLogined
())
{
return
(
<
Route
path
=
{
path
}
>
{
children
}
<
/Route
>
)
}
else
{
alert
(
'
권한이 없습니다
'
)
return
(
<
Redirect
to
=
'
/
'
/>
)
}
}
export
default
PrivateRoute
// Swal.fire({
// title: '권한이 없습니다.',
// text: ' 로그인을 진행해주세요',
// icon: 'warning',
// confirmButtonText: '확인',
// })
// .then((res) => {
// if (res.isConfirmed) {
// window.location.replace('/')
// }
// else {
// window.location.replace('/')
// }
// })
\ No newline at end of file
client/src/components/Loading.js
0 → 100644
View file @
cac25e0d
import
React
from
'
react
'
import
{
Spinner
,
Row
,
Button
}
from
'
react-bootstrap
'
;
function
Loading
()
{
return
(
<
Button
id
=
'
formbtn
'
className
=
'
d-flex justify-content-center align-items-center m-auto
'
style
=
{{
width
:
'
200px
'
,
height
:
'
200px
'
,
flexDirection
:
'
column
'
}}
disabled
>
<
Spinner
animation
=
"
border
"
role
=
"
status
"
>
<
span
className
=
"
sr-only
"
>
Loading
...
<
/span
>
<
/Spinner
>
<
br
/>
Loading
...
<
/Button
>
)
}
export
default
Loading
;
\ No newline at end of file
client/src/components/LocCodeChange.js
View file @
cac25e0d
import
React
,
{
useEffect
,
useState
}
from
'
react
'
import
'
../App.css
'
import
{
Form
,
Button
,
Row
,
Col
,
Card
,
DropdownButton
,
Dropdown
,
ButtonGroup
}
from
'
react-bootstrap
'
;
import
{
Form
,
Button
,
Row
,
Col
,
Card
,
DropdownButton
,
Dropdown
,
ButtonGroup
,
Collapse
,
Fade
}
from
'
react-bootstrap
'
;
import
axios
from
'
axios
'
;
import
Swal
from
'
sweetalert2
'
function
LocCodeChange
()
{
...
...
@@ -20,7 +22,6 @@ function LocCodeChange() {
const
inboxstyled
=
{
display
:
'
flex
'
,
flexDirection
:
'
column
'
,
maxWidth
:
'
80%
'
,
justifyContent
:
'
center
'
,
margin
:
'
auto
'
,
padding
:
'
10px
'
...
...
@@ -28,46 +29,96 @@ function LocCodeChange() {
const
btnstyled2
=
{
background
:
'
white
'
,
margin
:
'
1px
'
,
maxWidth
:
'
fit-content
'
,
width
:
'
50%
'
,
borderWidth
:
'
2px
'
,
color
:
'
rgb(110, 189, 142)
'
,
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
borderRadius
:
'
20px
'
}
const
[
locCodeShow
,
setLocCodeShow
]
=
useState
(
false
)
const
[
does
,
setDoes
]
=
useState
([])
const
[
sggs
,
setSggs
]
=
useState
([])
const
[
emds
,
setEmds
]
=
useState
([])
const
[
sggsArray
,
setSggsArray
]
=
useState
([])
const
[
emdsArray
,
setEmdsArray
]
=
useState
([])
const
doeSelect
=
document
.
getElementById
(
'
select-doe
'
)
const
sggSelect
=
document
.
getElementById
(
'
select-sgg
'
)
const
emdSelect
=
document
.
getElementById
(
'
select-emd
'
)
// console.log(doeSelect.options[doeSelect.selectedIndex].text)
// console.log(sggSelect.options[sggSelect.selectedIndex].text)
// console.log(emdSelect.options[emdSelect.selectedIndex].text)
function
handleClickLoc
()
{
setLocCodeShow
(
true
);
const
auth
=
document
.
getElementById
(
'
loc-code
'
)
auth
.
style
.
visibility
=
'
visible
'
if
(
doeSelect
.
options
[
doeSelect
.
selectedIndex
].
text
!==
'
도
'
&&
sggSelect
.
options
[
sggSelect
.
selectedIndex
].
text
!==
'
시군구
'
&&
emdSelect
.
options
[
emdSelect
.
selectedIndex
].
text
!==
'
읍면동
'
)
{
localStorage
.
setItem
(
'
code_doe
'
,
doeSelect
.
value
)
localStorage
.
setItem
(
'
name_doe
'
,
doeSelect
.
options
[
doeSelect
.
selectedIndex
].
text
)
localStorage
.
setItem
(
'
code_sgg
'
,
sggSelect
.
value
)
localStorage
.
setItem
(
'
name_sgg
'
,
sggSelect
.
options
[
sggSelect
.
selectedIndex
].
text
)
localStorage
.
setItem
(
'
code_emd
'
,
emdSelect
.
value
)
localStorage
.
setItem
(
'
name_emd
'
,
emdSelect
.
options
[
emdSelect
.
selectedIndex
].
text
)
if
(
localStorage
.
getItem
(
'
name_emd
'
))
{
Swal
.
fire
({
title
:
'
변경되었습니다.
'
,
text
:
'
축하드립니다!👏
'
,
icon
:
'
success
'
,
customClass
:
'
swal-wide
'
,
confirmButtonText
:
'
확인
'
,
}).
then
((
res
)
=>
{
if
(
res
.
isConfirmed
)
{
window
.
location
.
reload
()
}
else
{
window
.
location
.
reload
()
}
})
}
}
else
{
Swal
.
fire
({
title
:
'
실패
'
,
text
:
'
전부 선택해주세요
'
,
icon
:
'
error
'
,
customClass
:
'
swal-wide
'
,
confirmButtonText
:
'
확인
'
})
}
}
const
[
does
,
setDoes
]
=
useState
([])
const
[
sggs
,
setSggs
]
=
useState
([])
// const [emds, setEmds] = useState([])
const
does_array
=
[]
const
sggs_array
=
[]
// const emds_array = []
does
.
map
((
doesObj
)
=>
does_array
.
push
(
doesObj
[
'
name_doe
'
]))
sggs
.
map
((
sggsObj
)
=>
console
.
log
(
sggsObj
[
'
sgg
'
]))
console
.
log
(
'
does ::
'
,
does
)
console
.
log
(
'
does_array:::
'
,
does_array
)
async
function
getLocCode
()
{
const
res
=
await
axios
.
get
(
"
http://localhost:4500/api/data/loccode
"
)
const
local_codes
=
res
.
data
.
locCodes
console
.
log
(
'
local_codes:::
'
,
local_codes
)
setDoes
(
local_codes
.
DOE
)
setSggs
(
local_codes
.
SGG
)
setEmds
(
local_codes
.
EMD
)
}
useEffect
(()
=>
{
getLocCode
()
},
[])
function
selectLocal
()
{
sggs
.
map
(
function
(
sggvalue
)
{
if
(
doeSelect
.
value
==
sggvalue
[
'
code_doe
'
])
{
setSggsArray
(
sggvalue
[
'
sgg
'
])
}
})
emds
.
map
(
function
(
emdvalue
)
{
if
(
sggSelect
.
value
==
emdvalue
[
'
code_sgg
'
])
{
setEmdsArray
(
emdvalue
[
'
emd
'
])
}
})
}
return
(
<
Row
className
=
'
text-center w-100 my-2
'
>
<
Card
style
=
{
cardstyled
}
>
...
...
@@ -81,48 +132,55 @@ function LocCodeChange() {
<
Card
.
Text
>
<
Form
style
=
{
inboxstyled
}
>
<
Row
className
=
'
m-auto w-100 d-flex justify-content-center
'
>
<
Col
md
=
{
12
}
xs
=
{
12
}
style
=
{{
padding
:
'
0
'
,
display
:
'
flex
'
,
justifyContent
:
'
center
'
,
width
:
'
100%
'
}}
>
<
Form
.
Group
style
=
{
btnstyled2
}
>
<
Form
.
Control
as
=
'
select
'
aria
-
label
=
"
Floating label select example
"
>
<
option
>
도
<
/option
>
{
does
.
map
((
doe
)
=>
(
<
option
value
=
{
`
${
doe
[
"
code_doe
"
]}
`
}
>
{
`
${
doe
[
"
name_doe
"
]}
`
}
<
/option
>
))}
<
/Form.Control
>
<
Form
.
Control
as
=
'
select
'
aria
-
label
=
"
Floating label select example
"
>
<
option
>
시군구
<
/option
>
{
does
.
map
((
doe
)
=>
(
<
option
value
=
{
`
${
doe
[
"
code_doe
"
]}
`
}
>
{
`
${
doe
[
"
name_doe
"
]}
`
}
<
/option
>
))}
<
/Form.Control
>
<
Form
.
Control
as
=
'
select
'
aria
-
label
=
"
Floating label select example
"
>
<
option
>
읍면동
<
/option
>
{
does
.
map
((
doe
)
=>
(
<
option
value
=
{
`
${
doe
[
"
code_doe
"
]}
`
}
>
{
`
${
doe
[
"
name_doe
"
]}
`
}
<
/option
>
))}
<
/Form.Control
>
<
/Form.Group
>
<
Button
variant
=
'
light
'
style
=
{
btnstyled2
}
onClick
=
{
!
locCodeShow
&&
handleClickLoc
}
>
확인
<
/Button
>
<
/Col
>
<
Col
md
=
{
6
}
xs
=
{
4
}
id
=
'
loc-code
'
style
=
{{
margin
:
'
5px
'
,
border
:
'
solid
'
,
borderColor
:
'
rgb(110, 189, 142)
'
,
display
:
'
flex
'
,
justifyContent
:
'
center
'
,
padding
:
'
2px
'
,
// visibility: 'hidden',
transition
:
'
all 2s
'
}}
>
지역코드
<
/Col
>
<
Row
md
=
{
12
}
xs
=
{
12
}
className
=
'
m-auto w-100 d-flex justify-content-center
'
style
=
{{
padding
:
'
0
'
,
display
:
'
flex
'
,
justifyContent
:
'
center
'
,
width
:
'
100%
'
}}
>
<
Form
.
Group
className
=
'
m-auto w-100
'
style
=
{
btnstyled2
}
>
<
Row
className
=
'
m-auto pb-3
'
onChange
=
{
selectLocal
}
>
<
Col
md
=
{
4
}
xs
=
{
4
}
style
=
{{
padding
:
'
2px
'
}}
>
<
Form
.
Control
as
=
'
select
'
size
=
"
sm
"
id
=
'
select-doe
'
>
<
option
selected
disabled
>
도
<
/option
>
{
does
.
map
((
doevalue
)
=>
(
<
option
value
=
{
`
${
doevalue
[
"
code_doe
"
]}
`
}
>
{
`
${
doevalue
[
"
name_doe
"
]}
`
}
<
/option
>
))
}
<
/Form.Control
>
<
/Col
>
<
Col
md
=
{
4
}
xs
=
{
4
}
style
=
{{
padding
:
'
2px
'
}}
>
<
Form
.
Control
as
=
'
select
'
size
=
"
sm
"
id
=
'
select-sgg
'
>
<
option
selected
disabled
>
시군구
<
/option
>
{
sggsArray
.
map
((
sggvalue
)
=>
(
<
option
value
=
{
`
${
sggvalue
[
"
code_sgg
"
]}
`
}
>
{
`
${
sggvalue
[
"
name_sgg
"
]}
`
}
<
/option
>
))
}
<
/Form.Control
>
<
/Col
>
<
Col
md
=
{
4
}
xs
=
{
4
}
style
=
{{
padding
:
'
2px
'
}}
>
<
Form
.
Control
as
=
'
select
'
size
=
"
sm
"
id
=
'
select-emd
'
>
<
option
selected
disabled
>
읍면동
<
/option
>
{
emdsArray
.
map
((
emdvalue
)
=>
(
<
option
value
=
{
`
${
emdvalue
[
"
code_emd
"
]}
`
}
>
{
`
${
emdvalue
[
"
name_emd
"
]}
`
}
<
/option
>
))
}
<
/Form.Control
>
<
/Col
>
<
/Row
>
<
Button
variant
=
'
light
'
style
=
{
btnstyled2
}
onClick
=
{
handleClickLoc
}
>
확인
<
/Button
>
<
/Form.Group
>
<
/Row
>
<
/Form
>
<
/Card.Text
>
...
...
client/src/components/LocalCode.js
View file @
cac25e0d
...
...
@@ -7,7 +7,10 @@ import { Link } from 'react-router-dom';
function
LocalCode
()
{
const
logined
=
localStorage
.
getItem
(
'
nickname
'
)
const
nickname
=
localStorage
.
getItem
(
'
nickname
'
)
const
localname_doe
=
localStorage
.
getItem
(
'
name_doe
'
)
const
localname_sgg
=
localStorage
.
getItem
(
'
name_sgg
'
)
const
localname_emd
=
localStorage
.
getItem
(
'
name_emd
'
)
const
cardstyled
=
{
margin
:
'
auto
'
,
...
...
@@ -29,14 +32,13 @@ function LocalCode() {
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
borderRadius
:
'
20px
'
,
}
const
[
localChange
,
setLocalChange
]
=
useState
(
false
)
const
nickname
=
localStorage
.
getItem
(
'
nickname
'
)
return
(
<>
<
Col
className
=
'
text-center pt-3 pb-2 px-0
'
>
<
Card
style
=
{
cardstyled
}
id
=
'
localName
'
>
<
Card
.
Title
>
{
logined
?
{
nickname
?
`
${
nickname
}
`
:
<>
...
...
@@ -44,31 +46,24 @@ function LocalCode() {
<
/
>
},
환영합니다
.
<
/Card.Title
>
<
Row
style
=
{{
alignItems
:
'
center
'
,
margin
:
'
auto
'
,
whiteSpace
:
'
nowrap
'
}}
>
<
Row
style
=
{{
alignItems
:
'
center
'
,
margin
:
'
auto
'
,
whiteSpace
:
'
nowrap
'
,
justifyContent
:
'
center
'
}}
>
<
Card
.
Subtitle
>
지역코드
{
localname_emd
?
`
${
localname_doe
}
${
localname_sgg
}
${
localname_emd
}
`
:
<>
지역을
입력해
주세요
<
/
>
}
<
/Card.Subtitle
>
{
logined
&&
<
Button
variant
=
'
light
'
className
=
'
ml-1
'
style
=
{
btnstyled2
}
>
{
nickname
&&
<
Button
variant
=
'
light
'
className
=
'
ml-1
m-auto
'
style
=
{
btnstyled2
}
>
<
Link
to
=
'
/local_code
'
style
=
{{
textDecoration
:
'
none
'
,
color
:
'
rgb(110, 189, 142)
'
}}
>
변경
<
/Link
>
<
/Button
>
}
<
/Row
>
<
Modal
show
=
{
localChange
}
onHide
=
{()
=>
setLocalChange
(
false
)}
>
<
Modal
.
Header
className
=
'
d-block text-center
'
>
<
Modal
.
Title
>
마이페이지
<
/Modal.Title
>
<
/Modal.Header
>
<
Modal
.
Body
>
지역이름
(
지역코드
)
<
/Modal.Body
>
<
/Modal
>
환경을
향한
노력
<
br
/>
<
strong
>
OOO
일
째
<
/strong
>
...
...
client/src/components/PageNotFound.js
0 → 100644
View file @
cac25e0d
import
React
,
{
useEffect
}
from
'
react
'
import
{
Row
,
Container
}
from
'
react-bootstrap
'
;
import
{
Redirect
}
from
'
react-router-dom
'
;
import
Loading
from
'
./Loading
'
;
// const goHome = setTimeout(window.location.replace('/'), 3000);
function
PageNotFound
()
{
useEffect
(()
=>
{
setTimeout
(
window
.
location
.
replace
(
'
/
'
),
5000
);
},
[])
return
(
<
Container
className
=
'
d-flex justify-content-center align-items-center
'
style
=
{{
flexDirection
:
'
column
'
,
height
:
'
70vh
'
}}
>
<
Row
style
=
{{
marginBottom
:
'
1em
'
,
fontSize
:
'
2rem
'
,
fontWeight
:
'
bold
'
}}
>
잘못된
접근
입니다
.
<
br
/>
PAGE
NOT
FOUND
<
/Row
>
<
Row
>
<
Loading
/>
<
/Row
>
<
/Container
>
)
}
export
default
PageNotFound
;
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment