From c5f1718441734dc53fbfcad43e8b399e5ab2a301 Mon Sep 17 00:00:00 2001 From: bicochan Date: Wed, 26 Mar 2025 18:20:33 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20editable=20node=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-type-form.tsx => base-type-menu-form.tsx} | 4 +- apps/cs/src/pages/menu/ui/board-menu-form.tsx | 4 +- .../cs/src/pages/menu/ui/bottom-menu-form.tsx | 4 +- .../src/pages/menu/ui/content-menu-form.tsx | 4 +- apps/cs/src/pages/menu/ui/editable-node.tsx | 35 ++++++++++ apps/cs/src/pages/menu/ui/empty-menu-form.tsx | 4 +- .../cs/src/pages/menu/ui/inside-menu-form.tsx | 4 +- apps/cs/src/pages/menu/ui/menu-form.tsx | 7 +- apps/cs/src/pages/menu/ui/menu-node.tsx | 64 +++++++------------ apps/cs/src/pages/menu/ui/menu-page.tsx | 2 +- .../src/pages/menu/ui/outside-menu-form.tsx | 4 +- 11 files changed, 77 insertions(+), 59 deletions(-) rename apps/cs/src/pages/menu/ui/{base-type-form.tsx => base-type-menu-form.tsx} (97%) create mode 100644 apps/cs/src/pages/menu/ui/editable-node.tsx diff --git a/apps/cs/src/pages/menu/ui/base-type-form.tsx b/apps/cs/src/pages/menu/ui/base-type-menu-form.tsx similarity index 97% rename from apps/cs/src/pages/menu/ui/base-type-form.tsx rename to apps/cs/src/pages/menu/ui/base-type-menu-form.tsx index 107e92b60..9835f1e3a 100644 --- a/apps/cs/src/pages/menu/ui/base-type-form.tsx +++ b/apps/cs/src/pages/menu/ui/base-type-menu-form.tsx @@ -17,7 +17,7 @@ import { } from "@/shared/ui/form"; import type { MenuFormData } from "../model/menu-interface"; -function BaseTypeForm({ form }: { form: UseFormReturn }) { +function BaseTypeMenuForm({ form }: { form: UseFormReturn }) { const handleIconClick = (icon: string) => { form.setValue("iconNm", icon); }; @@ -125,4 +125,4 @@ function BaseTypeForm({ form }: { form: UseFormReturn }) { ); } -export { BaseTypeForm }; +export { BaseTypeMenuForm }; diff --git a/apps/cs/src/pages/menu/ui/board-menu-form.tsx b/apps/cs/src/pages/menu/ui/board-menu-form.tsx index cfd59b563..df435e2e5 100644 --- a/apps/cs/src/pages/menu/ui/board-menu-form.tsx +++ b/apps/cs/src/pages/menu/ui/board-menu-form.tsx @@ -16,7 +16,7 @@ import { FormMessage, } from "@/shared/ui/form"; import type { MenuFormData } from "../model/menu-interface"; -import { BaseTypeForm } from "./base-type-form"; +import { BaseTypeMenuForm } from "./base-type-menu-form"; function BoardMenuForm({ form }: { form: UseFormReturn }) { return ( @@ -97,7 +97,7 @@ function BoardMenuForm({ form }: { form: UseFormReturn }) { - + QR코드 diff --git a/apps/cs/src/pages/menu/ui/bottom-menu-form.tsx b/apps/cs/src/pages/menu/ui/bottom-menu-form.tsx index 63069aac5..88565210b 100644 --- a/apps/cs/src/pages/menu/ui/bottom-menu-form.tsx +++ b/apps/cs/src/pages/menu/ui/bottom-menu-form.tsx @@ -1,7 +1,7 @@ import { type UseFormReturn } from "react-hook-form"; import { Table, TableBody } from "@common/components"; import type { MenuFormData } from "../model/menu-interface"; -import { BaseTypeForm } from "./base-type-form"; +import { BaseTypeMenuForm } from "./base-type-menu-form"; function BottomMenuForm({ form }: { form: UseFormReturn }) { return ( @@ -11,7 +11,7 @@ function BottomMenuForm({ form }: { form: UseFormReturn }) { - + ); diff --git a/apps/cs/src/pages/menu/ui/content-menu-form.tsx b/apps/cs/src/pages/menu/ui/content-menu-form.tsx index 153eede5b..0905a594b 100644 --- a/apps/cs/src/pages/menu/ui/content-menu-form.tsx +++ b/apps/cs/src/pages/menu/ui/content-menu-form.tsx @@ -16,7 +16,7 @@ import { FormMessage, } from "@/shared/ui/form"; import type { MenuFormData } from "../model/menu-interface"; -import { BaseTypeForm } from "./base-type-form"; +import { BaseTypeMenuForm } from "./base-type-menu-form"; function ContentMenuForm({ form }: { form: UseFormReturn }) { return ( @@ -97,7 +97,7 @@ function ContentMenuForm({ form }: { form: UseFormReturn }) { - + QR코드 diff --git a/apps/cs/src/pages/menu/ui/editable-node.tsx b/apps/cs/src/pages/menu/ui/editable-node.tsx new file mode 100644 index 000000000..25e3af49a --- /dev/null +++ b/apps/cs/src/pages/menu/ui/editable-node.tsx @@ -0,0 +1,35 @@ +import { Button, Input } from "@common/components/ui"; +import type { ComponentProps } from "react"; + +type EditableNodeProps = { + onSave: () => void; + onCancel: () => void; +} & ComponentProps; + +function EditableNode({ onSave, onCancel, ...props }: EditableNodeProps) { + return ( + <> + +
+ + +
+ + ); +} + +export { EditableNode }; diff --git a/apps/cs/src/pages/menu/ui/empty-menu-form.tsx b/apps/cs/src/pages/menu/ui/empty-menu-form.tsx index 4c97e1c66..78339d90f 100644 --- a/apps/cs/src/pages/menu/ui/empty-menu-form.tsx +++ b/apps/cs/src/pages/menu/ui/empty-menu-form.tsx @@ -1,7 +1,7 @@ import { type UseFormReturn } from "react-hook-form"; import { Table, TableBody } from "@common/components"; import type { MenuFormData } from "../model/menu-interface"; -import { BaseTypeForm } from "./base-type-form"; +import { BaseTypeMenuForm } from "./base-type-menu-form"; function EmptyMenuForm({ form }: { form: UseFormReturn }) { return ( @@ -11,7 +11,7 @@ function EmptyMenuForm({ form }: { form: UseFormReturn }) { - + ); diff --git a/apps/cs/src/pages/menu/ui/inside-menu-form.tsx b/apps/cs/src/pages/menu/ui/inside-menu-form.tsx index 4b894690c..f2fed53cf 100644 --- a/apps/cs/src/pages/menu/ui/inside-menu-form.tsx +++ b/apps/cs/src/pages/menu/ui/inside-menu-form.tsx @@ -1,7 +1,7 @@ import { type UseFormReturn } from "react-hook-form"; import { Table, TableBody } from "@common/components"; import type { MenuFormData } from "../model/menu-interface"; -import { BaseTypeForm } from "./base-type-form"; +import { BaseTypeMenuForm } from "./base-type-menu-form"; function InsideMenuForm({ form }: { form: UseFormReturn }) { return ( @@ -11,7 +11,7 @@ function InsideMenuForm({ form }: { form: UseFormReturn }) { - + ); diff --git a/apps/cs/src/pages/menu/ui/menu-form.tsx b/apps/cs/src/pages/menu/ui/menu-form.tsx index f42e3d725..13a910c23 100644 --- a/apps/cs/src/pages/menu/ui/menu-form.tsx +++ b/apps/cs/src/pages/menu/ui/menu-form.tsx @@ -95,7 +95,7 @@ function MenuForm({
- {renderTypeForm(menuType, form)} + {renderTypeMenuForm(menuType, form)}
@@ -116,7 +116,10 @@ function MenuForm({ ); } -function renderTypeForm(menuType: string, form: UseFormReturn) { +function renderTypeMenuForm( + menuType: string, + form: UseFormReturn, +) { switch (menuType) { case MENU_TYPE.EMPTY: return ; diff --git a/apps/cs/src/pages/menu/ui/menu-node.tsx b/apps/cs/src/pages/menu/ui/menu-node.tsx index d938f0df0..add24f3af 100644 --- a/apps/cs/src/pages/menu/ui/menu-node.tsx +++ b/apps/cs/src/pages/menu/ui/menu-node.tsx @@ -1,11 +1,12 @@ import { useState } from "react"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import type { NodeModel } from "@minoru/react-dnd-treeview"; -import { Button, Input } from "@common/components/ui"; +import { Button } from "@common/components/ui"; import { cn } from "@common/components/lib"; import { ENDPOINT } from "@/shared/config"; import { MenuApi } from "../api/menu-service"; import type { TreeMenu } from "../model/menu-interface"; +import { EditableNode } from "./editable-node"; type MenuNodeProps = { node: NodeModel; @@ -52,6 +53,11 @@ function MenuNode({ setEditMode(false); }; + const handleCancel = () => { + setEditMode(false); + setNodeName(text); + }; + return (
-
- {editMode ? ( - <> - setNodeName(e.target.value)} - className="h-[2.5rem] !text-[1.3rem] text-foreground" - /> - - ) : ( - <> + {editMode ? ( + setNodeName(e.target.value)} + onSave={handleSave} + onCancel={handleCancel} + /> + ) : ( + <> +
{data?.children?.length && ( )} {text} - - )} -
- {editMode ? ( -
+
- -
- ) : ( - + )}
); diff --git a/apps/cs/src/pages/menu/ui/menu-page.tsx b/apps/cs/src/pages/menu/ui/menu-page.tsx index 3219291ab..8e13fee10 100644 --- a/apps/cs/src/pages/menu/ui/menu-page.tsx +++ b/apps/cs/src/pages/menu/ui/menu-page.tsx @@ -141,7 +141,7 @@ function MenuPage() { ))} - {treeData && ( + {siteId && ( <>