@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
68 lines • 2.94 kB
JavaScript
import { useCallback } from "react";
import useProject from "../projects/useProject";
import useAxiosPrivate from "../../config/useAxiosPrivate";
import useSpace from "./useSpace";
function useUpdateSpace() {
const axios = useAxiosPrivate();
const { projectId } = useProject();
const { setSpace } = useSpace();
const updateSpace = useCallback(async ({ spaceId, update }) => {
if (!projectId) {
throw new Error("No projectId available.");
}
if (!spaceId) {
throw new Error("Please pass a spaceId");
}
// Build FormData if files are present, otherwise use JSON
const hasFiles = update.avatar || update.banner;
if (hasFiles) {
const formData = new FormData();
// Append regular fields
if (update.name !== undefined) {
formData.append("name", update.name);
}
if (update.slug !== undefined) {
formData.append("slug", update.slug || "");
}
if (update.description !== undefined) {
formData.append("description", update.description || "");
}
if (update.readingPermission !== undefined) {
formData.append("readingPermission", update.readingPermission);
}
if (update.postingPermission !== undefined) {
formData.append("postingPermission", update.postingPermission);
}
if (update.requireJoinApproval !== undefined) {
formData.append("requireJoinApproval", String(update.requireJoinApproval));
}
if (update.metadata !== undefined) {
formData.append("metadata", JSON.stringify(update.metadata));
}
// Append avatar file and options
if (update.avatar) {
formData.append("avatarFile", update.avatar.file);
formData.append("avatarFile.options", JSON.stringify(update.avatar.options));
}
// Append banner file and options
if (update.banner) {
formData.append("bannerFile", update.banner.file);
formData.append("bannerFile.options", JSON.stringify(update.banner.options));
}
const response = await axios.patch(`/${projectId}/spaces/${spaceId}`, formData, {
headers: { "Content-Type": "multipart/form-data" },
});
return response.data;
}
else {
// No files - use JSON request (backward compatibility)
const response = await axios.patch(`/${projectId}/spaces/${spaceId}`, update);
const updatedSpace = response.data;
setSpace?.(updatedSpace);
return updatedSpace;
}
}, [projectId, axios]);
return updateSpace;
}
export default useUpdateSpace;
//# sourceMappingURL=useUpdateSpace.js.map