108 lines
2.7 KiB
TypeScript
108 lines
2.7 KiB
TypeScript
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<typeof menuFormSchema>;
|
|
export type SiteMapFormData = z.infer<typeof siteMapFormSchema>;
|
|
export type SiteMapPayloadData = z.infer<typeof siteMapPayloadSchema>;
|
|
export type Menu = Omit<MenuFormData, "iconNm"> & {
|
|
menuCd: number;
|
|
iconName?: string;
|
|
};
|
|
|
|
export interface MenuService {
|
|
getMenuRoles(siteId: string): Promise<MenuItem[]>;
|
|
getMenuInfo: (menuCd: number) => Promise<Menu>;
|
|
createMenu: (data: MenuFormData) => Promise<void>;
|
|
updateMenu: (
|
|
menuCd: number,
|
|
data: Omit<MenuFormData, "siteId">,
|
|
) => Promise<void>;
|
|
deleteMenu: (menuCd: number) => Promise<void>;
|
|
menuTemporaryStorage: (menuCd: number, data: MenuFormData) => Promise<void>;
|
|
getMenuTemporarilyStoredData: (
|
|
menuCd: number,
|
|
) => Promise<MenuTemporarilyStoredData[]>;
|
|
publishSiteMap: (data: SiteMapFormData["siteMap"]) => Promise<void>;
|
|
}
|