import { WebApplication } from '@/Application/Application' import { ViewControllerManager } from '@/Services/ViewControllerManager' import { observer } from 'mobx-react-lite' import { FunctionComponent, createContext, useCallback, useContext, ReactNode } from 'react' import PremiumFeaturesModal from '@/Components/PremiumFeaturesModal/PremiumFeaturesModal' type PremiumModalContextData = { activate: (featureName: string) => void } const PremiumModalContext = createContext(null) const PremiumModalProvider_ = PremiumModalContext.Provider export const usePremiumModal = (): PremiumModalContextData => { const value = useContext(PremiumModalContext) if (!value) { throw new Error('invalid PremiumModal context') } return value } interface Props { application: WebApplication viewControllerManager: ViewControllerManager children: ReactNode } const PremiumModalProvider: FunctionComponent = observer( ({ application, viewControllerManager, children }: Props) => { const featureName = viewControllerManager.featuresController.premiumAlertFeatureName || '' const showModal = !!featureName const hasSubscription = Boolean( viewControllerManager.subscriptionController.userSubscription && !viewControllerManager.subscriptionController.isUserSubscriptionExpired && !viewControllerManager.subscriptionController.isUserSubscriptionCanceled, ) const activate = useCallback( (feature: string) => { viewControllerManager.featuresController.showPremiumAlert(feature).catch(console.error) }, [viewControllerManager], ) const close = useCallback(() => { viewControllerManager.featuresController.closePremiumAlert() }, [viewControllerManager]) return ( <> {showModal && ( )} {children} ) }, ) PremiumModalProvider.displayName = 'PremiumModalProvider' const PremiumModalProviderWithDeallocateHandling: FunctionComponent = ({ application, viewControllerManager, children, }) => { return ( ) } export default observer(PremiumModalProviderWithDeallocateHandling)