import { useCallback } from 'react'
import { useBatcher } from './useBatcher'
import type { ReactBatcherOptions } from './useBatcher'
/**
* A React hook that creates a batched version of a callback function.
* This hook is essentially a wrapper around the basic `batch` function
* that is exported from `@tanstack/pacer`,
* but optimized for React with reactive options and a stable function reference.
*
* The batched function will collect individual calls into batches and execute them
* when batch conditions are met (max size reached, wait time elapsed, or custom logic).
*
* This hook provides a simpler API compared to `useBatcher`, making it ideal for basic
* batching needs. However, it does not expose the underlying Batcher instance.
*
* For advanced usage requiring features like:
* - Manual batch execution
* - Access to batch state and metrics
* - Custom useCallback dependencies
*
* Consider using the `useBatcher` hook instead.
*
* @example
* ```tsx
* // Batch analytics events
* const trackEvents = useBatchedCallback((events: AnalyticsEvent[]) => {
* sendAnalytics(events);
* }, {
* maxSize: 5, // Process when 5 events collected
* wait: 2000 // Or after 2 seconds
* });
*
* // Use in event handlers
*
* ```
*/
export function useBatchedCallback(
fn: (items: Array) => void,
options: ReactBatcherOptions,
): (item: TValue) => void {
const batchedFn = useBatcher(fn, options).addItem
return useCallback((item: TValue) => batchedFn(item), [batchedFn])
}