From d039b5c988cef32ce4c26e3b48f9066d4fc84e84 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Sun, 6 Apr 2025 20:13:58 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=EB=AF=B8=EB=A6=AC=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=EC=83=81=EC=84=B8=EC=97=90=20=EC=A7=80=EB=8F=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 423 ++++++++++++++++++ .../preview/src/components/NotFound/index.tsx | 2 +- .../src/pages/ShowPreviewPage/index.tsx | 7 +- packages/ui/package.json | 1 + .../ui/src/components/PreviewMap/index.tsx | 43 ++ .../components/ShowPreview/ShowInfoDetail.tsx | 47 +- .../ShowPreview/ShowPreview.styles.ts | 18 +- .../ui/src/components/ShowPreview/index.tsx | 2 + packages/ui/src/systems/palette.ts | 1 + yarn.lock | 314 ++++++++++++- 10 files changed, 807 insertions(+), 51 deletions(-) create mode 100644 packages/ui/src/components/PreviewMap/index.tsx diff --git a/.pnp.cjs b/.pnp.cjs index cebb054a..bd412971 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -2865,6 +2865,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:7.26.10", {\ + "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.26.10-d01a90d446-6dc6d88c79.zip/node_modules/@babel/runtime/",\ + "packageDependencies": [\ + ["@babel/runtime", "npm:7.26.10"],\ + ["regenerator-runtime", "npm:0.14.1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:7.26.9", {\ "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.26.9-8369ff039f-e851713111.zip/node_modules/@babel/runtime/",\ "packageDependencies": [\ @@ -3068,6 +3076,7 @@ const RAW_RUNTIME_STATE = ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ ["react-hot-toast", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:2.4.1"],\ ["react-markdown", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:10.0.1"],\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ ["rehype-raw", "npm:7.0.0"],\ ["remark-directive", "npm:4.0.0"],\ ["swiper", "npm:11.0.7"],\ @@ -9969,6 +9978,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@types/js-cookie", [\ + ["npm:2.2.7", {\ + "packageLocation": "./.yarn/cache/@types-js-cookie-npm-2.2.7-025262d629-29196c6829.zip/node_modules/@types/js-cookie/",\ + "packageDependencies": [\ + ["@types/js-cookie", "npm:2.2.7"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:3.0.6", {\ "packageLocation": "./.yarn/cache/@types-js-cookie-npm-3.0.6-c9126e5b48-173afaf5ea.zip/node_modules/@types/js-cookie/",\ "packageDependencies": [\ @@ -10702,6 +10718,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@xobotyi/scrollbar-width", [\ + ["npm:1.9.5", {\ + "packageLocation": "./.yarn/cache/@xobotyi-scrollbar-width-npm-1.9.5-00ae5c32d1-4ebc79e4f7.zip/node_modules/@xobotyi/scrollbar-width/",\ + "packageDependencies": [\ + ["@xobotyi/scrollbar-width", "npm:1.9.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@yarnpkg/esbuild-plugin-pnp", [\ ["npm:3.0.0-rc.15", {\ "packageLocation": "./.yarn/cache/@yarnpkg-esbuild-plugin-pnp-npm-3.0.0-rc.15-b916c218b3-5095bc3168.zip/node_modules/@yarnpkg/esbuild-plugin-pnp/",\ @@ -12522,6 +12547,27 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["css-in-js-utils", [\ + ["npm:3.1.0", {\ + "packageLocation": "./.yarn/cache/css-in-js-utils-npm-3.1.0-a94a5fc05c-8bb042e8f7.zip/node_modules/css-in-js-utils/",\ + "packageDependencies": [\ + ["css-in-js-utils", "npm:3.1.0"],\ + ["hyphenate-style-name", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["css-tree", [\ + ["npm:1.1.3", {\ + "packageLocation": "./.yarn/cache/css-tree-npm-1.1.3-9c46f35513-499a507bfa.zip/node_modules/css-tree/",\ + "packageDependencies": [\ + ["css-tree", "npm:1.1.3"],\ + ["mdn-data", "npm:2.0.14"],\ + ["source-map", "npm:0.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["css.escape", [\ ["npm:1.5.1", {\ "packageLocation": "./.yarn/cache/css.escape-npm-1.5.1-b24d2ba77a-5e09035e5b.zip/node_modules/css.escape/",\ @@ -13227,6 +13273,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["error-stack-parser", [\ + ["npm:2.1.4", {\ + "packageLocation": "./.yarn/cache/error-stack-parser-npm-2.1.4-5b9f7fc0c2-7679b78004.zip/node_modules/error-stack-parser/",\ + "packageDependencies": [\ + ["error-stack-parser", "npm:2.1.4"],\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["es-abstract", [\ ["npm:1.22.3", {\ "packageLocation": "./.yarn/cache/es-abstract-npm-1.22.3-15a58832e5-da31ec43b1.zip/node_modules/es-abstract/",\ @@ -14140,6 +14196,24 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["fast-shallow-equal", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/fast-shallow-equal-npm-1.0.0-b14ca484b4-526c393c01.zip/node_modules/fast-shallow-equal/",\ + "packageDependencies": [\ + ["fast-shallow-equal", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fastest-stable-stringify", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/fastest-stable-stringify-npm-2.0.2-f2a059d214-abbe5ff48f.zip/node_modules/fastest-stable-stringify/",\ + "packageDependencies": [\ + ["fastest-stable-stringify", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["fastq", [\ ["npm:1.16.0", {\ "packageLocation": "./.yarn/cache/fastq-npm-1.16.0-88070bb399-38c1b49adb.zip/node_modules/fastq/",\ @@ -15245,6 +15319,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["hyphenate-style-name", [\ + ["npm:1.1.0", {\ + "packageLocation": "./.yarn/cache/hyphenate-style-name-npm-1.1.0-9ef705067a-bfe88deac2.zip/node_modules/hyphenate-style-name/",\ + "packageDependencies": [\ + ["hyphenate-style-name", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["i18next", [\ ["npm:24.2.2", {\ "packageLocation": "./.yarn/cache/i18next-npm-24.2.2-77e939b2d8-df2f08f7e7.zip/node_modules/i18next/",\ @@ -15371,6 +15454,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["inline-style-prefixer", [\ + ["npm:7.0.1", {\ + "packageLocation": "./.yarn/cache/inline-style-prefixer-npm-7.0.1-8ec6009c17-15da5a396b.zip/node_modules/inline-style-prefixer/",\ + "packageDependencies": [\ + ["inline-style-prefixer", "npm:7.0.1"],\ + ["css-in-js-utils", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["internal-slot", [\ ["npm:1.0.6", {\ "packageLocation": "./.yarn/cache/internal-slot-npm-1.0.6-1ed833e09a-aa37cafc8f.zip/node_modules/internal-slot/",\ @@ -16064,6 +16157,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["js-cookie", [\ + ["npm:2.2.1", {\ + "packageLocation": "./.yarn/cache/js-cookie-npm-2.2.1-e879cd2148-ee67fc0f84.zip/node_modules/js-cookie/",\ + "packageDependencies": [\ + ["js-cookie", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["js-tokens", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-e248708d37.zip/node_modules/js-tokens/",\ @@ -16355,6 +16457,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["load-script", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/load-script-npm-2.0.0-005874056f-118bd891f0.zip/node_modules/load-script/",\ + "packageDependencies": [\ + ["load-script", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["locate-path", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/locate-path-npm-3.0.0-991671ae9f-3db394b782.zip/node_modules/locate-path/",\ @@ -16400,6 +16511,24 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["lodash.isempty", [\ + ["npm:4.4.0", {\ + "packageLocation": "./.yarn/cache/lodash.isempty-npm-4.4.0-9997a8300c-6c7eaa0802.zip/node_modules/lodash.isempty/",\ + "packageDependencies": [\ + ["lodash.isempty", "npm:4.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.mapkeys", [\ + ["npm:4.6.0", {\ + "packageLocation": "./.yarn/cache/lodash.mapkeys-npm-4.6.0-ddec96aa53-5e7028eb54.zip/node_modules/lodash.mapkeys/",\ + "packageDependencies": [\ + ["lodash.mapkeys", "npm:4.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["lodash.merge", [\ ["npm:4.6.2", {\ "packageLocation": "./.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-402fa16a1e.zip/node_modules/lodash.merge/",\ @@ -16409,6 +16538,33 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["lodash.omit", [\ + ["npm:4.5.0", {\ + "packageLocation": "./.yarn/cache/lodash.omit-npm-4.5.0-786639f9a0-3808b9b6fa.zip/node_modules/lodash.omit/",\ + "packageDependencies": [\ + ["lodash.omit", "npm:4.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.pick", [\ + ["npm:4.4.0", {\ + "packageLocation": "./.yarn/cache/lodash.pick-npm-4.4.0-126deebf95-a04c460b95.zip/node_modules/lodash.pick/",\ + "packageDependencies": [\ + ["lodash.pick", "npm:4.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.upperfirst", [\ + ["npm:4.3.1", {\ + "packageLocation": "./.yarn/cache/lodash.upperfirst-npm-4.3.1-e3b7c364ba-435625da4b.zip/node_modules/lodash.upperfirst/",\ + "packageDependencies": [\ + ["lodash.upperfirst", "npm:4.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["log-symbols", [\ ["npm:4.1.0", {\ "packageLocation": "./.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-67f445a9ff.zip/node_modules/log-symbols/",\ @@ -16870,6 +17026,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["mdn-data", [\ + ["npm:2.0.14", {\ + "packageLocation": "./.yarn/cache/mdn-data-npm-2.0.14-0acd669f0d-67241f8708.zip/node_modules/mdn-data/",\ + "packageDependencies": [\ + ["mdn-data", "npm:2.0.14"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["media-engine", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/media-engine-npm-1.0.3-95c823ed38-60e602ec36.zip/node_modules/media-engine/",\ @@ -17705,6 +17870,40 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["nano-css", [\ + ["npm:5.6.2", {\ + "packageLocation": "./.yarn/cache/nano-css-npm-5.6.2-e9f1e2f295-566fb94038.zip/node_modules/nano-css/",\ + "packageDependencies": [\ + ["nano-css", "npm:5.6.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:5.6.2", {\ + "packageLocation": "./.yarn/__virtual__/nano-css-virtual-439796e3bd/0/cache/nano-css-npm-5.6.2-e9f1e2f295-566fb94038.zip/node_modules/nano-css/",\ + "packageDependencies": [\ + ["nano-css", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:5.6.2"],\ + ["@jridgewell/sourcemap-codec", "npm:1.4.15"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["css-tree", "npm:1.1.3"],\ + ["csstype", "npm:3.1.3"],\ + ["fastest-stable-stringify", "npm:2.0.2"],\ + ["inline-style-prefixer", "npm:7.0.1"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ + ["rtl-css-js", "npm:1.16.1"],\ + ["stacktrace-js", "npm:2.0.2"],\ + ["stylis", "npm:4.3.6"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["nanoid", [\ ["npm:3.3.7", {\ "packageLocation": "./.yarn/cache/nanoid-npm-3.3.7-98824ba130-e3fb661aa0.zip/node_modules/nanoid/",\ @@ -20552,6 +20751,42 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["react-naver-maps", [\ + ["npm:0.1.3", {\ + "packageLocation": "./.yarn/cache/react-naver-maps-npm-0.1.3-835b7ca050-3d04952fea.zip/node_modules/react-naver-maps/",\ + "packageDependencies": [\ + ["react-naver-maps", "npm:0.1.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3", {\ + "packageLocation": "./.yarn/__virtual__/react-naver-maps-virtual-48c781c81c/0/cache/react-naver-maps-npm-0.1.3-835b7ca050-3d04952fea.zip/node_modules/react-naver-maps/",\ + "packageDependencies": [\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["camelcase", "npm:5.3.1"],\ + ["load-script", "npm:2.0.0"],\ + ["lodash.isempty", "npm:4.4.0"],\ + ["lodash.mapkeys", "npm:4.6.0"],\ + ["lodash.omit", "npm:4.5.0"],\ + ["lodash.pick", "npm:4.4.0"],\ + ["lodash.upperfirst", "npm:4.3.1"],\ + ["prop-types", "npm:15.8.1"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ + ["react-use", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:17.6.0"],\ + ["suspend-react", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:0.0.8"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["react-pdf", [\ ["npm:9.0.0", {\ "packageLocation": "./.yarn/cache/react-pdf-npm-9.0.0-63b907a3eb-c9e5606ee5.zip/node_modules/react-pdf/",\ @@ -20980,6 +21215,72 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["react-universal-interface", [\ + ["npm:0.6.2", {\ + "packageLocation": "./.yarn/cache/react-universal-interface-npm-0.6.2-795659cd0e-97c32ecb7a.zip/node_modules/react-universal-interface/",\ + "packageDependencies": [\ + ["react-universal-interface", "npm:0.6.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:0.6.2", {\ + "packageLocation": "./.yarn/__virtual__/react-universal-interface-virtual-35035b7e35/0/cache/react-universal-interface-npm-0.6.2-795659cd0e-97c32ecb7a.zip/node_modules/react-universal-interface/",\ + "packageDependencies": [\ + ["react-universal-interface", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:0.6.2"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/tslib", null],\ + ["react", "npm:18.2.0"],\ + ["tslib", "npm:2.6.2"]\ + ],\ + "packagePeers": [\ + "@types/react",\ + "@types/tslib",\ + "react",\ + "tslib"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["react-use", [\ + ["npm:17.6.0", {\ + "packageLocation": "./.yarn/cache/react-use-npm-17.6.0-327459097c-d122199f3e.zip/node_modules/react-use/",\ + "packageDependencies": [\ + ["react-use", "npm:17.6.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:17.6.0", {\ + "packageLocation": "./.yarn/__virtual__/react-use-virtual-d305f667f6/0/cache/react-use-npm-17.6.0-327459097c-d122199f3e.zip/node_modules/react-use/",\ + "packageDependencies": [\ + ["react-use", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:17.6.0"],\ + ["@types/js-cookie", "npm:2.2.7"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["@xobotyi/scrollbar-width", "npm:1.9.5"],\ + ["copy-to-clipboard", "npm:3.3.3"],\ + ["fast-deep-equal", "npm:3.1.3"],\ + ["fast-shallow-equal", "npm:1.0.0"],\ + ["js-cookie", "npm:2.2.1"],\ + ["nano-css", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:5.6.2"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ + ["react-universal-interface", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:0.6.2"],\ + ["resize-observer-polyfill", "npm:1.5.1"],\ + ["screenfull", "npm:5.2.0"],\ + ["set-harmonic-interval", "npm:1.0.1"],\ + ["throttle-debounce", "npm:3.0.1"],\ + ["ts-easing", "npm:0.2.0"],\ + ["tslib", "npm:2.6.2"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["read-pkg", [\ ["npm:5.2.0", {\ "packageLocation": "./.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-b51a17d4b5.zip/node_modules/read-pkg/",\ @@ -21407,6 +21708,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["rtl-css-js", [\ + ["npm:1.16.1", {\ + "packageLocation": "./.yarn/cache/rtl-css-js-npm-1.16.1-b3547849c7-4b81ef50e5.zip/node_modules/rtl-css-js/",\ + "packageDependencies": [\ + ["rtl-css-js", "npm:1.16.1"],\ + ["@babel/runtime", "npm:7.26.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["run-parallel", [\ ["npm:1.2.0", {\ "packageLocation": "./.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-200b5ab25b.zip/node_modules/run-parallel/",\ @@ -21486,6 +21797,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["screenfull", [\ + ["npm:5.2.0", {\ + "packageLocation": "./.yarn/cache/screenfull-npm-5.2.0-d920287dd9-86fd49983e.zip/node_modules/screenfull/",\ + "packageDependencies": [\ + ["screenfull", "npm:5.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["scroll-into-view-if-needed", [\ ["npm:3.1.0", {\ "packageLocation": "./.yarn/cache/scroll-into-view-if-needed-npm-3.1.0-2dc60135f0-1f46b090e1.zip/node_modules/scroll-into-view-if-needed/",\ @@ -21590,6 +21910,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["set-harmonic-interval", [\ + ["npm:1.0.1", {\ + "packageLocation": "./.yarn/cache/set-harmonic-interval-npm-1.0.1-2f840592b2-49014d928a.zip/node_modules/set-harmonic-interval/",\ + "packageDependencies": [\ + ["set-harmonic-interval", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["setprototypeof", [\ ["npm:1.2.0", {\ "packageLocation": "./.yarn/cache/setprototypeof-npm-1.2.0-0fedbdcd3a-6873317302.zip/node_modules/setprototypeof/",\ @@ -21747,6 +22076,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["source-map", [\ + ["npm:0.5.6", {\ + "packageLocation": "./.yarn/cache/source-map-npm-0.5.6-ac261b6171-beb2c5974b.zip/node_modules/source-map/",\ + "packageDependencies": [\ + ["source-map", "npm:0.5.6"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:0.5.7", {\ "packageLocation": "./.yarn/cache/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip/node_modules/source-map/",\ "packageDependencies": [\ @@ -21857,6 +22193,48 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["stack-generator", [\ + ["npm:2.0.10", {\ + "packageLocation": "./.yarn/cache/stack-generator-npm-2.0.10-e7aec8545f-c3f6f6c580.zip/node_modules/stack-generator/",\ + "packageDependencies": [\ + ["stack-generator", "npm:2.0.10"],\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stackframe", [\ + ["npm:1.3.4", {\ + "packageLocation": "./.yarn/cache/stackframe-npm-1.3.4-bf4b7cc8fd-18410f7a1e.zip/node_modules/stackframe/",\ + "packageDependencies": [\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stacktrace-gps", [\ + ["npm:3.1.2", {\ + "packageLocation": "./.yarn/cache/stacktrace-gps-npm-3.1.2-8c7130b84d-0dcc1aa46e.zip/node_modules/stacktrace-gps/",\ + "packageDependencies": [\ + ["stacktrace-gps", "npm:3.1.2"],\ + ["source-map", "npm:0.5.6"],\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stacktrace-js", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/stacktrace-js-npm-2.0.2-f022fac9f9-9a10c22252.zip/node_modules/stacktrace-js/",\ + "packageDependencies": [\ + ["stacktrace-js", "npm:2.0.2"],\ + ["error-stack-parser", "npm:2.1.4"],\ + ["stack-generator", "npm:2.0.10"],\ + ["stacktrace-gps", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["static-browser-server", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/static-browser-server-npm-1.0.3-4e0f6e3459-fc82cecdc3.zip/node_modules/static-browser-server/",\ @@ -22204,6 +22582,13 @@ const RAW_RUNTIME_STATE = ["stylis", "npm:4.3.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:4.3.6", {\ + "packageLocation": "./.yarn/cache/stylis-npm-4.3.6-e4f9cb4f94-e736d48498.zip/node_modules/stylis/",\ + "packageDependencies": [\ + ["stylis", "npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["super-admin", [\ @@ -22272,6 +22657,28 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["suspend-react", [\ + ["npm:0.0.8", {\ + "packageLocation": "./.yarn/cache/suspend-react-npm-0.0.8-1962c8b944-a81221eea8.zip/node_modules/suspend-react/",\ + "packageDependencies": [\ + ["suspend-react", "npm:0.0.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:0.0.8", {\ + "packageLocation": "./.yarn/__virtual__/suspend-react-virtual-005ddc49fc/0/cache/suspend-react-npm-0.0.8-1962c8b944-a81221eea8.zip/node_modules/suspend-react/",\ + "packageDependencies": [\ + ["suspend-react", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:0.0.8"],\ + ["@types/react", "npm:18.2.48"],\ + ["react", "npm:18.2.0"]\ + ],\ + "packagePeers": [\ + "@types/react",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["svg-arc-to-cubic-bezier", [\ ["npm:3.2.0", {\ "packageLocation": "./.yarn/cache/svg-arc-to-cubic-bezier-npm-3.2.0-06dd5e62ac-6dddbaff9d.zip/node_modules/svg-arc-to-cubic-bezier/",\ @@ -22433,6 +22840,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["throttle-debounce", [\ + ["npm:3.0.1", {\ + "packageLocation": "./.yarn/cache/throttle-debounce-npm-3.0.1-1785e6b767-c8e5584794.zip/node_modules/throttle-debounce/",\ + "packageDependencies": [\ + ["throttle-debounce", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/throttle-debounce-npm-5.0.0-f5662f7aca-666d5b73bf.zip/node_modules/throttle-debounce/",\ "packageDependencies": [\ @@ -22612,6 +23026,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["ts-easing", [\ + ["npm:0.2.0", {\ + "packageLocation": "./.yarn/cache/ts-easing-npm-0.2.0-988adf6a8d-84ec201923.zip/node_modules/ts-easing/",\ + "packageDependencies": [\ + ["ts-easing", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["tsconfig-paths", [\ ["npm:3.15.0", {\ "packageLocation": "./.yarn/cache/tsconfig-paths-npm-3.15.0-ff68930e0e-5b4f301a2b.zip/node_modules/tsconfig-paths/",\ diff --git a/apps/preview/src/components/NotFound/index.tsx b/apps/preview/src/components/NotFound/index.tsx index f726e191..33b5bf57 100644 --- a/apps/preview/src/components/NotFound/index.tsx +++ b/apps/preview/src/components/NotFound/index.tsx @@ -2,7 +2,7 @@ import { useEffect } from 'react'; export default () => { useEffect(() => { - window.location.href = 'https://boolti.in'; + // window.location.href = 'https://boolti.in'; }, []); return null; }; diff --git a/apps/preview/src/pages/ShowPreviewPage/index.tsx b/apps/preview/src/pages/ShowPreviewPage/index.tsx index 869bdc1f..01debd7d 100644 --- a/apps/preview/src/pages/ShowPreviewPage/index.tsx +++ b/apps/preview/src/pages/ShowPreviewPage/index.tsx @@ -8,6 +8,7 @@ import { useLoaderData } from 'react-router-dom'; import Styled from './ShowPreviewPage.styles'; import { Meta } from '../../components/Meta'; import BooltiGrayLogo from '../../components/BooltiGrayLogo'; +import { NavermapsProvider } from 'react-naver-maps'; setDefaultOptions({ locale: ko }); @@ -39,6 +40,8 @@ const getShareText = (show: { ); }; +const X_NCP_APIGW_API_KEY_ID = import.meta.env.VITE_X_NCP_APIGW_API_KEY_ID; + const ShowPreviewPage = () => { const loaderData = useLoaderData() as | [ShowPreviewResponse, ShowCastTeamReadResponse[]] @@ -116,7 +119,7 @@ const ShowPreviewPage = () => { }; return ( - <> + @@ -165,7 +168,7 @@ const ShowPreviewPage = () => { - + ); }; diff --git a/packages/ui/package.json b/packages/ui/package.json index ea9a5ec3..a97682dc 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -24,6 +24,7 @@ "react-dom": "^18.2.0", "react-hot-toast": "^2.4.1", "react-markdown": "^10.0.1", + "react-naver-maps": "^0.1.3", "rehype-raw": "^7.0.0", "remark-directive": "^4.0.0", "swiper": "^11.0.7", diff --git a/packages/ui/src/components/PreviewMap/index.tsx b/packages/ui/src/components/PreviewMap/index.tsx new file mode 100644 index 00000000..52d12997 --- /dev/null +++ b/packages/ui/src/components/PreviewMap/index.tsx @@ -0,0 +1,43 @@ +import { Container, NaverMap, useNavermaps } from 'react-naver-maps'; + +interface Props { + latitude: number; + longitude: number; +} + +const PreviewMap = ({ latitude, longitude }: Props) => { + const navermaps = useNavermaps(); + return ( + + + + ); +}; + +export default PreviewMap; diff --git a/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx b/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx index 82934acf..72f54332 100644 --- a/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx +++ b/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx @@ -2,6 +2,7 @@ import Styled from './ShowPreview.styles'; import { CallIcon, MessageIcon } from '@boolti/icon'; import ShowInfoDescription from '../ShowContentMarkdown'; +import PreviewMap from '../PreviewMap'; interface Props { show: { @@ -18,6 +19,8 @@ interface Props { notice: string; hostName: string; hostPhoneNumber: string; + latitude?: number; + longitude?: number; }; hasNoticePage?: boolean; onClickLink?: () => void; @@ -37,6 +40,8 @@ const ShowInfoDetail = ({ placeDetailAddress, notice, hostName, + latitude, + longitude, }, hasNoticePage, onClickLink, @@ -66,7 +71,11 @@ const ShowInfoDetail = ({ - 장소 + 위치 + + {placeName} + + {`${placeStreetAddress} / ${placeDetailAddress} ・ `} { @@ -74,42 +83,10 @@ const ShowInfoDetail = ({ alert('공연장 주소가 복사되었어요'); }} > - - - - - - - - - - - - 주소복사 + 복사 - - {placeName} - - {placeStreetAddress} / {placeDetailAddress} + {latitude && longitude && } diff --git a/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts b/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts index cb3e0469..73e89da6 100644 --- a/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts +++ b/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts @@ -181,16 +181,8 @@ const ShowInfoTitle = styled.h3` `; const ShowInfoTitleButton = styled.button` - padding: 0 12px; - height: 30px; - border-radius: 4px; - ${({ theme }) => theme.typo.c1}; - color: ${({ theme }) => theme.palette.mobile.grey.g05}; - display: inline-flex; - justify-content: center; - align-items: center; - gap: 6px; - background-color: ${({ theme }) => theme.palette.mobile.grey.g85}; + ${({ theme }) => theme.typo.b3}; + color: ${({ theme }) => theme.palette.mobile.status.link}; cursor: pointer; `; @@ -204,7 +196,7 @@ const ShowInfoTitleTextButton = styled.button` const ShowInfoSubtitle = styled.h4` ${({ theme }) => theme.typo.b3}; color: ${({ theme }) => theme.palette.mobile.grey.g10}; - margin-bottom: 8px; + margin-bottom: 4px; `; const ShowInfoDescription = styled.div` @@ -213,6 +205,10 @@ const ShowInfoDescription = styled.div` overflow-wrap: break-word; word-break: break-word; + &:not(:last-child) { + margin-bottom: 12px; + } + ${({ isFullContent }) => isFullContent && ` diff --git a/packages/ui/src/components/ShowPreview/index.tsx b/packages/ui/src/components/ShowPreview/index.tsx index 56effee7..ef347065 100644 --- a/packages/ui/src/components/ShowPreview/index.tsx +++ b/packages/ui/src/components/ShowPreview/index.tsx @@ -27,6 +27,8 @@ interface ShowPreviewProps { notice: string; hostName: string; hostPhoneNumber: string; + latitude?: number; + longitude?: number; }; showCastTeams: Array<{ name: string; diff --git a/packages/ui/src/systems/palette.ts b/packages/ui/src/systems/palette.ts index cbd9392d..864cb1c1 100644 --- a/packages/ui/src/systems/palette.ts +++ b/packages/ui/src/systems/palette.ts @@ -61,6 +61,7 @@ const palette = { status: { error: '#FF4D4F', success: '#52C41A', + link: '#46A6FF', }, grey: { w: '#FFFFFF', diff --git a/yarn.lock b/yarn.lock index 36bcbc6b..f4faebe6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1545,6 +1545,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.1.2": + version: 7.26.10 + resolution: "@babel/runtime@npm:7.26.10" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/6dc6d88c7908f505c4f7770fb4677dfa61f68f659b943c2be1f2a99cb6680343462867abf2d49822adc435932919b36c77ac60125793e719ea8745f2073d3745 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4": version: 7.24.4 resolution: "@babel/runtime@npm:7.24.4" @@ -1788,6 +1797,7 @@ __metadata: react-dom: "npm:^18.2.0" react-hot-toast: "npm:^2.4.1" react-markdown: "npm:^10.0.1" + react-naver-maps: "npm:^0.1.3" rehype-raw: "npm:^7.0.0" remark-directive: "npm:^4.0.0" swiper: "npm:^11.0.7" @@ -6595,6 +6605,13 @@ __metadata: languageName: node linkType: hard +"@types/js-cookie@npm:^2.2.6": + version: 2.2.7 + resolution: "@types/js-cookie@npm:2.2.7" + checksum: 10c0/29196c6829982b5efa79117122a7d62cf4bc2f6397ce8eac1539319ff5dce3b44b2d86f2ac064f2ed3488fb24439358f24af6914fde5c5c4bab9a85728a13a6f + languageName: node + linkType: hard + "@types/js-cookie@npm:^3.0.6": version: 3.0.6 resolution: "@types/js-cookie@npm:3.0.6" @@ -7095,6 +7112,13 @@ __metadata: languageName: node linkType: hard +"@xobotyi/scrollbar-width@npm:^1.9.5": + version: 1.9.5 + resolution: "@xobotyi/scrollbar-width@npm:1.9.5" + checksum: 10c0/4ebc79e4f798e2a5e89a5122f8fc4a086f08a92a44ac020599c4fe20d105b7d76ba06c094260b5f386a75e7ce6f6c518d9fc295228b651296b99c4477f986ac4 + languageName: node + linkType: hard + "@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": version: 3.0.0-rc.15 resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" @@ -8532,7 +8556,7 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.3.3": +"copy-to-clipboard@npm:^3.3.1, copy-to-clipboard@npm:^3.3.3": version: 3.3.3 resolution: "copy-to-clipboard@npm:3.3.3" dependencies: @@ -8618,6 +8642,25 @@ __metadata: languageName: node linkType: hard +"css-in-js-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "css-in-js-utils@npm:3.1.0" + dependencies: + hyphenate-style-name: "npm:^1.0.3" + checksum: 10c0/8bb042e8f7701a7edadc3cce5ce2d5cf41189631d7e2aed194d5a7059b25776dded2a0466cb9da1d1f3fc6c99dcecb51e45671148d073b8a2a71e34755152e52 + languageName: node + linkType: hard + +"css-tree@npm:^1.1.2": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: "npm:2.0.14" + source-map: "npm:^0.6.1" + checksum: 10c0/499a507bfa39b8b2128f49736882c0dd636b0cd3370f2c69f4558ec86d269113286b7df469afc955de6a68b0dba00bc533e40022a73698081d600072d5d83c1c + languageName: node + linkType: hard + "css.escape@npm:^1.5.1": version: 1.5.1 resolution: "css.escape@npm:1.5.1" @@ -8625,7 +8668,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.1.3": +"csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 @@ -9180,6 +9223,15 @@ __metadata: languageName: node linkType: hard +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 + languageName: node + linkType: hard + "es-abstract@npm:^1.22.1": version: 1.22.3 resolution: "es-abstract@npm:1.22.3" @@ -10009,6 +10061,20 @@ __metadata: languageName: node linkType: hard +"fast-shallow-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-shallow-equal@npm:1.0.0" + checksum: 10c0/526c393c011ab5a0ca5a36c5ea25c9730acd027503ccbec6c7825397ab9375f51f67f14c8829b4c4b1ccccede695391dd14863a15e40a37fc4af08c1440a1b66 + languageName: node + linkType: hard + +"fastest-stable-stringify@npm:^2.0.2": + version: 2.0.2 + resolution: "fastest-stable-stringify@npm:2.0.2" + checksum: 10c0/abbe5ff48f13f5819e7312dbb38bae5d9960694cffd315b464df9adcd02a8fa7e9eec32c314655674c7134905c544b7a0c14b05bfbe30b3f678609bebc9fecb9 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.16.0 resolution: "fastq@npm:1.16.0" @@ -10991,6 +11057,13 @@ __metadata: languageName: node linkType: hard +"hyphenate-style-name@npm:^1.0.3": + version: 1.1.0 + resolution: "hyphenate-style-name@npm:1.1.0" + checksum: 10c0/bfe88deac2414a41a0d08811e277c8c098f23993d6a1eb17f14a0f11b54c4d42865a63d3cfe1914668eefb9a188e2de58f38b55a179a238fd1fef606893e194f + languageName: node + linkType: hard + "i18next@npm:^24.2.2": version: 24.2.2 resolution: "i18next@npm:24.2.2" @@ -11092,6 +11165,15 @@ __metadata: languageName: node linkType: hard +"inline-style-prefixer@npm:^7.0.1": + version: 7.0.1 + resolution: "inline-style-prefixer@npm:7.0.1" + dependencies: + css-in-js-utils: "npm:^3.1.0" + checksum: 10c0/15da5a396b7f286b5b6742efe315218cd577bc96b43de08aeb76af7697d9f1ab3bfc66cf19fad2173957dd5d617a790240b9d51898bdcf4c2efb40d3f8bcb370 + languageName: node + linkType: hard + "internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": version: 1.0.6 resolution: "internal-slot@npm:1.0.6" @@ -11693,6 +11775,13 @@ __metadata: languageName: node linkType: hard +"js-cookie@npm:^2.2.1": + version: 2.2.1 + resolution: "js-cookie@npm:2.2.1" + checksum: 10c0/ee67fc0f8495d0800b851910b5eb5bf49d3033adff6493d55b5c097ca6da46f7fe666b10e2ecb13cfcaf5b88d71c205ce00a7e646de791689bfd053bbb36a376 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -11951,6 +12040,13 @@ __metadata: languageName: node linkType: hard +"load-script@npm:^2.0.0": + version: 2.0.0 + resolution: "load-script@npm:2.0.0" + checksum: 10c0/118bd891f0b3a463e87c774603c32773f56e1ce260245858dd3e7d03ff5fce83acaa5d6c32c66944ed9e91da945ee0150d25730f0346b5768118a76fcf1ef3e9 + languageName: node + linkType: hard + "locate-path@npm:^3.0.0": version: 3.0.0 resolution: "locate-path@npm:3.0.0" @@ -11986,6 +12082,20 @@ __metadata: languageName: node linkType: hard +"lodash.isempty@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.isempty@npm:4.4.0" + checksum: 10c0/6c7eaa0802398736809b9e8aed8b8ac1abca9be71788fd719ba9d7f5b4c23e8dc63b7f049df4131713dda30a2fdedc2f655268e9deb8cd5a985dfc934afca194 + languageName: node + linkType: hard + +"lodash.mapkeys@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.mapkeys@npm:4.6.0" + checksum: 10c0/5e7028eb5400a34007932cf224b2de1b1e8030e6ce79fe2d43b1e4a7362315270c914d741b13d81eef51529fcb02b6c51bb39fa6fe78a659e138e54e16252883 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -11993,6 +12103,27 @@ __metadata: languageName: node linkType: hard +"lodash.omit@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.omit@npm:4.5.0" + checksum: 10c0/3808b9b6faae35177174b6ab327f1177e29c91f1e98dcbccf13a72a6767bba337306449d537a4e0d8a33d2673f10d39bc732e30c4b803274ea0c1168ea60e549 + languageName: node + linkType: hard + +"lodash.pick@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.pick@npm:4.4.0" + checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 + languageName: node + linkType: hard + +"lodash.upperfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: 10c0/435625da4b3ee74e7a1367a780d9107ab0b13ef4359fc074b2a1a40458eb8d91b655af62f6795b7138d493303a98c0285340160341561d6896e4947e077fa975 + languageName: node + linkType: hard + "lodash@npm:^4.17.15, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -12406,6 +12537,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 10c0/67241f8708c1e665a061d2b042d2d243366e93e5bf1f917693007f6d55111588b952dcbfd3ea9c2d0969fb754aad81b30fdcfdcc24546495fc3b24336b28d4bd + languageName: node + linkType: hard + "media-engine@npm:^1.0.3": version: 1.0.3 resolution: "media-engine@npm:1.0.3" @@ -13165,6 +13303,25 @@ __metadata: languageName: node linkType: hard +"nano-css@npm:^5.6.2": + version: 5.6.2 + resolution: "nano-css@npm:5.6.2" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + css-tree: "npm:^1.1.2" + csstype: "npm:^3.1.2" + fastest-stable-stringify: "npm:^2.0.2" + inline-style-prefixer: "npm:^7.0.1" + rtl-css-js: "npm:^1.16.1" + stacktrace-js: "npm:^2.0.2" + stylis: "npm:^4.3.0" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 10c0/566fb9403815d78a110d68f011e1125cbeeb7299e2e6c60700f316ba0c48dc702c039163eae7a8f213a1390e45cedfdeccc203794d61a61116598adbb83029ec + languageName: node + linkType: hard + "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -15083,6 +15240,27 @@ __metadata: languageName: node linkType: hard +"react-naver-maps@npm:^0.1.3": + version: 0.1.3 + resolution: "react-naver-maps@npm:0.1.3" + dependencies: + camelcase: "npm:^5.3.1" + load-script: "npm:^2.0.0" + lodash.isempty: "npm:^4.4.0" + lodash.mapkeys: "npm:^4.6.0" + lodash.omit: "npm:^4.5.0" + lodash.pick: "npm:^4.4.0" + lodash.upperfirst: "npm:^4.3.1" + prop-types: "npm:^15.7.2" + react-use: "npm:^17.3.1" + suspend-react: "npm:^0.0.8" + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: 10c0/3d04952fea01b4bd248320ecbe63fe0235ce911789a714ccc8e1409a288de98a7bc5f832e26659124b3d716133d4db90bc5387491d9a7d5438b3c6ae2cdf7b0c + languageName: node + linkType: hard + "react-pdf@npm:^9.0.0": version: 9.0.0 resolution: "react-pdf@npm:9.0.0" @@ -15312,6 +15490,41 @@ __metadata: languageName: node linkType: hard +"react-universal-interface@npm:^0.6.2": + version: 0.6.2 + resolution: "react-universal-interface@npm:0.6.2" + peerDependencies: + react: "*" + tslib: "*" + checksum: 10c0/97c32ecb7a425c3bcaa92dcf84c46146b49610d928efde9e9ee5518c475a0db942f01634dd490e4f42fcd95cc2f49657c1b96dcef96423c06f077147fe1968ab + languageName: node + linkType: hard + +"react-use@npm:^17.3.1": + version: 17.6.0 + resolution: "react-use@npm:17.6.0" + dependencies: + "@types/js-cookie": "npm:^2.2.6" + "@xobotyi/scrollbar-width": "npm:^1.9.5" + copy-to-clipboard: "npm:^3.3.1" + fast-deep-equal: "npm:^3.1.3" + fast-shallow-equal: "npm:^1.0.0" + js-cookie: "npm:^2.2.1" + nano-css: "npm:^5.6.2" + react-universal-interface: "npm:^0.6.2" + resize-observer-polyfill: "npm:^1.5.1" + screenfull: "npm:^5.1.0" + set-harmonic-interval: "npm:^1.0.1" + throttle-debounce: "npm:^3.0.1" + ts-easing: "npm:^0.2.0" + tslib: "npm:^2.1.0" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 10c0/d122199f3edd056bfd866837b0f19a44366e77c7535c6c2c5eb5f400409eae4c9b1fe73c9d35073c8434080eee388ca8fe49a68d09d6f794ccaa35a4ae2112a9 + languageName: node + linkType: hard + "react@npm:^18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -15767,6 +15980,15 @@ __metadata: languageName: node linkType: hard +"rtl-css-js@npm:^1.16.1": + version: 1.16.1 + resolution: "rtl-css-js@npm:1.16.1" + dependencies: + "@babel/runtime": "npm:^7.1.2" + checksum: 10c0/4b81ef50e50c97455d61c9bb576e2892651c79bac5d0c52b4123ebb9d6a2c5144590a79c9db0a3212a81b4eb83bf317e03637220f20b387a37b96cbac324d3d2 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -15839,6 +16061,13 @@ __metadata: languageName: node linkType: hard +"screenfull@npm:^5.1.0": + version: 5.2.0 + resolution: "screenfull@npm:5.2.0" + checksum: 10c0/86fd49983e2edc153ee2e674a570c711cb0961a9cacca659309f79636ccc8ca8a0b830ea4dacdae7403a8bb7ba6affd5bcdce053aa97782961247a49bfd2ba68 + languageName: node + linkType: hard + "scroll-into-view-if-needed@npm:^3.1.0": version: 3.1.0 resolution: "scroll-into-view-if-needed@npm:3.1.0" @@ -15941,6 +16170,13 @@ __metadata: languageName: node linkType: hard +"set-harmonic-interval@npm:^1.0.1": + version: 1.0.1 + resolution: "set-harmonic-interval@npm:1.0.1" + checksum: 10c0/49014d928a62c8418507bf66ffef7066783e8fb19f76e955318bbae5a8c4b56e1a7176b370f9040ef9de51531aa522a3f96fa5c47b1534635aa577ff7c12f9c6 + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -16091,6 +16327,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.5.6": + version: 0.5.6 + resolution: "source-map@npm:0.5.6" + checksum: 10c0/beb2c5974bb58954d75e86249953d47ae16f7df1a8531abb9fcae0cd262d9fa09c2db3a134e20e99358b1adba42b6b054a32c8e16b571b3efcf6af644c329f0d + languageName: node + linkType: hard + "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -16169,6 +16412,43 @@ __metadata: languageName: node linkType: hard +"stack-generator@npm:^2.0.5": + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/c3f6f6c580488e65c0fee806a57f6ae4b79e6435f144be471c1f20328a8d9d8492d4f3beed31840f6dae03e2633325e2764fd3aca5c3126a0639e7c9ddfa45ce + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 10c0/18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 + languageName: node + linkType: hard + +"stacktrace-gps@npm:^3.0.4": + version: 3.1.2 + resolution: "stacktrace-gps@npm:3.1.2" + dependencies: + source-map: "npm:0.5.6" + stackframe: "npm:^1.3.4" + checksum: 10c0/0dcc1aa46e364a2b4d1eabce4777fecf337576a11ee3cfc92f07b9ec79ccb76810752431eeb9771289d250d0bb58dbe19a178b96bf7b2e9f773334d03aa96bb9 + languageName: node + linkType: hard + +"stacktrace-js@npm:^2.0.2": + version: 2.0.2 + resolution: "stacktrace-js@npm:2.0.2" + dependencies: + error-stack-parser: "npm:^2.0.6" + stack-generator: "npm:^2.0.5" + stacktrace-gps: "npm:^3.0.4" + checksum: 10c0/9a10c222524ca03690bcb27437b39039885223e39320367f2be36e6f750c2d198ae99189869a22c255bf60072631eb609d47e8e33661e95133686904e01121ec + languageName: node + linkType: hard + "static-browser-server@npm:1.0.3": version: 1.0.3 resolution: "static-browser-server@npm:1.0.3" @@ -16480,6 +16760,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:^4.3.0": + version: 4.3.6 + resolution: "stylis@npm:4.3.6" + checksum: 10c0/e736d484983a34f7c65d362c67dc79b7bce388054b261c2b7b23d02eaaf280617033f65d44b1ea341854f4331a5074b885668ac8741f98c13a6cfd6443ae85d0 + languageName: node + linkType: hard + "super-admin@workspace:apps/super-admin": version: 0.0.0-use.local resolution: "super-admin@workspace:apps/super-admin" @@ -16543,6 +16830,15 @@ __metadata: languageName: node linkType: hard +"suspend-react@npm:^0.0.8": + version: 0.0.8 + resolution: "suspend-react@npm:0.0.8" + peerDependencies: + react: ">=17.0" + checksum: 10c0/a81221eea83a19c2ed2e89ac1f944601b52d116a243a585a6e5cf78e53e133acd764697462028fb574f75f74f53a8a52d4c369747db558e089e4f5d907297642 + languageName: node + linkType: hard + "svg-arc-to-cubic-bezier@npm:^3.0.0, svg-arc-to-cubic-bezier@npm:^3.2.0": version: 3.2.0 resolution: "svg-arc-to-cubic-bezier@npm:3.2.0" @@ -16683,6 +16979,13 @@ __metadata: languageName: node linkType: hard +"throttle-debounce@npm:^3.0.1": + version: 3.0.1 + resolution: "throttle-debounce@npm:3.0.1" + checksum: 10c0/c8e558479463b7ed8bac30d6b10cc87abd1c9fc64edfce2db4109be1a04acaef5d2d0557f49c1a3845ea07d9f79e6e0389b1b60db0a77c44e5b7a1216596f285 + languageName: node + linkType: hard + "throttle-debounce@npm:^5.0.0": version: 5.0.0 resolution: "throttle-debounce@npm:5.0.0" @@ -16809,6 +17112,13 @@ __metadata: languageName: node linkType: hard +"ts-easing@npm:^0.2.0": + version: 0.2.0 + resolution: "ts-easing@npm:0.2.0" + checksum: 10c0/84ec20192310c697ff890ca2e0625e131a32596a7c5956326c9632faca9037abf2dd3de4d81ac358ae9f26a6a2cfe2300f13756b26995f753d882e3d0463e327 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" From 46067c8a9602ed26f101b7ec5903136a0b1044ef Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Mon, 7 Apr 2025 22:02:24 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20=EC=A7=80=EB=8F=84=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 22 +++++++++++++++++++ apps/admin/package.json | 2 ++ apps/admin/src/App.tsx | 14 +++++++++--- .../ShowBasicInfoFormContent.tsx | 10 +++++++-- .../components/ShowInfoFormContent/types.ts | 2 ++ packages/api/src/index.ts | 1 + packages/api/src/types/show.ts | 4 ++++ packages/ui/package.json | 1 + yarn.lock | 19 ++++++++++++++++ 9 files changed, 70 insertions(+), 5 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index bd412971..edce98d8 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -3065,6 +3065,7 @@ const RAW_RUNTIME_STATE = ["@emotion/styled", "virtual:85869d3eba7afdb6f94c001c9503942ddc4354e881daf63c24e9d58366ea9f25c6bac2df65ae0f5266c54cd36fe68f0d9568da3a1ab62446405c98ac852f4431#npm:11.11.0"],\ ["@react-spring/web", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:9.7.3"],\ ["@types/mdast", "npm:4.0.4"],\ + ["@types/navermaps", "npm:3.7.9"],\ ["@types/react", "npm:18.2.48"],\ ["@types/react-dom", "npm:18.2.18"],\ ["linkify-react", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:4.1.3"],\ @@ -9908,6 +9909,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@types/geojson", [\ + ["npm:7946.0.16", {\ + "packageLocation": "./.yarn/cache/@types-geojson-npm-7946.0.16-7a73d95991-1ff24a288b.zip/node_modules/@types/geojson/",\ + "packageDependencies": [\ + ["@types/geojson", "npm:7946.0.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/glob", [\ ["npm:7.2.0", {\ "packageLocation": "./.yarn/cache/@types-glob-npm-7.2.0-772334bf9a-a8eb5d5cb5.zip/node_modules/@types/glob/",\ @@ -10101,6 +10111,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@types/navermaps", [\ + ["npm:3.7.9", {\ + "packageLocation": "./.yarn/cache/@types-navermaps-npm-3.7.9-451740b1b0-f97549153f.zip/node_modules/@types/navermaps/",\ + "packageDependencies": [\ + ["@types/navermaps", "npm:3.7.9"],\ + ["@types/geojson", "npm:7946.0.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/node", [\ ["npm:18.19.14", {\ "packageLocation": "./.yarn/cache/@types-node-npm-18.19.14-831fffe812-a614e85d3d.zip/node_modules/@types/node/",\ @@ -10937,6 +10957,7 @@ const RAW_RUNTIME_STATE = ["@tanstack/react-table", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:8.12.0"],\ ["@types/js-cookie", "npm:3.0.6"],\ ["@types/lodash.debounce", "npm:4.0.9"],\ + ["@types/navermaps", "npm:3.7.9"],\ ["@types/react", "npm:18.2.48"],\ ["@types/react-dom", "npm:18.2.18"],\ ["@vitejs/plugin-react", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:4.2.1"],\ @@ -10955,6 +10976,7 @@ const RAW_RUNTIME_STATE = ["react-hook-form", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:7.50.0"],\ ["react-i18next", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:15.4.1"],\ ["react-intersection-observer", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:9.8.0"],\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ ["react-pdf", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:9.0.0"],\ ["react-router-dom", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:6.21.3"],\ ["react-select", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:5.8.0"],\ diff --git a/apps/admin/package.json b/apps/admin/package.json index 4a7d6fbd..2f82f06f 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -43,6 +43,7 @@ "react-hook-form": "^7.50.0", "react-i18next": "^15.4.1", "react-intersection-observer": "^9.8.0", + "react-naver-maps": "^0.1.3", "react-pdf": "^9.0.0", "react-router-dom": "^6.21.3", "react-select": "^5.8.0", @@ -55,6 +56,7 @@ "@boolti/typescript-config": "*", "@emotion/babel-plugin": "^11.11.0", "@types/js-cookie": "^3.0.6", + "@types/navermaps": "^3.7.9", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@vitejs/plugin-react": "^4.2.1", diff --git a/apps/admin/src/App.tsx b/apps/admin/src/App.tsx index b54d135b..a704edb6 100644 --- a/apps/admin/src/App.tsx +++ b/apps/admin/src/App.tsx @@ -2,7 +2,7 @@ import 'the-new-css-reset/css/reset.css'; import '@mdxeditor/editor/style.css'; import './index.css'; import './i18n'; - +import { NavermapsProvider } from 'react-naver-maps'; import { QueryClientProvider } from '@boolti/api'; import { BooltiUIProvider } from '@boolti/ui'; import { setDefaultOptions } from 'date-fns'; @@ -48,6 +48,8 @@ setDefaultOptions({ locale: ko }); initVConsole(); +const X_NCP_APIGW_API_KEY_ID = import.meta.env.VITE_X_NCP_APIGW_API_KEY_ID; + const publicRoutes = [ { element: ( @@ -157,7 +159,9 @@ const routes: RouteObject[] = [ - + + + @@ -170,7 +174,11 @@ const routes: RouteObject[] = [ const router = createBrowserRouter(routes); const App = () => { - return ; + return ( + + + + ); }; export default App; diff --git a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx index 2b2e8825..3948052a 100644 --- a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx +++ b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx @@ -1,4 +1,4 @@ -import { ImageFile } from '@boolti/api'; +import { ImageFile, fetcher } from '@boolti/api'; import { CloseIcon, FileUpIcon } from '@boolti/icon'; import { Button, TextField, TimePicker, useDialog } from '@boolti/ui'; import { add, format } from 'date-fns'; @@ -56,8 +56,14 @@ const ShowBasicInfoFormContent = ({ content: ( { + onComplete={async (address) => { + const response = await fetcher.get( + `web/v1/naver-maps/geocoding?query=${address.query}&filter=BCODE@${address.bcode};`, + ); + + console.log(response); setValue('placeStreetAddress', address.roadAddress); + detailAddressInputRef.current?.focus(); }} onClose={() => { diff --git a/apps/admin/src/components/ShowInfoFormContent/types.ts b/apps/admin/src/components/ShowInfoFormContent/types.ts index 3fc42b05..6df32dba 100644 --- a/apps/admin/src/components/ShowInfoFormContent/types.ts +++ b/apps/admin/src/components/ShowInfoFormContent/types.ts @@ -6,6 +6,8 @@ export interface ShowBasicInfoFormInputs { placeName: string; placeStreetAddress: string; placeDetailAddress: string; + latitude: number; + longitude: number; } export interface ShowDetailInfoFormInputs { diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 0d61d32d..3150d462 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -5,6 +5,7 @@ export { QueryClientProvider } from './QueryClientProvider'; export * from './constants'; export * from './mutations'; export * from './queries'; +export { fetcher } from './fetcher'; export * from './utils'; export type * from './types'; export { queryKeys } from './queryKey'; diff --git a/packages/api/src/types/show.ts b/packages/api/src/types/show.ts index 85b11174..666c6806 100644 --- a/packages/api/src/types/show.ts +++ b/packages/api/src/types/show.ts @@ -348,6 +348,10 @@ export interface ShowCreateRequest { }[]; /** 출연진 팀 */ castTeams?: Array; + /** 위도 */ + latitude?: number; + /** 경도 */ + longitude?: number; } export interface SummaryItem { diff --git a/packages/ui/package.json b/packages/ui/package.json index a97682dc..62b4abcf 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -34,6 +34,7 @@ "@boolti/eslint-config": "*", "@boolti/typescript-config": "*", "@types/mdast": "^4.0.4", + "@types/navermaps": "^3.7.9", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "typescript": "^5.2.2" diff --git a/yarn.lock b/yarn.lock index f4faebe6..d97c7bb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1786,6 +1786,7 @@ __metadata: "@emotion/styled": "npm:^11.11.0" "@react-spring/web": "npm:^9.7.3" "@types/mdast": "npm:^4.0.4" + "@types/navermaps": "npm:^3.7.9" "@types/react": "npm:^18.2.43" "@types/react-dom": "npm:^18.2.17" linkify-react: "npm:^4.1.3" @@ -6545,6 +6546,13 @@ __metadata: languageName: node linkType: hard +"@types/geojson@npm:*": + version: 7946.0.16 + resolution: "@types/geojson@npm:7946.0.16" + checksum: 10c0/1ff24a288bd5860b766b073ead337d31d73bdc715e5b50a2cee5cb0af57a1ed02cc04ef295f5fa68dc40fe3e4f104dd31282b2b818a5ba3231bc1001ba084e3c + languageName: node + linkType: hard + "@types/glob@npm:^7.1.3": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -6707,6 +6715,15 @@ __metadata: languageName: node linkType: hard +"@types/navermaps@npm:^3.7.9": + version: 3.7.9 + resolution: "@types/navermaps@npm:3.7.9" + dependencies: + "@types/geojson": "npm:*" + checksum: 10c0/f97549153f8d66d707a242eff198458d6c92813070d44a418d293b401cb3d61a68a8bcf3aee96964ed273b7f88675f6805d65239b9f4ff802bf24c45b26750e0 + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.4": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" @@ -7273,6 +7290,7 @@ __metadata: "@tanstack/react-table": "npm:^8.12.0" "@types/js-cookie": "npm:^3.0.6" "@types/lodash.debounce": "npm:^4.0.9" + "@types/navermaps": "npm:^3.7.9" "@types/react": "npm:^18.2.43" "@types/react-dom": "npm:^18.2.17" "@vitejs/plugin-react": "npm:^4.2.1" @@ -7291,6 +7309,7 @@ __metadata: react-hook-form: "npm:^7.50.0" react-i18next: "npm:^15.4.1" react-intersection-observer: "npm:^9.8.0" + react-naver-maps: "npm:^0.1.3" react-pdf: "npm:^9.0.0" react-router-dom: "npm:^6.21.3" react-select: "npm:^5.8.0" From f7eb9f20d0feb52f45d9cb79aa5c2e895cd6e450 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Mon, 7 Apr 2025 22:11:51 +0900 Subject: [PATCH 3/8] =?UTF-8?q?chore:=20ncp=20=ED=82=A4=20=EC=83=81?= =?UTF-8?q?=EC=88=98=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin/src/App.tsx | 3 +-- apps/admin/src/constants/ncp.ts | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 apps/admin/src/constants/ncp.ts diff --git a/apps/admin/src/App.tsx b/apps/admin/src/App.tsx index a704edb6..6744d3fc 100644 --- a/apps/admin/src/App.tsx +++ b/apps/admin/src/App.tsx @@ -43,13 +43,12 @@ import ShowSettlementPage from './pages/ShowSettlementPage'; import ShowEnterancePage from './pages/ShowEnterancePage'; import { initVConsole } from './utils/vConsole'; import { checkIsWebView } from '@boolti/bridge'; +import { X_NCP_APIGW_API_KEY_ID } from './constants/ncp'; setDefaultOptions({ locale: ko }); initVConsole(); -const X_NCP_APIGW_API_KEY_ID = import.meta.env.VITE_X_NCP_APIGW_API_KEY_ID; - const publicRoutes = [ { element: ( diff --git a/apps/admin/src/constants/ncp.ts b/apps/admin/src/constants/ncp.ts new file mode 100644 index 00000000..062ebf64 --- /dev/null +++ b/apps/admin/src/constants/ncp.ts @@ -0,0 +1 @@ +export const X_NCP_APIGW_API_KEY_ID = import.meta.env.VITE_X_NCP_APIGW_API_KEY_ID; From 474e835b2e315abc6a020829c82695d9efe28f93 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Tue, 8 Apr 2025 23:43:49 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=EC=A7=80=EB=8F=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C=20=EC=A2=8C=ED=91=9C=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EC=9E=85=EB=A0=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin/src/App.tsx | 2 +- .../ShowBasicInfoFormContent.tsx | 25 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/apps/admin/src/App.tsx b/apps/admin/src/App.tsx index 6744d3fc..c1ca685c 100644 --- a/apps/admin/src/App.tsx +++ b/apps/admin/src/App.tsx @@ -158,7 +158,7 @@ const routes: RouteObject[] = [ - + diff --git a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx index 3948052a..bd73bb90 100644 --- a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx +++ b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx @@ -5,6 +5,7 @@ import { add, format } from 'date-fns'; import { useRef } from 'react'; import { useDropzone } from 'react-dropzone'; import { Controller, UseFormReturn } from 'react-hook-form'; +import { useNavermaps } from 'react-naver-maps'; import DaumPostcode from 'react-daum-postcode'; import Styled from './ShowInfoFormContent.styles'; @@ -30,6 +31,7 @@ const ShowBasicInfoFormContent = ({ onDeleteImage, }: ShowBasicInfoFormContentProps) => { const { open, close, isOpen } = useDialog(); + const naverMaps = useNavermaps(); const detailAddressInputRef = useRef(null); const { @@ -57,11 +59,28 @@ const ShowBasicInfoFormContent = ({ { - const response = await fetcher.get( - `web/v1/naver-maps/geocoding?query=${address.query}&filter=BCODE@${address.bcode};`, + const response = await fetcher.get( + 'web/v1/naver-maps/geocoding', + { + searchParams: { + query: address.query, + filter: `BCODE@${address.bcode};`, + }, + }, ); - console.log(response); + if ( + response.status === naverMaps.Service.GeocodeStatus.OK && + response.meta.totalCount > 0 + ) { + const foundAddress = response.addresses.find(Boolean); + + if (foundAddress) { + setValue('latitude', Number(foundAddress.y)); + setValue('longitude', Number(foundAddress.x)); + } + } + setValue('placeStreetAddress', address.roadAddress); detailAddressInputRef.current?.focus(); From 1802825bbb5f3603259cde9a65f155412d937601 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Wed, 16 Apr 2025 23:03:02 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20query=EB=A5=BC=20address=20?= =?UTF-8?q?=EA=B8=B0=EB=B0=98=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx index bd73bb90..44c3fef4 100644 --- a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx +++ b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx @@ -63,7 +63,7 @@ const ShowBasicInfoFormContent = ({ 'web/v1/naver-maps/geocoding', { searchParams: { - query: address.query, + query: address.address, filter: `BCODE@${address.bcode};`, }, }, From 9f568740af8c2079e03bcd33686fdfe0e2de62c0 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Wed, 16 Apr 2025 23:24:48 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=EC=83=9D=EC=84=B1,=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=8B=9C=20=EC=A2=8C=ED=91=9C=20=EC=A0=84=EB=8B=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShowInfoFormContent/ShowDetailInfoFormContent.tsx | 4 +--- apps/admin/src/pages/ShowAddPage/index.tsx | 2 ++ apps/admin/src/pages/ShowInfoPage/index.tsx | 2 ++ apps/preview/src/pages/ShowPreviewPage/index.tsx | 4 ++++ packages/api/src/mutations/useEditShowInfo.ts | 2 ++ 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx b/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx index 17be06c1..9169384f 100644 --- a/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx +++ b/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx @@ -38,9 +38,7 @@ const ShowDetailInfoFormContent = ({ form, disabled }: ShowDetailInfoFormContent rules={{ required: true, }} - render={({ field: { onChange, onBlur, value } }) => { - if (value === undefined) return <>; - + render={({ field: { onChange, onBlur, value = '' } }) => { return ( { images: showImageInfo, date: `${showBasicInfoForm.getValues('date')}T${showBasicInfoForm.getValues('startTime')}:00.000Z`, runningTime: Number(showBasicInfoForm.getValues('runningTime')), + latitude: showBasicInfoForm.getValues('latitude'), + longitude: showBasicInfoForm.getValues('longitude'), place: { name: showBasicInfoForm.getValues('placeName'), streetAddress: showBasicInfoForm.getValues('placeStreetAddress'), diff --git a/apps/admin/src/pages/ShowInfoPage/index.tsx b/apps/admin/src/pages/ShowInfoPage/index.tsx index 396306d7..70ba9e3f 100644 --- a/apps/admin/src/pages/ShowInfoPage/index.tsx +++ b/apps/admin/src/pages/ShowInfoPage/index.tsx @@ -120,6 +120,8 @@ const ShowInfoPage = () => { thumbnailPath: image.thumbnailPath, path: image.path, })), + latitude: showBasicInfoForm.getValues('latitude'), + longitude: showBasicInfoForm.getValues('longitude'), date: `${showBasicInfoFormInputs.date}T${showBasicInfoFormInputs.startTime}:00.000Z`, runningTime: +showBasicInfoFormInputs.runningTime, place: { diff --git a/apps/preview/src/pages/ShowPreviewPage/index.tsx b/apps/preview/src/pages/ShowPreviewPage/index.tsx index fab2e43c..2c5de84a 100644 --- a/apps/preview/src/pages/ShowPreviewPage/index.tsx +++ b/apps/preview/src/pages/ShowPreviewPage/index.tsx @@ -75,6 +75,8 @@ const ShowPreviewPage = () => { detailAddress, hostName, hostPhoneNumber, + latitude, + longitude, } = previewData; const shareShowPreviewLink = async () => { @@ -173,6 +175,8 @@ const ShowPreviewPage = () => { placeName: placeName, streetAddress, detailAddress, + latitude, + longitude, notice: text, hostName: hostName, hostPhoneNumber: hostPhoneNumber, diff --git a/packages/api/src/mutations/useEditShowInfo.ts b/packages/api/src/mutations/useEditShowInfo.ts index b85d614f..4c0bb3cf 100644 --- a/packages/api/src/mutations/useEditShowInfo.ts +++ b/packages/api/src/mutations/useEditShowInfo.ts @@ -16,6 +16,8 @@ interface PutShowInfoRequest { streetAddress: string; detailAddress: string; }; + latitude?: number; + longitude?: number; notice: string; host: { name: string; From 86dba9010b0145538c46d94d886bc3386484a4e2 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Wed, 16 Apr 2025 23:36:09 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EB=AF=B8=EB=A6=AC=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=EC=99=80=20=ED=94=84=EB=A6=AC=EB=B7=B0=EC=97=90=20?= =?UTF-8?q?=EC=A7=80=EB=8F=84=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin/src/pages/ShowInfoPage/index.tsx | 2 ++ .../icon/src/components/CurvedArrowRight.tsx | 20 +++++++++++++++++++ packages/icon/src/components/index.ts | 2 ++ .../PreviewMap/PreviewMap.styles.ts | 20 +++++++++++++++++++ .../ui/src/components/PreviewMap/index.tsx | 6 ++++++ 5 files changed, 50 insertions(+) create mode 100644 packages/icon/src/components/CurvedArrowRight.tsx create mode 100644 packages/ui/src/components/PreviewMap/PreviewMap.styles.ts diff --git a/apps/admin/src/pages/ShowInfoPage/index.tsx b/apps/admin/src/pages/ShowInfoPage/index.tsx index 70ba9e3f..33fb7b26 100644 --- a/apps/admin/src/pages/ShowInfoPage/index.tsx +++ b/apps/admin/src/pages/ShowInfoPage/index.tsx @@ -330,6 +330,8 @@ const ShowInfoPage = () => { : '', startTime: showBasicInfoForm.watch('startTime'), runningTime: showBasicInfoForm.watch('runningTime'), + latitude: showBasicInfoForm.watch('latitude'), + longitude: showBasicInfoForm.watch('longitude'), salesStartTime: showSalesInfo ? format(showSalesInfo.salesStartTime, 'yyyy.MM.dd (E)') : '', diff --git a/packages/icon/src/components/CurvedArrowRight.tsx b/packages/icon/src/components/CurvedArrowRight.tsx new file mode 100644 index 00000000..6d4da054 --- /dev/null +++ b/packages/icon/src/components/CurvedArrowRight.tsx @@ -0,0 +1,20 @@ +export const CurvedArrowRight = () => { + return ( + + + + + ); +}; diff --git a/packages/icon/src/components/index.ts b/packages/icon/src/components/index.ts index 95cc83a1..11a72b14 100644 --- a/packages/icon/src/components/index.ts +++ b/packages/icon/src/components/index.ts @@ -5,6 +5,7 @@ import { BNK } from './BNK'; import { BNP } from './BNP'; import { BoA } from './BoA'; import { Boolti } from './Boolti'; +import { CurvedArrowRight } from './CurvedArrowRight'; import { BooltiDark } from './BooltiDark'; import { BooltiGrey } from './BooltiGrey'; import { BooltiLightGrey } from './BooltiLightGrey'; @@ -154,4 +155,5 @@ export { YoutubeLink as YoutubeLinkIcon, MapMarker as MapMarkerIcon, ClockMobile as ClockMobileIcon, + CurvedArrowRight as CurvedArrowRightIcon, }; diff --git a/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts b/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts new file mode 100644 index 00000000..7e7aa842 --- /dev/null +++ b/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts @@ -0,0 +1,20 @@ +import styled from '@emotion/styled'; + +const Button = styled.button` + position: absolute; + bottom: 12px; + right: 12px; + cursor: pointer; + width: 32px; + height: 32px; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + background-color: ${({ theme }) => theme.palette.mobile.grey.g80}; + color: ${({ theme }) => theme.palette.mobile.grey.g10}; +`; + +export default { + Button, +}; diff --git a/packages/ui/src/components/PreviewMap/index.tsx b/packages/ui/src/components/PreviewMap/index.tsx index 52d12997..1358fd62 100644 --- a/packages/ui/src/components/PreviewMap/index.tsx +++ b/packages/ui/src/components/PreviewMap/index.tsx @@ -1,5 +1,8 @@ import { Container, NaverMap, useNavermaps } from 'react-naver-maps'; +import Styled from './PreviewMap.styles'; +import { CurvedArrowRightIcon } from '@boolti/icon'; + interface Props { latitude: number; longitude: number; @@ -36,6 +39,9 @@ const PreviewMap = ({ latitude, longitude }: Props) => { zoom={18} defaultCenter={new navermaps.LatLng(latitude, longitude)} /> + + + ); }; From e8006ccaa378390be492e31964a46261e64f23c9 Mon Sep 17 00:00:00 2001 From: Minsu Kim Date: Thu, 17 Apr 2025 00:08:59 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=EC=9D=B8=ED=85=90=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9D=B4=EB=8F=99=20=EB=8F=99=EC=9E=91=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 1 + packages/ui/package.json | 1 + .../PreviewMap/PreviewMap.styles.ts | 17 +++++++ .../ui/src/components/PreviewMap/index.tsx | 51 ++++++++++++++++++- .../components/ShowPreview/ShowInfoDetail.tsx | 11 +++- yarn.lock | 1 + 6 files changed, 78 insertions(+), 4 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index 7728c74e..1261e0a8 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -3058,6 +3058,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/ui/",\ "packageDependencies": [\ ["@boolti/ui", "workspace:packages/ui"],\ + ["@boolti/bridge", "workspace:packages/bridge"],\ ["@boolti/eslint-config", "workspace:packages/config-eslint"],\ ["@boolti/icon", "workspace:packages/icon"],\ ["@boolti/typescript-config", "workspace:packages/config-typescript"],\ diff --git a/packages/ui/package.json b/packages/ui/package.json index 62b4abcf..66505cfd 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -11,6 +11,7 @@ "type-check": "tsc --noEmit" }, "dependencies": { + "@boolti/bridge": "*", "@boolti/icon": "*", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", diff --git a/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts b/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts index 7e7aa842..63193dfe 100644 --- a/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts +++ b/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts @@ -15,6 +15,23 @@ const Button = styled.button` color: ${({ theme }) => theme.palette.mobile.grey.g10}; `; +const ConfirmText = styled.span` + display: flex; + flex-direction: column; + white-space: pre-wrap; + ${({ theme }) => theme.typo.b3}; + color: ${({ theme }) => theme.palette.grey.g90}; +`; + +const ConfirmDescription = styled.span` + display: block; + margin-top: 8px; + ${({ theme }) => theme.typo.b1}; + color: ${({ theme }) => theme.palette.grey.g60}; +`; + export default { Button, + ConfirmText, + ConfirmDescription, }; diff --git a/packages/ui/src/components/PreviewMap/index.tsx b/packages/ui/src/components/PreviewMap/index.tsx index 1358fd62..7092efb8 100644 --- a/packages/ui/src/components/PreviewMap/index.tsx +++ b/packages/ui/src/components/PreviewMap/index.tsx @@ -1,15 +1,62 @@ import { Container, NaverMap, useNavermaps } from 'react-naver-maps'; +import { checkIsAndroid, checkIsIOS, checkIsWebView } from '@boolti/bridge'; import Styled from './PreviewMap.styles'; import { CurvedArrowRightIcon } from '@boolti/icon'; +import { useConfirm } from '../../hooks'; interface Props { latitude: number; longitude: number; + name: string; } -const PreviewMap = ({ latitude, longitude }: Props) => { +const CONFIRM_LOCAL_STORAGE_KEY = 'BOOLTI_PREVIEW_MAP_OPEN_NAVER_MAP'; + +const PreviewMap = ({ latitude, longitude, name }: Props) => { const navermaps = useNavermaps(); + const confirm = useConfirm(); + + const openNaverMaps = async () => { + if (!localStorage.getItem(CONFIRM_LOCAL_STORAGE_KEY)) { + const isConfirm = await confirm( + + 길찾기를 위해{'\n'}네이버 지도앱으로 이동합니다. + * 이 안내는 한 번만 표시됩니다. + , + { + cancel: '취소하기', + confirm: '이동하기', + }, + ); + + if (!isConfirm) { + return; + } + + localStorage.setItem(CONFIRM_LOCAL_STORAGE_KEY, new Date().valueOf().toString()); + } + + const clickedAt = +new Date(); + const params = `lat=${latitude}&lng=${longitude}&name=${encodeURIComponent(name)}`; + + if (!checkIsWebView()) { + window.open(`https://map.naver.com?${params}&c=17.86,0,0,0,dh`, '_blank'); + return; + } + + if (checkIsAndroid()) { + `intent://place?${params}&appname=com.nexters.boolti#Intent;scheme=nmap;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;package=com.nhn.android.nmap;end`; + } else if (checkIsIOS()) { + location.href = `nmap://place?${params}&appname=com.nexters.boolti`; + + setTimeout(function () { + if (+new Date() - clickedAt < 2000) { + location.href = 'http://itunes.apple.com/app/id311867728?mt=8'; + } + }, 1500); + } + }; return ( { zoom={18} defaultCenter={new navermaps.LatLng(latitude, longitude)} /> - + diff --git a/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx b/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx index d0fb41ea..dc68b48c 100644 --- a/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx +++ b/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx @@ -1,5 +1,6 @@ import Styled from './ShowPreview.styles'; import { CallIcon, MessageIcon, TicketIcon } from '@boolti/icon'; +import { showToast, checkIsWebView, TOAST_DURATIONS } from '@boolti/bridge'; import ShowInfoDescription from '../ShowContentMarkdown'; import PreviewMap from '../PreviewMap'; @@ -72,13 +73,19 @@ const ShowInfoDetail = ({ type="button" onClick={() => { navigator.clipboard.writeText(`${streetAddress} ${detailAddress}`); - alert('공연장 주소가 복사되었어요'); + if (checkIsWebView()) { + showToast({ message: '주로를 복사했어요.', duration: TOAST_DURATIONS.SHORT }); + } else { + alert('공연장 주소가 복사되었어요'); + } }} > 복사 - {latitude && longitude && } + {latitude && longitude && ( + + )} {isEnded && soldTicketCount !== undefined && ( diff --git a/yarn.lock b/yarn.lock index 65a04251..97b556f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1779,6 +1779,7 @@ __metadata: version: 0.0.0-use.local resolution: "@boolti/ui@workspace:packages/ui" dependencies: + "@boolti/bridge": "npm:*" "@boolti/eslint-config": "npm:*" "@boolti/icon": "npm:*" "@boolti/typescript-config": "npm:*"