import { createContext, ReactNode, useContext, useMemo, useState } from 'react' type SubscriptionDashboardContextValue = { recurlyLoadError: boolean setRecurlyLoadError: React.Dispatch> showCancellation: boolean setShowCancellation: React.Dispatch> showChangePersonalPlan: boolean setShowChangePersonalPlan: React.Dispatch> } export const SubscriptionDashboardContext = createContext< SubscriptionDashboardContextValue | undefined >(undefined) export function SubscriptionDashboardProvider({ children, }: { children: ReactNode }) { const [recurlyLoadError, setRecurlyLoadError] = useState(false) const [showCancellation, setShowCancellation] = useState(false) const [showChangePersonalPlan, setShowChangePersonalPlan] = useState(false) const value = useMemo( () => ({ recurlyLoadError, setRecurlyLoadError, showCancellation, setShowCancellation, showChangePersonalPlan, setShowChangePersonalPlan, }), [ recurlyLoadError, setRecurlyLoadError, showCancellation, setShowCancellation, showChangePersonalPlan, setShowChangePersonalPlan, ] ) return ( {children} ) } export function useSubscriptionDashboardContext() { const context = useContext(SubscriptionDashboardContext) if (!context) { throw new Error( 'SubscriptionDashboardContext is only available inside SubscriptionDashboardProvider' ) } return context }