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
8bcf6e01
Commit
8bcf6e01
authored
Jul 26, 2021
by
KangMin An
Browse files
Merge branch 'gitlab/who' into premaster.
parents
84acb663
c73c4950
Changes
20
Show whitespace changes
Inline
Side-by-side
client/package-lock.json
View file @
8bcf6e01
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
"@testing-library/react": "^11.2.7",
"@testing-library/react": "^11.2.7",
"@testing-library/user-event": "^12.8.3",
"@testing-library/user-event": "^12.8.3",
"axios": "^0.21.1",
"axios": "^0.21.1",
"bootstrap": "^
4.6.0
",
"bootstrap": "^
5.0.2
",
"chart.js": "^3.4.0",
"chart.js": "^3.4.0",
"moment": "^2.29.1",
"moment": "^2.29.1",
"ngx-spinner": "^12.0.0",
"ngx-spinner": "^12.0.0",
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
"pg": "^8.6.0",
"pg": "^8.6.0",
"pg-hstore": "^2.3.4",
"pg-hstore": "^2.3.4",
"react": "^17.0.2",
"react": "^17.0.2",
"react-bootstrap": "^
1.6.1
",
"react-bootstrap": "^
2.0.0-beta.4
",
"react-chartjs-2": "^3.0.3",
"react-chartjs-2": "^3.0.3",
"react-copy-to-clipboard": "^5.0.3",
"react-copy-to-clipboard": "^5.0.3",
"react-dom": "^17.0.2",
"react-dom": "^17.0.2",
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
"react-redux": "^7.2.4",
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"react-scripts": "4.0.3",
"react-select": "^4.3.1",
"react-use": "^17.2.4",
"react-use": "^17.2.4",
"sass": "^1.35.1",
"sass": "^1.35.1",
"sequelize": "^6.6.5",
"sequelize": "^6.6.5",
...
@@ -1844,6 +1845,97 @@
...
@@ -1844,6 +1845,97 @@
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
"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": {
"node_modules/@eslint/eslintrc": {
"version": "0.4.2",
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
...
@@ -5438,16 +5530,15 @@
...
@@ -5438,16 +5530,15 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
},
"node_modules/bootstrap": {
"node_modules/bootstrap": {
"version": "
4.6.0
",
"version": "
5.0.2
",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
4.6.0
.tgz",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
5.0.2
.tgz",
"integrity": "sha512-
Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw
==",
"integrity": "sha512-
1Ge963tyEQWJJ+8qtXFU6wgmAVj9gweEjibUdbmcCEYsn38tVwRk8107rk2vzt6cfQcRr3SlZ8aQBqaD8aqf+Q
==",
"funding": {
"funding": {
"type": "opencollective",
"type": "opencollective",
"url": "https://opencollective.com/bootstrap"
"url": "https://opencollective.com/bootstrap"
},
},
"peerDependencies": {
"peerDependencies": {
"jquery": "1.9.1 - 3",
"@popperjs/core": "^2.9.2"
"popper.js": "^1.16.1"
}
}
},
},
"node_modules/brace-expansion": {
"node_modules/brace-expansion": {
...
@@ -13340,12 +13431,6 @@
...
@@ -13340,12 +13431,6 @@
"node": ">=8"
"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": {
"node_modules/js-base64": {
"version": "2.6.4",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
...
@@ -13877,6 +13962,11 @@
...
@@ -13877,6 +13962,11 @@
"node": ">= 0.6"
"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": {
"node_modules/memory-fs": {
"version": "0.4.1",
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
...
@@ -15765,17 +15855,6 @@
...
@@ -15765,17 +15855,6 @@
"node": ">=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": {
"node_modules/portfinder": {
"version": "1.0.28",
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
...
@@ -17436,9 +17515,9 @@
...
@@ -17436,9 +17515,9 @@
}
}
},
},
"node_modules/react-bootstrap": {
"node_modules/react-bootstrap": {
"version": "
1.6.1
",
"version": "
2.0.0-beta.4
",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
1.6.1
.tgz",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
2.0.0-beta.4
.tgz",
"integrity": "sha512-
ojEPQ6OtyIMdLg0Smofk+85PKN6MLKQX3bU0Vwmok/4yNa8DQ2vCGhO2IgHJvT+ERQZ4X+gAQcdn6msAHSwLBg
==",
"integrity": "sha512-
ETCvuZV78orCqGg4XA4WrhytXxTcnvshPDveSc3uK2mvnj6IRQue5O5188xsazbD3nnhX52T63uQjM4HjeRBEw
==",
"dependencies": {
"dependencies": {
"@babel/runtime": "^7.14.0",
"@babel/runtime": "^7.14.0",
"@restart/context": "^2.1.4",
"@restart/context": "^2.1.4",
...
@@ -17453,14 +17532,14 @@
...
@@ -17453,14 +17532,14 @@
"invariant": "^2.2.4",
"invariant": "^2.2.4",
"prop-types": "^15.7.2",
"prop-types": "^15.7.2",
"prop-types-extra": "^1.1.0",
"prop-types-extra": "^1.1.0",
"react-overlays": "^5.
0
.1",
"react-overlays": "^5.
1
.1",
"react-transition-group": "^4.4.1",
"react-transition-group": "^4.4.1",
"uncontrollable": "^7.2.1",
"uncontrollable": "^7.2.1",
"warning": "^4.0.3"
"warning": "^4.0.3"
},
},
"peerDependencies": {
"peerDependencies": {
"react": ">=16.
8
.0",
"react": ">=16.
14
.0",
"react-dom": ">=16.
8
.0"
"react-dom": ">=16.
14
.0"
}
}
},
},
"node_modules/react-bootstrap/node_modules/@babel/runtime": {
"node_modules/react-bootstrap/node_modules/@babel/runtime": {
...
@@ -17680,6 +17759,17 @@
...
@@ -17680,6 +17759,17 @@
"react-dom": "^16 || ^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": {
"node_modules/react-is": {
"version": "17.0.2",
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
...
@@ -17720,9 +17810,9 @@
...
@@ -17720,9 +17810,9 @@
}
}
},
},
"node_modules/react-overlays": {
"node_modules/react-overlays": {
"version": "5.1.
0
",
"version": "5.1.
1
",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
0
.tgz",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
1
.tgz",
"integrity": "sha512-
Qp8dqDIIYgQoHxOGVKHwvQUkDe70/Ja/6dn8iCQAXyPvvpks3+T8scLTZLK8MPBBu+X8ustas6y4U6M6zdmCjA
==",
"integrity": "sha512-
eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q
==",
"dependencies": {
"dependencies": {
"@babel/runtime": "^7.13.8",
"@babel/runtime": "^7.13.8",
"@popperjs/core": "^2.8.6",
"@popperjs/core": "^2.8.6",
...
@@ -17739,9 +17829,9 @@
...
@@ -17739,9 +17829,9 @@
}
}
},
},
"node_modules/react-overlays/node_modules/@babel/runtime": {
"node_modules/react-overlays/node_modules/@babel/runtime": {
"version": "7.14.
6
",
"version": "7.14.
8
",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
6
.tgz",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
8
.tgz",
"integrity": "sha512-
/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYw
g==",
"integrity": "sha512-
twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+e
g==",
"dependencies": {
"dependencies": {
"regenerator-runtime": "^0.13.4"
"regenerator-runtime": "^0.13.4"
},
},
...
@@ -17962,6 +18052,24 @@
...
@@ -17962,6 +18052,24 @@
"semver": "bin/semver"
"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": {
"node_modules/react-transition-group": {
"version": "4.4.2",
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
...
@@ -25017,6 +25125,84 @@
...
@@ -25017,6 +25125,84 @@
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
"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": {
"@eslint/eslintrc": {
"version": "0.4.2",
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
...
@@ -27789,9 +27975,9 @@
...
@@ -27789,9 +27975,9 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
},
"bootstrap": {
"bootstrap": {
"version": "
4.6.0
",
"version": "
5.0.2
",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
4.6.0
.tgz",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-
5.0.2
.tgz",
"integrity": "sha512-
Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw
==",
"integrity": "sha512-
1Ge963tyEQWJJ+8qtXFU6wgmAVj9gweEjibUdbmcCEYsn38tVwRk8107rk2vzt6cfQcRr3SlZ8aQBqaD8aqf+Q
==",
"requires": {}
"requires": {}
},
},
"brace-expansion": {
"brace-expansion": {
...
@@ -33792,12 +33978,6 @@
...
@@ -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": {
"js-base64": {
"version": "2.6.4",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
...
@@ -34222,6 +34402,11 @@
...
@@ -34222,6 +34402,11 @@
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
"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": {
"memory-fs": {
"version": "0.4.1",
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
...
@@ -35659,12 +35844,6 @@
...
@@ -35659,12 +35844,6 @@
"ts-pnp": "^1.1.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": {
"portfinder": {
"version": "1.0.28",
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
...
@@ -37018,9 +37197,9 @@
...
@@ -37018,9 +37197,9 @@
}
}
},
},
"react-bootstrap": {
"react-bootstrap": {
"version": "
1.6.1
",
"version": "
2.0.0-beta.4
",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
1.6.1
.tgz",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-
2.0.0-beta.4
.tgz",
"integrity": "sha512-
ojEPQ6OtyIMdLg0Smofk+85PKN6MLKQX3bU0Vwmok/4yNa8DQ2vCGhO2IgHJvT+ERQZ4X+gAQcdn6msAHSwLBg
==",
"integrity": "sha512-
ETCvuZV78orCqGg4XA4WrhytXxTcnvshPDveSc3uK2mvnj6IRQue5O5188xsazbD3nnhX52T63uQjM4HjeRBEw
==",
"requires": {
"requires": {
"@babel/runtime": "^7.14.0",
"@babel/runtime": "^7.14.0",
"@restart/context": "^2.1.4",
"@restart/context": "^2.1.4",
...
@@ -37035,7 +37214,7 @@
...
@@ -37035,7 +37214,7 @@
"invariant": "^2.2.4",
"invariant": "^2.2.4",
"prop-types": "^15.7.2",
"prop-types": "^15.7.2",
"prop-types-extra": "^1.1.0",
"prop-types-extra": "^1.1.0",
"react-overlays": "^5.
0
.1",
"react-overlays": "^5.
1
.1",
"react-transition-group": "^4.4.1",
"react-transition-group": "^4.4.1",
"uncontrollable": "^7.2.1",
"uncontrollable": "^7.2.1",
"warning": "^4.0.3"
"warning": "^4.0.3"
...
@@ -37207,6 +37386,14 @@
...
@@ -37207,6 +37386,14 @@
"prop-types": "^15.6.0"
"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": {
"react-is": {
"version": "17.0.2",
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
...
@@ -37236,9 +37423,9 @@
...
@@ -37236,9 +37423,9 @@
"requires": {}
"requires": {}
},
},
"react-overlays": {
"react-overlays": {
"version": "5.1.
0
",
"version": "5.1.
1
",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
0
.tgz",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.1.
1
.tgz",
"integrity": "sha512-
Qp8dqDIIYgQoHxOGVKHwvQUkDe70/Ja/6dn8iCQAXyPvvpks3+T8scLTZLK8MPBBu+X8ustas6y4U6M6zdmCjA
==",
"integrity": "sha512-
eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q
==",
"requires": {
"requires": {
"@babel/runtime": "^7.13.8",
"@babel/runtime": "^7.13.8",
"@popperjs/core": "^2.8.6",
"@popperjs/core": "^2.8.6",
...
@@ -37251,9 +37438,9 @@
...
@@ -37251,9 +37438,9 @@
},
},
"dependencies": {
"dependencies": {
"@babel/runtime": {
"@babel/runtime": {
"version": "7.14.
6
",
"version": "7.14.
8
",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
6
.tgz",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.
8
.tgz",
"integrity": "sha512-
/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYw
g==",
"integrity": "sha512-
twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+e
g==",
"requires": {
"requires": {
"regenerator-runtime": "^0.13.4"
"regenerator-runtime": "^0.13.4"
}
}
...
@@ -37434,6 +37621,20 @@
...
@@ -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": {
"react-transition-group": {
"version": "4.4.2",
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
client/package.json
View file @
8bcf6e01
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
"@testing-library/react"
:
"^11.2.7"
,
"@testing-library/react"
:
"^11.2.7"
,
"@testing-library/user-event"
:
"^12.8.3"
,
"@testing-library/user-event"
:
"^12.8.3"
,
"axios"
:
"^0.21.1"
,
"axios"
:
"^0.21.1"
,
"bootstrap"
:
"^
4.6.0
"
,
"bootstrap"
:
"^
5.0.2
"
,
"chart.js"
:
"^3.4.0"
,
"chart.js"
:
"^3.4.0"
,
"moment"
:
"^2.29.1"
,
"moment"
:
"^2.29.1"
,
"ngx-spinner"
:
"^12.0.0"
,
"ngx-spinner"
:
"^12.0.0"
,
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
"pg"
:
"^8.6.0"
,
"pg"
:
"^8.6.0"
,
"pg-hstore"
:
"^2.3.4"
,
"pg-hstore"
:
"^2.3.4"
,
"react"
:
"^17.0.2"
,
"react"
:
"^17.0.2"
,
"react-bootstrap"
:
"^
1.6.1
"
,
"react-bootstrap"
:
"^
2.0.0-beta.4
"
,
"react-chartjs-2"
:
"^3.0.3"
,
"react-chartjs-2"
:
"^3.0.3"
,
"react-copy-to-clipboard"
:
"^5.0.3"
,
"react-copy-to-clipboard"
:
"^5.0.3"
,
"react-dom"
:
"^17.0.2"
,
"react-dom"
:
"^17.0.2"
,
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
"react-redux"
:
"^7.2.4"
,
"react-redux"
:
"^7.2.4"
,
"react-router-dom"
:
"^5.2.0"
,
"react-router-dom"
:
"^5.2.0"
,
"react-scripts"
:
"4.0.3"
,
"react-scripts"
:
"4.0.3"
,
"react-select"
:
"^4.3.1"
,
"react-use"
:
"^17.2.4"
,
"react-use"
:
"^17.2.4"
,
"sass"
:
"^1.35.1"
,
"sass"
:
"^1.35.1"
,
"sequelize"
:
"^6.6.5"
,
"sequelize"
:
"^6.6.5"
,
...
...
client/src/App.css
View file @
8bcf6e01
...
@@ -5,6 +5,10 @@ body {
...
@@ -5,6 +5,10 @@ body {
}
}
.form-check-input
:checked
{
background-color
:
#04AB70
!important
;
}
#btnlink
{
#btnlink
{
color
:
white
!important
;
color
:
white
!important
;
text-decoration
:
none
!important
;
text-decoration
:
none
!important
;
...
@@ -36,6 +40,7 @@ body {
...
@@ -36,6 +40,7 @@ body {
padding
:
0.5em
;
padding
:
0.5em
;
}
}
.form-group
.form-control
{
.form-group
.form-control
{
border-radius
:
40px
;
border-radius
:
40px
;
}
}
...
...
client/src/App.js
View file @
8bcf6e01
import
React
from
'
react
'
;
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
'
./App.css
'
;
import
Home
from
'
./pages/Home
'
;
import
Home
from
'
./pages/Home
'
;
import
SignupPage
from
'
./pages/SignupPage
'
;
import
SignupPage
from
'
./pages/SignupPage
'
;
import
LoginPage
from
'
./pages/LoginPage
'
;
import
LoginPage
from
'
./pages/LoginPage
'
;
import
LocalCodePage
from
'
./pages/LocalCodePage
'
;
import
LocalCodePage
from
'
./pages/LocalCodePage
'
;
import
PrivateRoute
from
'
./utils/PrivateRoutes
'
;
import
PageNotFound
from
'
./components/PageNotFound
'
;
function
App
()
{
function
App
()
{
return
(
return
(
<
Router
>
<
Router
>
<>
<
Switch
>
<
Route
exact
path
=
'
/
'
component
=
{
Home
}
/
>
<
Route
exact
path
=
'
/
'
component
=
{
Home
}
/
>
<
Route
exact
path
=
'
/signup
'
component
=
{
SignupPage
}
/
>
<
Route
path
=
'
/signup
'
component
=
{
SignupPage
}
/
>
<
Route
exact
path
=
'
/login
'
component
=
{
LoginPage
}
/
>
<
Route
path
=
'
/login
'
component
=
{
LoginPage
}
/
>
<
Route
exact
path
=
'
/local_code
'
component
=
{
LocalCodePage
}
/
>
<
/
>
<
PrivateRoute
path
=
'
/local_code
'
>
<
LocalCodePage
/>
<
/PrivateRoute
>
<
Route
component
=
{
PageNotFound
}
/
>
<
/Switch
>
<
/Router
>
<
/Router
>
);
);
...
...
client/src/Utils/Auth.js
View file @
8bcf6e01
import
axios
from
'
axios
'
;
import
axios
from
'
axios
'
;
import
{
useState
}
from
'
react
'
;
import
Oauth
from
'
./Oauth
'
;
export
function
handleLogin
({
userId
,
role
,
name
,
tel
,
email
})
{
export
function
handleLogin
({
userId
,
role
,
name
,
tel
,
email
})
{
localStorage
.
setItem
(
'
id
'
,
userId
)
localStorage
.
setItem
(
'
id
'
,
userId
)
...
@@ -17,7 +15,7 @@ export async function handleLogout() {
...
@@ -17,7 +15,7 @@ export async function handleLogout() {
}
}
export
function
isLogined
()
{
export
function
isLogined
()
{
const
userId
=
localStorage
.
getItem
(
'
id
'
)
const
userId
=
localStorage
.
getItem
(
'
nickname
'
)
if
(
userId
)
{
if
(
userId
)
{
return
userId
return
userId
}
else
{
}
else
{
...
...
client/src/Utils/Oauth.js
View file @
8bcf6e01
import
{
Spinner
,
Button
,
Row
,
Alert
}
from
'
react-bootstrap
'
;
import
Swal
from
'
sweetalert2
'
import
Swal
from
'
sweetalert2
'
import
'
../App.css
'
import
'
../App.css
'
...
@@ -86,18 +85,3 @@ export function kakaoLogout() {
...
@@ -86,18 +85,3 @@ export function kakaoLogout() {
})
})
})
})
}
}
\ No newline at end of file
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 @
8bcf6e01
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
client/src/Utils/SendEmail.js
deleted
100644 → 0
View file @
84acb663
// const { smtpTransport } = require('./config/email');
// const nodemailer = require('nodemailer');
// /* min ~ max까지 랜덤으로 숫자를 생성하는 함수 */
// var generateRandom = function (min, max) {
// var ranNum = Math.floor(Math.random() * (max - min + 1)) + min;
// return ranNum;
// }
// // transporter 생성
// let transporter = nodemailer.createTransport({
// // host: "mail.회사.계정.입력" *** mail. <-요게 핵심이었다!
// host: "mail.abc.co.kr",
// // 보안 무시
// port: 587,
// // 회사 도메인 내 계정 및 비밀번호
// auth: {
// user: "myid@abc.co.kr",
// pass: "mypassword",
// },
// // 서명받지 않은 사이트의 요청도 받겠다.
// tls: {
// rejectUnauthorized: false
// }
// });
// // 메일 관련 옵션
// let mailOptions = {
// // 발송 메일 주소 (위에서 작성한 회사 계정 아이디)
// from: "myid@abc.co.kr",
// // 수신 메일 주소
// to: "receiverid@domain.com",
// // 제목
// subject: "인증 메일입니다.",
// // 인증 URL
// html: `<p>아래의 링크를 클릭하시면 인증이 완료됩니다.</p>
// <a href='http://localhost:3000/auth?etc'>인증하기</a>`,
// };
// // 메일 보내기
// transporter.sendMail(mailOptions, function (err, info) {
// if (err) {
// // 메일 보내기 에러 발생 시, 콘솔 찍어보기
// console.log("메일보내기 에러쓰");
// console.log(err);
// } else {
// // 성공했다!
// console.log("Email sent: " + info.response);
// }
// });
// // export const auth = {
// // SendEmail: async (req, res) => {
// // const number = generateRandom(111111, 999999)
// // const { sendEmail } = req.body;
// // const mailOptions = {
// // from: "정욱이네러버덕",
// // to: sendEmail,
// // subject: "[러버덕]인증 관련 이메일 입니다",
// // text: "오른쪽 숫자 6자리를 입력해주세요 : " + number
// // };
// // const result = await smtpTransport.sendMail(mailOptions, (error, responses) => {
// // if (error) {
// // return res.status(statusCode.OK).send(util.fail(statusCode.BAD_REQUEST, responseMsg.AUTH_EMAIL_FAIL))
// // } else {
// // /* 클라이언트에게 인증 번호를 보내서 사용자가 맞게 입력하는지 확인! */
// // return res.status(statusCode.OK).send(util.success(statusCode.OK, responseMsg.AUTH_EMAIL_SUCCESS, {
// // number: number
// // }))
// // }
// // smtpTransport.close();
// // });
// // }
// // }
\ No newline at end of file
client/src/components/EueSuggest.js
View file @
8bcf6e01
import
React
from
'
react
'
import
React
,
{
useEffect
}
from
'
react
'
import
{
Row
,
Card
}
from
'
react-bootstrap
'
;
import
{
Row
,
Card
,
Col
}
from
'
react-bootstrap
'
;
function
EueSuggest
()
{
function
EueSuggest
()
{
const
cardstyled
=
{
const
cardstyled
=
{
margin
:
'
auto
'
,
margin
:
'
auto
'
,
padding
:
'
1em
'
,
padding
:
'
1em
'
,
...
@@ -13,16 +14,20 @@ function EueSuggest() {
...
@@ -13,16 +14,20 @@ function EueSuggest() {
borderColor
:
'
rgb(110, 189, 142)
'
,
borderColor
:
'
rgb(110, 189, 142)
'
,
color
:
'
#04AB70
'
color
:
'
#04AB70
'
}
}
const
airUsing
=
localStorage
.
getItem
(
'
using-aircondition
'
)
return
(
return
(
<
Row
className
=
'
text-center w-100 my-2
'
>
<
Row
className
=
'
text-center w-100 my-2
'
>
<
Card
style
=
{
cardstyled
}
>
<
Card
style
=
{
cardstyled
}
>
<
Card
.
Title
>
<
Card
.
Title
>
EUE
제안
EUE
제안
<
/Card.Title
>
<
/Card.Title
>
<
Card
.
Text
>
<
Card
.
Text
>
"
에어컨을 줄이시면 더 효율적입니다.
"
"
에어컨을 줄이시면 더 효율적입니다.
"
<
/Card.Text
>
<
/Card.Text
>
<
/Card
>
<
/Card
>
<
/Row
>
<
/Row
>
)
)
...
...
client/src/components/Loading.js
0 → 100644
View file @
8bcf6e01
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 @
8bcf6e01
import
React
,
{
useEffect
,
useState
}
from
'
react
'
import
React
,
{
useEffect
,
useState
}
from
'
react
'
import
'
../App.css
'
import
'
../App.css
'
import
{
Form
,
Button
,
Row
,
Col
,
Card
,
DropdownButton
,
Dropdown
,
ButtonGroup
}
from
'
react-bootstrap
'
;
import
{
Form
,
Button
,
Row
,
Col
,
Card
}
from
'
react-bootstrap
'
;
import
axios
from
'
axios
'
;
import
axios
from
'
axios
'
;
import
Swal
from
'
sweetalert2
'
function
LocCodeChange
()
{
function
LocCodeChange
()
{
...
@@ -20,7 +22,6 @@ function LocCodeChange() {
...
@@ -20,7 +22,6 @@ function LocCodeChange() {
const
inboxstyled
=
{
const
inboxstyled
=
{
display
:
'
flex
'
,
display
:
'
flex
'
,
flexDirection
:
'
column
'
,
flexDirection
:
'
column
'
,
maxWidth
:
'
80%
'
,
justifyContent
:
'
center
'
,
justifyContent
:
'
center
'
,
margin
:
'
auto
'
,
margin
:
'
auto
'
,
padding
:
'
10px
'
padding
:
'
10px
'
...
@@ -28,46 +29,89 @@ function LocCodeChange() {
...
@@ -28,46 +29,89 @@ function LocCodeChange() {
const
btnstyled2
=
{
const
btnstyled2
=
{
background
:
'
white
'
,
background
:
'
white
'
,
margin
:
'
1px
'
,
width
:
'
50%
'
,
maxWidth
:
'
fit-content
'
,
borderWidth
:
'
2px
'
,
borderWidth
:
'
2px
'
,
color
:
'
rgb(110, 189, 142)
'
,
color
:
'
rgb(110, 189, 142)
'
,
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
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
'
)
function
handleClickLoc
()
{
function
handleClickLoc
()
{
setLocCodeShow
(
true
);
if
(
doeSelect
.
options
[
doeSelect
.
selectedIndex
].
text
!==
'
도
'
&&
sggSelect
.
options
[
sggSelect
.
selectedIndex
].
text
!==
'
시군구
'
&&
emdSelect
.
options
[
emdSelect
.
selectedIndex
].
text
!==
'
읍면동
'
)
{
const
auth
=
document
.
getElementById
(
'
loc-code
'
)
localStorage
.
setItem
(
'
code_doe
'
,
doeSelect
.
value
)
auth
.
style
.
visibility
=
'
visible
'
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
()
{
async
function
getLocCode
()
{
const
res
=
await
axios
.
get
(
"
http://localhost:4500/api/data/loccode
"
)
const
res
=
await
axios
.
get
(
"
http://localhost:4500/api/data/loccode
"
)
const
local_codes
=
res
.
data
.
locCodes
const
local_codes
=
res
.
data
.
locCodes
console
.
log
(
'
local_codes:::
'
,
local_codes
)
setDoes
(
local_codes
.
DOE
)
setDoes
(
local_codes
.
DOE
)
setSggs
(
local_codes
.
SGG
)
setSggs
(
local_codes
.
SGG
)
setEmds
(
local_codes
.
EMD
)
}
}
useEffect
(()
=>
{
useEffect
(()
=>
{
getLocCode
()
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
(
return
(
<
Row
className
=
'
text-center w-100 my-2
'
>
<
Row
className
=
'
text-center w-100 my-2
'
>
<
Card
style
=
{
cardstyled
}
>
<
Card
style
=
{
cardstyled
}
>
...
@@ -78,54 +122,62 @@ function LocCodeChange() {
...
@@ -78,54 +122,62 @@ function LocCodeChange() {
Please
select
a
your
region
Please
select
a
your
region
<
/Card.Subtitle
>
<
/Card.Subtitle
>
<
hr
/>
<
hr
/>
<
Card
.
Text
>
<
Card
.
Text
className
=
'
m-0
'
>
<
Form
style
=
{
inboxstyled
}
>
<
Form
style
=
{
inboxstyled
}
>
<
Row
className
=
'
m-auto w-100 d-flex justify-content-center
'
>
<
Row
md
=
{
12
}
xs
=
{
12
}
className
=
'
m-auto w-100 d-flex justify-content-center
'
style
=
{{
padding
:
'
0
'
,
display
:
'
flex
'
,
justifyContent
:
'
center
'
,
width
:
'
100%
'
}}
>
<
Col
md
=
{
12
}
xs
=
{
12
}
style
=
{{
padding
:
'
0
'
,
display
:
'
flex
'
,
justifyContent
:
'
center
'
,
width
:
'
100%
'
}}
>
<
Form
.
Group
className
=
'
m-auto w-100
'
style
=
{
btnstyled2
}
>
<
Form
.
Group
style
=
{
btnstyled2
}
>
<
Row
className
=
'
m-auto pb-3
'
onChange
=
{
selectLocal
}
>
<
Form
.
Control
as
=
'
select
'
aria
-
label
=
"
Floating label select example
"
>
<
Col
md
=
{
4
}
xs
=
{
4
}
style
=
{{
padding
:
'
2px
'
}}
>
<
option
>
도
<
/option
>
{
does
.
map
((
doe
)
=>
(
<
Form
.
Control
as
=
'
select
'
size
=
"
sm
"
id
=
'
select-doe
'
>
<
option
value
=
{
`
${
doe
[
"
code_doe
"
]}
`
}
>
<
option
selected
disabled
>
도
<
/option
>
{
`
${
doe
[
"
name_doe
"
]}
`
}
<
/option
>
{
))}
does
.
map
((
doevalue
)
=>
(
<
/Form.Control
>
<
option
value
=
{
`
${
doevalue
[
"
code_doe
"
]}
`
}
>
<
Form
.
Control
as
=
'
select
'
aria
-
label
=
"
Floating label select example
"
>
{
`
${
doevalue
[
"
name_doe
"
]}
`
}
<
option
>
시군구
<
/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
>
<
/Col
>
<
/Form.Group
>
<
Col
md
=
{
4
}
xs
=
{
4
}
style
=
{{
padding
:
'
2px
'
}}
>
<
Button
variant
=
'
light
'
style
=
{
btnstyled2
}
onClick
=
{
!
locCodeShow
&&
handleClickLoc
}
>
확인
<
/Button
>
<
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
>
<
Col
md
=
{
6
}
xs
=
{
4
}
id
=
'
loc-code
'
style
=
{{
margin
:
'
5px
'
,
<
Col
md
=
{
4
}
xs
=
{
4
}
style
=
{{
padding
:
'
2px
'
}}
>
border
:
'
solid
'
,
<
Form
.
Control
as
=
'
select
'
size
=
"
sm
"
id
=
'
select-emd
'
>
borderColor
:
'
rgb(110, 189, 142)
'
,
<
option
selected
disabled
>
읍면동
<
/option
>
display
:
'
flex
'
,
{
justifyContent
:
'
center
'
,
emdsArray
.
map
((
emdvalue
)
=>
(
padding
:
'
2px
'
,
<
option
value
=
{
`
${
emdvalue
[
"
code_emd
"
]}
`
}
>
// visibility: 'hidden',
{
`
${
emdvalue
[
"
name_emd
"
]}
`
}
transition
:
'
all 2s
'
<
/option
>
}}
>
))
지역코드
}
<
/Form.Control
>
<
/Col
>
<
/Col
>
<
/Row
>
<
/Row
>
<
/Form.Group
>
<
/Row
>
<
/Form
>
<
/Form
>
<
/Card.Text
>
<
/Card.Text
>
<
Row
className
=
'
d-flex justify-content-center
'
>
<
Button
variant
=
'
light
'
style
=
{
btnstyled2
}
onClick
=
{
handleClickLoc
}
>
확인
<
/Button
>
<
/Row
>
<
/Card
>
<
/Card
>
<
/Row
>
<
/Row
>
...
...
client/src/components/LoginComp.js
View file @
8bcf6e01
...
@@ -26,24 +26,30 @@ function LoginComp() {
...
@@ -26,24 +26,30 @@ function LoginComp() {
padding
:
'
10px
'
padding
:
'
10px
'
}
}
const
[
emailSent
,
setEmailSent
]
=
useState
(
false
)
const
[
emailSent
Alert
,
setEmailSent
Alert
]
=
useState
(
false
)
const
[
alertShow
,
setAlertShow
]
=
useState
(
tru
e
)
const
[
alertShow
,
setAlertShow
]
=
useState
(
fals
e
)
function
CheckEmailSend
()
{
const
[
emailAddress
,
setEmailAddress
]
=
useState
(
''
)
setEmailSent
(
!
emailSent
)
function
CheckEmailSend
()
{
localStorage
.
setItem
(
'
login_email_Address
'
,
emailAddress
)
const
emailIs
=
localStorage
.
getItem
(
'
login_email_Address
'
).
split
(
'
@
'
)[
1
]
if
(
emailIs
)
{
setAlertShow
(
true
)
setEmailSentAlert
(
false
)
}
else
{
setAlertShow
(
true
)
setEmailSentAlert
(
true
)
}
}
}
function
addressUrl
()
{
function
addressUrl
()
{
localStorage
.
setItem
(
'
Email-Address
'
,
emailAddress
)
const
afterAt
=
localStorage
.
getItem
(
'
login_email_Address
'
).
split
(
'
@
'
)[
1
]
const
afterAt
=
localStorage
.
getItem
(
'
Email-Address
'
).
split
(
'
@
'
)[
1
]
console
.
log
(
afterAt
)
const
newLink
=
'
https://www.
'
+
afterAt
;
const
newLink
=
'
https://www.
'
+
afterAt
;
window
.
open
(
newLink
);
window
.
open
(
newLink
);
}
}
const
[
emailAddress
,
setEmailAddress
]
=
useState
(
''
)
function
handleChange
(
event
)
{
function
handleChange
(
event
)
{
setEmailAddress
(
event
.
target
.
value
)
setEmailAddress
(
event
.
target
.
value
)
console
.
log
(
emailAddress
)
console
.
log
(
emailAddress
)
...
@@ -61,7 +67,7 @@ function LoginComp() {
...
@@ -61,7 +67,7 @@ function LoginComp() {
<
hr
/>
<
hr
/>
<
Card
.
Text
>
<
Card
.
Text
>
<
Row
className
=
'
m-auto d-flex justify-content-center
'
style
=
{{
width
:
'
80%
'
}}
>
<
Row
className
=
'
m-auto d-flex justify-content-center
'
style
=
{{
width
:
'
80%
'
}}
>
{
!
emailSent
?
{
!
emailSent
Alert
?
<
Alert
show
=
{
alertShow
}
variant
=
{
'
success
'
}
>
<
Alert
show
=
{
alertShow
}
variant
=
{
'
success
'
}
>
<
Col
>
<
Col
>
😍
이메일
전송이
완료
되었습니다
.
😍
이메일
전송이
완료
되었습니다
.
...
@@ -80,18 +86,15 @@ function LoginComp() {
...
@@ -80,18 +86,15 @@ function LoginComp() {
<
/Alert.Link
>
<
/Alert.Link
>
<
/Alert
>
<
/Alert
>
}
}
<
Button
onClick
=
{()
=>
setAlertShow
(
true
)}
>
보여주고
<
/Button
>
<
Button
onClick
=
{()
=>
setAlertShow
(
false
)}
>
안보여주고
<
/Button
>
<
/Row
>
<
/Row
>
<
Form
style
=
{
inboxstyled
}
>
<
Form
style
=
{
inboxstyled
}
>
<
Form
.
Group
controlId
=
"
formBasicEmail
"
>
<
Form
.
Group
controlId
=
"
formBasicEmail
"
>
<
Form
.
Control
type
=
"
email
"
placeholder
=
"
Email
"
onChange
=
{
handleChange
}
/
>
<
Form
.
Control
type
=
"
email
"
placeholder
=
"
Email
"
onChange
=
{
handleChange
}
/
>
<
/Form.Group
>
<
/Form.Group
>
<
Button
variant
=
'
light
'
id
=
'
formbtn
'
onClick
=
{
CheckEmailSend
}
>
<
Button
variant
=
'
light
'
className
=
'
mt-3
'
id
=
'
formbtn
'
onClick
=
{
CheckEmailSend
}
>
LOGIN
LOGIN
<
/Button
>
<
/Button
>
<
/Form
>
<
/Form
>
<
Row
className
=
'
d-flex align-items-center m-2
'
>
<
Row
className
=
'
d-flex align-items-center m-2
'
>
...
...
client/src/components/MainLayer.js
View file @
8bcf6e01
import
React
from
'
react
'
import
React
,
{
useEffect
,
useState
}
from
'
react
'
import
{
Button
,
Image
,
Row
,
ButtonGroup
,
}
from
'
react-bootstrap
'
;
import
{
Button
,
Image
,
Row
,
ButtonGroup
,
Form
,
Col
}
from
'
react-bootstrap
'
;
import
{
Link
}
from
'
react-router-dom
'
;
import
{
Link
}
from
'
react-router-dom
'
;
import
'
../App.css
'
import
'
../App.css
'
import
LocalCode
from
'
../components/LocalCode
'
;
import
UserInfo
from
'
./UserInfo
'
;
import
{
kakaoLogout
}
from
'
../utils/Oauth
'
;
import
{
kakaoLogout
}
from
'
../utils/Oauth
'
;
...
@@ -36,9 +36,15 @@ function MainLayer() {
...
@@ -36,9 +36,15 @@ function MainLayer() {
const
logined
=
localStorage
.
getItem
(
'
nickname
'
)
const
logined
=
localStorage
.
getItem
(
'
nickname
'
)
return
(
const
[
airUsing
,
setAirUsing
]
=
useState
(
false
)
<>
function
aircondiCheck
()
{
setAirUsing
(
!
airUsing
)
localStorage
.
setItem
(
'
using-aircondition
'
,
!
airUsing
);
}
return
(
<
Col
>
<
Row
className
=
'
d-flex align-items-center m-auto w-100
'
>
<
Row
className
=
'
d-flex align-items-center m-auto w-100
'
>
<
Link
to
=
'
/
'
className
=
'
m-auto
'
>
<
Link
to
=
'
/
'
className
=
'
m-auto
'
>
<
Image
src
=
'
/images/EUE11.jpg
'
alt
=
'
EUE
'
style
=
{
boxstyled
}
/
>
<
Image
src
=
'
/images/EUE11.jpg
'
alt
=
'
EUE
'
style
=
{
boxstyled
}
/
>
...
@@ -46,8 +52,18 @@ function MainLayer() {
...
@@ -46,8 +52,18 @@ function MainLayer() {
<
/Row
>
<
/Row
>
<
Row
className
=
'
m-auto d-flex justify-content-center w-100
'
>
<
Row
className
=
'
m-auto d-flex justify-content-center w-100
'
>
<
LocalCode
/>
<
UserInfo
/>
<
/Row
>
<
/Row
>
<
Form
key
=
'
checkbox
'
className
=
"
d-flex justify-content-center w-100
"
style
=
{{
flexDirection
:
'
row-reverse
'
}}
>
<
Form
.
Check
type
=
'
switch
'
id
=
'
aircondition-checkbox
'
label
=
'
에어컨 사용중
'
onChange
=
{
aircondiCheck
}
/
>
<
/Form
>
<
Row
className
=
'
d-flex justify-content-center align-items-center my-2 mx-auto w-100
'
>
<
Row
className
=
'
d-flex justify-content-center align-items-center my-2 mx-auto w-100
'
>
<
ButtonGroup
vertical
className
=
'
m-auto
'
style
=
{{
width
:
'
100%
'
,
flexDirection
:
'
column
'
}}
>
<
ButtonGroup
vertical
className
=
'
m-auto
'
style
=
{{
width
:
'
100%
'
,
flexDirection
:
'
column
'
}}
>
{
logined
?
{
logined
?
...
@@ -76,7 +92,7 @@ function MainLayer() {
...
@@ -76,7 +92,7 @@ function MainLayer() {
<
Row
className
=
'
m-auto justify-content-center w-100
'
id
=
'
contour
'
>
<
Row
className
=
'
m-auto justify-content-center w-100
'
id
=
'
contour
'
>
|
|
<
/Row
>
<
/Row
>
<
/
>
<
/
Col
>
);
);
}
}
...
...
client/src/components/PageNotFound.js
0 → 100644
View file @
8bcf6e01
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
client/src/components/SignupComp.js
View file @
8bcf6e01
...
@@ -27,16 +27,40 @@ function SignupComp() {
...
@@ -27,16 +27,40 @@ function SignupComp() {
}
}
const
initValues
=
{
const
initValues
=
{
email
:
''
,
name
:
''
,
name
:
''
email
:
''
}
}
const
[
formValues
,
setFormValues
]
=
useState
(
initValues
)
const
[
formValues
,
setFormValues
]
=
useState
(
initValues
)
const
[
validated
,
setValidated
]
=
useState
(
false
)
const
[
validated
,
setValidated
]
=
useState
(
false
)
const
[
emailSubm
,
setEmailSubm
]
=
useState
(
false
)
const
[
userExist
,
setUserExist
]
=
useState
(
false
)
const
[
alertShow
,
setAlertShow
]
=
useState
(
false
)
function
handleChange
(
event
)
{
function
handleChange
(
event
)
{
const
{
name
,
value
}
=
event
.
target
const
{
name
,
value
}
=
event
.
target
setFormValues
({
...
formValues
,
[
name
]:
value
})
setFormValues
({
...
formValues
,
[
name
]:
value
})
console
.
log
(
'
???
'
,
formValues
)
}
function
CheckUserExist
()
{
localStorage
.
setItem
(
'
signup_username
'
,
formValues
.
name
)
localStorage
.
setItem
(
'
signup_email_Address
'
,
formValues
.
email
)
const
signUser
=
localStorage
.
getItem
(
'
signup_username
'
)
const
signEmail
=
localStorage
.
getItem
(
'
signup_email_Address
'
).
split
(
'
@
'
)[
1
]
if
(
signEmail
&&
signUser
)
{
setAlertShow
(
true
)
setUserExist
(
!
userExist
)
}
else
if
(
!
signEmail
)
{
setAlertShow
(
false
)
// setUserExist(true)
}
}
}
function
handleSubmit
(
event
)
{
function
handleSubmit
(
event
)
{
...
@@ -55,7 +79,6 @@ function SignupComp() {
...
@@ -55,7 +79,6 @@ function SignupComp() {
// setFormError(validate(formValues))
// setFormError(validate(formValues))
// setIsSubmit(true)
// setIsSubmit(true)
}
}
const
[
emailSubm
,
setEmailSubm
]
=
useState
(
false
)
function
handleClickSubm
()
{
function
handleClickSubm
()
{
// setEmailSubm(true);
// setEmailSubm(true);
...
@@ -66,12 +89,6 @@ function SignupComp() {
...
@@ -66,12 +89,6 @@ function SignupComp() {
}
}
const
[
userExist
,
setUserExist
]
=
useState
(
false
)
const
[
alertShow
,
setAlertShow
]
=
useState
(
true
)
function
CheckUserExist
()
{
setUserExist
(
!
userExist
)
}
return
(
return
(
...
@@ -106,13 +123,11 @@ function SignupComp() {
...
@@ -106,13 +123,11 @@ function SignupComp() {
<
/Alert.Link
>
<
/Alert.Link
>
<
/Alert
>
<
/Alert
>
}
}
<
Button
onClick
=
{()
=>
setAlertShow
(
true
)}
>
보여주고
<
/Button
>
<
Button
onClick
=
{()
=>
setAlertShow
(
false
)}
>
안보여주고
<
/Button
>
<
/Row
>
<
/Row
>
<
Form
style
=
{
inboxstyled
}
<
Form
style
=
{
inboxstyled
}
onSubmit
=
{
handleSubmit
}
>
onSubmit
=
{
handleSubmit
}
>
<
Form
.
Group
controlId
=
"
user
Email
"
>
<
Form
.
Group
controlId
=
"
user
name
"
>
<
Row
className
=
'
m-auto mb-1 d-flex justify-content-center
'
>
<
Row
className
=
'
m-auto mb-1 d-flex justify-content-center
'
>
<
Form
.
Control
<
Form
.
Control
type
=
"
text
"
type
=
"
text
"
...
@@ -138,7 +153,7 @@ function SignupComp() {
...
@@ -138,7 +153,7 @@ function SignupComp() {
<
/Row
>
<
/Row
>
<
/Form.Group
>
<
/Form.Group
>
<
Button
variant
=
'
light
'
className
=
'
mt-
2
'
id
=
'
formbtn
'
onClick
=
{
CheckUserExist
}
>
<
Button
variant
=
'
light
'
className
=
'
mt-
3
'
id
=
'
formbtn
'
onClick
=
{
CheckUserExist
}
>
{
/* type="submit" */
}
{
/* type="submit" */
}
Sign
Up
Sign
Up
<
/Button
>
<
/Button
>
...
...
client/src/components/
LocalCode
.js
→
client/src/components/
UserInfo
.js
View file @
8bcf6e01
import
React
,
{
useState
}
from
'
react
'
import
React
,
{
useState
}
from
'
react
'
import
{
Row
,
Card
,
Button
,
Col
,
Modal
}
from
'
react-bootstrap
'
;
import
{
Row
,
Card
,
Button
,
Col
,
Modal
}
from
'
react-bootstrap
'
;
// import db from "../db/index"
import
'
../App.css
'
import
'
../App.css
'
import
{
Link
}
from
'
react-router-dom
'
;
import
{
Link
}
from
'
react-router-dom
'
;
function
LocalCode
()
{
function
UserInfo
()
{
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
=
{
const
cardstyled
=
{
margin
:
'
auto
'
,
margin
:
'
auto
'
,
...
@@ -18,25 +20,29 @@ function LocalCode() {
...
@@ -18,25 +20,29 @@ function LocalCode() {
borderWidth
:
'
3px
'
,
borderWidth
:
'
3px
'
,
borderRadius
:
'
20px
'
,
borderRadius
:
'
20px
'
,
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
color
:
'
rgb(110, 189, 142)
'
// color: '#04AB70'
color
:
'
rgb(110, 189, 142)
'
,
}
}
const
btnstyled2
=
{
const
btnstyled2
=
{
background
:
'
white
'
,
background
:
'
white
'
,
margin
:
'
auto
'
,
margin
:
'
auto
'
,
borderWidth
:
'
2px
'
,
borderWidth
:
'
2px
'
,
fontSize
:
'
0.5em
'
,
// padding: '0',
fontSize
:
'
0.7em
'
,
color
:
'
rgb(110, 189, 142)
'
,
color
:
'
rgb(110, 189, 142)
'
,
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
borderColor
:
'
rgba(195, 195, 195, 0.753)
'
,
borderRadius
:
'
20px
'
,
// borderRadius: '20px',
width
:
'
50%
'
}
}
const
[
localChange
,
setLocalChange
]
=
useState
(
false
)
const
nickname
=
localStorage
.
getItem
(
'
nickname
'
)
return
(
return
(
<>
<
Row
>
<
Col
className
=
'
text-center pt-3 pb-2 px-0
'
>
<
Col
className
=
'
text-center pt-3 pb-2 px-0
'
>
<
Card
style
=
{
cardstyled
}
id
=
'
localName
'
>
<
Card
style
=
{
cardstyled
}
id
=
'
localName
'
>
<
Card
.
Title
>
<
Card
.
Title
>
{
logined
?
{
nickname
?
`
${
nickname
}
`
`
${
nickname
}
`
:
:
<>
<>
...
@@ -44,37 +50,31 @@ function LocalCode() {
...
@@ -44,37 +50,31 @@ function LocalCode() {
<
/
>
<
/
>
},
환영합니다
.
},
환영합니다
.
<
/Card.Title
>
<
/Card.Title
>
<
Row
style
=
{{
alignItems
:
'
center
'
,
margin
:
'
auto
'
,
whiteSpace
:
'
nowrap
'
}}
>
<
Row
style
=
{{
alignItems
:
'
center
'
,
margin
:
'
auto
'
,
justifyContent
:
'
center
'
}}
>
<
Card
.
Subtitle
>
<
Card
.
Subtitle
>
지역코드
{
localname_emd
?
`
${
localname_doe
}
${
localname_sgg
}
${
localname_emd
}
`
:
<>
지역을
입력해
주세요
<
/
>
}
<
/Card.Subtitle
>
<
/Card.Subtitle
>
{
logined
&&
{
nickname
&&
<
Button
variant
=
'
light
'
className
=
'
m
l-1
'
style
=
{
btnstyled2
}
>
<
Button
variant
=
'
light
'
className
=
'
m
-auto d-flex
'
style
=
{
btnstyled2
}
>
<
Link
to
=
'
/local_code
'
style
=
{{
textDecoration
:
'
none
'
,
color
:
'
rgb(110, 189, 142)
'
}}
>
<
Link
to
=
'
/local_code
'
className
=
'
w-100
'
style
=
{{
textDecoration
:
'
none
'
,
color
:
'
rgb(110, 189, 142)
'
}}
>
변경
변경
<
/Link
>
<
/Link
>
<
/Button
>
<
/Button
>
}
}
<
/Row
>
<
/Row
>
<
Modal
<
hr
/>
show
=
{
localChange
}
onHide
=
{()
=>
setLocalChange
(
false
)}
>
<
Modal
.
Header
className
=
'
d-block text-center
'
>
<
Modal
.
Title
>
마이페이지
<
/Modal.Title
>
<
/Modal.Header
>
<
Modal
.
Body
>
지역이름
(
지역코드
)
<
/Modal.Body
>
<
/Modal
>
환경을
향한
노력
<
br
/>
환경을
향한
노력
<
br
/>
<
strong
>
OOO
일
째
<
/strong
>
<
strong
>
OOO
일
째
<
/strong
>
<
/Card
>
<
/Card
>
<
/Col
>
<
/Col
>
<
/
>
<
/
Row
>
)
)
}
}
export
default
LocalCode
;
export
default
UserInfo
;
\ No newline at end of file
\ No newline at end of file
client/src/pages/Home.js
View file @
8bcf6e01
...
@@ -50,15 +50,11 @@ function Home() {
...
@@ -50,15 +50,11 @@ function Home() {
<
/Col
>
<
/Col
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Row
style
=
{
constyled
}
className
=
'
d-flex mb-2 w-100
'
>
{
/* <TimeNow /> */
}
{
/* <TimeNow /> */
}
<
EueSuggest
/>
<
EueSuggest
/>
<
ChartLine
/>
<
ChartLine
/>
<
ChartDoughnut
/>
<
ChartDoughnut
/>
<
Footer
/>
<
Footer
/>
<
/Row
>
<
/Col
>
<
/Col
>
<
/Row
>
<
/Row
>
<
/Container
>
<
/Container
>
...
...
client/src/pages/LocalCodePage.js
View file @
8bcf6e01
...
@@ -37,10 +37,7 @@ function SignupPage() {
...
@@ -37,10 +37,7 @@ function SignupPage() {
<
/Col
>
<
/Col
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Row
style
=
{
constyled
}
className
=
'
d-flex mb-2 w-100
'
>
<
LocCodeChange
/>
<
LocCodeChange
/>
<
/Row
>
<
/Col
>
<
/Col
>
<
/Row
>
<
/Row
>
<
/Container
>
<
/Container
>
...
...
client/src/pages/LoginPage.js
View file @
8bcf6e01
...
@@ -38,9 +38,7 @@ function SignupPage() {
...
@@ -38,9 +38,7 @@ function SignupPage() {
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Row
style
=
{
constyled
}
className
=
'
d-flex mb-2 w-100
'
>
<
LoginComp
/>
<
LoginComp
/>
<
/Row
>
<
/Col
>
<
/Col
>
<
/Row
>
<
/Row
>
<
/Container
>
<
/Container
>
...
...
client/src/pages/SignupPage.js
View file @
8bcf6e01
...
@@ -37,10 +37,7 @@ function SignupPage() {
...
@@ -37,10 +37,7 @@ function SignupPage() {
<
/Col
>
<
/Col
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Col
md
=
{
6
}
style
=
{
col2sty
}
>
<
Row
style
=
{
constyled
}
className
=
'
d-flex mb-2 w-100
'
>
<
SignupComp
/>
<
SignupComp
/>
<
/Row
>
<
/Col
>
<
/Col
>
<
/Row
>
<
/Row
>
<
/Container
>
<
/Container
>
...
...
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