function segmentData(data: T[], segmentSize: number): T[][] { return data.reduce((acc: T[][], curr, index) => { const segment = Math.floor(index / segmentSize) if (!acc[segment]) { acc[segment] = [] } acc[segment].push(curr) return acc }, []) } export function fetchSegmented( data: T[], createUrl: (ids: T[]) => string, options = {}, segmentSize = 800, ): Promise { return Promise.all( segmentData(data, segmentSize).map((ids) => useBaseFetch(createUrl(ids), options)), ).then((results) => results.flat()) } export function fetchSegmentedWith( data: TId[], fetchFn: (ids: TId[]) => Promise, segmentSize = 800, ): Promise { return Promise.all(segmentData(data, segmentSize).map((ids) => fetchFn(ids))).then((results) => results.flat(), ) } export function asEncodedJsonArray(data: T[]): string { return encodeURIComponent(JSON.stringify(data)) }