/** * External dependencies */ import { useState, createContext, useEffect } from '@wordpress/element'; /** * Internal dependencies */ import { SubscriptionsContextType } from './types'; import { Subscription } from '../components/my-subscriptions/types'; import { fetchSubscriptions, refreshSubscriptions as fetchSubscriptionsFromWooCom, } from '../utils/functions'; export const SubscriptionsContext = createContext< SubscriptionsContextType >( { subscriptions: [], setSubscriptions: () => {}, loadSubscriptions: () => new Promise( () => {} ), refreshSubscriptions: () => new Promise( () => {} ), isLoading: true, setIsLoading: () => {}, } ); export function SubscriptionsContextProvider( props: { children: JSX.Element; } ): JSX.Element { const [ subscriptions, setSubscriptions ] = useState< Array< Subscription > >( [] ); const [ isLoading, setIsLoading ] = useState( true ); const loadSubscriptions = ( toggleLoading?: boolean ) => { if ( toggleLoading === true ) { setIsLoading( true ); } return fetchSubscriptions() .then( ( subscriptionResponse ) => { setSubscriptions( subscriptionResponse ); } ) .finally( () => { if ( toggleLoading ) { setIsLoading( false ); } } ); }; const refreshSubscriptions = () => { return fetchSubscriptionsFromWooCom().then( ( subscriptionResponse ) => { setSubscriptions( subscriptionResponse ); } ); }; useEffect( () => { loadSubscriptions( true ); }, [] ); const contextValue = { subscriptions, setSubscriptions, loadSubscriptions, refreshSubscriptions, isLoading, setIsLoading, }; return ( { props.children } ); }