UNPKG

2.89 kBJavaScriptView Raw
1var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2 return new (P || (P = Promise))(function (resolve, reject) {
3 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
4 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
5 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
6 step((generator = generator.apply(thisArg, _arguments || [])).next());
7 });
8};
9var __rest = (this && this.__rest) || function (s, e) {
10 var t = {};
11 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
12 t[p] = s[p];
13 if (s != null && typeof Object.getOwnPropertySymbols === "function")
14 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
15 t[p[i]] = s[p[i]];
16 return t;
17};
18import React, { Component } from 'react';
19import { compose } from 'redux';
20import { cloneDeep, isEqual, set } from 'lodash-es';
21import { withCommerceData } from '@brandingbrand/fscommerce';
22export default function withProductDetailData(fetchProduct) {
23 return (WrappedComponent) => {
24 class ProductDetailProvider extends Component {
25 componentDidUpdate(prevProps) {
26 return __awaiter(this, void 0, void 0, function* () {
27 const { commerceToReviewMap, reviewDataSource } = this.props;
28 const commerceData = this.props.commerceData;
29 if (commerceData === undefined || reviewDataSource === undefined) {
30 return;
31 }
32 if (!isEqual(prevProps.commerceData, commerceData)) {
33 const ids = reviewDataSource.productIdMapper([commerceData], commerceToReviewMap);
34 const reviewsData = yield reviewDataSource.fetchReviewDetails({ ids });
35 const newCommerceData = cloneDeep(commerceData);
36 set(newCommerceData, 'review', reviewsData[0]);
37 this.setState({
38 commerceData: newCommerceData,
39 reviewsData
40 });
41 }
42 });
43 }
44 render() {
45 const _a = this.props, { commerceToReviewMap } = _a, props = __rest(_a, ["commerceToReviewMap"]);
46 return (<WrappedComponent {...props} commerceData={(this.state && this.state.commerceData) || this.props.commerceData} reviewsData={(this.state && this.state.reviewsData)}/>);
47 }
48 }
49 return compose(withCommerceData(fetchProduct))(ProductDetailProvider);
50 };
51}
52//# sourceMappingURL=ProductDetailProvider.js.map
\No newline at end of file