diff --git a/.pnp.cjs b/.pnp.cjs index 1261e0a8..d9d6e320 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -3065,12 +3065,14 @@ const RAW_RUNTIME_STATE = ["@emotion/react", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:11.11.3"],\ ["@emotion/styled", "virtual:85869d3eba7afdb6f94c001c9503942ddc4354e881daf63c24e9d58366ea9f25c6bac2df65ae0f5266c54cd36fe68f0d9568da3a1ab62446405c98ac852f4431#npm:11.11.0"],\ ["@react-spring/web", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:9.7.3"],\ + ["@types/lodash.debounce", "npm:4.0.9"],\ ["@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"],\ ["linkifyjs", "npm:4.1.3"],\ + ["lodash.debounce", "npm:4.0.8"],\ ["mdast", "npm:3.0.0"],\ ["nanoid", "npm:5.0.4"],\ ["rdndmb-html5-to-touch", "npm:8.0.3"],\ diff --git a/apps/preview/src/pages/ShowPreviewPage/index.tsx b/apps/preview/src/pages/ShowPreviewPage/index.tsx index 7c4cbfef..da92bf52 100644 --- a/apps/preview/src/pages/ShowPreviewPage/index.tsx +++ b/apps/preview/src/pages/ShowPreviewPage/index.tsx @@ -1,5 +1,5 @@ import { ShowCastTeamReadResponse, ShowPreviewResponse } from '@boolti/api'; -import { Footer, ShowPreview, useDialog } from '@boolti/ui'; +import { Footer, ShowPreview, useDeviceByWidth, useDialog } from '@boolti/ui'; import { format, setDefaultOptions } from 'date-fns'; import { ko } from 'date-fns/locale'; import { QRCodeSVG } from 'qrcode.react'; @@ -43,12 +43,20 @@ const getShareText = (show: { const ShowPreviewPage = () => { const [shareDialogOpen, setShareDialogOpen] = useState(false); + const [shareDropdownOpen, setShareDropdownOpen] = useState(false); const loaderData = useLoaderData() as | [ShowPreviewResponse, ShowCastTeamReadResponse[]] | undefined; const dialog = useDialog(); + const { device } = useDeviceByWidth({ + onChangeDeviceByWidth: () => { + setShareDialogOpen(false); + setShareDropdownOpen(false); + dialog.close(); + } + }); useBodyScrollLock(shareDialogOpen); @@ -105,26 +113,32 @@ const ShowPreviewPage = () => { } }; - const shareButtonClickHandler = async () => { - dialog.open({ - content: ( - - - URL만 공유하기 - - - 공연 정보 함께 공유하기 - - - ), - isAuto: true, - mobileType: 'darkBottomSheet', - onClose: () => { - setShareDialogOpen(false); - }, - }); + const shareButtonClickHandler = () => { + if (device === 'mobile') { + dialog.open({ + content: ( + + + URL만 공유하기 + + + 공연 정보 함께 공유하기 + + + ), + isAuto: true, + mobileType: 'darkBottomSheet', + onClose: () => { + setShareDialogOpen(false); + setShareDropdownOpen(false); + }, + }); + + setShareDialogOpen(true); + return + } - setShareDialogOpen(true); + setShareDropdownOpen(true); }; const reservationButtonClickHandler = () => { @@ -151,6 +165,12 @@ const ShowPreviewPage = () => { }); }; + const shareDropdownCloseHandler = () => { + setShareDialogOpen(false); + setShareDropdownOpen(false); + dialog.close(); + }; + const reservationButtonMobileClickHandler = () => { window.location.href = getDynamicLink(id); }; @@ -186,10 +206,14 @@ const ShowPreviewPage = () => { userImgPath, })), }))} + shareDropdownOpen={shareDropdownOpen} logoLinkHref="https://boolti.in" onClickLink={reservationButtonClickHandler} onClickLinkMobile={reservationButtonMobileClickHandler} onClickShareButton={shareButtonClickHandler} + onShareShowPreviewLink={shareShowPreviewLink} + onShareShowInfo={shareShowInfo} + onCloseShareDropdown={shareDropdownCloseHandler} />