import { type ReactElement, useCallback } from 'react'; import { type BottomSheetScrollableProps, BottomSheetScrollView, } from '../components/bottomSheetScrollable'; type BottomSheetScrollableCreatorConfigs = {} & BottomSheetScrollableProps; /** * A custom hook that creates a scrollable component for third-party libraries * like `LegendList` or `FlashList` to integrate the interaction and scrolling * behaviors with th BottomSheet component. * * @param configs - Configuration options for the scrollable creator. * @param configs.focusHook - This needed when bottom sheet used with multiple scrollables to allow bottom sheet * detect the current scrollable ref, especially when used with `React Navigation`. * You will need to provide `useFocusEffect` from `@react-navigation/native`. * @param configs.scrollEventsHandlersHook - Custom hook to provide scroll events handler, which will allow advance and * customize handling for scrollables. * @param configs.enableFooterMarginAdjustment - Adjust the scrollable bottom margin to avoid the animated footer. * * @example * ```tsx * const BottomSheetLegendListScrollable = useBottomSheetScrollableCreator(); * * // Usage in JSX * * ``` */ // biome-ignore lint/suspicious/noExplicitAny: out of my control export function useBottomSheetScrollableCreator({ focusHook, scrollEventsHandlersHook, enableFooterMarginAdjustment, }: BottomSheetScrollableCreatorConfigs = {}): ( props: T, ref?: never ) => ReactElement { return useCallback( function useBottomSheetScrollableCreator( // @ts-expect-error { data: _, ...props }: T, ref?: never ): ReactElement { return ( // @ts-expect-error ); }, [focusHook, scrollEventsHandlersHook, enableFooterMarginAdjustment] ); }