@shopgate/engage
Version:
Shopgate's ENGAGE library.
53 lines (51 loc) • 1.58 kB
JavaScript
import "core-js/modules/es.array.reduce.js";
import React, { useMemo } from 'react';
import PropTypes from 'prop-types';
import Context from "./BackInStockSubscriptionsProvider.context";
import connect from "./BackInStockSubscriptionsProvider.connector";
/**
* Back in Stock Provider
* @returns {JSX}
*/
import { jsx as _jsx } from "react/jsx-runtime";
const BackInStockSubscriptionsProvider = ({
subscriptions,
children,
addBackInStockSubscription,
isFetching,
isInitial,
removeBackInStockSubscription,
requestsPossible
}) => {
const groupedSubscriptions = useMemo(() => subscriptions.reduce((acc, subscription) => {
const {
status
} = subscription;
const groupingStatus = status === 'inactive' || status === 'triggered' ? 'past' : status;
acc[groupingStatus].push(subscription);
return acc;
}, {
active: [],
past: []
}), [subscriptions]);
// Create memoized context value.
const value = useMemo(() => ({
subscriptions,
groupedSubscriptions,
addBackInStockSubscription,
removeBackInStockSubscription,
isFetching,
isInitial: isInitial && requestsPossible
}), [addBackInStockSubscription, groupedSubscriptions, isFetching, isInitial, removeBackInStockSubscription, subscriptions, requestsPossible]);
return /*#__PURE__*/_jsx(Context.Provider, {
value: value,
children: children
});
};
BackInStockSubscriptionsProvider.defaultProps = {
children: null,
isFetching: false,
isInitial: true,
requestsPossible: false
};
export default connect(BackInStockSubscriptionsProvider);