@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
103 lines • 4.3 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"));
// 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