84 lines
1.9 KiB
TypeScript
84 lines
1.9 KiB
TypeScript
|
|
import apiClient from '@/api/client';
|
||
|
|
import toast from 'react-hot-toast';
|
||
|
|
|
||
|
|
export type BannerMediaType = 'IMAGE' | 'VIDEO';
|
||
|
|
|
||
|
|
export interface HomepageBanner {
|
||
|
|
id?: number;
|
||
|
|
|
||
|
|
title?: string;
|
||
|
|
subtitle?: string;
|
||
|
|
|
||
|
|
mediaType: BannerMediaType;
|
||
|
|
|
||
|
|
desktopMediaUrl: string;
|
||
|
|
mobileMediaUrl?: string;
|
||
|
|
|
||
|
|
buttonText?: string;
|
||
|
|
buttonLink?: string;
|
||
|
|
|
||
|
|
openInNewTab: boolean;
|
||
|
|
|
||
|
|
textAlignment?: 'left' | 'center' | 'right';
|
||
|
|
|
||
|
|
sortOrder: number;
|
||
|
|
isActive: boolean;
|
||
|
|
|
||
|
|
createdAt?: string;
|
||
|
|
updatedAt?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const getHomepageBannersApi = async () => {
|
||
|
|
const res = await apiClient.get('/homepage-banners/getAll');
|
||
|
|
return res.data;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const getHomepageBannerApi = async (id: number) => {
|
||
|
|
const res = await apiClient.get(`/homepage-banners/${id}`);
|
||
|
|
return res.data;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const getActiveHomepageBannersApi = async () => {
|
||
|
|
const res = await apiClient.get('/homepage-banners/active');
|
||
|
|
return res.data;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const createHomepageBannerApi = async (data: Partial<HomepageBanner>) => {
|
||
|
|
try {
|
||
|
|
const res = await apiClient.post('/homepage-banners', data);
|
||
|
|
|
||
|
|
toast.success('Banner created successfully');
|
||
|
|
|
||
|
|
return res.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
toast.error(error?.response?.data?.message || 'Failed to create banner');
|
||
|
|
throw error;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
export const updateHomepageBannerApi = async (id: number, data: Partial<HomepageBanner>) => {
|
||
|
|
try {
|
||
|
|
const res = await apiClient.put(`/homepage-banners/${id}`, data);
|
||
|
|
|
||
|
|
toast.success('Banner updated successfully');
|
||
|
|
|
||
|
|
return res.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
toast.error(error?.response?.data?.message || 'Failed to update banner');
|
||
|
|
throw error;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
export const deleteHomepageBannerApi = async (id: number) => {
|
||
|
|
try {
|
||
|
|
const res = await apiClient.delete(`/homepage-banners/${id}`);
|
||
|
|
|
||
|
|
toast.success('Banner deleted successfully');
|
||
|
|
|
||
|
|
return res.data;
|
||
|
|
} catch (error: any) {
|
||
|
|
toast.error(error?.response?.data?.message || 'Failed to delete banner');
|
||
|
|
throw error;
|
||
|
|
}
|
||
|
|
};
|