UNPKG

2.5 kBJavaScriptView Raw
1var __rest = (this && this.__rest) || function (s, e) {
2 var t = {};
3 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4 t[p] = s[p];
5 if (s != null && typeof Object.getOwnPropertySymbols === "function")
6 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
7 t[p[i]] = s[p[i]];
8 return t;
9};
10import React, { Component } from 'react';
11import { compose } from 'redux';
12import { cloneDeep, get, isEqual, isFunction, set } from 'lodash-es';
13import { withCommerceData, withReviewData } from '@brandingbrand/fscommerce';
14export default function withProductDetailData(fetchProduct, fetchReview) {
15 return (WrappedComponent) => {
16 class ProductDetailProvider extends Component {
17 componentWillReceiveProps(nextProps) {
18 const { commerceData, commerceToReviewMap, reviewProviderDoUpdate } = this.props;
19 const getReviewId = (product) => {
20 if (isFunction(commerceToReviewMap)) {
21 return commerceToReviewMap(product);
22 }
23 else if ('string' === typeof commerceToReviewMap) {
24 return get(product, commerceToReviewMap);
25 }
26 return product.id;
27 };
28 if (nextProps.commerceData) {
29 if (!isEqual(commerceData, nextProps.commerceData) && reviewProviderDoUpdate) {
30 const ids = getReviewId(nextProps.commerceData);
31 reviewProviderDoUpdate({ ids });
32 }
33 else if (nextProps.reviewsData && nextProps.reviewsData.length) {
34 const newCommerceData = cloneDeep(nextProps.commerceData);
35 set(newCommerceData, 'review', nextProps.reviewsData[0]);
36 this.setState({ commerceData: newCommerceData });
37 }
38 }
39 }
40 render() {
41 const _a = this.props, { commerceToReviewMap } = _a, props = __rest(_a, ["commerceToReviewMap"]);
42 return (<WrappedComponent {...props} commerceData={(this.state && this.state.commerceData) || this.props.commerceData}/>);
43 }
44 }
45 return compose(withCommerceData(fetchProduct), withReviewData(fetchReview))(ProductDetailProvider);
46 };
47}
48//# sourceMappingURL=ProductDetailProvider.js.map
\No newline at end of file