@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
118 lines • 5.05 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 useAxiosPrivate_1 = __importDefault(require("../../config/useAxiosPrivate"));
const useProject_1 = __importDefault(require("../projects/useProject"));
function isBrowserFile(file) {
return typeof File !== "undefined" && file instanceof File;
}
function useCreateEntity() {
const axios = (0, useAxiosPrivate_1.default)();
const { projectId } = (0, useProject_1.default)();
const createEntity = (0, react_1.useCallback)(async (props) => {
const { foreignId, sourceId, spaceId, title, content, attachments, keywords, mentions, location, metadata, excludeUserId, requireUser, isDraft, images, files, } = props;
if (!projectId) {
throw new Error("No projectId available.");
}
// DECISION POINT: JSON vs FormData
const hasImages = images && images.files.length > 0;
const hasFiles = files && files.files.length > 0;
if (hasImages || hasFiles) {
// NEW PATH: Multipart FormData request
const formData = new FormData();
// Append standard entity fields
if (foreignId !== undefined)
formData.append("foreignId", foreignId);
if (sourceId !== undefined)
formData.append("sourceId", sourceId);
if (spaceId !== undefined)
formData.append("spaceId", spaceId);
if (title !== undefined)
formData.append("title", title);
if (content !== undefined)
formData.append("content", content);
if (attachments !== undefined)
formData.append("attachments", JSON.stringify(attachments));
if (keywords !== undefined)
formData.append("keywords", JSON.stringify(keywords));
if (mentions !== undefined)
formData.append("mentions", JSON.stringify(mentions));
if (location !== undefined)
formData.append("location", JSON.stringify(location));
if (metadata !== undefined)
formData.append("metadata", JSON.stringify(metadata));
if (excludeUserId !== undefined)
formData.append("excludeUserId", excludeUserId.toString());
if (requireUser !== undefined)
formData.append("requireUser", requireUser.toString());
if (isDraft !== undefined)
formData.append("isDraft", isDraft.toString());
// Append images
if (hasImages) {
images.files.forEach((file) => {
if (isBrowserFile(file)) {
formData.append("images.files", file, file.name);
}
else {
formData.append("images.files", {
uri: file.uri,
type: file.type || "image/jpeg",
name: file.name,
});
}
});
if (images.options) {
formData.append("images.options", JSON.stringify(images.options));
}
}
// Append files
if (hasFiles) {
files.files.forEach((file) => {
if (isBrowserFile(file)) {
formData.append("files.files", file, file.name);
}
else {
formData.append("files.files", {
uri: file.uri,
type: file.type || "application/octet-stream",
name: file.name,
});
}
});
if (files.options) {
formData.append("files.options", JSON.stringify(files.options));
}
}
// Make multipart request
const response = await axios.post(`/${projectId}/entities`, formData, {
headers: { "Content-Type": "multipart/form-data" },
});
return response.data;
}
else {
// EXISTING PATH: JSON request (unchanged)
const response = await axios.post(`/${projectId}/entities`, {
foreignId,
sourceId,
spaceId,
title,
content,
attachments,
keywords,
mentions,
location,
metadata,
excludeUserId,
requireUser,
isDraft,
});
return response.data;
}
}, [projectId, axios]);
return createEntity;
}
exports.default = useCreateEntity;
//# sourceMappingURL=useCreateEntity.js.map