import React, { ForwardedRef, forwardRef, useContext, useRef } from 'react'; import ActionSheet from './ActionSheet'; export type TActionSheetOptionsItem = { title: string; icon: string; onPress: () => void }; export type TActionSheetOptions = { options: TActionSheetOptionsItem[]; headerHeight: number; customHeader: React.ReactElement | null; hasCancel?: boolean; }; interface IActionSheetProvider { showActionSheet: (item: TActionSheetOptions) => void; hideActionSheet: () => void; } const context = React.createContext({ showActionSheet: () => {}, hideActionSheet: () => {} }); export const useActionSheet = () => useContext(context); const { Provider, Consumer } = context; export const withActionSheet = (Component: React.ComponentType): typeof Component => forwardRef((props: typeof React.Component, ref: ForwardedRef) => ( {(contexts: IActionSheetProvider) => } )); export const ActionSheetProvider = React.memo(({ children }: { children: React.ReactElement | React.ReactElement[] }) => { const ref: ForwardedRef = useRef(null); const getContext = () => ({ showActionSheet: (options: TActionSheetOptions) => { ref.current?.showActionSheet(options); }, hideActionSheet: () => { ref.current?.hideActionSheet(); } }); return ( <>{children} ); });