@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
79 lines • 3.5 kB
JavaScript
;
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