UNPKG

@replyke/core

Version:

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

98 lines 4 kB
import { useCallback } from "react"; import useProject from "../projects/useProject"; import useAxiosPrivate from "../../config/useAxiosPrivate"; // Helper to serialize objects into bracket notation for query params const serializeObject = (obj, prefix) => { const params = {}; for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { const paramKey = prefix ? `${prefix}[${key}]` : key; const value = obj[key]; if (value === null || value === undefined) { continue; } if (Array.isArray(value)) { value.forEach((item, index) => { if (item !== null && item !== undefined) { if (typeof item === 'object') { Object.assign(params, serializeObject(item, `${paramKey}[${index}]`)); } else { params[`${paramKey}[${index}]`] = item; } } }); } else if (typeof value === 'object') { Object.assign(params, serializeObject(value, paramKey)); } else { params[paramKey] = value; } } } return params; }; function useFetchManyEntities() { const { projectId } = useProject(); const axios = useAxiosPrivate(); const fetchManyEntities = useCallback(async (params) => { if (!projectId) { throw new Error("No projectId available."); } const queryParams = {}; if (params?.page !== undefined) queryParams.page = params.page; if (params?.limit !== undefined) queryParams.limit = params.limit; if (params?.sortBy) queryParams.sortBy = params.sortBy; if (params?.sortByReaction) queryParams.sortByReaction = params.sortByReaction; if (params?.sortDir) queryParams.sortDir = params.sortDir; if (params?.sortType) queryParams.sortType = params.sortType; if (params?.timeFrame) queryParams.timeFrame = params.timeFrame; if (params?.sourceId) queryParams.sourceId = params.sourceId; if (params?.spaceId) queryParams.spaceId = params.spaceId; if (params?.userId) queryParams.userId = params.userId; if (params?.followedOnly !== undefined) queryParams.followedOnly = params.followedOnly; if (params?.include) { queryParams.include = Array.isArray(params.include) ? params.include.join(',') : params.include; } // Serialize complex filter objects into bracket notation if (params?.keywordsFilters) { Object.assign(queryParams, serializeObject(params.keywordsFilters, 'keywordsFilters')); } if (params?.titleFilters) { Object.assign(queryParams, serializeObject(params.titleFilters, 'titleFilters')); } if (params?.contentFilters) { Object.assign(queryParams, serializeObject(params.contentFilters, 'contentFilters')); } if (params?.attachmentsFilters) { Object.assign(queryParams, serializeObject(params.attachmentsFilters, 'attachmentsFilters')); } if (params?.locationFilters) { Object.assign(queryParams, serializeObject(params.locationFilters, 'locationFilters')); } if (params?.metadataFilters) { Object.assign(queryParams, serializeObject(params.metadataFilters, 'metadataFilters')); } const response = await axios.get(`/${projectId}/entities`, { params: queryParams, }); return response.data; }, [projectId, axios]); return fetchManyEntities; } export default useFetchManyEntities; //# sourceMappingURL=useFetchManyEntities.js.map