import { WebApplication } from '@/UIModels/Application' import { AppState } from '@/UIModels/AppState' 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 appState: AppState children: ReactNode } const PremiumModalProvider: FunctionComponent = observer(({ application, appState, children }: Props) => { const featureName = appState.features.premiumAlertFeatureName || '' const showModal = !!featureName const hasSubscription = Boolean( appState.subscription.userSubscription && !appState.subscription.isUserSubscriptionExpired && !appState.subscription.isUserSubscriptionCanceled, ) const activate = useCallback( (feature: string) => { appState.features.showPremiumAlert(feature).catch(console.error) }, [appState], ) const close = useCallback(() => { appState.features.closePremiumAlert() }, [appState]) return ( <> {showModal && ( )} {children} ) }) PremiumModalProvider.displayName = 'PremiumModalProvider' const PremiumModalProviderWithDeallocateHandling: FunctionComponent = ({ application, appState, children }) => { return } export default observer(PremiumModalProviderWithDeallocateHandling)