@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
73 lines • 3.29 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"));
const useSpace_1 = __importDefault(require("./useSpace"));
function useUpdateSpace() {
const axios = (0, useAxiosPrivate_1.default)();
const { projectId } = (0, useProject_1.default)();
const { setSpace } = (0, useSpace_1.default)();
const updateSpace = (0, react_1.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;
}
exports.default = useUpdateSpace;
//# sourceMappingURL=useUpdateSpace.js.map