UNPKG

@replyke/core

Version:

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

74 lines 3.2 kB
import { useCallback } from "react"; import useProject from "../projects/useProject"; import useAxiosPrivate from "../../config/useAxiosPrivate"; function useCreateSpace() { const { projectId } = useProject(); const axios = useAxiosPrivate(); const createSpace = useCallback(async (props) => { if (!projectId) { throw new Error("No projectId available."); } if (!props.name) { throw new Error("Space name is required"); } // Build FormData if files are present, otherwise use JSON const hasFiles = props.avatar || props.banner; if (hasFiles) { const formData = new FormData(); // Append regular fields formData.append("name", props.name); if (props.slug !== undefined && props.slug !== null) { formData.append("slug", props.slug); } if (props.description !== undefined && props.description !== null) { formData.append("description", props.description); } if (props.readingPermission) { formData.append("readingPermission", props.readingPermission); } if (props.postingPermission) { formData.append("postingPermission", props.postingPermission); } if (props.requireJoinApproval !== undefined) { formData.append("requireJoinApproval", String(props.requireJoinApproval)); } if (props.metadata) { formData.append("metadata", JSON.stringify(props.metadata)); } if (props.parentSpaceId) { formData.append("parentSpaceId", props.parentSpaceId); } // Append avatar file and options if (props.avatar) { formData.append("avatarFile", props.avatar.file); formData.append("avatarFile.options", JSON.stringify(props.avatar.options)); } // Append banner file and options if (props.banner) { formData.append("bannerFile", props.banner.file); formData.append("bannerFile.options", JSON.stringify(props.banner.options)); } const response = await axios.post(`/${projectId}/spaces`, formData, { headers: { "Content-Type": "multipart/form-data" }, }); return response.data; } else { // No files - use JSON request (backward compatibility) const response = await axios.post(`/${projectId}/spaces`, { name: props.name, slug: props.slug, description: props.description, readingPermission: props.readingPermission, postingPermission: props.postingPermission, requireJoinApproval: props.requireJoinApproval, metadata: props.metadata, parentSpaceId: props.parentSpaceId, }); return response.data; } }, [projectId, axios]); return createSpace; } export default useCreateSpace; //# sourceMappingURL=useCreateSpace.js.map