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 MenuItem { menuCd: number; menuKornNm: string; menuEngNm: string; parentId: number | null; sortSeq: number; iconNm?: string; children: MenuItem[] | null; levelNo: number; urlPath: string; menuLnkgTypeCd: string; menuLnkgSn: number; menuPath: string; qrcd: string; useYn: string; otptYn: string; newWndwYn: string; requiredUrlPath: boolean; } export interface MenuTemporarilyStoredData { tmprStrgSn: number; menuCd: number; menuTmprStrg: string; regDt: string; rgtr: string; mdfcnDt: string; mdfr: string; } 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 const siteMapPayloadSchema = z.object({ menuCd: z.number(), menuSubKornNm: z.string(), otptYn: z.string(), }); export const siteMapFormSchema = z.object({ siteMap: z.array(siteMapPayloadSchema), }); export type MenuFormData = z.infer; export type SiteMapFormData = z.infer; export type SiteMapPayloadData = z.infer; export type Menu = Omit & { menuCd: number; iconName?: string; }; export interface MenuService { getMenuRoles(siteId: string): Promise; getMenuInfo: (menuCd: number) => Promise; createMenu: (data: MenuFormData) => Promise; updateMenu: ( menuCd: number, data: Omit, ) => Promise; deleteMenu: (menuCd: number) => Promise; menuTemporaryStorage: (menuCd: number, data: MenuFormData) => Promise; getMenuTemporarilyStoredData: ( menuCd: number, ) => Promise; publishSiteMap: (data: SiteMapFormData["siteMap"]) => Promise; }