UNPKG

@replyke/core

Version:

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

118 lines 5.05 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 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