UNPKG

@shopgate/engage

Version:
68 lines (64 loc) 3.67 kB
import { connect } from 'react-redux'; import showModal from '@shopgate/pwa-common/actions/modal/showModal'; import { getBaseProduct, getProduct } from '@shopgate/pwa-common-commerce/product/selectors/product'; import addProductsToCart from '@shopgate/pwa-common-commerce/cart/actions/addProductsToCart'; import updateProductsInCart from '@shopgate/pwa-common-commerce/cart/actions/updateProductsInCart'; import { getCartProducts, getActiveFulfillmentSlot, getActiveFulfillmentSlotLocationCode } from '@shopgate/engage/cart/cart.selectors'; import { makeGetFulfillmentPaths, makeGetEnabledFulfillmentMethods, getShopSettings } from '@shopgate/engage/core/config'; import { getRestrictMultiLocationOrders, getFulfillmentSchedulingEnabled } from '@shopgate/engage/core'; import { selectLocation, storeFormInput } from "../action-creators"; import { getFilteredLocations, makeGetLocationInventory, makeGetLocationsForProduct, getPreferredLocation, getUserFormInput, getProductFulfillmentMethods, getIsFetching } from "../selectors"; import { submitReservation } from "../actions"; /** * @typedef {import('./FulfillmentProvider.types').OwnProps} OwnProps * @typedef {import('./FulfillmentProvider.types').StateProps} StateProps * @typedef {import('./FulfillmentProvider.types').DispatchProps} DispatchProps */ /** * @returns {Function} */ function makeMapStateToProps() { /* eslint-disable require-jsdoc */ const getProductCode = (_, props) => props.variantId || props.productId || null; /* eslint-enable require-jsdoc */ const getInventory = makeGetLocationInventory((state, props) => getPreferredLocation(state, props)?.code || null, getProductCode); const getProductLocations = makeGetLocationsForProduct(getProductCode); const getFulfillmentPaths = makeGetFulfillmentPaths(); const getEnabledFulfillmentMethods = makeGetEnabledFulfillmentMethods(); /** * @param {StateProps} state The application state. * @param {OwnProps} props The component props. * @returns {Object} */ return (state, props) => ({ locations: props.noProduct ? getFilteredLocations(state, props) : getProductLocations(state, props), baseProduct: getBaseProduct(state, props), product: getProduct(state, props), location: getPreferredLocation(state, props), inventory: getInventory(state, props), userInput: getUserFormInput(state), fulfillmentPaths: getFulfillmentPaths(state), fulfillmentMethods: getProductFulfillmentMethods(state, props), enabledFulfillmentMethods: getEnabledFulfillmentMethods(state, props), shopSettings: getShopSettings(state), isFetching: getIsFetching(state), restrictMultiLocationOrders: getRestrictMultiLocationOrders(state), cartProducts: getCartProducts(state), fulfillmentSchedulingEnabled: getFulfillmentSchedulingEnabled(state), activeFulfillmentSlot: getActiveFulfillmentSlot(state), activeFulfillmentSlotLocationCode: getActiveFulfillmentSlotLocationCode(state) }); } /** * @param {DispatchProps} dispatch The dispatch function. * @returns {Object} */ const mapDispatchToProps = dispatch => ({ selectLocation: (...params) => dispatch(selectLocation.apply(void 0, params)), submitReservation: (...params) => dispatch(submitReservation.apply(void 0, params)), storeFormInput: (...params) => dispatch(storeFormInput.apply(void 0, params)), addProductsToCart: (...params) => dispatch(addProductsToCart.apply(void 0, params)), updateProductsInCart: (...params) => dispatch(updateProductsInCart.apply(void 0, params)), showModal: (...params) => dispatch(showModal.apply(void 0, params)) }); export default connect(makeMapStateToProps, mapDispatchToProps);