import type { Dispatch } from 'react'; import { createContext, useContext } from 'react'; import type { ActionType, Position, State } from '../state'; import type { OnPressSelectControlType, OptionalToRequired, SelectProps } from '../types'; type SelectContextProviderTypes = OptionalToRequired< { aboveSelectControl: Position['aboveSelectControl']; } & Pick< SelectProps, | 'animation' | 'disabled' | 'hideArrow' | 'clearable' | 'multiple' | 'separatedMultiple' | 'widthThreshold' | 'placeholderText' | 'placeholderTextColor' | 'searchPattern' | 'selectInputProps' | 'onRemove' | 'styles' | 'clearOptionButtonProps' | 'clearOptionImageProps' | 'arrowContainerProps' | 'arrowImageProps' | 'selectRightIconsProps' | 'selectLeftIconsProps' | 'selectLeftIconImageProps' | 'selectTextProps' | 'selectContainerProps' | 'onSelectChangeText' > & Pick< State, 'optionsData' | 'searchValue' | 'selectedOption' | 'selectedOptionIndex' | 'isOpened' > & { onPressSelectControl: OnPressSelectControlType; dispatch: Dispatch>; setOptionsListPosition: () => Promise; } >; const createSafeContext = () => { const context = createContext | undefined>(undefined); const useHookContext = () => { const value = useContext(context); if (value === undefined) { throw new Error('useContext must be inside a Provider with a value'); } return value; }; return [useHookContext, context.Provider] as const; }; export const [useSelectContext, SelectContextProvider] = createSafeContext();