UNPKG

@replyke/core

Version:

Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.

68 lines 2.94 kB
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