mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-29 18:13:47 +00:00
fix: tag color bug, FormData interceptor, falsy id check
- Fix tag using category_color instead of its own color when editing - Add FormData auto-detection interceptor in client.ts (root cause of 422) - Remove redundant Content-Type overrides from all 5 upload endpoints - Fix falsy id check (id: 0 treated as null) with strict comparison - Await invalidateQueries to prevent stale dropdown data
This commit is contained in:
@@ -242,11 +242,7 @@ export const adminBroadcastsApi = {
|
||||
formData.append('file', file);
|
||||
formData.append('media_type', mediaType);
|
||||
|
||||
const response = await apiClient.post<MediaUploadResponse>('/cabinet/media/upload', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
});
|
||||
const response = await apiClient.post<MediaUploadResponse>('/cabinet/media/upload', formData);
|
||||
return response.data;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -163,11 +163,7 @@ export const adminPinnedMessagesApi = {
|
||||
formData.append('file', file);
|
||||
formData.append('media_type', mediaType);
|
||||
|
||||
const response = await apiClient.post<MediaUploadResponse>('/cabinet/media/upload', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
});
|
||||
const response = await apiClient.post<MediaUploadResponse>('/cabinet/media/upload', formData);
|
||||
return response.data;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -153,11 +153,7 @@ export const brandingApi = {
|
||||
uploadLogo: async (file: File): Promise<BrandingInfo> => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
const response = await apiClient.post<BrandingInfo>('/cabinet/branding/logo', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
});
|
||||
const response = await apiClient.post<BrandingInfo>('/cabinet/branding/logo', formData);
|
||||
// Invalidate cached blob so it gets re-fetched
|
||||
if (_logoBlobUrl) {
|
||||
URL.revokeObjectURL(_logoBlobUrl);
|
||||
|
||||
@@ -82,6 +82,11 @@ function isAuthEndpoint(url: string | undefined): boolean {
|
||||
}
|
||||
|
||||
apiClient.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {
|
||||
// Let axios set the correct multipart/form-data header with boundary for FormData
|
||||
if (config.data instanceof FormData && config.headers) {
|
||||
delete config.headers['Content-Type'];
|
||||
}
|
||||
|
||||
if (!isAuthEndpoint(config.url)) {
|
||||
let token = tokenStorage.getAccessToken();
|
||||
|
||||
|
||||
@@ -66,10 +66,7 @@ export const newsApi = {
|
||||
const response = await apiClient.post<NewsMediaUploadResponse>(
|
||||
'/cabinet/admin/news/media/upload',
|
||||
formData,
|
||||
{
|
||||
headers: { 'Content-Type': 'multipart/form-data' },
|
||||
signal,
|
||||
},
|
||||
{ signal },
|
||||
);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
@@ -68,11 +68,7 @@ export const ticketsApi = {
|
||||
formData.append('file', file);
|
||||
formData.append('media_type', mediaType);
|
||||
|
||||
const response = await apiClient.post<MediaUploadResponse>('/cabinet/media/upload', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
});
|
||||
const response = await apiClient.post<MediaUploadResponse>('/cabinet/media/upload', formData);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user