feat(media): manage client and project thumbnails
This commit is contained in:
@@ -5,6 +5,7 @@ export interface Client {
|
||||
id: string
|
||||
name: string
|
||||
notes?: string
|
||||
thumbnail?: string | null
|
||||
}
|
||||
|
||||
interface PaginatedResponse<T> {
|
||||
@@ -36,14 +37,36 @@ export const getClients = async (
|
||||
});
|
||||
};
|
||||
|
||||
export const createClient = async (workspaceId: string, data: { name: string; notes: string }) => {
|
||||
const response = await authFetch("/api/clients/", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
workspace_id: workspaceId,
|
||||
...data,
|
||||
}),
|
||||
});
|
||||
const buildClientBody = (
|
||||
workspaceId: string | null,
|
||||
data: { name?: string; notes?: string; thumbnail?: File | null; clear_thumbnail?: boolean },
|
||||
) => {
|
||||
const hasFile = data.thumbnail instanceof File;
|
||||
const shouldClear = Boolean(data.clear_thumbnail);
|
||||
if (!hasFile && !shouldClear) {
|
||||
return {
|
||||
body: JSON.stringify({
|
||||
...(workspaceId ? { workspace_id: workspaceId } : {}),
|
||||
...data,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
const formData = new FormData();
|
||||
if (workspaceId) formData.append("workspace_id", workspaceId);
|
||||
if (data.name !== undefined) formData.append("name", data.name);
|
||||
if (data.notes !== undefined) formData.append("notes", data.notes);
|
||||
if (data.thumbnail) formData.append("thumbnail", data.thumbnail);
|
||||
if (shouldClear) formData.append("clear_thumbnail", "true");
|
||||
return { body: formData };
|
||||
};
|
||||
|
||||
export const createClient = async (workspaceId: string, data: { name: string; notes: string; thumbnail?: File | null }) => {
|
||||
const requestBody = buildClientBody(workspaceId, data);
|
||||
const response = await authFetch("/api/clients/", {
|
||||
method: "POST",
|
||||
body: requestBody.body,
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json().catch(() => null);
|
||||
@@ -54,11 +77,15 @@ export const createClient = async (workspaceId: string, data: { name: string; no
|
||||
return payload;
|
||||
};
|
||||
|
||||
export const updateClient = async (id: string, data: { name?: string; notes?: string }) => {
|
||||
const response = await authFetch(`/api/clients/${id}/`, {
|
||||
method: "PATCH",
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
export const updateClient = async (
|
||||
id: string,
|
||||
data: { name?: string; notes?: string; thumbnail?: File | null; clear_thumbnail?: boolean },
|
||||
) => {
|
||||
const requestBody = buildClientBody(null, data);
|
||||
const response = await authFetch(`/api/clients/${id}/`, {
|
||||
method: "PATCH",
|
||||
body: requestBody.body,
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json().catch(() => null);
|
||||
|
||||
Reference in New Issue
Block a user