Merge branch 'feature/kakaomap_setting' into 'develop'
Feature/kakaomap setting - setting the basic layout of frontend - display the kakao map in main page - display the kakao map in main page - add search location box - create the marker to each map - implement InfoWindow - add display infowindow function for each marker See merge request !3
Showing
6 changed files
with
987 additions
and
20 deletions
... | @@ -1274,6 +1274,24 @@ | ... | @@ -1274,6 +1274,24 @@ |
1274 | "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", | 1274 | "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", |
1275 | "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" | 1275 | "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" |
1276 | }, | 1276 | }, |
1277 | + "@emotion/is-prop-valid": { | ||
1278 | + "version": "0.8.8", | ||
1279 | + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", | ||
1280 | + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", | ||
1281 | + "requires": { | ||
1282 | + "@emotion/memoize": "0.7.4" | ||
1283 | + } | ||
1284 | + }, | ||
1285 | + "@emotion/memoize": { | ||
1286 | + "version": "0.7.4", | ||
1287 | + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", | ||
1288 | + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" | ||
1289 | + }, | ||
1290 | + "@emotion/unitless": { | ||
1291 | + "version": "0.7.5", | ||
1292 | + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", | ||
1293 | + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" | ||
1294 | + }, | ||
1277 | "@hapi/address": { | 1295 | "@hapi/address": { |
1278 | "version": "2.1.4", | 1296 | "version": "2.1.4", |
1279 | "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", | 1297 | "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", |
... | @@ -1487,6 +1505,25 @@ | ... | @@ -1487,6 +1505,25 @@ |
1487 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", | 1505 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", |
1488 | "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" | 1506 | "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" |
1489 | }, | 1507 | }, |
1508 | + "@popperjs/core": { | ||
1509 | + "version": "2.4.0", | ||
1510 | + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.0.tgz", | ||
1511 | + "integrity": "sha512-NMrDy6EWh9TPdSRiHmHH2ye1v5U0gBD7pRYwSwJvomx7Bm4GG04vu63dYiVzebLOx2obPpJugew06xVP0Nk7hA==" | ||
1512 | + }, | ||
1513 | + "@restart/context": { | ||
1514 | + "version": "2.1.4", | ||
1515 | + "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", | ||
1516 | + "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==" | ||
1517 | + }, | ||
1518 | + "@restart/hooks": { | ||
1519 | + "version": "0.3.25", | ||
1520 | + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.25.tgz", | ||
1521 | + "integrity": "sha512-m2v3N5pxTsIiSH74/sb1yW8D9RxkJidGW+5Mfwn/lHb2QzhZNlaU1su7abSyT9EGf0xS/0waLjrf7/XxQHUk7w==", | ||
1522 | + "requires": { | ||
1523 | + "lodash": "^4.17.15", | ||
1524 | + "lodash-es": "^4.17.15" | ||
1525 | + } | ||
1526 | + }, | ||
1490 | "@sheerun/mutationobserver-shim": { | 1527 | "@sheerun/mutationobserver-shim": { |
1491 | "version": "0.3.3", | 1528 | "version": "0.3.3", |
1492 | "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", | 1529 | "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", |
... | @@ -1702,6 +1739,8 @@ | ... | @@ -1702,6 +1739,8 @@ |
1702 | }, | 1739 | }, |
1703 | "@testing-library/jest-dom": { | 1740 | "@testing-library/jest-dom": { |
1704 | "version": "4.2.4", | 1741 | "version": "4.2.4", |
1742 | + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz", | ||
1743 | + "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==", | ||
1705 | "requires": { | 1744 | "requires": { |
1706 | "@babel/runtime": "^7.5.1", | 1745 | "@babel/runtime": "^7.5.1", |
1707 | "chalk": "^2.4.1", | 1746 | "chalk": "^2.4.1", |
... | @@ -1726,6 +1765,8 @@ | ... | @@ -1726,6 +1765,8 @@ |
1726 | }, | 1765 | }, |
1727 | "@testing-library/react": { | 1766 | "@testing-library/react": { |
1728 | "version": "9.5.0", | 1767 | "version": "9.5.0", |
1768 | + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.5.0.tgz", | ||
1769 | + "integrity": "sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg==", | ||
1729 | "requires": { | 1770 | "requires": { |
1730 | "@babel/runtime": "^7.8.4", | 1771 | "@babel/runtime": "^7.8.4", |
1731 | "@testing-library/dom": "^6.15.0", | 1772 | "@testing-library/dom": "^6.15.0", |
... | @@ -1733,7 +1774,9 @@ | ... | @@ -1733,7 +1774,9 @@ |
1733 | } | 1774 | } |
1734 | }, | 1775 | }, |
1735 | "@testing-library/user-event": { | 1776 | "@testing-library/user-event": { |
1736 | - "version": "7.2.1" | 1777 | + "version": "7.2.1", |
1778 | + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz", | ||
1779 | + "integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA==" | ||
1737 | }, | 1780 | }, |
1738 | "@types/babel__core": { | 1781 | "@types/babel__core": { |
1739 | "version": "7.1.7", | 1782 | "version": "7.1.7", |
... | @@ -1965,6 +2008,11 @@ | ... | @@ -1965,6 +2008,11 @@ |
1965 | } | 2008 | } |
1966 | } | 2009 | } |
1967 | }, | 2010 | }, |
2011 | + "@types/warning": { | ||
2012 | + "version": "3.0.0", | ||
2013 | + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", | ||
2014 | + "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" | ||
2015 | + }, | ||
1968 | "@types/yargs": { | 2016 | "@types/yargs": { |
1969 | "version": "13.0.9", | 2017 | "version": "13.0.9", |
1970 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", | 2018 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", |
... | @@ -2818,6 +2866,22 @@ | ... | @@ -2818,6 +2866,22 @@ |
2818 | "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", | 2866 | "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", |
2819 | "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==" | 2867 | "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==" |
2820 | }, | 2868 | }, |
2869 | + "babel-plugin-styled-components": { | ||
2870 | + "version": "1.10.7", | ||
2871 | + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz", | ||
2872 | + "integrity": "sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg==", | ||
2873 | + "requires": { | ||
2874 | + "@babel/helper-annotate-as-pure": "^7.0.0", | ||
2875 | + "@babel/helper-module-imports": "^7.0.0", | ||
2876 | + "babel-plugin-syntax-jsx": "^6.18.0", | ||
2877 | + "lodash": "^4.17.11" | ||
2878 | + } | ||
2879 | + }, | ||
2880 | + "babel-plugin-syntax-jsx": { | ||
2881 | + "version": "6.18.0", | ||
2882 | + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", | ||
2883 | + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" | ||
2884 | + }, | ||
2821 | "babel-plugin-syntax-object-rest-spread": { | 2885 | "babel-plugin-syntax-object-rest-spread": { |
2822 | "version": "6.13.0", | 2886 | "version": "6.13.0", |
2823 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", | 2887 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", |
... | @@ -3130,6 +3194,11 @@ | ... | @@ -3130,6 +3194,11 @@ |
3130 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | 3194 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", |
3131 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" | 3195 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" |
3132 | }, | 3196 | }, |
3197 | + "bootstrap": { | ||
3198 | + "version": "3.4.1", | ||
3199 | + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", | ||
3200 | + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" | ||
3201 | + }, | ||
3133 | "brace-expansion": { | 3202 | "brace-expansion": { |
3134 | "version": "1.1.11", | 3203 | "version": "1.1.11", |
3135 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | 3204 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", |
... | @@ -3417,6 +3486,11 @@ | ... | @@ -3417,6 +3486,11 @@ |
3417 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", | 3486 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", |
3418 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" | 3487 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" |
3419 | }, | 3488 | }, |
3489 | + "camelize": { | ||
3490 | + "version": "1.0.0", | ||
3491 | + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", | ||
3492 | + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" | ||
3493 | + }, | ||
3420 | "caniuse-api": { | 3494 | "caniuse-api": { |
3421 | "version": "3.0.0", | 3495 | "version": "3.0.0", |
3422 | "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", | 3496 | "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", |
... | @@ -3585,6 +3659,11 @@ | ... | @@ -3585,6 +3659,11 @@ |
3585 | } | 3659 | } |
3586 | } | 3660 | } |
3587 | }, | 3661 | }, |
3662 | + "classnames": { | ||
3663 | + "version": "2.2.6", | ||
3664 | + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", | ||
3665 | + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" | ||
3666 | + }, | ||
3588 | "clean-css": { | 3667 | "clean-css": { |
3589 | "version": "4.2.3", | 3668 | "version": "4.2.3", |
3590 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", | 3669 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", |
... | @@ -4052,6 +4131,11 @@ | ... | @@ -4052,6 +4131,11 @@ |
4052 | "postcss": "^7.0.5" | 4131 | "postcss": "^7.0.5" |
4053 | } | 4132 | } |
4054 | }, | 4133 | }, |
4134 | + "css-color-keywords": { | ||
4135 | + "version": "1.0.0", | ||
4136 | + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", | ||
4137 | + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" | ||
4138 | + }, | ||
4055 | "css-color-names": { | 4139 | "css-color-names": { |
4056 | "version": "0.0.4", | 4140 | "version": "0.0.4", |
4057 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", | 4141 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", |
... | @@ -4135,6 +4219,23 @@ | ... | @@ -4135,6 +4219,23 @@ |
4135 | "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", | 4219 | "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", |
4136 | "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" | 4220 | "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" |
4137 | }, | 4221 | }, |
4222 | + "css-to-react-native": { | ||
4223 | + "version": "2.3.2", | ||
4224 | + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", | ||
4225 | + "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", | ||
4226 | + "requires": { | ||
4227 | + "camelize": "^1.0.0", | ||
4228 | + "css-color-keywords": "^1.0.0", | ||
4229 | + "postcss-value-parser": "^3.3.0" | ||
4230 | + }, | ||
4231 | + "dependencies": { | ||
4232 | + "postcss-value-parser": { | ||
4233 | + "version": "3.3.1", | ||
4234 | + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", | ||
4235 | + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" | ||
4236 | + } | ||
4237 | + } | ||
4238 | + }, | ||
4138 | "css-tree": { | 4239 | "css-tree": { |
4139 | "version": "1.0.0-alpha.37", | 4240 | "version": "1.0.0-alpha.37", |
4140 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", | 4241 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", |
... | @@ -4326,6 +4427,11 @@ | ... | @@ -4326,6 +4427,11 @@ |
4326 | } | 4427 | } |
4327 | } | 4428 | } |
4328 | }, | 4429 | }, |
4430 | + "daum-map-api": { | ||
4431 | + "version": "1.0.2", | ||
4432 | + "resolved": "https://registry.npmjs.org/daum-map-api/-/daum-map-api-1.0.2.tgz", | ||
4433 | + "integrity": "sha1-3hbrEB11Ea5dZC/CZsl/lHmJiqQ=" | ||
4434 | + }, | ||
4329 | "debug": { | 4435 | "debug": { |
4330 | "version": "2.6.9", | 4436 | "version": "2.6.9", |
4331 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | 4437 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
... | @@ -4585,6 +4691,15 @@ | ... | @@ -4585,6 +4691,15 @@ |
4585 | "utila": "~0.4" | 4691 | "utila": "~0.4" |
4586 | } | 4692 | } |
4587 | }, | 4693 | }, |
4694 | + "dom-helpers": { | ||
4695 | + "version": "5.1.4", | ||
4696 | + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz", | ||
4697 | + "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==", | ||
4698 | + "requires": { | ||
4699 | + "@babel/runtime": "^7.8.7", | ||
4700 | + "csstype": "^2.6.7" | ||
4701 | + } | ||
4702 | + }, | ||
4588 | "dom-serializer": { | 4703 | "dom-serializer": { |
4589 | "version": "0.2.2", | 4704 | "version": "0.2.2", |
4590 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", | 4705 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", |
... | @@ -7347,6 +7462,11 @@ | ... | @@ -7347,6 +7462,11 @@ |
7347 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", | 7462 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", |
7348 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" | 7463 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" |
7349 | }, | 7464 | }, |
7465 | + "is-what": { | ||
7466 | + "version": "3.8.0", | ||
7467 | + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.8.0.tgz", | ||
7468 | + "integrity": "sha512-UKeBoQfV8bjlM4pmx1FLDHdxslW/1mTksEs8ReVsilPmUv5cORd4+2/wFcviI3cUjrLybxCjzc8DnodAzJ/Wrg==" | ||
7469 | + }, | ||
7350 | "is-windows": { | 7470 | "is-windows": { |
7351 | "version": "1.0.2", | 7471 | "version": "1.0.2", |
7352 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", | 7472 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", |
... | @@ -8258,6 +8378,11 @@ | ... | @@ -8258,6 +8378,11 @@ |
8258 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", | 8378 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", |
8259 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" | 8379 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" |
8260 | }, | 8380 | }, |
8381 | + "lodash-es": { | ||
8382 | + "version": "4.17.15", | ||
8383 | + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", | ||
8384 | + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" | ||
8385 | + }, | ||
8261 | "lodash._reinterpolate": { | 8386 | "lodash._reinterpolate": { |
8262 | "version": "3.0.0", | 8387 | "version": "3.0.0", |
8263 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", | 8388 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", |
... | @@ -8404,6 +8529,11 @@ | ... | @@ -8404,6 +8529,11 @@ |
8404 | "p-is-promise": "^2.0.0" | 8529 | "p-is-promise": "^2.0.0" |
8405 | } | 8530 | } |
8406 | }, | 8531 | }, |
8532 | + "memoize-one": { | ||
8533 | + "version": "5.1.1", | ||
8534 | + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", | ||
8535 | + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" | ||
8536 | + }, | ||
8407 | "memory-fs": { | 8537 | "memory-fs": { |
8408 | "version": "0.4.1", | 8538 | "version": "0.4.1", |
8409 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", | 8539 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", |
... | @@ -8442,6 +8572,14 @@ | ... | @@ -8442,6 +8572,14 @@ |
8442 | } | 8572 | } |
8443 | } | 8573 | } |
8444 | }, | 8574 | }, |
8575 | + "merge-anything": { | ||
8576 | + "version": "2.4.4", | ||
8577 | + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.4.tgz", | ||
8578 | + "integrity": "sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ==", | ||
8579 | + "requires": { | ||
8580 | + "is-what": "^3.3.1" | ||
8581 | + } | ||
8582 | + }, | ||
8445 | "merge-deep": { | 8583 | "merge-deep": { |
8446 | "version": "3.0.2", | 8584 | "version": "3.0.2", |
8447 | "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", | 8585 | "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", |
... | @@ -10624,6 +10762,15 @@ | ... | @@ -10624,6 +10762,15 @@ |
10624 | "react-is": "^16.8.1" | 10762 | "react-is": "^16.8.1" |
10625 | } | 10763 | } |
10626 | }, | 10764 | }, |
10765 | + "prop-types-extra": { | ||
10766 | + "version": "1.1.1", | ||
10767 | + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", | ||
10768 | + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", | ||
10769 | + "requires": { | ||
10770 | + "react-is": "^16.3.2", | ||
10771 | + "warning": "^4.0.0" | ||
10772 | + } | ||
10773 | + }, | ||
10627 | "proxy-addr": { | 10774 | "proxy-addr": { |
10628 | "version": "2.0.6", | 10775 | "version": "2.0.6", |
10629 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", | 10776 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", |
... | @@ -10782,6 +10929,8 @@ | ... | @@ -10782,6 +10929,8 @@ |
10782 | }, | 10929 | }, |
10783 | "react": { | 10930 | "react": { |
10784 | "version": "16.13.1", | 10931 | "version": "16.13.1", |
10932 | + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", | ||
10933 | + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", | ||
10785 | "requires": { | 10934 | "requires": { |
10786 | "loose-envify": "^1.1.0", | 10935 | "loose-envify": "^1.1.0", |
10787 | "object-assign": "^4.1.1", | 10936 | "object-assign": "^4.1.1", |
... | @@ -10801,6 +10950,26 @@ | ... | @@ -10801,6 +10950,26 @@ |
10801 | "whatwg-fetch": "^3.0.0" | 10950 | "whatwg-fetch": "^3.0.0" |
10802 | } | 10951 | } |
10803 | }, | 10952 | }, |
10953 | + "react-bootstrap": { | ||
10954 | + "version": "1.0.1", | ||
10955 | + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.0.1.tgz", | ||
10956 | + "integrity": "sha512-xMHwsvDN7sIv26P9wWiosWjITZije2dRCjEJHVfV2KFoSJY+8uv2zttEw0XMB7xviQcW3zuIGLJXuj8vf6lYEg==", | ||
10957 | + "requires": { | ||
10958 | + "@babel/runtime": "^7.4.2", | ||
10959 | + "@restart/context": "^2.1.4", | ||
10960 | + "@restart/hooks": "^0.3.21", | ||
10961 | + "@types/react": "^16.9.23", | ||
10962 | + "classnames": "^2.2.6", | ||
10963 | + "dom-helpers": "^5.1.2", | ||
10964 | + "invariant": "^2.2.4", | ||
10965 | + "prop-types": "^15.7.2", | ||
10966 | + "prop-types-extra": "^1.1.0", | ||
10967 | + "react-overlays": "^3.1.2", | ||
10968 | + "react-transition-group": "^4.0.0", | ||
10969 | + "uncontrollable": "^7.0.0", | ||
10970 | + "warning": "^4.0.3" | ||
10971 | + } | ||
10972 | + }, | ||
10804 | "react-dev-utils": { | 10973 | "react-dev-utils": { |
10805 | "version": "10.2.1", | 10974 | "version": "10.2.1", |
10806 | "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", | 10975 | "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", |
... | @@ -11033,6 +11202,8 @@ | ... | @@ -11033,6 +11202,8 @@ |
11033 | }, | 11202 | }, |
11034 | "react-dom": { | 11203 | "react-dom": { |
11035 | "version": "16.13.1", | 11204 | "version": "16.13.1", |
11205 | + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", | ||
11206 | + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", | ||
11036 | "requires": { | 11207 | "requires": { |
11037 | "loose-envify": "^1.1.0", | 11208 | "loose-envify": "^1.1.0", |
11038 | "object-assign": "^4.1.1", | 11209 | "object-assign": "^4.1.1", |
... | @@ -11050,6 +11221,39 @@ | ... | @@ -11050,6 +11221,39 @@ |
11050 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", | 11221 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", |
11051 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" | 11222 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" |
11052 | }, | 11223 | }, |
11224 | + "react-kakao-maps": { | ||
11225 | + "version": "0.0.13", | ||
11226 | + "resolved": "https://registry.npmjs.org/react-kakao-maps/-/react-kakao-maps-0.0.13.tgz", | ||
11227 | + "integrity": "sha512-1ZHGbdvucFpq3rPSee1UB8cY/61QloQeH2Kh1SMSvIoL2kIUIo1lbF8FnwkHo3zrbpqcS4kIFPvvDB5xs27MdA==", | ||
11228 | + "requires": { | ||
11229 | + "@babel/runtime-corejs3": "^7.6.2", | ||
11230 | + "babel-runtime": "^6.26.0", | ||
11231 | + "react": "^16.9.0", | ||
11232 | + "react-dom": "^16.9.0", | ||
11233 | + "scriptjs": "^2.5.9", | ||
11234 | + "styled-components": "^4.3.2" | ||
11235 | + } | ||
11236 | + }, | ||
11237 | + "react-lifecycles-compat": { | ||
11238 | + "version": "3.0.4", | ||
11239 | + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", | ||
11240 | + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" | ||
11241 | + }, | ||
11242 | + "react-overlays": { | ||
11243 | + "version": "3.2.0", | ||
11244 | + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-3.2.0.tgz", | ||
11245 | + "integrity": "sha512-YTgCmw6l4uBOYylSnc3V8WLX+A0EoGnzDrqkYz0K7MUKbMBZFpaxLXH4EF9eZbspd+syZHQ5XAABI7n/zak1EA==", | ||
11246 | + "requires": { | ||
11247 | + "@babel/runtime": "^7.4.5", | ||
11248 | + "@popperjs/core": "^2.0.0", | ||
11249 | + "@restart/hooks": "^0.3.12", | ||
11250 | + "@types/warning": "^3.0.0", | ||
11251 | + "dom-helpers": "^5.1.0", | ||
11252 | + "prop-types": "^15.7.2", | ||
11253 | + "uncontrollable": "^7.0.0", | ||
11254 | + "warning": "^4.0.3" | ||
11255 | + } | ||
11256 | + }, | ||
11053 | "react-router": { | 11257 | "react-router": { |
11054 | "version": "5.2.0", | 11258 | "version": "5.2.0", |
11055 | "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", | 11259 | "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", |
... | @@ -11098,6 +11302,8 @@ | ... | @@ -11098,6 +11302,8 @@ |
11098 | }, | 11302 | }, |
11099 | "react-scripts": { | 11303 | "react-scripts": { |
11100 | "version": "3.4.1", | 11304 | "version": "3.4.1", |
11305 | + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", | ||
11306 | + "integrity": "sha512-JpTdi/0Sfd31mZA6Ukx+lq5j1JoKItX7qqEK4OiACjVQletM1P38g49d9/D0yTxp9FrSF+xpJFStkGgKEIRjlQ==", | ||
11101 | "requires": { | 11307 | "requires": { |
11102 | "@babel/core": "7.9.0", | 11308 | "@babel/core": "7.9.0", |
11103 | "@svgr/webpack": "4.3.3", | 11309 | "@svgr/webpack": "4.3.3", |
... | @@ -11175,6 +11381,17 @@ | ... | @@ -11175,6 +11381,17 @@ |
11175 | } | 11381 | } |
11176 | } | 11382 | } |
11177 | }, | 11383 | }, |
11384 | + "react-transition-group": { | ||
11385 | + "version": "4.4.1", | ||
11386 | + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", | ||
11387 | + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", | ||
11388 | + "requires": { | ||
11389 | + "@babel/runtime": "^7.5.5", | ||
11390 | + "dom-helpers": "^5.0.1", | ||
11391 | + "loose-envify": "^1.4.0", | ||
11392 | + "prop-types": "^15.6.2" | ||
11393 | + } | ||
11394 | + }, | ||
11178 | "read-pkg": { | 11395 | "read-pkg": { |
11179 | "version": "2.0.0", | 11396 | "version": "2.0.0", |
11180 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", | 11397 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", |
... | @@ -11752,6 +11969,11 @@ | ... | @@ -11752,6 +11969,11 @@ |
11752 | "ajv-keywords": "^3.4.1" | 11969 | "ajv-keywords": "^3.4.1" |
11753 | } | 11970 | } |
11754 | }, | 11971 | }, |
11972 | + "scriptjs": { | ||
11973 | + "version": "2.5.9", | ||
11974 | + "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", | ||
11975 | + "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" | ||
11976 | + }, | ||
11755 | "select-hose": { | 11977 | "select-hose": { |
11756 | "version": "2.0.0", | 11978 | "version": "2.0.0", |
11757 | "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", | 11979 | "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", |
... | @@ -12702,6 +12924,36 @@ | ... | @@ -12702,6 +12924,36 @@ |
12702 | } | 12924 | } |
12703 | } | 12925 | } |
12704 | }, | 12926 | }, |
12927 | + "styled-components": { | ||
12928 | + "version": "4.4.1", | ||
12929 | + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.1.tgz", | ||
12930 | + "integrity": "sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==", | ||
12931 | + "requires": { | ||
12932 | + "@babel/helper-module-imports": "^7.0.0", | ||
12933 | + "@babel/traverse": "^7.0.0", | ||
12934 | + "@emotion/is-prop-valid": "^0.8.1", | ||
12935 | + "@emotion/unitless": "^0.7.0", | ||
12936 | + "babel-plugin-styled-components": ">= 1", | ||
12937 | + "css-to-react-native": "^2.2.2", | ||
12938 | + "memoize-one": "^5.0.0", | ||
12939 | + "merge-anything": "^2.2.4", | ||
12940 | + "prop-types": "^15.5.4", | ||
12941 | + "react-is": "^16.6.0", | ||
12942 | + "stylis": "^3.5.0", | ||
12943 | + "stylis-rule-sheet": "^0.0.10", | ||
12944 | + "supports-color": "^5.5.0" | ||
12945 | + }, | ||
12946 | + "dependencies": { | ||
12947 | + "supports-color": { | ||
12948 | + "version": "5.5.0", | ||
12949 | + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||
12950 | + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", | ||
12951 | + "requires": { | ||
12952 | + "has-flag": "^3.0.0" | ||
12953 | + } | ||
12954 | + } | ||
12955 | + } | ||
12956 | + }, | ||
12705 | "stylehacks": { | 12957 | "stylehacks": { |
12706 | "version": "4.0.3", | 12958 | "version": "4.0.3", |
12707 | "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", | 12959 | "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", |
... | @@ -12724,6 +12976,16 @@ | ... | @@ -12724,6 +12976,16 @@ |
12724 | } | 12976 | } |
12725 | } | 12977 | } |
12726 | }, | 12978 | }, |
12979 | + "stylis": { | ||
12980 | + "version": "3.5.4", | ||
12981 | + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", | ||
12982 | + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" | ||
12983 | + }, | ||
12984 | + "stylis-rule-sheet": { | ||
12985 | + "version": "0.0.10", | ||
12986 | + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", | ||
12987 | + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" | ||
12988 | + }, | ||
12727 | "supports-color": { | 12989 | "supports-color": { |
12728 | "version": "6.1.0", | 12990 | "version": "6.1.0", |
12729 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", | 12991 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", |
... | @@ -13232,6 +13494,17 @@ | ... | @@ -13232,6 +13494,17 @@ |
13232 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", | 13494 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", |
13233 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" | 13495 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" |
13234 | }, | 13496 | }, |
13497 | + "uncontrollable": { | ||
13498 | + "version": "7.1.1", | ||
13499 | + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz", | ||
13500 | + "integrity": "sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==", | ||
13501 | + "requires": { | ||
13502 | + "@babel/runtime": "^7.6.3", | ||
13503 | + "@types/react": "^16.9.11", | ||
13504 | + "invariant": "^2.2.4", | ||
13505 | + "react-lifecycles-compat": "^3.0.4" | ||
13506 | + } | ||
13507 | + }, | ||
13235 | "unicode-canonical-property-names-ecmascript": { | 13508 | "unicode-canonical-property-names-ecmascript": { |
13236 | "version": "1.0.4", | 13509 | "version": "1.0.4", |
13237 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", | 13510 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", |
... | @@ -13523,6 +13796,14 @@ | ... | @@ -13523,6 +13796,14 @@ |
13523 | "makeerror": "1.0.x" | 13796 | "makeerror": "1.0.x" |
13524 | } | 13797 | } |
13525 | }, | 13798 | }, |
13799 | + "warning": { | ||
13800 | + "version": "4.0.3", | ||
13801 | + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", | ||
13802 | + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", | ||
13803 | + "requires": { | ||
13804 | + "loose-envify": "^1.0.0" | ||
13805 | + } | ||
13806 | + }, | ||
13526 | "watchpack": { | 13807 | "watchpack": { |
13527 | "version": "1.7.2", | 13808 | "version": "1.7.2", |
13528 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", | 13809 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", | ... | ... |
... | @@ -6,8 +6,12 @@ | ... | @@ -6,8 +6,12 @@ |
6 | "@testing-library/jest-dom": "^4.2.4", | 6 | "@testing-library/jest-dom": "^4.2.4", |
7 | "@testing-library/react": "^9.3.2", | 7 | "@testing-library/react": "^9.3.2", |
8 | "@testing-library/user-event": "^7.1.2", | 8 | "@testing-library/user-event": "^7.1.2", |
9 | + "bootstrap": "^3.4.1", | ||
10 | + "daum-map-api": "^1.0.2", | ||
9 | "react": "^16.13.1", | 11 | "react": "^16.13.1", |
12 | + "react-bootstrap": "^1.0.1", | ||
10 | "react-dom": "^16.13.1", | 13 | "react-dom": "^16.13.1", |
14 | + "react-kakao-maps": "0.0.13", | ||
11 | "react-router-dom": "^5.2.0", | 15 | "react-router-dom": "^5.2.0", |
12 | "react-scripts": "3.4.1" | 16 | "react-scripts": "3.4.1" |
13 | }, | 17 | }, | ... | ... |
... | @@ -10,6 +10,16 @@ | ... | @@ -10,6 +10,16 @@ |
10 | content="Web site created using create-react-app" | 10 | content="Web site created using create-react-app" |
11 | /> | 11 | /> |
12 | <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> | 12 | <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> |
13 | + <script | ||
14 | + type="text/javascript" | ||
15 | + src="//dapi.kakao.com/v2/maps/sdk.js?appkey=61abec34d0855ba1d434ea222263d4a5&libraries=services,clusterer,drawing" | ||
16 | + ></script> | ||
17 | + <link | ||
18 | + rel="stylesheet" | ||
19 | + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" | ||
20 | + integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" | ||
21 | + crossorigin="anonymous" | ||
22 | + /> | ||
13 | <!-- | 23 | <!-- |
14 | manifest.json provides metadata used when your web app is installed on a | 24 | manifest.json provides metadata used when your web app is installed on a |
15 | user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ | 25 | user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ |
... | @@ -24,7 +34,7 @@ | ... | @@ -24,7 +34,7 @@ |
24 | work correctly both with client-side routing and a non-root public URL. | 34 | work correctly both with client-side routing and a non-root public URL. |
25 | Learn how to configure a non-root public URL by running `npm run build`. | 35 | Learn how to configure a non-root public URL by running `npm run build`. |
26 | --> | 36 | --> |
27 | - <title>React App</title> | 37 | + <title>HowsTheWeather</title> |
28 | </head> | 38 | </head> |
29 | <body> | 39 | <body> |
30 | <noscript>You need to enable JavaScript to run this app.</noscript> | 40 | <noscript>You need to enable JavaScript to run this app.</noscript> | ... | ... |
... | @@ -15,13 +15,14 @@ | ... | @@ -15,13 +15,14 @@ |
15 | 15 | ||
16 | .App-header { | 16 | .App-header { |
17 | background-color: #282c34; | 17 | background-color: #282c34; |
18 | - min-height: 100vh; | 18 | + min-height: 13vh; |
19 | display: flex; | 19 | display: flex; |
20 | flex-direction: column; | 20 | flex-direction: column; |
21 | align-items: center; | 21 | align-items: center; |
22 | justify-content: center; | 22 | justify-content: center; |
23 | font-size: calc(10px + 2vmin); | 23 | font-size: calc(10px + 2vmin); |
24 | color: white; | 24 | color: white; |
25 | + font-weight: bold; | ||
25 | } | 26 | } |
26 | 27 | ||
27 | .App-link { | 28 | .App-link { | ... | ... |
frontend/src/home.css
0 → 100644
1 | +.Home { | ||
2 | + text-align: center; | ||
3 | +} | ||
4 | + | ||
5 | +.Home-logo { | ||
6 | + height: 40vmin; | ||
7 | + pointer-events: none; | ||
8 | +} | ||
9 | + | ||
10 | +@media (prefers-reduced-motion: no-preference) { | ||
11 | + .Home-logo { | ||
12 | + animation: Home-logo-spin infinite 20s linear; | ||
13 | + } | ||
14 | +} | ||
15 | + | ||
16 | +.Home-header { | ||
17 | + background-color: #282c34; | ||
18 | + min-height: 13vh; | ||
19 | + display: flex; | ||
20 | + flex-direction: column; | ||
21 | + align-items: center; | ||
22 | + justify-content: center; | ||
23 | + font-size: calc(10px + 2vmin); | ||
24 | + color: white; | ||
25 | + font-weight: bold; | ||
26 | +} | ||
27 | + | ||
28 | +.Home-link { | ||
29 | + color: #61dafb; | ||
30 | +} | ||
31 | + | ||
32 | +@keyframes Home-logo-spin { | ||
33 | + from { | ||
34 | + transform: rotate(0deg); | ||
35 | + } | ||
36 | + to { | ||
37 | + transform: rotate(360deg); | ||
38 | + } | ||
39 | +} | ||
40 | + | ||
41 | +.strong { | ||
42 | + font-size: calc(10px + 1vmin); | ||
43 | + font-weight: bold; | ||
44 | +} | ||
45 | +.map_wrap, | ||
46 | +.map_wrap * { | ||
47 | + margin: 0; | ||
48 | + padding: 0; | ||
49 | + font-family: "Malgun Gothic", dotum, "돋움", sans-serif; | ||
50 | + font-size: 12px; | ||
51 | +} | ||
52 | +.map_wrap a, | ||
53 | +.map_wrap a:hover, | ||
54 | +.map_wrap a:active { | ||
55 | + color: #000; | ||
56 | + text-decoration: none; | ||
57 | +} | ||
58 | +.map_wrap { | ||
59 | + position: relative; | ||
60 | + width: 100%; | ||
61 | + height: 500px; | ||
62 | +} | ||
63 | + | ||
64 | +#menu_wrap { | ||
65 | + position: absolute; | ||
66 | + top: 0; | ||
67 | + left: 0; | ||
68 | + bottom: 0; | ||
69 | + width: 250px; | ||
70 | + margin: 10px 0 30px 10px; | ||
71 | + padding: 5px; | ||
72 | + overflow-y: auto; | ||
73 | + background: rgba(53, 53, 53, 0.8); | ||
74 | + z-index: 1; | ||
75 | + font-size: 12px; | ||
76 | + border-radius: 10px; | ||
77 | +} | ||
78 | +.bg_white { | ||
79 | + background: #fff; | ||
80 | +} | ||
81 | +x #menu_wrap hr { | ||
82 | + display: block; | ||
83 | + height: 1px; | ||
84 | + border: 0; | ||
85 | + border-top: 2px solid #5f5f5f; | ||
86 | + margin: 3px 0; | ||
87 | +} | ||
88 | +#menu_wrap .option { | ||
89 | + text-align: center; | ||
90 | + color: #ffffff; | ||
91 | + font-weight: bold; | ||
92 | +} | ||
93 | +#menu_wrap .option p { | ||
94 | + margin: 10px 0; | ||
95 | +} | ||
96 | +#menu_wrap .option button { | ||
97 | + margin-left: 5px; | ||
98 | +} | ||
99 | + | ||
100 | +#placesList li { | ||
101 | + list-style: none; | ||
102 | +} | ||
103 | +#placesList .item { | ||
104 | + position: relative; | ||
105 | + border-bottom: 1px solid #888; | ||
106 | + overflow: hidden; | ||
107 | + cursor: pointer; | ||
108 | + min-height: 65px; | ||
109 | +} | ||
110 | +#placesList .item span { | ||
111 | + display: block; | ||
112 | + margin-top: 4px; | ||
113 | +} | ||
114 | +#placesList .item h5, | ||
115 | +#placesList .item .info { | ||
116 | + text-overflow: ellipsis; | ||
117 | + overflow: hidden; | ||
118 | + white-space: nowrap; | ||
119 | +} | ||
120 | +#placesList .item .info { | ||
121 | + padding: 10px 0 10px 55px; | ||
122 | + color: #ffffff; | ||
123 | +} | ||
124 | +#placesList .info .gray { | ||
125 | + color: #eaeaea; | ||
126 | +} | ||
127 | +#placesList .info .jibun { | ||
128 | + padding-left: 26px; | ||
129 | + background: url(http://t1.daumcdn.net/localimg/localimages/07/mapapidoc/places_jibun.png) | ||
130 | + no-repeat; | ||
131 | +} | ||
132 | +#placesList .info .tel { | ||
133 | + color: #ffbb00; | ||
134 | + font-weight: bold; | ||
135 | +} | ||
136 | +#placesList .item .markerbg { | ||
137 | + float: left; | ||
138 | + position: absolute; | ||
139 | + width: 36px; | ||
140 | + height: 37px; | ||
141 | + margin: 10px 0 0 10px; | ||
142 | + background: url(http://t1.daumcdn.net/localimg/localimages/07/mapapidoc/marker_number_blue.png) | ||
143 | + no-repeat; | ||
144 | +} | ||
145 | +#placesList .item .marker_1 { | ||
146 | + background-position: 0 -10px; | ||
147 | +} | ||
148 | +#placesList .item .marker_2 { | ||
149 | + background-position: 0 -56px; | ||
150 | +} | ||
151 | +#placesList .item .marker_3 { | ||
152 | + background-position: 0 -102px; | ||
153 | +} | ||
154 | +#placesList .item .marker_4 { | ||
155 | + background-position: 0 -148px; | ||
156 | +} | ||
157 | +#placesList .item .marker_5 { | ||
158 | + background-position: 0 -194px; | ||
159 | +} | ||
160 | +#placesList .item .marker_6 { | ||
161 | + background-position: 0 -240px; | ||
162 | +} | ||
163 | +#placesList .item .marker_7 { | ||
164 | + background-position: 0 -286px; | ||
165 | +} | ||
166 | +#placesList .item .marker_8 { | ||
167 | + background-position: 0 -332px; | ||
168 | +} | ||
169 | +#placesList .item .marker_9 { | ||
170 | + background-position: 0 -378px; | ||
171 | +} | ||
172 | +#placesList .item .marker_10 { | ||
173 | + background-position: 0 -423px; | ||
174 | +} | ||
175 | +#placesList .item .marker_11 { | ||
176 | + background-position: 0 -470px; | ||
177 | +} | ||
178 | +#placesList .item .marker_12 { | ||
179 | + background-position: 0 -516px; | ||
180 | +} | ||
181 | +#placesList .item .marker_13 { | ||
182 | + background-position: 0 -562px; | ||
183 | +} | ||
184 | +#placesList .item .marker_14 { | ||
185 | + background-position: 0 -608px; | ||
186 | +} | ||
187 | +#placesList .item .marker_15 { | ||
188 | + background-position: 0 -654px; | ||
189 | +} | ||
190 | +#pagination { | ||
191 | + margin: 10px auto; | ||
192 | + text-align: center; | ||
193 | +} | ||
194 | +#pagination a { | ||
195 | + display: inline-block; | ||
196 | + margin-right: 10px; | ||
197 | +} | ||
198 | +#pagination .on { | ||
199 | + font-weight: bold; | ||
200 | + cursor: default; | ||
201 | + color: #777; | ||
202 | +} | ||
203 | + | ||
204 | +.wraps { | ||
205 | + position: absolute; | ||
206 | + left: 0; | ||
207 | + bottom: 40px; | ||
208 | + width: 288px; | ||
209 | + height: 132px; | ||
210 | + margin-left: -144px; | ||
211 | + text-align: left; | ||
212 | + overflow: hidden; | ||
213 | + font-size: 12px; | ||
214 | + font-family: "Malgun Gothic", dotum, "돋움", sans-serif; | ||
215 | + line-height: 1.5; | ||
216 | +} | ||
217 | +.wraps * { | ||
218 | + padding: 0; | ||
219 | + margin: 0; | ||
220 | +} | ||
221 | +.wraps .infos { | ||
222 | + width: 286px; | ||
223 | + height: 120px; | ||
224 | + border-radius: 5px; | ||
225 | + border-bottom: 2px solid #ccc; | ||
226 | + border-right: 1px solid #ccc; | ||
227 | + overflow: hidden; | ||
228 | + background: #fff; | ||
229 | +} | ||
230 | +.wraps .infos:nth-child(1) { | ||
231 | + border: 0; | ||
232 | + box-shadow: 0px 1px 2px #888; | ||
233 | +} | ||
234 | +.infos .title { | ||
235 | + padding: 5px 0 0 10px; | ||
236 | + height: 30px; | ||
237 | + background: #eee; | ||
238 | + border-bottom: 1px solid #ddd; | ||
239 | + font-size: 18px; | ||
240 | + font-weight: bold; | ||
241 | +} | ||
242 | +.infos .close { | ||
243 | + position: absolute; | ||
244 | + top: 10px; | ||
245 | + right: 10px; | ||
246 | + color: #888; | ||
247 | + width: 17px; | ||
248 | + height: 17px; | ||
249 | + background: url("http://t1.daumcdn.net/localimg/localimages/07/mapapidoc/overlay_close.png"); | ||
250 | +} | ||
251 | +.infos .close:hover { | ||
252 | + cursor: pointer; | ||
253 | +} | ||
254 | +.infos .body { | ||
255 | + position: relative; | ||
256 | + overflow: hidden; | ||
257 | +} | ||
258 | +.infos .desc { | ||
259 | + position: relative; | ||
260 | + margin: 13px 0 0 90px; | ||
261 | + height: 75px; | ||
262 | +} | ||
263 | +.desc .ellipsis { | ||
264 | + overflow: hidden; | ||
265 | + text-overflow: ellipsis; | ||
266 | + white-space: nowrap; | ||
267 | +} | ||
268 | +.desc .jibun { | ||
269 | + font-size: 11px; | ||
270 | + color: #888; | ||
271 | + margin-top: -2px; | ||
272 | +} | ||
273 | +.infos .img { | ||
274 | + position: absolute; | ||
275 | + top: 6px; | ||
276 | + left: 5px; | ||
277 | + width: 73px; | ||
278 | + height: 71px; | ||
279 | + border: 1px solid #ddd; | ||
280 | + color: #888; | ||
281 | + overflow: hidden; | ||
282 | +} | ||
283 | +.infos:after { | ||
284 | + content: ""; | ||
285 | + position: absolute; | ||
286 | + margin-left: -12px; | ||
287 | + left: 50%; | ||
288 | + bottom: 0; | ||
289 | + width: 22px; | ||
290 | + height: 12px; | ||
291 | + background: url("http://t1.daumcdn.net/localimg/localimages/07/mapapidoc/vertex_white.png"); | ||
292 | +} | ||
293 | +.infos .link { | ||
294 | + color: #5085bb; | ||
295 | +} | ||
296 | + | ||
297 | +#footer { | ||
298 | + position: absolute; | ||
299 | + bottom: 0; | ||
300 | + width: 100%; | ||
301 | + height: 100px; | ||
302 | + background: #ccc; | ||
303 | +} | ||
304 | + | ||
305 | +.left-box { | ||
306 | + float: left; | ||
307 | + width: 20%; | ||
308 | +} | ||
309 | +.left-box h5 { | ||
310 | + font-size: 1rem; | ||
311 | + font-style: italic; | ||
312 | + padding-left: 10px; | ||
313 | +} | ||
314 | +.right-box { | ||
315 | + float: right; | ||
316 | + width: 80%; | ||
317 | +} | ||
318 | +.right-box h5 { | ||
319 | + font-size: 1rem; | ||
320 | + font-style: italic; | ||
321 | + padding-left: 10px; | ||
322 | +} | ||
323 | +#middle { | ||
324 | + text-align: center; | ||
325 | +} | ||
326 | +.info-button { | ||
327 | + border-radius: 4px; | ||
328 | + background-color: #4641d9; | ||
329 | + width: 100px; | ||
330 | + color: white; | ||
331 | +} |
1 | import React, { Component } from "react"; | 1 | import React, { Component } from "react"; |
2 | import logo from "./logo.svg"; | 2 | import logo from "./logo.svg"; |
3 | import "./App.css"; | 3 | import "./App.css"; |
4 | +import Button from "react-bootstrap/Button"; | ||
5 | +import "./home.css"; | ||
6 | +import { Map, Marker, MarkerClusterer, Polyline } from "react-kakao-maps"; | ||
7 | +import "bootstrap/dist/css/bootstrap.min.css"; | ||
8 | + | ||
9 | +/* global kakao */ | ||
10 | + | ||
4 | export default class Home extends Component { | 11 | export default class Home extends Component { |
5 | constructor(props) { | 12 | constructor(props) { |
6 | super(props); | 13 | super(props); |
7 | - this.state = {}; | 14 | + this.state = { |
15 | + map: null, | ||
16 | + markers: [], | ||
17 | + markers: [], | ||
18 | + curMarker: new kakao.maps.Marker({ | ||
19 | + position: new kakao.maps.LatLng(37.503716, 127.044844), | ||
20 | + }), | ||
21 | + placeSearch: new kakao.maps.services.Places(), | ||
22 | + infoWindow: new kakao.maps.CustomOverlay({}), | ||
23 | + region: "은평구청", | ||
24 | + | ||
25 | + // curAirCondition: null, | ||
26 | + // routeInformation: null, | ||
27 | + }; | ||
28 | + this.removeAllChildNods = this.removeAllChildNods.bind(this); | ||
29 | + this.displayInfowindow = this.displayInfowindow.bind(this); | ||
30 | + } | ||
31 | + | ||
32 | + searchPlaces() { | ||
33 | + var keyword = document.getElementById("keyword").value; | ||
34 | + | ||
35 | + if (!keyword.replace(/^\s+|\s+$/g, "")) { | ||
36 | + alert("키워드를 입력해주세요!"); | ||
37 | + return false; | ||
38 | + } | ||
39 | + // 장소검색 객체를 통해 키워드로 장소검색을 요청합니다 | ||
40 | + this.state.placeSearch.keywordSearch( | ||
41 | + keyword, | ||
42 | + this.placesSearchCB.bind(this) | ||
43 | + ); | ||
44 | + } | ||
45 | + | ||
46 | + // 장소검색이 완료됐을 때 호출되는 콜백함수 입니다 | ||
47 | + placesSearchCB(data, status, pagination) { | ||
48 | + if (status === kakao.maps.services.Status.OK) { | ||
49 | + // 정상적으로 검색이 완료됐으면 | ||
50 | + // 검색 목록과 마커를 표출합니다 | ||
51 | + this.displayPlaces(data); | ||
52 | + | ||
53 | + // 페이지 번호를 표출합니다 | ||
54 | + this.displayPagination(pagination); | ||
55 | + } else if (status === kakao.maps.services.Status.ZERO_RESULT) { | ||
56 | + alert("검색 결과가 존재하지 않습니다."); | ||
57 | + return; | ||
58 | + } else if (status === kakao.maps.services.Status.ERROR) { | ||
59 | + alert("검색 결과 중 오류가 발생했습니다."); | ||
60 | + return; | ||
61 | + } | ||
62 | + } | ||
63 | + | ||
64 | + displayPlaces(places) { | ||
65 | + var listEl = document.getElementById("placesList"), | ||
66 | + menuEl = document.getElementById("menu_wrap"), | ||
67 | + fragment = document.createDocumentFragment(), | ||
68 | + bounds = new kakao.maps.LatLngBounds(), | ||
69 | + listStr = ""; | ||
70 | + | ||
71 | + // 검색 결과 목록에 추가된 항목들을 제거합니다 | ||
72 | + // 페이지별로 보여주기 때문에 추가한 것 같음. | ||
73 | + this.removeAllChildNods(listEl); | ||
74 | + | ||
75 | + // 지도에 표시되고 있는 마커를 제거합니다 | ||
76 | + this.removeMarker(); | ||
77 | + | ||
78 | + for (var i = 0; i < places.length; i++) { | ||
79 | + // 마커를 생성하고 지도에 표시합니다 | ||
80 | + var placePosition = new kakao.maps.LatLng(places[i].y, places[i].x), | ||
81 | + marker = this.addMarker(placePosition, i), | ||
82 | + itemEl = this.getListItem(i, places[i]); // 검색 결과 항목 Element를 생성합니다 | ||
83 | + | ||
84 | + // 검색된 장소 위치를 기준으로 지도 범위를 재설정하기위해 | ||
85 | + // LatLngBounds 객체에 좌표를 추가합니다 | ||
86 | + bounds.extend(placePosition); | ||
87 | + | ||
88 | + // 마커와 검색결과 항목에 mouseover 했을때 | ||
89 | + // 해당 장소에 인포윈도우에 장소명을 표시합니다 | ||
90 | + // mouseout 했을 때는 인포윈도우를 닫습니다 | ||
91 | + ((marker, title) => { | ||
92 | + kakao.maps.event.addListener(marker, "click", () => { | ||
93 | + this.displayInfowindow(marker, title); | ||
94 | + }); | ||
95 | + kakao.maps.event.addListener(marker, "mouseover", () => { | ||
96 | + this.displayInfowindow(marker, title); | ||
97 | + }); | ||
98 | + | ||
99 | + itemEl.onmouseover = () => { | ||
100 | + this.displayInfowindow(marker, title); | ||
101 | + }; | ||
102 | + })(marker, places[i].place_name); | ||
103 | + // 함수를 조건문처럼 사용하여 해당 함수가 true일때 marker,places[i].place_name함수가 불리워짐. | ||
104 | + | ||
105 | + fragment.appendChild(itemEl); | ||
106 | + } | ||
107 | + | ||
108 | + // 검색결과 항목들을 검색결과 목록 Elemnet에 추가합니다 | ||
109 | + listEl.appendChild(fragment); | ||
110 | + menuEl.scrollTop = 0; | ||
111 | + | ||
112 | + // 검색된 장소 위치를 기준으로 지도 범위를 재설정합니다 | ||
113 | + this.state.map.setBounds(bounds); | ||
114 | + } | ||
115 | + // 커스텀 오버레이를 닫기 위해 호출되는 함수입니다 | ||
116 | + closeOverlay() { | ||
117 | + this.state.infoWindow.setMap(null); | ||
118 | + } | ||
119 | + | ||
120 | + getListItem(index, places) { | ||
121 | + var el = document.createElement("li"), | ||
122 | + itemStr = | ||
123 | + '<span class="markerbg marker_' + | ||
124 | + (index + 1) + | ||
125 | + '"></span>' + | ||
126 | + '<div class="info">' + | ||
127 | + " <h5>" + | ||
128 | + places.place_name + | ||
129 | + "</h5>"; | ||
130 | + | ||
131 | + if (places.road_address_name) { | ||
132 | + itemStr += | ||
133 | + " <span>" + | ||
134 | + places.road_address_name + | ||
135 | + "</span>" + | ||
136 | + ' <span class="jibun gray">' + | ||
137 | + places.address_name + | ||
138 | + "</span>"; | ||
139 | + } else { | ||
140 | + itemStr += " <span>" + places.address_name + "</span>"; | ||
141 | + } | ||
142 | + | ||
143 | + itemStr += ' <span class="tel">' + places.phone + "</span>" + "</div>"; | ||
144 | + | ||
145 | + el.innerHTML = itemStr; | ||
146 | + el.className = "item"; | ||
147 | + | ||
148 | + return el; | ||
149 | + } | ||
150 | + | ||
151 | + addMarker(position, idx, title) { | ||
152 | + var imageSrc = | ||
153 | + "http://t1.daumcdn.net/localimg/localimages/07/mapapidoc/marker_number_blue.png", // 마커 이미지 url, 스프라이트 이미지를 씁니다 | ||
154 | + imageSize = new kakao.maps.Size(36, 37), // 마커 이미지의 크기 | ||
155 | + imgOptions = { | ||
156 | + spriteSize: new kakao.maps.Size(36, 691), // 스프라이트 이미지의 크기 | ||
157 | + spriteOrigin: new kakao.maps.Point(0, idx * 46 + 10), // 스프라이트 이미지 중 사용할 영역의 좌상단 좌표 | ||
158 | + offset: new kakao.maps.Point(13, 37), // 마커 좌표에 일치시킬 이미지 내에서의 좌표 | ||
159 | + }, | ||
160 | + markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize, imgOptions), | ||
161 | + marker = new kakao.maps.Marker({ | ||
162 | + position: position, // 마커의 위치 | ||
163 | + image: markerImage, | ||
164 | + }); | ||
165 | + | ||
166 | + marker.setMap(this.state.map); // 지도 위에 마커를 표출합니다 | ||
167 | + this.setState({ curMarker: marker }); | ||
168 | + this.state.markers.push(marker); // 배열에 생성된 마커를 추가합니다 | ||
169 | + | ||
170 | + return marker; | ||
171 | + } | ||
172 | + | ||
173 | + // 지도 위에 표시되고 있는 마커를 모두 제거합니다 | ||
174 | + removeMarker() { | ||
175 | + for (var i = 0; i < this.state.markers.length; i++) { | ||
176 | + this.state.markers[i].setMap(null); | ||
177 | + } | ||
178 | + this.setState({ | ||
179 | + markers: [], | ||
180 | + }); | ||
181 | + } | ||
182 | + | ||
183 | + // 검색결과 목록 하단에 페이지번호를 표시는 함수입니다 | ||
184 | + displayPagination(pagination) { | ||
185 | + var paginationEl = document.getElementById("pagination"), | ||
186 | + fragment = document.createDocumentFragment(), | ||
187 | + i; | ||
188 | + | ||
189 | + // 기존에 추가된 페이지번호를 삭제합니다 | ||
190 | + while (paginationEl.hasChildNodes()) { | ||
191 | + paginationEl.removeChild(paginationEl.lastChild); | ||
192 | + } | ||
193 | + | ||
194 | + for (i = 1; i <= pagination.last; i++) { | ||
195 | + var el = document.createElement("a"); | ||
196 | + el.href = "#"; | ||
197 | + el.innerHTML = i; | ||
198 | + | ||
199 | + if (i === pagination.current) { | ||
200 | + el.className = "on"; | ||
201 | + } else { | ||
202 | + el.onclick = (function (i) { | ||
203 | + return function () { | ||
204 | + pagination.gotoPage(i); | ||
205 | + }; | ||
206 | + })(i); | ||
207 | + } | ||
208 | + | ||
209 | + fragment.appendChild(el); | ||
210 | + } | ||
211 | + paginationEl.appendChild(fragment); | ||
212 | + } | ||
213 | + | ||
214 | + removeAllChildNods(el) { | ||
215 | + while (el.hasChildNodes()) { | ||
216 | + el.removeChild(el.lastChild); | ||
217 | + } | ||
218 | + } | ||
219 | + | ||
220 | + // 검색결과 목록 또는 마커를 클릭했을 때 호출되는 함수입니다 | ||
221 | + // 인포윈도우에 장소명을 표시합니다 | ||
222 | + displayInfowindow(marker, title) { | ||
223 | + console.log(marker); | ||
224 | + | ||
225 | + let content = document.createElement("div"); | ||
226 | + content.className = "wraps"; | ||
227 | + | ||
228 | + let info = document.createElement("div"); | ||
229 | + info.className = "infos"; | ||
230 | + | ||
231 | + let titles = document.createElement("div"); | ||
232 | + titles.className = "title"; | ||
233 | + titles.innerHTML = title; | ||
234 | + | ||
235 | + let close = document.createElement("div"); | ||
236 | + close.className = "close"; | ||
237 | + close.onclick = () => { | ||
238 | + this.state.infoWindow.setMap(null); | ||
239 | + }; | ||
240 | + | ||
241 | + let body = document.createElement("div"); | ||
242 | + body.className = "body"; | ||
243 | + let desc = document.createElement("div"); | ||
244 | + let list = document.createElement("list"); | ||
245 | + let second = document.createElement("LI"); | ||
246 | + let br = document.createElement("div"); | ||
247 | + br.innerHTML += "<br>"; | ||
248 | + let second_ = document.createElement("LI"); | ||
249 | + | ||
250 | + let getMise = document.createElement("Button"); | ||
251 | + getMise.innerHTML = "미세먼지 정보"; | ||
252 | + getMise.className = "info-button"; | ||
253 | + getMise.onclick = () => { | ||
254 | + let position = marker.getPosition(); | ||
255 | + console.log(marker.getPosition()); | ||
256 | + console.log(position["Ga"]); | ||
257 | + }; | ||
258 | + let setDepart = document.createElement("Button"); | ||
259 | + setDepart.innerHTML = "출발지로 설정하기"; | ||
260 | + setDepart.onclick = () => { | ||
261 | + this.setState({ | ||
262 | + departure: marker.getPosition(), | ||
263 | + departureTitle: title, | ||
264 | + }); | ||
265 | + }; | ||
266 | + setDepart.className = "info-button"; | ||
267 | + let setArrive = document.createElement("Button"); | ||
268 | + setArrive.innerHTML = "도착지로 설정하기"; | ||
269 | + setArrive.onclick = () => { | ||
270 | + this.setState({ | ||
271 | + arrival: marker.getPosition(), | ||
272 | + arrivalTitle: title, | ||
273 | + }); | ||
274 | + }; | ||
275 | + setArrive.className = "info-button"; | ||
276 | + second.appendChild(getMise); | ||
277 | + second.appendChild(br); | ||
278 | + second_.appendChild(setDepart); | ||
279 | + second_.appendChild(setArrive); | ||
280 | + | ||
281 | + list.appendChild(second); | ||
282 | + list.appendChild(second_); | ||
283 | + desc.appendChild(list); | ||
284 | + body.appendChild(desc); | ||
285 | + titles.appendChild(close); | ||
286 | + info.appendChild(titles); | ||
287 | + info.appendChild(body); | ||
288 | + content.appendChild(info); | ||
289 | + | ||
290 | + this.state.infoWindow.setContent(content); | ||
291 | + this.state.infoWindow.setPosition(marker.getPosition()); | ||
292 | + this.state.infoWindow.setMap(this.state.map); | ||
293 | + } | ||
294 | + | ||
295 | + componentDidMount() { | ||
296 | + // 컴포넌트가 만들어지고, render 함수가 호출된 이후에 호출되는 메소 | ||
297 | + // AJAX나 타이머를 생성하는 코드를 작성하는 파트이다. | ||
298 | + let el = document.getElementById("map"); | ||
299 | + this.setState({ | ||
300 | + map: new kakao.maps.Map(el, { | ||
301 | + //map option 설정 | ||
302 | + center: new kakao.maps.LatLng(37.503716, 127.044844), | ||
303 | + level: 3, | ||
304 | + }), | ||
305 | + }); | ||
306 | + this.searchPlaces(); | ||
307 | + // marker.setMap(map); | ||
8 | } | 308 | } |
9 | 309 | ||
10 | render() { | 310 | render() { |
311 | + let currentAirCondition = null; | ||
312 | + let routeAirCondition = null; | ||
313 | + | ||
11 | return ( | 314 | return ( |
12 | - <div className="App"> | 315 | + <section id="home"> |
13 | - <header className="App-header"> | 316 | + <div className="cover"> |
14 | - <img src={logo} className="App-logo" alt="logo" /> | 317 | + <div className="Home-header">How's the Weather?!</div> |
15 | - <p> | 318 | + </div> |
16 | - Edit <code>src/App.js</code> and save to reload. | 319 | + <div className="map_wrap"> |
17 | - </p> | 320 | + <div |
18 | - <a | 321 | + id="map" |
19 | - className="App-link" | 322 | + style={{ |
20 | - href="https://reactjs.org" | 323 | + width: "1000px", |
21 | - target="_blank" | 324 | + height: "600px", |
22 | - rel="noopener noreferrer" | 325 | + align: "middle", |
23 | - > | 326 | + }} |
24 | - Learn React | 327 | + ></div> |
25 | - </a> | 328 | + <div id="menu_wrap" className="bg_white"> |
26 | - </header> | 329 | + <div className="option"> |
27 | - </div> | 330 | + 지역 검색 :{" "} |
331 | + <input | ||
332 | + type="text" | ||
333 | + value={this.state.region} | ||
334 | + id="keyword" | ||
335 | + size="15" | ||
336 | + onChange={(e) => this.setState({ region: e.target.value })} | ||
337 | + /> | ||
338 | + <Button variant="light" type="submit" onClick={this.searchPlaces}> | ||
339 | + 검색하기 | ||
340 | + </Button> | ||
341 | + </div> | ||
342 | + <ul id="placesList"></ul> | ||
343 | + <div id="pagination"></div> | ||
344 | + </div> | ||
345 | + <ul id="placesList"></ul> | ||
346 | + <div id="pagination"></div> | ||
347 | + </div> | ||
348 | + <div id="footer"> | ||
349 | + <div className="left-box"> | ||
350 | + <h5> 현재위치 : {this.state.region} </h5> | ||
351 | + <br /> | ||
352 | + <div id="middle">{currentAirCondition}</div> | ||
353 | + </div> | ||
354 | + <div className="right-box"> | ||
355 | + <h5> | ||
356 | + 출발지 : {this.state.departureTitle} <br /> | ||
357 | + 도착지 : {this.state.arrivalTitle} <br /> | ||
358 | + <Button variant="secondary" onClick={this.getRouteAirCondition}> | ||
359 | + {" "} | ||
360 | + 경로별 미세먼지 정보 알아보기{" "} | ||
361 | + </Button>{" "} | ||
362 | + <br /> <br /> | ||
363 | + </h5> | ||
364 | + <div id="middle">{routeAirCondition}</div> | ||
365 | + </div> | ||
366 | + </div> | ||
367 | + </section> | ||
28 | ); | 368 | ); |
29 | } | 369 | } |
30 | } | 370 | } | ... | ... |
-
Please register or login to post a comment