From a1c28bae9e2032f20e5fd03032aed5c1af90da1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=ED=98=B8?= <67588757+choihooo@users.noreply.github.com> Date: Thu, 24 Oct 2024 16:39:51 +0900 Subject: [PATCH 1/2] Feature/22 map page (#23) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [feat] #22 맵 페이지 ui 틀 구현 * [feat] #22 맵 페이지 드로우 구현 & 파일 분리 * [feat] #22 네이버 로고 위쪽으로 변경 및 바텀 드로우 가로 스크롤 구현 * [feat] #22 선택하면 보더 생기는 이벤트 구현 * [feat] #22 공유 버튼 및 로케이션 버튼 기능 구현 * [feat] #22 eslint 해결 --- fe/package-lock.json | 137 +++++++++++++++++- fe/package.json | 6 +- fe/public/svg/Grabber.svg | 3 + fe/public/svg/add.svg | 5 + fe/public/svg/arrow-back.svg | 4 + fe/public/svg/edit.svg | 5 + fe/public/svg/my-location.svg | 9 ++ fe/public/svg/refresh.svg | 5 + fe/public/svg/share.svg | 4 + fe/src/app/layout.tsx | 13 +- .../app/map-page/components/BottomDrawer.tsx | 126 ++++++++++++++++ .../app/map-page/components/MapComponent.tsx | 45 ++++++ fe/src/app/map-page/components/User.tsx | 24 +++ fe/src/app/map-page/hooks/useDrawer.ts | 33 +++++ fe/src/app/map-page/page.tsx | 44 ++++++ .../app/map-page/stores/useLocationStore.ts | 14 ++ fe/src/app/map-page/types/types.ts | 26 ++++ .../naver-map-test/components/NaverMap.tsx | 135 ----------------- fe/src/app/naver-map-test/page.tsx | 9 -- fe/src/app/page.tsx | 5 - fe/src/styles/globals.css | 1 - fe/tailwind.config.ts | 64 ++++---- 22 files changed, 520 insertions(+), 197 deletions(-) create mode 100644 fe/public/svg/Grabber.svg create mode 100644 fe/public/svg/add.svg create mode 100644 fe/public/svg/arrow-back.svg create mode 100644 fe/public/svg/edit.svg create mode 100644 fe/public/svg/my-location.svg create mode 100644 fe/public/svg/refresh.svg create mode 100644 fe/public/svg/share.svg create mode 100644 fe/src/app/map-page/components/BottomDrawer.tsx create mode 100644 fe/src/app/map-page/components/MapComponent.tsx create mode 100644 fe/src/app/map-page/components/User.tsx create mode 100644 fe/src/app/map-page/hooks/useDrawer.ts create mode 100644 fe/src/app/map-page/page.tsx create mode 100644 fe/src/app/map-page/stores/useLocationStore.ts create mode 100644 fe/src/app/map-page/types/types.ts delete mode 100644 fe/src/app/naver-map-test/components/NaverMap.tsx delete mode 100644 fe/src/app/naver-map-test/page.tsx diff --git a/fe/package-lock.json b/fe/package-lock.json index f21d16e..e3354d3 100644 --- a/fe/package-lock.json +++ b/fe/package-lock.json @@ -8,6 +8,8 @@ "name": "my-next-app", "version": "0.1.0", "dependencies": { + "@react-spring/web": "^9.7.5", + "@use-gesture/react": "^10.3.1", "axios": "^1.7.7", "dotenv": "^16.4.5", "express": "^4.21.0", @@ -15,7 +17,9 @@ "next-auth": "^4.24.8", "react": "^18", "react-dom": "^18", - "winston": "^3.14.2" + "tailwind-scrollbar-hide": "^1.1.7", + "winston": "^3.14.2", + "zustand": "^5.0.0" }, "devDependencies": { "@types/navermaps": "^3.7.8", @@ -490,6 +494,78 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@react-spring/animated": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz", + "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==", + "license": "MIT", + "dependencies": { + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz", + "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz", + "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==", + "license": "MIT" + }, + "node_modules/@react-spring/shared": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz", + "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==", + "license": "MIT", + "dependencies": { + "@react-spring/rafz": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz", + "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==", + "license": "MIT" + }, + "node_modules/@react-spring/web": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz", + "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.7.5", + "@react-spring/core": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -550,13 +626,13 @@ "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "dev": true + "devOptional": true }, "node_modules/@types/react": { "version": "18.3.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz", "integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -791,6 +867,24 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@use-gesture/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", + "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", + "license": "MIT" + }, + "node_modules/@use-gesture/react": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", + "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", + "license": "MIT", + "dependencies": { + "@use-gesture/core": "10.3.1" + }, + "peerDependencies": { + "react": ">= 16.8.0" + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -1709,7 +1803,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "devOptional": true }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -6459,6 +6553,12 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tailwind-scrollbar-hide": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar-hide/-/tailwind-scrollbar-hide-1.1.7.tgz", + "integrity": "sha512-X324n9OtpTmOMqEgDUEA/RgLrNfBF/jwJdctaPZDzB3mppxJk7TLIDmOreEDm1Bq4R9LSPu4Epf8VSdovNU+iA==", + "license": "MIT" + }, "node_modules/tailwindcss": { "version": "3.4.13", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", @@ -7110,6 +7210,35 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz", + "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } } } } diff --git a/fe/package.json b/fe/package.json index 233b179..d153b37 100644 --- a/fe/package.json +++ b/fe/package.json @@ -11,6 +11,8 @@ "prepare": "husky install" }, "dependencies": { + "@react-spring/web": "^9.7.5", + "@use-gesture/react": "^10.3.1", "axios": "^1.7.7", "dotenv": "^16.4.5", "express": "^4.21.0", @@ -18,7 +20,9 @@ "next-auth": "^4.24.8", "react": "^18", "react-dom": "^18", - "winston": "^3.14.2" + "tailwind-scrollbar-hide": "^1.1.7", + "winston": "^3.14.2", + "zustand": "^5.0.0" }, "devDependencies": { "@types/navermaps": "^3.7.8", diff --git a/fe/public/svg/Grabber.svg b/fe/public/svg/Grabber.svg new file mode 100644 index 0000000..d2ba29b --- /dev/null +++ b/fe/public/svg/Grabber.svg @@ -0,0 +1,3 @@ + + + diff --git a/fe/public/svg/add.svg b/fe/public/svg/add.svg new file mode 100644 index 0000000..5ccc597 --- /dev/null +++ b/fe/public/svg/add.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/fe/public/svg/arrow-back.svg b/fe/public/svg/arrow-back.svg new file mode 100644 index 0000000..e3605e5 --- /dev/null +++ b/fe/public/svg/arrow-back.svg @@ -0,0 +1,4 @@ + + + + diff --git a/fe/public/svg/edit.svg b/fe/public/svg/edit.svg new file mode 100644 index 0000000..8e1f26b --- /dev/null +++ b/fe/public/svg/edit.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/fe/public/svg/my-location.svg b/fe/public/svg/my-location.svg new file mode 100644 index 0000000..acbbe81 --- /dev/null +++ b/fe/public/svg/my-location.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/fe/public/svg/refresh.svg b/fe/public/svg/refresh.svg new file mode 100644 index 0000000..30a2667 --- /dev/null +++ b/fe/public/svg/refresh.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/fe/public/svg/share.svg b/fe/public/svg/share.svg new file mode 100644 index 0000000..6e03fb7 --- /dev/null +++ b/fe/public/svg/share.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/fe/src/app/layout.tsx b/fe/src/app/layout.tsx index 6dea505..206b9b7 100644 --- a/fe/src/app/layout.tsx +++ b/fe/src/app/layout.tsx @@ -1,7 +1,6 @@ "use client"; import "../styles/globals.css"; -import Script from "next/script"; export default function RootLayout({ children, @@ -11,20 +10,14 @@ export default function RootLayout({ return ( -
+ {/*
-
+
*/}
{children}
- - - {/* 네이버 지도 API 스크립트 로드 */} -