import { z } from "zod"; export const MENU_TYPE = { EMPTY: "EMPTY", CONTENTS: "CONTENTS", BOARD: "BOARD", INSIDE: "INSIDE", OUTSIDE: "OUTSIDE", BOTTOM: "BOTTOM", } as const; export type MenuType = (typeof MENU_TYPE)[keyof typeof MENU_TYPE]; export interface TreeNode { menuCd?: number; name?: string; sortSeq?: number; parentId?: number | null; levelNo?: number; icon?: string; children?: TreeNode[]; } export interface TreeMenu extends Omit { menuKornNm: string; menuEngNm?: string; iconNm?: string; children?: TreeMenu[]; urlPath?: string; menuLnkgTypeCd: string; menuLnkgSn?: number; qrcd?: string; useYn: string; otptYn: string; requiredUrlPath?: boolean; } export const menuFormSchema = z.object({ siteId: z.string(), menuKornNm: z.string(), menuSubKornNm: z.string().nullish(), menuEngNm: z.string().nullish(), menuSubEngNm: z.string().nullish(), levelNo: z.number(), urlPath: z.string().nullish(), iconNm: z.string().nullish(), menuLnkgTypeCd: z.enum([ MENU_TYPE.EMPTY, MENU_TYPE.CONTENTS, MENU_TYPE.BOARD, MENU_TYPE.INSIDE, MENU_TYPE.OUTSIDE, MENU_TYPE.BOTTOM, ]), menuLnkgSn: z.number().nullish(), otptYn: z.string().default("Y"), prntMenuCd: z.number().nullish(), sortSeq: z.number(), evlUseYn: z.string().default("Y"), qrcd: z.string().nullish(), useYn: z.string().default("Y"), newWndwYn: z.string().nullish(), menuLnkgSnNm: z.string().nullish(), menuPicUserUnqId: z.string().nullish(), menuPicUserUnqIdNm: z.string().nullish(), menuPicDsgnYmd: z.string().nullish(), }); export type MenuFormData = z.infer; export type Menu = Omit & { menuCd: number; iconName?: string; }; export interface MenuService { getMenuInfo: (menuCd: number) => Promise; createMenu: (data: MenuFormData) => Promise; modifyMenu: ( menuCd: number, data: Omit, ) => Promise; deleteMenu: (menuCd: number) => Promise; getTreeMenuList: (siteId: string) => Promise; modifyTreeMenu: (siteId: string, data: TreeNode[]) => Promise; modifyMenuName: (menuCd: number, name: string) => Promise; }