import type { UnknownResource } from "@src/component"; import checkValueInIntervalRecursive from "@src/helpers/datas/checkValueInIntervalRecursive"; /** * Filters an array of Resource objects based on whether a specific date/number property * falls within a given interval string (e.g., "2023-01-01/2023-01-31" or "3/6"). * Checks the property recursively within nested objects and arrays. */ const filterObjectByDateInterval = ( array: UnknownResource[], propName: string, interval: string, ): UnknownResource[] => { if (!propName || !interval || typeof interval !== "string") { return array; } const [startStr, endStr] = interval.split("/"); if (!startStr) { return array; } const startDate = new Date(startStr); const endDate = new Date(endStr ?? startStr); if (Number.isNaN(startDate.getTime()) || Number.isNaN(endDate.getTime())) { console.warn(`Invalid date interval provided: ${interval}`); return array; } endDate.setHours(23, 59, 59, 999); if (startDate > endDate) { console.warn(`Start date is after end date in interval: ${interval}`); return array; } return array.filter((obj) => checkValueInIntervalRecursive(obj, propName, startDate, endDate), ); }; export default filterObjectByDateInterval;