import { useCallback, useMemo, useState } from 'react';
export interface CollectionFilterInitialFetchTimingProps {
/**
* At which point the initial fetch of the filter collection data takes place. If this prop is omitted, it will take place on component mount.
* Supported values:
* - `focus`: On the first visitor interaction with the filter component.
* @default undefined - on component mount
* @external
*/
initialFetchTiming?: 'focus';
collection: {
initialFetch: () => unknown;
};
}
export function useCollectionFilterInitialFetchTiming(
props: CollectionFilterInitialFetchTimingProps,
) {
const { initialFetchTiming, collection } = props;
useState(() => {
if (!initialFetchTiming) {
collection.initialFetch();
}
});
const onFocus = useCallback(() => {
initialFetchTiming === 'focus' && collection.initialFetch();
}, [initialFetchTiming]);
const skipInitialFetch = useMemo(
() => initialFetchTiming === 'focus',
[initialFetchTiming],
);
return {
onFocus,
skipInitialFetch,
};
}