import { createApiClient } from "../lib/apiClient"; import type { MenuCreateInput, MenuDto, MenuGetListInput, MenuUpdateInput, PagedResultDto } from "../types/menu"; const api = createApiClient({ getToken: () => { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } }, }); // Keep routes easy to adjust during integration (Swagger not accessible). const MENU_PATH = "/menu"; export type MenuServiceRouteMode = "abp" | "plain"; function prefixFor(mode: MenuServiceRouteMode | undefined): string { return mode === "plain" ? "" : "/api/app"; } export async function getMenus( input: MenuGetListInput, signal?: AbortSignal, routeMode: MenuServiceRouteMode = "abp", ): Promise> { return api.requestJson>({ path: MENU_PATH, method: "GET", query: { SkipCount: input.skipCount, MaxResultCount: input.maxResultCount, Sorting: input.sorting, Keyword: input.keyword, }, signal, prefix: prefixFor(routeMode), }); } export async function createMenu(input: MenuCreateInput, routeMode: MenuServiceRouteMode = "abp"): Promise { return api.requestJson({ path: MENU_PATH, method: "POST", body: { name: input.name, path: input.path, icon: input.icon, order: input.order, parentId: input.parentId, isEnabled: input.isEnabled ?? true, }, prefix: prefixFor(routeMode), }); } export async function updateMenu( id: string, input: MenuUpdateInput, routeMode: MenuServiceRouteMode = "abp", ): Promise { return api.requestJson({ path: `${MENU_PATH}/${encodeURIComponent(id)}`, method: "PUT", body: { name: input.name, path: input.path, icon: input.icon, order: input.order, parentId: input.parentId, isEnabled: input.isEnabled ?? true, }, prefix: prefixFor(routeMode), }); } export async function deleteMenu(id: string, routeMode: MenuServiceRouteMode = "abp"): Promise { await api.requestJson({ path: `${MENU_PATH}/${encodeURIComponent(id)}`, method: "DELETE", prefix: prefixFor(routeMode), }); }