Skip to content

Commit 9c044c7

Browse files
authored
merge: #154 from modorie/feat/kakaomap
[Feat] Map 컴포넌트 및 테스트 코드 구현
2 parents e04944d + 8b81ac5 commit 9c044c7

File tree

10 files changed

+114
-4
lines changed

10 files changed

+114
-4
lines changed

components/Map/Map.stories.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Meta, Story } from '@storybook/react'
2+
3+
import Map from './Map'
4+
import type { MapProps } from './Map.types'
5+
6+
export default {
7+
title: 'Components/Map',
8+
component: Map,
9+
parameters: {
10+
layout: 'fullscreen',
11+
},
12+
} as Meta
13+
14+
export const Default: Story<MapProps> = (args) => {
15+
return <Map {...args} />
16+
}
17+
18+
Default.args = {
19+
latitude: 33.450701,
20+
longitude: 126.570667,
21+
level: 3,
22+
}

components/Map/Map.styled.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import styled from 'styled-components'
2+
3+
export const MapContainer = styled.div`
4+
width: 100%;
5+
height: 100vh;
6+
`

components/Map/Map.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Map from './Map'
2+
3+
describe('Map', () => {
4+
it('should be defined', () => {
5+
expect(Map).toBeDefined()
6+
})
7+
})

components/Map/Map.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { useEffect } from 'react'
2+
3+
import { MapContainer } from './Map.styled'
4+
import { MapProps } from './Map.types'
5+
6+
declare global {
7+
interface Window {
8+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
9+
kakao: any
10+
}
11+
}
12+
13+
const Map = ({ latitude, longitude, level }: MapProps) => {
14+
useEffect(() => {
15+
const mapScript = document.createElement('script')
16+
mapScript.async = true
17+
mapScript.src = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${process.env.NEXT_PUBLIC_KAKAO_MAP_KEY}&autoload=false`
18+
document.head.appendChild(mapScript)
19+
20+
mapScript.onload = () => {
21+
window.kakao.maps.load(() => {
22+
const container = document.getElementById('map')
23+
const options = {
24+
center: new window.kakao.maps.LatLng(latitude, longitude),
25+
level,
26+
}
27+
28+
const map = new window.kakao.maps.Map(container, options)
29+
const marker = new window.kakao.maps.Marker({
30+
position: new window.kakao.maps.LatLng(latitude, longitude),
31+
})
32+
marker.setMap(map)
33+
})
34+
}
35+
}, [latitude, longitude, level])
36+
37+
return <MapContainer id="map" />
38+
}
39+
40+
export default Map

components/Map/Map.types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { StandardAttrProps } from '@/types/ComponentProps'
2+
3+
export interface MapProps extends StandardAttrProps {
4+
latitude: number
5+
longitude: number
6+
level: number
7+
}

components/Map/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from './Map'

next.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { NextConfig } from 'next'
22

3-
const nextConfig = {
4-
webpack: (config: NextConfig) => {
3+
const nextConfig: NextConfig = {
4+
webpack: (config) => {
55
config.module.rules.push({
66
test: /\.(jpe?g|png|svg|gif|ico|eot|ttf|woff|woff2|mp4|pdf|webm|txt)$/,
77
loader: 'file-loader',

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
"prepare": "husky install"
1818
},
1919
"dependencies": {
20+
"@tanstack/react-query": "^4.7.1",
2021
"file-loader": "^6.2.0",
2122
"next": "12.2.5",
2223
"react": "18.2.0",
2324
"react-dom": "18.2.0",
25+
"recoil": "^0.7.5",
2426
"styled-components": "^5.3.5",
2527
"ts-node": "^10.9.1"
2628
},

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"moduleResolution": "node",
1313
"resolveJsonModule": true,
1414
"isolatedModules": true,
15-
"jsx": "react-jsx",
15+
"jsx": "preserve",
1616
"incremental": true,
1717
"baseUrl": ".",
1818
"paths": {

yarn.lock

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2788,6 +2788,19 @@
27882788
dependencies:
27892789
tslib "^2.4.0"
27902790

2791+
"@tanstack/[email protected]":
2792+
version "4.7.1"
2793+
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.7.1.tgz#e732da7d0a4f31b4caa806099fc599617753d451"
2794+
integrity sha512-BzFI4KdiklxfUUgNiO6E4XsSwaX5NscuIhP7aqWbS8Hqik1KohfvO+SXpftSZHOyzm0+XpycRsip/QEs3Hx3AA==
2795+
2796+
"@tanstack/react-query@^4.7.1":
2797+
version "4.7.1"
2798+
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.7.1.tgz#ff7d58e113b735c231138f9b9be828e1730923c4"
2799+
integrity sha512-/3PBXuvdlvUbSv5eqgkda4VAN14t+rpDop9LnZmEmIMW8ARrbW7Rt6PYTya33JGaeo6XoztRzEH8TaY5S+neNQ==
2800+
dependencies:
2801+
"@tanstack/query-core" "4.7.1"
2802+
use-sync-external-store "^1.2.0"
2803+
27912804
"@testing-library/dom@^8.3.0", "@testing-library/dom@^8.5.0":
27922805
version "8.18.1"
27932806
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.18.1.tgz#80f91be02bc171fe5a3a7003f88207be31ac2cf3"
@@ -6972,6 +6985,11 @@ grapheme-splitter@^1.0.4:
69726985
resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
69736986
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
69746987

6988+
6989+
version "1.0.2"
6990+
resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601"
6991+
integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==
6992+
69756993
handlebars@^4.7.7:
69766994
version "4.7.7"
69776995
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
@@ -10602,6 +10620,13 @@ readdirp@~3.6.0:
1060210620
dependencies:
1060310621
picomatch "^2.2.1"
1060410622

10623+
recoil@^0.7.5:
10624+
version "0.7.5"
10625+
resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.5.tgz#9a33a03350cfd99e08bdd5b73bfc8b8b9ee751b9"
10626+
integrity sha512-GVShsj5+M/2GULWBs5WBJGcsNis/d3YvDiaKjYh3mLKXftjtmk9kfaQ8jwjoIXySCwn8/RhgJ4Sshwgzj2UpFA==
10627+
dependencies:
10628+
hamt_plus "1.0.2"
10629+
1060510630
redent@^1.0.0:
1060610631
version "1.0.0"
1060710632
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
@@ -12403,7 +12428,7 @@ url@^0.11.0:
1240312428
punycode "1.3.2"
1240412429
querystring "0.2.0"
1240512430

12406-
12431+
[email protected], use-sync-external-store@^1.2.0:
1240712432
version "1.2.0"
1240812433
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
1240912434
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==

0 commit comments

Comments
 (0)