From 45f33114ca736fab5b134bcde194bf264581ddf4 Mon Sep 17 00:00:00 2001 From: bepyan Date: Sat, 24 Aug 2024 04:41:28 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=90=9D=20=EA=B3=B5=EC=9C=A0?= =?UTF-8?q?=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lockb | Bin 316116 -> 317071 bytes package.json | 1 + src/app/(main)/i/{ => [subdomain]}/layout.tsx | 2 + src/components/editor/constant.ts | 11 ++ src/components/editor/elements/recursive.tsx | 3 + .../editor/elements/share-element.tsx | 106 ++++++++++++++++++ src/components/editor/placeholders.tsx | 10 +- .../sidebar-element-settings-tab/index.tsx | 7 ++ .../share-setting.tsx | 52 +++++++++ .../editor/sidebar/sidebar-elements-tab.tsx | 6 + src/components/editor/type.ts | 1 + src/components/editor/util.ts | 2 + src/components/kakao-share-script.tsx | 27 +++++ src/components/ui/icons.tsx | 37 ++++++ src/components/ui/popover.tsx | 33 ++++++ src/lib/env.ts | 8 +- 16 files changed, 303 insertions(+), 3 deletions(-) rename src/app/(main)/i/{ => [subdomain]}/layout.tsx (85%) create mode 100644 src/components/editor/elements/share-element.tsx create mode 100644 src/components/editor/sidebar/sidebar-element-settings-tab/share-setting.tsx create mode 100644 src/components/kakao-share-script.tsx create mode 100644 src/components/ui/popover.tsx diff --git a/bun.lockb b/bun.lockb index 609965bd2ad564056866f0a4249e6f4bf8f279a7..fc1aeae850af6a1c55400b8b3d7b358f748b14ed 100755 GIT binary patch delta 54845 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 O*Q9-Ftv)7sOa222!?EN5 delta 54913 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 E0*bskyZ`_I diff --git a/package.json b/package.json index ccea0ea5..dd016188 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-scroll-area": "^1.1.0", "@radix-ui/react-select": "^2.1.1", "@radix-ui/react-separator": "^1.1.0", diff --git a/src/app/(main)/i/layout.tsx b/src/app/(main)/i/[subdomain]/layout.tsx similarity index 85% rename from src/app/(main)/i/layout.tsx rename to src/app/(main)/i/[subdomain]/layout.tsx index fcc587f8..1c3af701 100644 --- a/src/app/(main)/i/layout.tsx +++ b/src/app/(main)/i/[subdomain]/layout.tsx @@ -1,4 +1,5 @@ import Script from "next/script"; +import KakaoShareScript from "~/components/kakao-share-script"; import { env } from "~/lib/env"; export default function KakaoMapScriptLayout({ @@ -18,6 +19,7 @@ export default function KakaoMapScriptLayout({ type="text/javascript" src={`${env.KAKAO_MAP_BASE_URL}?appkey=${env.KAKAO_MAP_API_KEY}&libraries=services&autoload=false`} /> + {children} ); diff --git a/src/components/editor/constant.ts b/src/components/editor/constant.ts index 4d244721..e1973d72 100644 --- a/src/components/editor/constant.ts +++ b/src/components/editor/constant.ts @@ -178,6 +178,16 @@ export const accordionElement: InferEditorElement<"accordion"> = { }, }; +export const shareElement: InferEditorElement<"share"> = { + id: "__share", + type: "share", + styles: { + color: "#222", + height: "50px", + }, + content: {}, +}; + /** * mapper for element types */ @@ -193,6 +203,7 @@ export const elementNameMap: Record = { navigation: "길찾기", logoBanner: "인비 로고", accordion: "펼침/접힘", + share: "공유하기", empty: "", }; diff --git a/src/components/editor/elements/recursive.tsx b/src/components/editor/elements/recursive.tsx index 983634e8..78edefb0 100644 --- a/src/components/editor/elements/recursive.tsx +++ b/src/components/editor/elements/recursive.tsx @@ -5,6 +5,7 @@ import ImageElement from "~/components/editor/elements/image-element"; import KakaoMap from "~/components/editor/elements/kakao-map"; import LogoBannerElement from "~/components/editor/elements/logo-banner-element"; import NavigationElement from "~/components/editor/elements/navigation-element"; +import ShareElement from "~/components/editor/elements/share-element"; import Text from "~/components/editor/elements/text"; import type { EditorElement } from "~/components/editor/type"; @@ -28,6 +29,8 @@ export default function Recursive({ element }: { element: EditorElement }) { return ; case "accordion": return ; + case "share": + return ; default: return null; } diff --git a/src/components/editor/elements/share-element.tsx b/src/components/editor/elements/share-element.tsx new file mode 100644 index 00000000..6ffc69a1 --- /dev/null +++ b/src/components/editor/elements/share-element.tsx @@ -0,0 +1,106 @@ +"use client"; + +import { PopoverArrow, PopoverClose } from "@radix-ui/react-popover"; +import { LinkIcon } from "lucide-react"; +import { toast } from "sonner"; +import ElementWrapper from "~/components/editor/elements/element-wrapper"; +import { useEditor } from "~/components/editor/provider"; +import type { InferEditorElement } from "~/components/editor/type"; +import { KakaoIcon, ShareIcon } from "~/components/ui/icons"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "~/components/ui/popover"; + +type Props = { + element: InferEditorElement<"share">; +}; + +export default function ShareElement({ element }: Props) { + const { editor } = useEditor(); + + const handleCopyLink = async () => { + const link = `https://${editor.config.invitationSubdomain}.invi.my`; + + try { + await navigator.clipboard.writeText(link); + toast("링크가 복사되었습니다.", { + description: link, + position: "top-center", + duration: 2000, + style: { + backgroundColor: "black", + opacity: 0.9, + height: "56px", + color: "white", + border: 0, + }, + }); + } catch (e) { + console.error(e); + toast.error("링크 복사에 실패했습니다."); + } + }; + + const handleKakaoShare = () => { + // 카카오 정책 상 서브도메인을 사용할 수 없음 + const link = `https://invi.my/i/${editor.config.invitationSubdomain}`; + + window.Kakao.Share.sendDefault({ + objectType: "feed", + content: { + imageUrl: editor.config.invitationThumbnail, + imageWidth: 600, + imageHeight: 450, + title: editor.config.invitationTitle, + description: editor.config.invitationDesc, + link: { + mobileWebUrl: link, + webUrl: link, + }, + }, + buttons: [ + { + title: "초대장 열기", + link: { + mobileWebUrl: link, + webUrl: link, + }, + }, + ], + }); + }; + + return ( + + + + + + + +
+ +
+ 링크 복사하기 +
+ + + 공유하기 + + +
+
+
+ ); +} diff --git a/src/components/editor/placeholders.tsx b/src/components/editor/placeholders.tsx index dd6fd2ca..a0775206 100644 --- a/src/components/editor/placeholders.tsx +++ b/src/components/editor/placeholders.tsx @@ -8,7 +8,7 @@ import { } from "lucide-react"; import { useEditor } from "~/components/editor/provider"; import type { EditorElementType } from "~/components/editor/type"; -import { ImageSolidIcon, LogoTextIcon } from "~/components/ui/icons"; +import { ImageSolidIcon, LogoTextIcon, ShareIcon } from "~/components/ui/icons"; import { cn } from "~/lib/utils"; type PlaceholderProps = { @@ -120,3 +120,11 @@ export function AccordionPlaceholder() { ); } + +export function SharePlaceholder() { + return ( + + + + ); +} diff --git a/src/components/editor/sidebar/sidebar-element-settings-tab/index.tsx b/src/components/editor/sidebar/sidebar-element-settings-tab/index.tsx index c78c4149..9d1d60e5 100644 --- a/src/components/editor/sidebar/sidebar-element-settings-tab/index.tsx +++ b/src/components/editor/sidebar/sidebar-element-settings-tab/index.tsx @@ -9,6 +9,7 @@ import KakaoMapSetting from "~/components/editor/sidebar/sidebar-element-setting import LayoutSetting from "~/components/editor/sidebar/sidebar-element-settings-tab/layout-setting"; import LogoBannerSetting from "~/components/editor/sidebar/sidebar-element-settings-tab/logo-banner-setting"; import MapSetting from "~/components/editor/sidebar/sidebar-element-settings-tab/map-setting"; +import ShareSetting from "~/components/editor/sidebar/sidebar-element-settings-tab/share-setting"; import TextSetting from "~/components/editor/sidebar/sidebar-element-settings-tab/text-setting"; import { getElementName } from "~/components/editor/util"; import { SheetHeader, SheetTitle } from "~/components/ui/sheet"; @@ -79,6 +80,12 @@ export default function SidebarElementSettingsTab(props: Props) { )} + + {selectedElement.type === "share" && ( + <> + + + )} ); diff --git a/src/components/editor/sidebar/sidebar-element-settings-tab/share-setting.tsx b/src/components/editor/sidebar/sidebar-element-settings-tab/share-setting.tsx new file mode 100644 index 00000000..779f5690 --- /dev/null +++ b/src/components/editor/sidebar/sidebar-element-settings-tab/share-setting.tsx @@ -0,0 +1,52 @@ +"use client"; + +import { HeightIcon } from "@radix-ui/react-icons"; +import { useEditor } from "~/components/editor/provider"; +import { EditorInput } from "~/components/editor/ui/input"; + +export default function ShareSetting() { + const { editor, dispatch } = useEditor(); + const element = editor.state.selectedElement; + + return ( +
+
+

레이아웃 설정

+
+ +
+
+ + dispatch({ + type: "UPDATE_ELEMENT_STYLE", + payload: { height: e.target.value }, + }) + } + componentPrefix={} + /> +
+
+ { + dispatch({ + type: "UPDATE_ELEMENT_STYLE", + payload: { color: e.target.value }, + }); + }} + componentPrefix={ +
+ } + /> +
+
+
+ ); +} diff --git a/src/components/editor/sidebar/sidebar-elements-tab.tsx b/src/components/editor/sidebar/sidebar-elements-tab.tsx index 7a802960..e4760aa7 100644 --- a/src/components/editor/sidebar/sidebar-elements-tab.tsx +++ b/src/components/editor/sidebar/sidebar-elements-tab.tsx @@ -7,6 +7,7 @@ import { KakaoMapPlaceholder, LogoBannerPlaceholder, NavigationPlaceholder, + SharePlaceholder, TextPlaceholder, TwoColumnsPlaceholder, } from "~/components/editor/placeholders"; @@ -77,6 +78,11 @@ export default function SidebarElementsTab(props: Props) { Component: , group: "elements", }, + { + type: "share", + Component: , + group: "elements", + }, ]; return ( diff --git a/src/components/editor/type.ts b/src/components/editor/type.ts index 7b5faae4..c92b29f1 100644 --- a/src/components/editor/type.ts +++ b/src/components/editor/type.ts @@ -31,6 +31,7 @@ type EditorElementContentMap = { contentStyle?: React.CSSProperties; innerContainer: InferEditorElement<"container">; }; + share: {}; }; export type EditorElementType = keyof EditorElementContentMap; diff --git a/src/components/editor/util.ts b/src/components/editor/util.ts index c028ae8b..112a37ea 100644 --- a/src/components/editor/util.ts +++ b/src/components/editor/util.ts @@ -10,6 +10,7 @@ import { kakaoMapElement, logoBannerElement, navigationElement, + shareElement, textElement, twoColumnElement, } from "~/components/editor/constant"; @@ -47,6 +48,7 @@ export const getDefaultElement = ( navigation: navigationElement, logoBanner: logoBannerElement, accordion: accordionElement, + share: shareElement, __body: bodyElement, empty: emptyElement, }; diff --git a/src/components/kakao-share-script.tsx b/src/components/kakao-share-script.tsx new file mode 100644 index 00000000..0a957ed2 --- /dev/null +++ b/src/components/kakao-share-script.tsx @@ -0,0 +1,27 @@ +"use client"; + +import Script from "next/script"; +import { env } from "~/lib/env"; + +export default function KakaoShareScript() { + const kakaoInit = () => { + try { + if (!window.Kakao.isInitialized()) { + window.Kakao.init(env.NEXT_PUBLIC_KAKAO_JS_KEY); + } + } catch (error) { + console.error(error); + } + }; + + return ( + <> +