From 594c41f7fc7f714a8beede9a2bd542e573ffd41b Mon Sep 17 00:00:00 2001 From: bepyan Date: Tue, 20 Aug 2024 20:20:51 +0900 Subject: [PATCH 1/3] draft: fab --- bun.lockb | Bin 299993 -> 300432 bytes package.json | 1 + src/app/(main)/i/[subdomain]/page.tsx | 6 +- src/components/editor/constant.ts | 4 + src/components/editor/fab/index.tsx | 15 +++ .../editor/fab/invitation-response-fab.tsx | 48 +++++++ src/components/editor/main.tsx | 4 +- src/components/editor/provider.tsx | 7 +- src/components/editor/sidebar/index.tsx | 8 +- .../sidebar-invitation-response-tab.tsx | 36 ++++++ src/components/editor/type.ts | 3 + src/components/ui/drawer.tsx | 118 ++++++++++++++++++ 12 files changed, 245 insertions(+), 5 deletions(-) create mode 100644 src/components/editor/fab/index.tsx create mode 100644 src/components/editor/fab/invitation-response-fab.tsx create mode 100644 src/components/editor/sidebar/sidebar-invitation-response-tab.tsx create mode 100644 src/components/ui/drawer.tsx diff --git a/bun.lockb b/bun.lockb index de7bb1bc9c53f1a9079f8b1108f36b1b801255bd..2815c0763adc15c5d5883078659eae7d84a92bd2 100755 GIT binary patch delta 58740 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 QbZ(34lNWDqU46>`0SZ)Gy8r+H diff --git a/package.json b/package.json index 31c1d87..6aae44e 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "sonner": "^1.5.0", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", + "vaul": "^0.9.1", "zod": "^3.23.8", "zustand": "^4.5.4" }, diff --git a/src/app/(main)/i/[subdomain]/page.tsx b/src/app/(main)/i/[subdomain]/page.tsx index 60fac29..e52aed3 100644 --- a/src/app/(main)/i/[subdomain]/page.tsx +++ b/src/app/(main)/i/[subdomain]/page.tsx @@ -1,6 +1,7 @@ import type { Metadata, ResolvingMetadata } from "next"; import { notFound } from "next/navigation"; import Recursive from "~/components/editor/elements/recursive"; +import FloatingActionButton from "~/components/editor/fab"; import EditorProvider from "~/components/editor/provider"; import { getInvitationByEventUrl } from "~/lib/db/schema/invitations.query"; @@ -45,10 +46,13 @@ export default async function Page({ params }: Props) { editorData={invitation.customFields} editorState={{ isPreviewMode: true }} > -
+
{invitation.customFields.elements.map((childElement) => ( ))} + {invitation.customFields?.fab?.type === "invitation_response" && ( + + )}
); diff --git a/src/components/editor/constant.ts b/src/components/editor/constant.ts index f4cccf8..899b769 100644 --- a/src/components/editor/constant.ts +++ b/src/components/editor/constant.ts @@ -37,6 +37,7 @@ export const kakaoMapDefaultStyles: React.CSSProperties = { export const editorTabValue = { ELEMENTS: "Elements", SETTINGS: "Settings", + INVITATION_RESPONSE: "Invitation Response", ELEMENT_SETTINGS: "Element Settings", } as const; @@ -61,6 +62,9 @@ export const bodyElement = { export const initialEditorData: EditorData = { elements: [bodyElement], + fab: { + type: "invitation_response", + }, }; export const initialEditorState: EditorState = { diff --git a/src/components/editor/fab/index.tsx b/src/components/editor/fab/index.tsx new file mode 100644 index 0000000..ba27a03 --- /dev/null +++ b/src/components/editor/fab/index.tsx @@ -0,0 +1,15 @@ +"use client"; + +import BottomSheet from "~/app/(playground)/pg/bottom-sheet/_components/bottom-sheet"; +import { useEditor } from "~/components/editor/provider"; + +export default function FloatingActionButton() { + const { editor } = useEditor(); + + switch (editor.data.fab.type) { + case "invitation_response": + return ; + default: + return null; + } +} diff --git a/src/components/editor/fab/invitation-response-fab.tsx b/src/components/editor/fab/invitation-response-fab.tsx new file mode 100644 index 0000000..232616b --- /dev/null +++ b/src/components/editor/fab/invitation-response-fab.tsx @@ -0,0 +1,48 @@ +"use client"; + +import { useForm } from "@tanstack/react-form"; +import { toast } from "sonner"; +import { Drawer } from "vaul"; +import { SheetHeader, SheetTitle } from "~/components/ui/sheet"; + +export default function InvitationResponseFab() { + return ( + +
+ + 세션 참여 조사하기 + +
+ + + + + + + +
+ ); +} + +function InvitationResponseForm() { + const form = useForm({ + defaultValues: { + name: "", + attendance: "", + }, + onSubmit: async ({ value }) => { + const { name, attendance } = value; + console.log(name, attendance); + // await createInvitationResponses(name, attendance as unknown as boolean); + toast("참여가 완료되었습니다.", { duration: 2000 }); + }, + }); + + return ( +
+ + 세션 참여 조사 + +
+ ); +} diff --git a/src/components/editor/main.tsx b/src/components/editor/main.tsx index 0a029c3..c0fb560 100644 --- a/src/components/editor/main.tsx +++ b/src/components/editor/main.tsx @@ -3,6 +3,7 @@ import { EyeOff } from "lucide-react"; import ElementHelper from "~/components/editor/elements/element-helper"; import Recursive from "~/components/editor/elements/recursive"; +import FloatingActionButton from "~/components/editor/fab"; import { useEditor } from "~/components/editor/provider"; import { Button } from "~/components/ui/button"; import { ScrollArea } from "~/components/ui/scroll-area"; @@ -24,7 +25,7 @@ export default function EditorMain() { return (
( ))} +
diff --git a/src/components/editor/provider.tsx b/src/components/editor/provider.tsx index 95c1cdb..8bf4185 100644 --- a/src/components/editor/provider.tsx +++ b/src/components/editor/provider.tsx @@ -21,7 +21,7 @@ export const EditorContext = createContext<{ }); export type EditorProps = { - editorData?: EditorData; + editorData?: Partial; editorConfig?: Partial; editorState?: Partial; }; @@ -38,7 +38,10 @@ export default function EditorProvider({ }: EditorProviderProps) { const [editor, dispatch] = useReducer(editorReducer, { ...initialEditor, - data: editorData ?? initialEditor.data, + data: { + ...initialEditor.data, + ...editorData, + }, config: { ...initialEditorConfig, ...editorConfig, diff --git a/src/components/editor/sidebar/index.tsx b/src/components/editor/sidebar/index.tsx index 7f6908a..b4c786b 100644 --- a/src/components/editor/sidebar/index.tsx +++ b/src/components/editor/sidebar/index.tsx @@ -1,11 +1,12 @@ "use client"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@radix-ui/react-tabs"; -import { PlusIcon, SettingsIcon, WrenchIcon } from "lucide-react"; +import { MailIcon, PlusIcon, SettingsIcon, WrenchIcon } from "lucide-react"; import { editorTabValue } from "~/components/editor/constant"; import { useEditor } from "~/components/editor/provider"; import SidebarElementSettingsTab from "~/components/editor/sidebar/sidebar-element-settings-tab"; import SidebarElementsTab from "~/components/editor/sidebar/sidebar-elements-tab"; +import SidebarInvitationResponseTab from "~/components/editor/sidebar/sidebar-invitation-response-tab"; import SidebarSettingsTab from "~/components/editor/sidebar/sidebar-settings-tab"; import type { EditorTabTypeValue } from "~/components/editor/type"; import { isValidSelectEditorElement } from "~/components/editor/util"; @@ -29,6 +30,11 @@ export default function EditorSidebar() { icon: , content: , }, + { + value: editorTabValue.INVITATION_RESPONSE, + icon: , + content: , + }, { value: editorTabValue.ELEMENT_SETTINGS, icon: , diff --git a/src/components/editor/sidebar/sidebar-invitation-response-tab.tsx b/src/components/editor/sidebar/sidebar-invitation-response-tab.tsx new file mode 100644 index 0000000..23231fe --- /dev/null +++ b/src/components/editor/sidebar/sidebar-invitation-response-tab.tsx @@ -0,0 +1,36 @@ +"use client"; + +import { useEditor } from "~/components/editor/provider"; +import { + SheetDescription, + SheetHeader, + SheetTitle, +} from "~/components/ui/sheet"; +import { Switch } from "~/components/ui/switch"; + +export default function SidebarInvitationResponseTab() { + const { editor, dispatch } = useEditor(); + + return ( +
+ +
+ 초대 응답 설정 + +
+ + 이벤트에 대한 초대 응답 설정을 관리합니다. + +
+ {editor.config && } +
+ ); +} + +function InvitationResponseContent() { + return ( +
+
+
+ ); +} diff --git a/src/components/editor/type.ts b/src/components/editor/type.ts index db5cd11..6573121 100644 --- a/src/components/editor/type.ts +++ b/src/components/editor/type.ts @@ -52,6 +52,9 @@ export type EditorState = { export type EditorData = { elements: EditorElement[]; + fab: { + type: "" | "invitation_response"; + }; }; export type EditorHistory = { diff --git a/src/components/ui/drawer.tsx b/src/components/ui/drawer.tsx new file mode 100644 index 0000000..efdb086 --- /dev/null +++ b/src/components/ui/drawer.tsx @@ -0,0 +1,118 @@ +"use client"; + +import * as React from "react"; +import { Drawer as DrawerPrimitive } from "vaul"; + +import { cn } from "~/lib/utils"; + +const Drawer = ({ + shouldScaleBackground = true, + ...props +}: React.ComponentProps) => ( + +); +Drawer.displayName = "Drawer"; + +const DrawerTrigger = DrawerPrimitive.Trigger; + +const DrawerPortal = DrawerPrimitive.Portal; + +const DrawerClose = DrawerPrimitive.Close; + +const DrawerOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName; + +const DrawerContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + +
+ {children} + + +)); +DrawerContent.displayName = "DrawerContent"; + +const DrawerHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DrawerHeader.displayName = "DrawerHeader"; + +const DrawerFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DrawerFooter.displayName = "DrawerFooter"; + +const DrawerTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DrawerTitle.displayName = DrawerPrimitive.Title.displayName; + +const DrawerDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DrawerDescription.displayName = DrawerPrimitive.Description.displayName; + +export { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerOverlay, + DrawerPortal, + DrawerTitle, + DrawerTrigger, +}; From ff6a6160883bc61bcf1b25060d677f6eb1864bb3 Mon Sep 17 00:00:00 2001 From: bepyan Date: Tue, 20 Aug 2024 21:11:10 +0900 Subject: [PATCH 2/3] feat: DUPLICATE_ELEMENT --- src/components/editor/action.ts | 56 ++++++++++++++++++- .../editor/elements/element-helper.tsx | 11 +++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/components/editor/action.ts b/src/components/editor/action.ts index 13b8b22..7368156 100644 --- a/src/components/editor/action.ts +++ b/src/components/editor/action.ts @@ -1,3 +1,4 @@ +import { nanoid } from "nanoid"; import { emptyElement } from "~/components/editor/constant"; import type { DeviceType, @@ -35,6 +36,9 @@ type EditorActionMap = { DELETE_ELEMENT: { elementDetails: EditorElement; }; + DUPLICATE_ELEMENT: { + elementDetails: EditorElement; + }; CHANGE_CLICKED_ELEMENT: { elementDetails?: EditorElement; }; @@ -136,6 +140,34 @@ const findElementAndParent = ( return [null, null, -1]; }; +const findParentId = ( + elements: EditorElement[], + targetId: string, +): string | null => { + for (const el of elements) { + if (Array.isArray(el.content)) { + if (el.content.some((child) => child.id === targetId)) { + return el.id; + } + const foundInChild = findParentId(el.content, targetId); + if (foundInChild) return foundInChild; + } + } + return null; +}; + +const deepCloneElement = (element: EditorElement): EditorElement => { + const newElement = { ...element, id: nanoid() }; + + if (Array.isArray(element.content)) { + newElement.content = element.content.map((child) => + deepCloneElement(child), + ); + } + + return newElement; +}; + const removeElementFromParent = ( elements: EditorElement[], elementId: string, @@ -179,6 +211,8 @@ const actionHandlers: { ) => Editor; } = { ADD_ELEMENT: (editor, payload) => { + const newElement = payload.elementDetails; + const elements = traverseElements(editor.data.elements, (element) => { if ( element.id === payload.containerId && @@ -186,13 +220,13 @@ const actionHandlers: { ) { return { ...element, - content: [...element.content, payload.elementDetails], + content: [...element.content, newElement], } as EditorElement; } return element; }); - return updateEditorHistory(editor, { elements }); + return updateEditorHistory(editor, { elements }, newElement); }, MOVE_ELEMENT: (editor, payload) => { @@ -309,6 +343,24 @@ const actionHandlers: { return updateEditorHistory(editor, { elements }); }, + DUPLICATE_ELEMENT: (editor, payload) => { + const containerId = findParentId( + editor.data.elements, + payload.elementDetails.id, + ); + + if (!containerId) { + return editor; + } + + const newElement = deepCloneElement(payload.elementDetails); + + return actionHandlers.ADD_ELEMENT(editor, { + containerId, + elementDetails: newElement, + }); + }, + CHANGE_CLICKED_ELEMENT: (editor, payload) => { const isValidSelect = isValidSelectEditorElement(payload.elementDetails); diff --git a/src/components/editor/elements/element-helper.tsx b/src/components/editor/elements/element-helper.tsx index c5736e0..fbe2798 100644 --- a/src/components/editor/elements/element-helper.tsx +++ b/src/components/editor/elements/element-helper.tsx @@ -92,6 +92,15 @@ export default function ElementHelper() { }); }; + const handleDuplicateElement = () => { + dispatch({ + type: "DUPLICATE_ELEMENT", + payload: { + elementDetails: element, + }, + }); + }; + return ( typeof window !== "undefined" && createPortal( @@ -144,7 +153,7 @@ export default function ElementHelper() { - +
From 24ec0279882841f61c8bb27e0835962fdb72e93e Mon Sep 17 00:00:00 2001 From: bepyan Date: Tue, 20 Aug 2024 21:14:23 +0900 Subject: [PATCH 3/3] fix: select --- src/components/editor/elements/element-helper.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/editor/elements/element-helper.tsx b/src/components/editor/elements/element-helper.tsx index fbe2798..7addb7c 100644 --- a/src/components/editor/elements/element-helper.tsx +++ b/src/components/editor/elements/element-helper.tsx @@ -92,7 +92,8 @@ export default function ElementHelper() { }); }; - const handleDuplicateElement = () => { + const handleDuplicateElement = (e: React.MouseEvent) => { + e.stopPropagation(); dispatch({ type: "DUPLICATE_ELEMENT", payload: {