UNPKG

@replyke/core

Version:

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

103 lines 4.3 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 useProject_1 = __importDefault(require("../projects/useProject")); const useAxiosPrivate_1 = __importDefault(require("../../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 } = (0, useProject_1.default)(); const axios = (0, useAxiosPrivate_1.default)(); const fetchManyEntities = (0, react_1.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; } exports.default = useFetchManyEntities; //# sourceMappingURL=useFetchManyEntities.js.map