UNPKG

@shopgate/engage

Version:
67 lines (65 loc) 1.9 kB
import React, { useState, useMemo, useCallback, useEffect } from 'react'; import PropTypes from 'prop-types'; import { useRoute, LoadingProvider } from '@shopgate/engage/core'; import connect from "./OrderDetailsPrivateProvider.connector"; import Context from "./OrderDetailsProvider.context"; /** * @param {Object} props The component props. * @returns {JSX} */ import { jsx as _jsx } from "react/jsx-runtime"; const OrderDetailsProvider = ({ order, orderNumber, shopSettings, userLocation, fetchOrderDetails, cancelOrder, children }) => { const { pathname } = useRoute(); const [isLoading, setIsLoading] = useState(false); const handleRequest = useCallback(async () => { setIsLoading(true); await fetchOrderDetails(orderNumber); setIsLoading(false); }, [fetchOrderDetails, orderNumber]); const handleCancel = useCallback(async () => { setIsLoading(true); await cancelOrder(orderNumber); setIsLoading(false); }, [cancelOrder, orderNumber]); // Loading state useEffect(() => { if (isLoading) { LoadingProvider.setLoading(pathname); return; } LoadingProvider.unsetLoading(pathname); }, [isLoading, pathname]); useEffect(() => { handleRequest(); }, [handleRequest]); const value = useMemo(() => ({ order, isLoading, supportedCountries: shopSettings.supportedCountries, countrySortOrder: shopSettings.countrySortOrder, userLocation, fetchOrderDetails, cancelOrder: handleCancel }), [order, isLoading, shopSettings.supportedCountries, shopSettings.countrySortOrder, userLocation, fetchOrderDetails, handleCancel]); return /*#__PURE__*/_jsx(Context.Provider, { value: value, children: children }); }; OrderDetailsProvider.defaultProps = { children: null, shopSettings: null, userLocation: null, order: null }; export default connect(OrderDetailsProvider);