iipbs_cs #13

Merged
chanii8 merged 25 commits from iipbs_cs into main 2025-03-31 10:41:31 +09:00
11 changed files with 77 additions and 59 deletions
Showing only changes of commit c5f1718441 - Show all commits
@@ -17,7 +17,7 @@ import {
} from "@/shared/ui/form"; } from "@/shared/ui/form";
import type { MenuFormData } from "../model/menu-interface"; import type { MenuFormData } from "../model/menu-interface";
function BaseTypeForm({ form }: { form: UseFormReturn<MenuFormData> }) { function BaseTypeMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
const handleIconClick = (icon: string) => { const handleIconClick = (icon: string) => {
form.setValue("iconNm", icon); form.setValue("iconNm", icon);
}; };
@@ -125,4 +125,4 @@ function BaseTypeForm({ form }: { form: UseFormReturn<MenuFormData> }) {
); );
} }
export { BaseTypeForm }; export { BaseTypeMenuForm };
@@ -16,7 +16,7 @@ import {
FormMessage, FormMessage,
} from "@/shared/ui/form"; } from "@/shared/ui/form";
import type { MenuFormData } from "../model/menu-interface"; 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<MenuFormData> }) { function BoardMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
return ( return (
@@ -97,7 +97,7 @@ function BoardMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
</TableCell> </TableCell>
</TableRow> </TableRow>
<BaseTypeForm form={form} /> <BaseTypeMenuForm form={form} />
<TableRow> <TableRow>
<TableHead>QR코드</TableHead> <TableHead>QR코드</TableHead>
@@ -1,7 +1,7 @@
import { type UseFormReturn } from "react-hook-form"; import { type UseFormReturn } from "react-hook-form";
import { Table, TableBody } from "@common/components"; import { Table, TableBody } from "@common/components";
import type { MenuFormData } from "../model/menu-interface"; 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<MenuFormData> }) { function BottomMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
return ( return (
@@ -11,7 +11,7 @@ function BottomMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
<col width="80%" /> <col width="80%" />
</colgroup> </colgroup>
<TableBody> <TableBody>
<BaseTypeForm form={form} /> <BaseTypeMenuForm form={form} />
</TableBody> </TableBody>
</Table> </Table>
); );
@@ -16,7 +16,7 @@ import {
FormMessage, FormMessage,
} from "@/shared/ui/form"; } from "@/shared/ui/form";
import type { MenuFormData } from "../model/menu-interface"; 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<MenuFormData> }) { function ContentMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
return ( return (
@@ -97,7 +97,7 @@ function ContentMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
</TableCell> </TableCell>
</TableRow> </TableRow>
<BaseTypeForm form={form} /> <BaseTypeMenuForm form={form} />
<TableRow> <TableRow>
<TableHead>QR코드</TableHead> <TableHead>QR코드</TableHead>
@@ -0,0 +1,35 @@
import { Button, Input } from "@common/components/ui";
import type { ComponentProps } from "react";
type EditableNodeProps = {
onSave: () => void;
onCancel: () => void;
} & ComponentProps<typeof Input>;
function EditableNode({ onSave, onCancel, ...props }: EditableNodeProps) {
return (
<>
<Input {...props} className="h-[2.5rem] !text-[1.3rem] text-foreground" />
<div className="flex items-center gap-1">
<Button
variant="ghost"
size="icon"
className="size-8 !bg-transparent"
onClick={onSave}
>
<i className="diveicon di-check text-2xl" />
</Button>
<Button
variant="ghost"
size="icon"
className="size-8 !bg-transparent"
onClick={onCancel}
>
<i className="diveicon di-x" />
</Button>
</div>
</>
);
}
export { EditableNode };
@@ -1,7 +1,7 @@
import { type UseFormReturn } from "react-hook-form"; import { type UseFormReturn } from "react-hook-form";
import { Table, TableBody } from "@common/components"; import { Table, TableBody } from "@common/components";
import type { MenuFormData } from "../model/menu-interface"; 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<MenuFormData> }) { function EmptyMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
return ( return (
@@ -11,7 +11,7 @@ function EmptyMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
<col width="80%" /> <col width="80%" />
</colgroup> </colgroup>
<TableBody> <TableBody>
<BaseTypeForm form={form} /> <BaseTypeMenuForm form={form} />
</TableBody> </TableBody>
</Table> </Table>
); );
@@ -1,7 +1,7 @@
import { type UseFormReturn } from "react-hook-form"; import { type UseFormReturn } from "react-hook-form";
import { Table, TableBody } from "@common/components"; import { Table, TableBody } from "@common/components";
import type { MenuFormData } from "../model/menu-interface"; 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<MenuFormData> }) { function InsideMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
return ( return (
@@ -11,7 +11,7 @@ function InsideMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
<col width="80%" /> <col width="80%" />
</colgroup> </colgroup>
<TableBody> <TableBody>
<BaseTypeForm form={form} /> <BaseTypeMenuForm form={form} />
</TableBody> </TableBody>
</Table> </Table>
); );
+5 -2
View File
@@ -95,7 +95,7 @@ function MenuForm({
<div className="card"> <div className="card">
<BaseMenuForm form={form} menuCd={menuCd} /> <BaseMenuForm form={form} menuCd={menuCd} />
<div className="-mt-[0.1rem]"> <div className="-mt-[0.1rem]">
{renderTypeForm(menuType, form)} {renderTypeMenuForm(menuType, form)}
</div> </div>
</div> </div>
</div> </div>
@@ -116,7 +116,10 @@ function MenuForm({
); );
} }
function renderTypeForm(menuType: string, form: UseFormReturn<MenuFormData>) { function renderTypeMenuForm(
menuType: string,
form: UseFormReturn<MenuFormData>,
) {
switch (menuType) { switch (menuType) {
case MENU_TYPE.EMPTY: case MENU_TYPE.EMPTY:
return <EmptyMenuForm form={form} />; return <EmptyMenuForm form={form} />;
+12 -32
View File
@@ -1,11 +1,12 @@
import { useState } from "react"; import { useState } from "react";
import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useMutation, useQueryClient } from "@tanstack/react-query";
import type { NodeModel } from "@minoru/react-dnd-treeview"; 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 { cn } from "@common/components/lib";
import { ENDPOINT } from "@/shared/config"; import { ENDPOINT } from "@/shared/config";
import { MenuApi } from "../api/menu-service"; import { MenuApi } from "../api/menu-service";
import type { TreeMenu } from "../model/menu-interface"; import type { TreeMenu } from "../model/menu-interface";
import { EditableNode } from "./editable-node";
type MenuNodeProps = { type MenuNodeProps = {
node: NodeModel<TreeMenu>; node: NodeModel<TreeMenu>;
@@ -52,6 +53,11 @@ function MenuNode({
setEditMode(false); setEditMode(false);
}; };
const handleCancel = () => {
setEditMode(false);
setNodeName(text);
};
return ( return (
<div <div
style={{ paddingInlineStart: indent }} style={{ paddingInlineStart: indent }}
@@ -59,19 +65,17 @@ function MenuNode({
"group flex cursor-pointer items-center justify-between gap-2 rounded-sm p-2 hover:bg-accent", "group flex cursor-pointer items-center justify-between gap-2 rounded-sm p-2 hover:bg-accent",
isSelected && "!bg-[rgba(32,148,250,0.2)]", isSelected && "!bg-[rgba(32,148,250,0.2)]",
)} )}
onClick={handleSelect}
> >
<div className="flex items-center">
{editMode ? ( {editMode ? (
<> <EditableNode
<Input
value={nodeName} value={nodeName}
onChange={(e) => setNodeName(e.target.value)} onChange={(e) => setNodeName(e.target.value)}
className="h-[2.5rem] !text-[1.3rem] text-foreground" onSave={handleSave}
onCancel={handleCancel}
/> />
</>
) : ( ) : (
<> <>
<div className="flex items-center" onClick={handleSelect}>
{data?.children?.length && ( {data?.children?.length && (
<i <i
className={cn( className={cn(
@@ -82,32 +86,7 @@ function MenuNode({
/> />
)} )}
<span className="text-[1.4rem] font-medium text-label">{text}</span> <span className="text-[1.4rem] font-medium text-label">{text}</span>
</>
)}
</div> </div>
{editMode ? (
<div className="flex items-center gap-1">
<Button
variant="ghost"
size="icon"
className="size-8 !bg-transparent"
onClick={handleSave}
>
<i className="diveicon di-check text-2xl" />
</Button>
<Button
variant="ghost"
size="icon"
className="size-8 !bg-transparent"
onClick={() => {
setEditMode(false);
setNodeName(text);
}}
>
<i className="diveicon di-x" />
</Button>
</div>
) : (
<Button <Button
variant="ghost" variant="ghost"
size="icon" size="icon"
@@ -116,6 +95,7 @@ function MenuNode({
> >
<i className="diveicon di-pencil" /> <i className="diveicon di-pencil" />
</Button> </Button>
</>
)} )}
</div> </div>
); );
+1 -1
View File
@@ -141,7 +141,7 @@ function MenuPage() {
))} ))}
</SelectContent> </SelectContent>
</Select> </Select>
{treeData && ( {siteId && (
<> <>
<div className="my-4 flex gap-2"> <div className="my-4 flex gap-2">
<Button size="sm" color="primary" className="flex-1"> <Button size="sm" color="primary" className="flex-1">
@@ -1,7 +1,7 @@
import { type UseFormReturn } from "react-hook-form"; import { type UseFormReturn } from "react-hook-form";
import { Table, TableBody } from "@common/components"; import { Table, TableBody } from "@common/components";
import type { MenuFormData } from "../model/menu-interface"; import type { MenuFormData } from "../model/menu-interface";
import { BaseTypeForm } from "./base-type-form"; import { BaseTypeMenuForm } from "./base-type-menu-form";
function OutsideMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) { function OutsideMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
return ( return (
@@ -11,7 +11,7 @@ function OutsideMenuForm({ form }: { form: UseFormReturn<MenuFormData> }) {
<col width="80%" /> <col width="80%" />
</colgroup> </colgroup>
<TableBody> <TableBody>
<BaseTypeForm form={form} /> <BaseTypeMenuForm form={form} />
</TableBody> </TableBody>
</Table> </Table>
); );