mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
dev day #79
This commit is contained in:
@@ -27,31 +27,73 @@ export interface SocialLink {
|
||||
icon?: string;
|
||||
}
|
||||
|
||||
// Normalize backend objects (backend may return `ID` instead of `id`)
|
||||
function normalizeNavItem(raw: any): NavigationItem {
|
||||
if (!raw || typeof raw !== 'object') return raw as NavigationItem;
|
||||
const id = raw.id ?? raw.ID;
|
||||
const children = Array.isArray(raw.children)
|
||||
? raw.children.map((c: any) => normalizeNavItem(c))
|
||||
: undefined;
|
||||
return {
|
||||
id,
|
||||
label: raw.label,
|
||||
url: raw.url,
|
||||
icon: raw.icon,
|
||||
type: raw.type,
|
||||
page_type: raw.page_type,
|
||||
page_id: raw.page_id,
|
||||
visible: raw.visible,
|
||||
display_order: raw.display_order,
|
||||
parent_id: raw.parent_id,
|
||||
children,
|
||||
target: raw.target,
|
||||
css_class: raw.css_class,
|
||||
requires_auth: raw.requires_auth,
|
||||
requires_admin: raw.requires_admin,
|
||||
} as NavigationItem;
|
||||
}
|
||||
|
||||
function normalizeSocialLink(raw: any): SocialLink {
|
||||
if (!raw || typeof raw !== 'object') return raw as SocialLink;
|
||||
const id = raw.id ?? raw.ID;
|
||||
return {
|
||||
id,
|
||||
platform: raw.platform,
|
||||
url: raw.url,
|
||||
display_order: raw.display_order,
|
||||
visible: raw.visible,
|
||||
icon: raw.icon,
|
||||
} as SocialLink;
|
||||
}
|
||||
|
||||
// Public endpoints
|
||||
export const getNavigationItems = async (): Promise<NavigationItem[]> => {
|
||||
const response = await api.get(`/navigation`);
|
||||
return response.data;
|
||||
const data = Array.isArray(response.data) ? response.data : [];
|
||||
return data.map((it: any) => normalizeNavItem(it));
|
||||
};
|
||||
|
||||
export const getSocialLinks = async (): Promise<SocialLink[]> => {
|
||||
const response = await api.get(`/social-links`);
|
||||
return response.data;
|
||||
const data = Array.isArray(response.data) ? response.data : [];
|
||||
return data.map((it: any) => normalizeSocialLink(it));
|
||||
};
|
||||
|
||||
// Admin endpoints
|
||||
export const getAllNavigationItems = async (): Promise<NavigationItem[]> => {
|
||||
const response = await api.get(`/admin/navigation`);
|
||||
return response.data;
|
||||
const data = Array.isArray(response.data) ? response.data : [];
|
||||
return data.map((it: any) => normalizeNavItem(it));
|
||||
};
|
||||
|
||||
export const createNavigationItem = async (item: Partial<NavigationItem>): Promise<NavigationItem> => {
|
||||
const response = await api.post(`/admin/navigation`, item);
|
||||
return response.data;
|
||||
return normalizeNavItem(response.data);
|
||||
};
|
||||
|
||||
export const updateNavigationItem = async (id: number, item: Partial<NavigationItem>): Promise<NavigationItem> => {
|
||||
const response = await api.put(`/admin/navigation/${id}`, item);
|
||||
return response.data;
|
||||
return normalizeNavItem(response.data);
|
||||
};
|
||||
|
||||
export const deleteNavigationItem = async (id: number): Promise<void> => {
|
||||
@@ -65,17 +107,18 @@ export const reorderNavigationItems = async (orders: { id: number; display_order
|
||||
// Social links admin endpoints
|
||||
export const getAllSocialLinks = async (): Promise<SocialLink[]> => {
|
||||
const response = await api.get(`/admin/social-links`);
|
||||
return response.data;
|
||||
const data = Array.isArray(response.data) ? response.data : [];
|
||||
return data.map((it: any) => normalizeSocialLink(it));
|
||||
};
|
||||
|
||||
export const createSocialLink = async (link: Partial<SocialLink>): Promise<SocialLink> => {
|
||||
const response = await api.post(`/admin/social-links`, link);
|
||||
return response.data;
|
||||
return normalizeSocialLink(response.data);
|
||||
};
|
||||
|
||||
export const updateSocialLink = async (id: number, link: Partial<SocialLink>): Promise<SocialLink> => {
|
||||
const response = await api.put(`/admin/social-links/${id}`, link);
|
||||
return response.data;
|
||||
return normalizeSocialLink(response.data);
|
||||
};
|
||||
|
||||
export const deleteSocialLink = async (id: number): Promise<void> => {
|
||||
|
||||
Reference in New Issue
Block a user