UNPKG

@replyke/core

Version:

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

79 lines 3.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = require("react"); const useProject_1 = __importDefault(require("../projects/useProject")); const useAxiosPrivate_1 = __importDefault(require("../../config/useAxiosPrivate")); function useCreateSpace() { const { projectId } = (0, useProject_1.default)(); const axios = (0, useAxiosPrivate_1.default)(); const createSpace = (0, react_1.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; } exports.default = useCreateSpace; //# sourceMappingURL=useCreateSpace.js.map