{"version":3,"file":"reviewsReact.js","mappings":"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","sources":["webpack://productdetail/./SharedComponents/TruncateComponentReact.tsx","webpack://productdetail/./reviewsReact/src/ReviewsComponentReact.tsx","webpack://productdetail/../SharedContent/Observer.ts","webpack://productdetail/../SharedContent/ServiceClass.ts","webpack://productdetail/../SharedContent/SfCustomerModel.ts","webpack://productdetail/../SharedContent/SfProductReviewsJsonStruct.ts","webpack://productdetail/external var \"React\"","webpack://productdetail/external var \"ReactDOM\"","webpack://productdetail/webpack/bootstrap","webpack://productdetail/./reviewsReact/mainReviewsReact.tsx"],"sourcesContent":["import * as React from 'react';\r\n\r\nexport class TruncateComponentReact extends React.Component<any, any>{\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n value: null,\r\n isLoggedIn: false,\r\n truncateContent: props.truncateContent,\r\n truncateHeightThreshold: props.truncateHeightThreshold,\r\n showMoreText: props.showMoreText || undefined,\r\n showLessText: props.showLessText || undefined,\r\n containerId: props.containerId || undefined,\r\n Truncated: false,\r\n TruncateHeight: undefined,\r\n TruncateOverlayHeight: undefined,\r\n truncateClickedByUser:false,\r\n };\r\n this.ToggleTruncate_CLICK = this.ToggleTruncate_CLICK.bind(this);\r\n }\r\n\r\n divElement: HTMLDivElement | undefined;\r\n\r\n ShowTruncate: boolean;\r\n Truncated: boolean;\r\n TruncateHeight: any;\r\n TruncateOverlayHeight: any;\r\n truncateHeightThreshold: number = 200;\r\n\r\n \r\n UNSAFE_componentWillReceiveProps(nextProps){\r\n this.setState({\r\n truncateContent: nextProps.truncateContent,\r\n Truncated: false,\r\n TruncateHeight: 'auto',\r\n ShowTruncate: false,\r\n truncateClickedByUser:false,\r\n });\r\n }\r\n\r\n componentDidUpdate(){\r\n if(!this.state.truncateClickedByUser){\r\n const height = this.divElement.clientHeight;\r\n var truncateHeightThreshold = this.props.truncateHeightThreshold || this.truncateHeightThreshold;\r\n if ((window as any).$GlobalMiddleware.getWindowWidth() > 1024 && height > truncateHeightThreshold) {\r\n this.AddTruncate();\r\n }\r\n }\r\n\r\n }\r\n AddTruncate() {\r\n this.ShowTruncate = true;\r\n this.Truncated = true;\r\n var truncateHeightThreshold = this.props.truncateHeightThreshold || this.truncateHeightThreshold;\r\n this.TruncateHeight = truncateHeightThreshold + 'px';\r\n this.TruncateOverlayHeight = truncateHeightThreshold * .4 + 'px';\r\n this.setState({\r\n Truncated: true,\r\n TruncateHeight: truncateHeightThreshold + 'px',\r\n ShowTruncate: this.ShowTruncate,\r\n TruncateOverlayHeight: truncateHeightThreshold * .4 + 'px'\r\n });\r\n\r\n }\r\n\r\n RemoveTruncate() {\r\n this.ShowTruncate = false;\r\n this.Truncated = false;\r\n this.TruncateHeight = 'auto';\r\n this.setState({\r\n Truncated: false,\r\n TruncateHeight: 'auto',\r\n ShowTruncate: false,\r\n TruncateOverlayHeight: this.TruncateOverlayHeight\r\n });\r\n }\r\n\r\n\r\n render() {\r\n if (this.state.truncateContent) {\r\n return this.getTruncateContent();\r\n }\r\n return this.getEmptyContnet();\r\n }\r\n\r\n\r\n getTruncateContent() {\r\n return <><div className={!this.state.Truncated ? 'truncate__content' : 'truncate__content truncate'}\r\n style={!this.state.Truncated ? { height: 'auto' } : { height: this.state.TruncateHeight }}\r\n ref={(divElement) => this.divElement = divElement}>\r\n\r\n <div className={this.state.ShowTruncate ? 'truncate__wrapper' : ' '}>\r\n <span>\r\n {this.state.truncateContent}\r\n </span>\r\n\r\n </div>\r\n\r\n {(this.state.ShowTruncate && \r\n <div className=\"truncate__overlay\" style={{height: this.state.TruncateOverlayHeight}}></div>\r\n \r\n )}\r\n </div>\r\n {this.getShowMoreShowLessButtons()}\r\n </>\r\n }\r\n\r\n getShowMoreShowLessButtons(){\r\n if(this.state.ShowTruncate){\r\n if(this.state.Truncated){\r\n return <a className=\"truncate-trigger\" onClick={() => this.ToggleTruncate_CLICK()}>{this.state.showMoreText}</a>\r\n }else{\r\n return <a className=\"truncate-trigger\" onClick={() => this.ToggleTruncate_CLICK()}>{this.state.showLessText}</a>\r\n }\r\n }\r\n return <></>;\r\n }\r\n\r\n\r\n ToggleTruncate_CLICK() {\r\n\r\n this.Truncated = !this.Truncated;\r\n if (this.Truncated) {\r\n //let container = (document as any).getElementById(this.containerId);\r\n let pos = this.divElement.getBoundingClientRect();\r\n if (pageYOffset > pos.top + pageYOffset) {\r\n this.divElement.scrollIntoView();\r\n }\r\n }\r\n this.setState({\r\n Truncated: this.Truncated,\r\n truncateClickedByUser:true,\r\n });\r\n return false;\r\n }\r\n\r\n // divStyle = {\r\n // color: 'blue',\r\n // backgroundImage: 'url(' + imgUrl + ')',\r\n // };\r\n\r\n\r\n getEmptyContnet() {\r\n return <></>;\r\n }\r\n}","import * as React from 'react';\r\nimport { Observer } from '../../../SharedContent/Observer'\r\nimport { SfCustomerModel } from '../../../SharedContent/SfCustomerModel'\r\nimport { SfProductReviewsJsonStruct, SfProductReviewsRequest, ProductReviewsPage } from '../../../SharedContent/SfProductReviewsJsonStruct'\r\nimport { ProductReviewsFilteredData, SfProductReviewsRawData } from '../../../SharedContent/ProductReviewsFilteredData'\r\nimport { ServiceModel, SfConfigModel } from '../../../SharedContent/ServiceClass'\r\nimport { TruncateComponentReact } from '../../SharedComponents/TruncateComponentReact';\r\nimport ProductReviewsJsonStruct = require(\"../../../SharedContent/SfProductReviewsJsonStruct\");\r\nimport ProductReviewVoteRequest = ProductReviewsJsonStruct.ProductReviewVoteRequest;\r\n\r\nexport class ReviewsComponentReact extends React.Component<any, any>{\r\n\r\n private static readonly GetReviewsUrl = \"webservicesCORE1/product/GetReviews\";\r\n\r\n private static readonly VoteOnReviewUrl = \"webservicesCORE1/SfCustomerActions/VoteOnReview\";\r\n\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n value: null,\r\n isLoggedIn: false,\r\n renderData: false,\r\n dataIsLoaded: false,\r\n stateObserver: Observer,\r\n sfCustomer: SfCustomerModel,\r\n ProdReviews: SfProductReviewsJsonStruct,\r\n descriptionPanelSizeSelectorClass: \"description__text--small\",\r\n IsMobileDevice: true,\r\n\r\n };\r\n this.setPageIndex_CLICK = this.setPageIndex_CLICK.bind(this);\r\n this.voteReviewUp_CLICK = this.voteReviewUp_CLICK.bind(this);\r\n }\r\n\r\n _prodReviews: SfProductReviewsJsonStruct | undefined;\r\n _config: SfConfigModel = new SfConfigModel();\r\n _serviceModel: ServiceModel = new ServiceModel();\r\n _windowWidth: number;\r\n _windowHeight: number;\r\n _IsMobileDevice: boolean = true;\r\n\r\n componentWillMount() {\r\n (window as any).ReviewsComponentReact = this;\r\n }\r\n componentDidMount() {\r\n\r\n this.setDataOnInit();\r\n //this.initObserverAndSubscribeToSfCustomerSubject();\r\n\r\n }\r\n\r\n openPanel_CLICK() {\r\n\r\n }\r\n\r\n closePanel_CLICK() {\r\n\r\n }\r\n\r\n previousPage_CLICK(evt, location:string=\"top\") {\r\n var pageIndex = this._prodReviews.CurrentSelectedPage.PageId;\r\n if (pageIndex > 1) {\r\n this.setPageIndex(pageIndex - 1, location);\r\n }\r\n }\r\n\r\n nextPage_CLICK(evt, location:string=\"top\") {\r\n //var pageData = this._prodReviews.ProdReviewsPages;\r\n var pageIndex = this._prodReviews.CurrentSelectedPage.PageId; //this.state.ProdReviews.CurrentSelectedPage.PageId;\r\n var pageCount = this.state.ProdReviews.ProdReviewsPages.length;\r\n if (pageCount > 0 && pageIndex < pageCount) {\r\n this.setPageIndex(pageIndex + 1, location); \r\n }\r\n }\r\n\r\n setPageIndex_CLICK(page: any, location:string=\"top\") {\r\n this.setPageIndex(page.PageId, location);\r\n }\r\n\r\n reviewsSort_CHANGE(evt, location:string=\"top\") {\r\n var selection = evt.target.value;\r\n if (selection == 1) {\r\n this._prodReviews.ProdReviewsRequest.mostRecent = true;\r\n } else {\r\n this._prodReviews.ProdReviewsRequest.mostRecent = false;\r\n }\r\n this._prodReviews.CurrentSelectedPage = new ProductReviewsPage(1);\r\n this._prodReviews.ProdReviewsRequest.CurrentPageSelected = this._prodReviews.CurrentSelectedPage;\r\n this.loadData(this._prodReviews.ProdReviewsRequest);\r\n\r\n if(location === 'bottom'){\r\n (window as any ).scrollToTopOfReviews_CLICK();\r\n }\r\n\r\n }\r\n\r\n voteReviewUp_CLICK(prodReview: SfProductReviewsRawData) {\r\n if(!prodReview.CURRENT_USER_VOTED){\r\n var headerMiddleware = (window as any).$HeaderMiddleware\r\n\r\n if (headerMiddleware.SfCustomer !== undefined && headerMiddleware.SfCustomer.LoggedIn) {\r\n //TODO: make a call to the back-end\r\n this.postDataPromise(\r\n new ProductReviewVoteRequest(\r\n prodReview.PRODUCT_REVIEW_ID, headerMiddleware.SfCustomer.CustomerID),\r\n this._config.GetBaseUrl() + ReviewsComponentReact.VoteOnReviewUrl)\r\n .then((response) => {\r\n if (response.success) {\r\n prodReview.VOTED_UP++;\r\n }\r\n this.setState({\r\n ProdReviews: this._prodReviews\r\n }); \r\n });\r\n prodReview.CURRENT_USER_VOTED = true;\r\n } else {\r\n headerMiddleware.MyAccountMiddleware.myAccount_RevealLogin_CLICK();\r\n }\r\n }\r\n\r\n //TODO: there is no back-end functionality implemented yet\r\n }\r\n\r\n setPageIndex(pageId: number, location:string=\"top\") {\r\n //var currentPage = this._prodReviews.CurrentSelectedPage as ProductReviewsPage;\r\n if (pageId && pageId !== this._prodReviews.CurrentSelectedPage.PageId) {\r\n this._prodReviews.CurrentSelectedPage.PageId = pageId;\r\n this._prodReviews.ProdReviewsRequest.CurrentPageSelected = this._prodReviews.CurrentSelectedPage;\r\n this.loadData(this._prodReviews.ProdReviewsRequest);\r\n }\r\n if(location === 'bottom'){\r\n (window as any ).scrollToTopOfReviews_CLICK();\r\n }\r\n }\r\n\r\n\r\n setPanelSizeClass(txtPanelSizeClass: string) {\r\n if (txtPanelSizeClass !== undefined && txtPanelSizeClass !== \"\") {\r\n this.setState({\r\n descriptionPanelSizeSelectorClass: txtPanelSizeClass\r\n })\r\n }\r\n\r\n }\r\n\r\n setDataOnInit() {\r\n var prodMainWrapper = this.get_Prod();\r\n //(storeFrontId: number, productId: number, isRestricted: boolean, avgReviewScore: number, totReviews: number)\r\n this._prodReviews =\r\n new SfProductReviewsJsonStruct(prodMainWrapper.STORE_FRONT_ID,\r\n prodMainWrapper.PRODUCT_ID,\r\n this._config.get_IsRestrictedSite(),\r\n prodMainWrapper.prodMain.SfProductEssentials.AVERAGE_REVIEW_SCORE,\r\n prodMainWrapper.prodMain.SfProductEssentials.TOTAL_REVIEWS);\r\n this.loadDataOnInit();\r\n }\r\n\r\n loadDataOnInit() {\r\n var prodMainWrapper = this.get_Prod();\r\n if (this._prodReviews.ReviewsFilteredData === undefined && prodMainWrapper.prodMain.SfProductEssentials.TOTAL_REVIEWS > 0) {\r\n\r\n if (prodMainWrapper.ProdReviews !== undefined) {\r\n this._prodReviews.ReviewsFilteredData = prodMainWrapper.ProdReviews.ProdReviewsFilteredData as ProductReviewsFilteredData;\r\n\r\n this._prodReviews.ProdReviewsPages = prodMainWrapper.ProdReviews.ProductReviewsPages;\r\n this._prodReviews.CurrentSelectedPage = prodMainWrapper.ProdReviews.ProdReviewsFilteredData.CurrentPage;\r\n this.setState({\r\n ProdReviews: this._prodReviews,\r\n dataIsLoaded: true\r\n })\r\n }\r\n //this.loadData(this._prodReviews.ProdReviewsRequest);\r\n }\r\n }\r\n loadData(sfProdReviewsRequest: SfProductReviewsRequest) {\r\n if (!(window as any).$sfConfigModel.IsRestrictedSite) {\r\n this.postDataPromise(sfProdReviewsRequest, this._config.GetBaseUrl() + ReviewsComponentReact.GetReviewsUrl)\r\n .then(result => {\r\n this._prodReviews.ReviewsFilteredData = result;\r\n if (this._prodReviews.ReviewsFilteredData !== undefined &&\r\n this._prodReviews.ReviewsFilteredData.SfProductReviewsSorted!.length > 0) {\r\n\r\n\r\n this._prodReviews.ProdReviewsPages = result.ProductReviewsPages;\r\n this._prodReviews.CurrentSelectedPage = result.CurrentPage;\r\n this.setState({\r\n ProdReviews: this._prodReviews,\r\n dataIsLoaded: true\r\n })\r\n\r\n }\r\n })\r\n }\r\n }\r\n\r\n get_Prod() {\r\n return (window as any).$prodMainWrapper;//.prodMain.SfProductEssentials.AVERAGE_REVIEW_SCORE\r\n }\r\n\r\n postDataPromise(data: any, url: string) {\r\n return fetch(url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n mode: \"same-origin\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"same-origin\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\", // \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n body: JSON.stringify(data),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n return result;\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n return error;\r\n });\r\n\r\n }\r\n\r\n getDataPromise(url: string) {\r\n return fetch(url, {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n mode: \"same-origin\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"same-origin\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\", // \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n return result;\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n return error;\r\n });\r\n\r\n }\r\n\r\n localResizeObserver: Observer;\r\n initResizeObserverAndSubscribeToSubject() {\r\n this.localResizeObserver = new Observer();\r\n this.localResizeObserver.id = 18;\r\n this.localResizeObserver.name = \"ReviewsReactResizeObserver\"\r\n this.localResizeObserver.update = (suppliedContext) =>\r\n (window as any).ReviewsComponentReact.receiveNotification_ReviewsResizeObserver(suppliedContext);\r\n\r\n try {\r\n setTimeout(function (refObserver) {\r\n if ((window as any).$GlobalMiddleware) {\r\n (window as any).SubscribeResize(refObserver);\r\n }\r\n }, 50, this.localResizeObserver);\r\n\r\n } catch (exception) {\r\n console.log(exception);\r\n }\r\n }\r\n receiveNotification_ReviewsResizeObserver(suppliedContext) {\r\n var self = this;\r\n if (suppliedContext) {\r\n setTimeout(function () {\r\n if (suppliedContext.windowWidth) {\r\n if (suppliedContext.windowWidth > 639 && self._IsMobileDevice) {\r\n self._IsMobileDevice = false;\r\n self.setState({ IsMobileDevice: self._IsMobileDevice });\r\n } else if (suppliedContext.windowWidth < 639 && !self._IsMobileDevice) {\r\n self._IsMobileDevice = true;\r\n self.setState({ IsMobileDevice: self._IsMobileDevice });\r\n }\r\n }\r\n\r\n }, 50)\r\n\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.dataIsLoaded) {\r\n return this.getReviewsContentBody();\r\n }\r\n return this.getEmptyContnet();\r\n }\r\n getEmptyContnet() {\r\n return <></>;\r\n }\r\n\r\n\r\n\r\n getReviewsContentBody() {\r\n return <div id=\"product-review-body\" className=\"reviews__body\" >\r\n {this.getPaginationAndSortingToolbarContent(\"top\")}\r\n <div className=\"reviews__list\">\r\n <div className=\"reviewlist\">\r\n <React.Fragment>\r\n {this.getReviewListContent(this.state.ProdReviews.ReviewsFilteredData.SfProductReviewsSorted)}\r\n </React.Fragment>\r\n </div>\r\n </div>\r\n {this.getPaginationAndSortingToolbarContent(\"bottom\")}\r\n\r\n\r\n </div>\r\n }\r\n getPaginationAndSortingToolbarContent(location: string) {\r\n return <div key={location} id={'review-toolbar-'+location} className=\"reviews__toolbar\">\r\n {this.getPaginationContent(location)}\r\n <div id={'review-sort-'+location} className=\"reviews__sort\">\r\n <label className=\"select__label\" htmlFor=\"review-list-sort\">{(window as any).stringResourcesReviews.SortBy}: </label>\r\n <select className=\"select\" id=\"review-list-sort\" onChange={(evt) => this.reviewsSort_CHANGE(evt, location)}>\r\n <option value=\"0\">{(window as any).stringResourcesReviews.MostHelpful}</option>\r\n <option value=\"1\">{(window as any).stringResourcesReviews.Newest}</option>\r\n </select>\r\n </div>\r\n </div>\r\n }\r\n \r\n\r\n getPaginationContent(location: string) {\r\n return <nav aria-label=\"Pagination\" className=\"reviews__nav\">\r\n <ul className=\"pagination\">\r\n <li key={10000}>\r\n <a href=\"javascript:void(0)\"\r\n onClick={(evt) => this.previousPage_CLICK(evt, location)}\r\n className={this.state.ProdReviews.CurrentSelectedPage.PageId <= 1 ? 'pagination__disabled-item' : ''}\r\n aria-label=\"Previous page\">\r\n {(window as any).$prodMainWrapper.STORE_FRONT_ID !== 519 &&\r\n <span className=\"pagination-button-text\">{(window as any).stringResourcesReviews.Previous}</span>\r\n }\r\n {(window as any).$prodMainWrapper.STORE_FRONT_ID === 519 &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"arrow-prev\" enable-background=\"new 0 0 64 64\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\"><path d=\"m37.379 12.552c-.799-.761-2.066-.731-2.827.069-.762.8-.73 2.066.069 2.828l15.342 14.551h-39.963c-1.104 0-2 .896-2 2s.896 2 2 2h39.899l-15.278 14.552c-.8.762-.831 2.028-.069 2.828.393.412.92.62 1.448.62.496 0 .992-.183 1.379-.552l17.449-16.62c.756-.755 1.172-1.759 1.172-2.828s-.416-2.073-1.207-2.862z\" /></svg>\r\n }\r\n </a>\r\n </li>\r\n\r\n <React.Fragment>\r\n {/* {this.getPageNumbers()} */}\r\n {this.getPageNumbersMAP(this.state.ProdReviews.ProdReviewsPages,\r\n this.state.ProdReviews.CurrentSelectedPage.PageId,\r\n this.state.ProdReviews.ProdReviewsPages.length,\r\n location)}\r\n\r\n </React.Fragment>\r\n\r\n <li key={10001}>\r\n <a href=\"javascript:void(0)\"\r\n onClick={(evt) => this.nextPage_CLICK(evt, location)}\r\n className={this.state.ProdReviews.ProdReviewsPages.length === this.state.ProdReviews.CurrentSelectedPage.PageId ? 'pagination__disabled-item' : ''}\r\n aria-label=\"Next page\">\r\n {(window as any).$prodMainWrapper.STORE_FRONT_ID !== 519 &&\r\n <span className=\"pagination-button-text\">{(window as any).stringResourcesReviews.Next}</span>\r\n }\r\n {(window as any).$prodMainWrapper.STORE_FRONT_ID === 519 &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"arrow-next\" enable-background=\"new 0 0 64 64\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\"><path d=\"m37.379 12.552c-.799-.761-2.066-.731-2.827.069-.762.8-.73 2.066.069 2.828l15.342 14.551h-39.963c-1.104 0-2 .896-2 2s.896 2 2 2h39.899l-15.278 14.552c-.8.762-.831 2.028-.069 2.828.393.412.92.62 1.448.62.496 0 .992-.183 1.379-.552l17.449-16.62c.756-.755 1.172-1.759 1.172-2.828s-.416-2.073-1.207-2.862z\" /></svg>\r\n }\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n }\r\n\r\n\r\n\r\n getPageNumbersMAP(pageData: ProductReviewsPage[], pageIndex: number, pageCount: number, location: string) {\r\n var pageNumbersContent = [];\r\n //var pageData = this.state.ProdReviews.ProdReviewsPages;\r\n //var pageIndex = this.state.ProdReviews.CurrentSelectedPage.PageId;\r\n //var pageCount = this.state.ProdReviews.ProdReviewsPages.length;\r\n var i = 0;\r\n pageData.map(page => {\r\n if (this.truncatePagination(i)) {\r\n pageNumbersContent.push(\r\n <li key={'Page_pagination-item_' + i} className=\"pagination-item\">\r\n <a href=\"javascript:void(0)\"\r\n aria-label=\"Page\"\r\n onClick={() => this.setPageIndex_CLICK(page, location)}\r\n className={pageIndex === page.PageId ? 'pagination__current-item' : ''} >\r\n {page.PageId}\r\n </a>\r\n </li>\r\n );\r\n }\r\n if (i + 1 === pageIndex) {\r\n pageNumbersContent.push(\r\n <li key={'pagination-item--mobile_current-page_' + i} className=\"pagination-item--mobile current-page\">\r\n {page.PageId}\r\n <span> of </span>\r\n </li>);\r\n }\r\n if (i + 1 === pageCount) {\r\n pageNumbersContent.push(\r\n <li key={'pagination-item--mobile_last-page_' + i} className=\"pagination-item--mobile last-page\">\r\n {page.PageId} \r\n <span> of </span>\r\n </li>);\r\n }\r\n if (pageCount > 7) {\r\n if (pageIndex > 4 && i === 1) {\r\n pageNumbersContent.push(\r\n <li key={'pagination-truncate-icon_1_' + i} className=\"pagination-truncate-icon\">\r\n ...\r\n </li>);\r\n }\r\n if (pageIndex < pageCount - 3 && i === pageCount - 2) {\r\n pageNumbersContent.push(\r\n <li key={'pagination-truncate-icon_2_' + i} className=\"pagination-truncate-icon\">\r\n ...\r\n </li>);\r\n }\r\n\r\n\r\n }\r\n i++;\r\n })\r\n\r\n return pageNumbersContent;\r\n }\r\n\r\n truncatePagination(index) {\r\n var pageCount = this.state.ProdReviews.ProdReviewsPages.length;\r\n var pageIndex = this.state.ProdReviews.CurrentSelectedPage.PageId;\r\n if (pageCount > 7) {\r\n\r\n index += 1;\r\n\r\n // Show first 5 paginations when under page index of 4\r\n // This allows the menu pagination not to increase navs size\r\n if (pageIndex <= 4 && index <= 5) {\r\n return true;\r\n }\r\n\r\n // Show current and direct sibling pagination\r\n if (pageIndex > 3 && pageIndex < pageCount - 2) {\r\n for (let i = pageIndex - 1; i <= pageIndex + 1; i++) {\r\n if (index === i) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n // Show last 3 pagination when page index is within last three pages\r\n if (index >= pageCount - 4 && pageIndex >= pageCount - 3) {\r\n return true;\r\n }\r\n\r\n // Show first pagination\r\n if (index === 1) {\r\n return true;\r\n }\r\n\r\n // Show last page pagination\r\n if (index === pageCount) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n getReviewListContent(sfProductReviewsSorted: SfProductReviewsRawData[]) {\r\n\r\n var reviewList = [];\r\n var reviewLang = \"\";\r\n\r\n sfProductReviewsSorted.map(prodReview => {\r\n reviewList.push(\r\n <div className=\"review\" key={prodReview.PRODUCT_REVIEW_ID}>\r\n <h4 className=\"review__title\">{prodReview.TITLE}</h4>\r\n {/* <stars setStarRating={{prodReview.PRODUCT_REVIEW_SCORE}} setStarSize=\"small\"></stars> */}\r\n {this.getStartContent(prodReview.PRODUCT_REVIEW_SCORE)}\r\n <p className=\"review__date\">\r\n\r\n {(window as any).stringResourcesReviews.By} {prodReview.FIRST_NAME} {(window as any).stringResourcesReviews.On} {prodReview.REVIEW_DATE_UIFormatted}\r\n\r\n {\r\n prodReview.VerifiedPurchase ?\r\n <span className=\"review__verified\">\r\n <ul className=\"review__verified--checkmark\">\r\n <li></li>\r\n </ul>\r\n {(window as any).stringResourcesReviews.verifiedPurchase}\r\n </span> :\r\n <span></span>\r\n }\r\n {\r\n prodReview.VerifiedPurchase && prodReview.MachineTranslated ?\r\n <span className=\"review__verfiedTranslated\"> | </span> : \r\n <span></span>\r\n }\r\n {\r\n prodReview.MachineTranslated ? \r\n <span className=\"review__translated\">{(window as any).eval(\"stringResourcesReviews.machineTranslatedFrom\" + prodReview.Language)}</span> :\r\n <span></span>\r\n }\r\n \r\n </p>\r\n\r\n <p className=\"review__body\">\r\n {/* <truncate truncateContent=\"{{prodReview.USER_COMMENT}}\"\r\n truncateHeightThreshold=100\r\n showMoreText=\"Show More\"\r\n showLessText=\"Show Less\"></truncate> */}\r\n {/* {prodReview.USER_COMMENT} */}\r\n <React.Fragment>\r\n {this.getTruncateComponent(prodReview)}\r\n </React.Fragment>\r\n\r\n\r\n </p>\r\n <p className=\"review__helpful\">\r\n <span>{(window as any).stringResourcesReviews.WasThisReviewHelpfulToYou}</span>\r\n <span className=\"review__helpful-wrap\">\r\n <button className=\"review_helpful-btn button button--green button--small\"\r\n onClick={() => this.voteReviewUp_CLICK(prodReview)}>{(window as any).stringResourcesReviews.Yes}</button>\r\n <span className=\"review__helpful-count\">{prodReview.VOTED_UP}</span>\r\n </span>\r\n </p>\r\n </div>\r\n )\r\n })\r\n\r\n return reviewList;\r\n }\r\n getStartContent(prodReviewScore:number){\r\n\r\n return <>\r\n {(window as any).$prodMainWrapper.STORE_FRONT_ID !== 519 &&\r\n <div className=\"review__stars stars stars--this.starSize stars--small\">\r\n <div className=\"stars__fill\" style={{ width: this.getSetStarWidthForStyle(prodReviewScore) }}></div>\r\n <div className=\"stars__hover\" style={{ width: \"0%\" }}></div>\r\n <div className=\"stars__overlay\">\r\n <img src=\"imgs/ratingStars/star-small.png\" />\r\n <img src=\"imgs/ratingStars/star-small.png\" />\r\n <img src=\"imgs/ratingStars/star-small.png\" />\r\n <img src=\"imgs/ratingStars/star-small.png\" />\r\n <img src=\"imgs/ratingStars/star-small.png\" />\r\n </div>\r\n </div>\r\n }\r\n {(window as any).$prodMainWrapper.STORE_FRONT_ID === 519 &&\r\n <div className=\"review__stars stars stars--this.starSize stars--small\">\r\n <div className=\"stars__fill\" style={{ width: this.getSetStarWidthForStyle(prodReviewScore) }}></div>\r\n <div className=\"stars__hover\" style={{ width: \"0%\" }}></div>\r\n <div className=\"stars__overlay\">\r\n <svg viewBox=\"0 0 960.87 871\"><path d=\"M905.87,0H0V871H960.87V0ZM889.55,351Q768.21,439.18,646.82,527.31c-3.4,2.46-3.8,4.45-2.54,8.3Q692.76,684.32,741,833.13c.4,1.24.66,2.53,1.27,4.85-4.64-3.27-8.47-5.91-12.23-8.64Q607.2,740.14,484.47,650.83c-3.16-2.3-5-1.81-7.84.25Q351.3,742.4,225.85,833.58c-1.89,1.38-3.84,2.69-6.78,4.74,3.41-10.68,6.43-20.27,9.54-29.83q44.29-136.23,88.74-272.43c1.45-4.44.41-6.38-3.12-8.93Q188.41,436,62.79,344.63c-1.35-1-2.64-2.05-5.24-4.07h7q155.15,0,310.29.06c4.43,0,6.41-1.09,7.81-5.43q48-148.59,96.34-297.1c.44-1.36,1-2.68,1.94-5.2,2.33,7,4.3,12.86,6.21,18.73q46.1,141.76,92.09,283.58c1.3,4,2.94,5.47,7.29,5.46q154.89-.23,309.78-.15a13.49,13.49,0,0,1,6.11,1C898.11,344.68,893.85,347.84,889.55,351Z\" /></svg>\r\n <svg viewBox=\"0 0 960.87 871\"><path d=\"M905.87,0H0V871H960.87V0ZM889.55,351Q768.21,439.18,646.82,527.31c-3.4,2.46-3.8,4.45-2.54,8.3Q692.76,684.32,741,833.13c.4,1.24.66,2.53,1.27,4.85-4.64-3.27-8.47-5.91-12.23-8.64Q607.2,740.14,484.47,650.83c-3.16-2.3-5-1.81-7.84.25Q351.3,742.4,225.85,833.58c-1.89,1.38-3.84,2.69-6.78,4.74,3.41-10.68,6.43-20.27,9.54-29.83q44.29-136.23,88.74-272.43c1.45-4.44.41-6.38-3.12-8.93Q188.41,436,62.79,344.63c-1.35-1-2.64-2.05-5.24-4.07h7q155.15,0,310.29.06c4.43,0,6.41-1.09,7.81-5.43q48-148.59,96.34-297.1c.44-1.36,1-2.68,1.94-5.2,2.33,7,4.3,12.86,6.21,18.73q46.1,141.76,92.09,283.58c1.3,4,2.94,5.47,7.29,5.46q154.89-.23,309.78-.15a13.49,13.49,0,0,1,6.11,1C898.11,344.68,893.85,347.84,889.55,351Z\" /></svg>\r\n <svg viewBox=\"0 0 960.87 871\"><path d=\"M905.87,0H0V871H960.87V0ZM889.55,351Q768.21,439.18,646.82,527.31c-3.4,2.46-3.8,4.45-2.54,8.3Q692.76,684.32,741,833.13c.4,1.24.66,2.53,1.27,4.85-4.64-3.27-8.47-5.91-12.23-8.64Q607.2,740.14,484.47,650.83c-3.16-2.3-5-1.81-7.84.25Q351.3,742.4,225.85,833.58c-1.89,1.38-3.84,2.69-6.78,4.74,3.41-10.68,6.43-20.27,9.54-29.83q44.29-136.23,88.74-272.43c1.45-4.44.41-6.38-3.12-8.93Q188.41,436,62.79,344.63c-1.35-1-2.64-2.05-5.24-4.07h7q155.15,0,310.29.06c4.43,0,6.41-1.09,7.81-5.43q48-148.59,96.34-297.1c.44-1.36,1-2.68,1.94-5.2,2.33,7,4.3,12.86,6.21,18.73q46.1,141.76,92.09,283.58c1.3,4,2.94,5.47,7.29,5.46q154.89-.23,309.78-.15a13.49,13.49,0,0,1,6.11,1C898.11,344.68,893.85,347.84,889.55,351Z\" /></svg>\r\n <svg viewBox=\"0 0 960.87 871\"><path d=\"M905.87,0H0V871H960.87V0ZM889.55,351Q768.21,439.18,646.82,527.31c-3.4,2.46-3.8,4.45-2.54,8.3Q692.76,684.32,741,833.13c.4,1.24.66,2.53,1.27,4.85-4.64-3.27-8.47-5.91-12.23-8.64Q607.2,740.14,484.47,650.83c-3.16-2.3-5-1.81-7.84.25Q351.3,742.4,225.85,833.58c-1.89,1.38-3.84,2.69-6.78,4.74,3.41-10.68,6.43-20.27,9.54-29.83q44.29-136.23,88.74-272.43c1.45-4.44.41-6.38-3.12-8.93Q188.41,436,62.79,344.63c-1.35-1-2.64-2.05-5.24-4.07h7q155.15,0,310.29.06c4.43,0,6.41-1.09,7.81-5.43q48-148.59,96.34-297.1c.44-1.36,1-2.68,1.94-5.2,2.33,7,4.3,12.86,6.21,18.73q46.1,141.76,92.09,283.58c1.3,4,2.94,5.47,7.29,5.46q154.89-.23,309.78-.15a13.49,13.49,0,0,1,6.11,1C898.11,344.68,893.85,347.84,889.55,351Z\" /></svg>\r\n <svg viewBox=\"0 0 960.87 871\"><path d=\"M905.87,0H0V871H960.87V0ZM889.55,351Q768.21,439.18,646.82,527.31c-3.4,2.46-3.8,4.45-2.54,8.3Q692.76,684.32,741,833.13c.4,1.24.66,2.53,1.27,4.85-4.64-3.27-8.47-5.91-12.23-8.64Q607.2,740.14,484.47,650.83c-3.16-2.3-5-1.81-7.84.25Q351.3,742.4,225.85,833.58c-1.89,1.38-3.84,2.69-6.78,4.74,3.41-10.68,6.43-20.27,9.54-29.83q44.29-136.23,88.74-272.43c1.45-4.44.41-6.38-3.12-8.93Q188.41,436,62.79,344.63c-1.35-1-2.64-2.05-5.24-4.07h7q155.15,0,310.29.06c4.43,0,6.41-1.09,7.81-5.43q48-148.59,96.34-297.1c.44-1.36,1-2.68,1.94-5.2,2.33,7,4.3,12.86,6.21,18.73q46.1,141.76,92.09,283.58c1.3,4,2.94,5.47,7.29,5.46q154.89-.23,309.78-.15a13.49,13.49,0,0,1,6.11,1C898.11,344.68,893.85,347.84,889.55,351Z\" /></svg>\r\n </div>\r\n </div>\r\n }\r\n </>\r\n }\r\n getSetStarWidthForStyle(starRating: number) {\r\n return starRating * 20 + '%';\r\n }\r\n\r\n\r\n getTruncateComponent(prodReview: SfProductReviewsRawData) {\r\n return <TruncateComponentReact\r\n truncateHeightThreshold={100}\r\n truncateContent={prodReview.USER_COMMENT}\r\n showMoreText={\"Show More\"}\r\n showLessText={\"Show Less\"}>\r\n\r\n </TruncateComponentReact>\r\n }\r\n\r\n getTruncateFunction(prodReview: SfProductReviewsRawData) {\r\n return <TruncateFuncReact\r\n truncateHeightThreshold={100}\r\n truncateContent={prodReview.USER_COMMENT}\r\n showMoreText={\"Show More\"}\r\n showLessText={\"Show Less\"}\r\n Truncated={false}\r\n TruncateHeight={'100px'}\r\n TruncateOverlayHeight={'40px'}>\r\n <span dangerouslySetInnerHTML={this.createMarkup(prodReview.USER_COMMENT)}>\r\n </span>\r\n </TruncateFuncReact>\r\n }\r\n\r\n createMarkup(value: string) {\r\n return { __html: value };\r\n }\r\n\r\n\r\n\r\n\r\n}\r\nfunction TruncateFuncReact(props) {\r\n\r\n return <div className={!props.Truncated ? 'truncate__content' : 'truncate__content truncate'}\r\n style={!props.Truncated ? { height: 'auto' } : { height: props.TruncateHeight }}>\r\n\r\n <div className={props.ShowTruncate ? 'truncate__wrapper' : ' '}>\r\n {props.children}\r\n {/* <span>\r\n {props.truncateContent}\r\n </span> */}\r\n\r\n </div>\r\n\r\n {(props.ShowTruncate &&\r\n <div className=\"truncate__overlay\" style={{ height: props.TruncateOverlayHeight }}></div>\r\n )}\r\n\r\n\r\n </div>\r\n}\r\n\r\n// function TruncateComponent(props){\r\n// return <div className=\"truncate__content\" style={props.}>\r\n\r\n// </div>\r\n// }\r\n\r\n\r\n","import { IObserver } from \"./IObserver\";\r\n\r\nexport class Observer implements IObserver{\r\n id: number; \r\n context: any;\r\n name:string;\r\n public update(suppliedContext) {\r\n this.context = suppliedContext;\r\n }\r\n\r\n\r\n}","export class SfConfigModel {\r\n\r\n\r\n _baseURL = undefined;\r\n GetBaseUrl() {\r\n\r\n if (this._baseURL == undefined) {\r\n this._baseURL = (window as any).GetBaseUrlFromDocumentMiddleware();\r\n }\r\n return this._baseURL;\r\n }\r\n\r\n _storeFrontId = undefined;\r\n get_StoreFrontId() {\r\n\r\n if (!this._storeFrontId) {\r\n if ((window as any).$sfConfigModel) {\r\n this._storeFrontId = (window as any).$sfConfigModel.STORE_FRONT_ID;\r\n }\r\n else if (document.getElementById('hidSfid')) {\r\n this._storeFrontId = (document.getElementById('hidSfid') as any).value;\r\n }\r\n\r\n }\r\n return this._storeFrontId;\r\n }\r\n\r\n\r\n _isRestrictedSite = undefined;\r\n get_IsRestrictedSite() {\r\n\r\n if (!this._isRestrictedSite) {\r\n if ((window as any).$sfConfigModel) {\r\n this._isRestrictedSite = (window as any).$sfConfigModel.IsRestrictedSite;\r\n }\r\n else if (document.getElementById('hidIsRestricted')) {\r\n this._isRestrictedSite = (document.getElementById('hidIsRestricted') as any).value;\r\n }\r\n\r\n }\r\n return this._isRestrictedSite;\r\n }\r\n\r\n\r\n}\r\n\r\nexport class ServiceModel{\r\n postDataPromise(data: any, url:string) {\r\n if(data ===undefined || data === null){\r\n data = {};\r\n }\r\n return fetch(url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n mode: \"same-origin\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"same-origin\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\", // \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n body: JSON.stringify(data),\r\n })\r\n .then((response) => {\r\n return response\r\n })\r\n // .then((result) => {\r\n // return result;\r\n // })\r\n .catch((error) => {\r\n console.error(error);\r\n return error;\r\n });\r\n\r\n }\r\n\r\n postJSONDataPromise(data: any, url:string) {\r\n return fetch(url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n mode: \"same-origin\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"same-origin\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\", // \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n body: JSON.stringify(data),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n return result;\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n return error;\r\n });\r\n\r\n }\r\n}","export class SfCustomerModel {\r\n CustomerID: number | undefined;\r\n StoreFrontID: number | undefined;\r\n Token: string | undefined;\r\n LoggedIn: boolean | undefined;\r\n CustomerName: string | undefined;\r\n CustomerLastName: string | undefined;\r\n WishListCount: number | undefined;\r\n KeepMeSignedIn: boolean | undefined;\r\n RegisteredUser: boolean | undefined;\r\n AccountPreferences: AccountPreferences | undefined;\r\n CUSTOMER_SINCE_YEAR: number | undefined;\r\n}\r\nexport interface AccountPreferences {\r\n SelectedTextSize: number | undefined;\r\n ClientTimeZoneOffSet: number | undefined;\r\n DeviceFingerPrint: string | undefined;\r\n}","import { ProductReviewsFilteredData } from \"./ProductReviewsFilteredData\";\r\n\r\nexport class SfProductReviewsJsonStruct {\r\n constructor(storeFrontId: number, productId: number, isRestricted: boolean, avgReviewScore: number, totReviews: number) {\r\n this.STORE_FRONT_ID = storeFrontId;\r\n this.PRODUCT_ID = productId;\r\n this.IsRestrictedSite = isRestricted;\r\n this.AVERAGE_REVIEW_SCORE = avgReviewScore;\r\n this.TOTAL_REVIEWS = totReviews;\r\n this.ProdReviewsRequest = new SfProductReviewsRequest(this.PRODUCT_ID, this.STORE_FRONT_ID, this.IsRestrictedSite, new ProductReviewsPage(1));\r\n if (this.TOTAL_REVIEWS > 0) {\r\n this.HasReviews = true;\r\n }\r\n }\r\n PRODUCT_ID: number;\r\n STORE_FRONT_ID: number;\r\n IsRestrictedSite: boolean;\r\n AVERAGE_REVIEW_SCORE: number;\r\n TOTAL_REVIEWS: number;\r\n HasReviews: boolean;\r\n ReviewsDataLoaded: boolean = false\r\n\r\n ProdReviewsRequest: SfProductReviewsRequest;\r\n ReviewsFilteredData: ProductReviewsFilteredData | undefined;\r\n CurrentSelectedPage: ProductReviewsPage | undefined;\r\n\r\n private _prodReviewPages: ProductReviewsPage[] | undefined;\r\n\r\n public get ProdReviewsPages(): ProductReviewsPage[] {\r\n\r\n if (this._prodReviewPages == undefined) {\r\n let totPages: number = this.PagesCount;\r\n if (this.TOTAL_REVIEWS > 0) {\r\n this._prodReviewPages = Array<ProductReviewsPage>(totPages); //ProductReviesPages[totPages];\r\n for (let i: number = 0; i < totPages; i++) {\r\n //this._prodReviewPages[i].PageId = i + 1;\r\n this._prodReviewPages[i] = new ProductReviewsPage(i + 1);\r\n }\r\n }\r\n }\r\n\r\n return this._prodReviewPages;\r\n }\r\n\r\n public set ProdReviewsPages(value: ProductReviewsPage[]) {\r\n this._prodReviewPages = value;\r\n }\r\n\r\n\r\n private _reviewsPerPage: number = 4;\r\n public get ReviewsPerPage(): number {\r\n return this._reviewsPerPage;\r\n }\r\n\r\n public set ReviewsPerPage(value: number) {\r\n if (value !== undefined && value > 4) {\r\n this._reviewsPerPage = value;\r\n this._pages = 0;\r\n } else {\r\n this._reviewsPerPage = 4;\r\n }\r\n }\r\n\r\n private _pages: number | undefined;\r\n\r\n public get PagesCount(): number {\r\n if ((this._pages == undefined || this._pages == 0) && this.TOTAL_REVIEWS > this.ReviewsPerPage) {\r\n this._pages = Math.ceil(this.TOTAL_REVIEWS / this.ReviewsPerPage);\r\n } else {\r\n this._pages = 1;\r\n }\r\n\r\n return this._pages;\r\n }\r\n\r\n\r\n}\r\n\r\nexport class ProductReviewsPage {\r\n constructor(private pgId: number) {\r\n this.PageId = pgId;\r\n }\r\n PageId: number;\r\n}\r\n\r\nexport class ProductReviewsSorting {\r\n SortId: number;\r\n SortTextUiFormatted: string;\r\n}\r\n\r\nexport class SfProductReviewsRequest {\r\n\r\n constructor(pid: number, sfid: number, isRestricted: boolean, currPage: ProductReviewsPage) {\r\n this.productid = pid;\r\n this.storefrontid = sfid;\r\n this.isrestricted = isRestricted;\r\n this.CurrentPageSelected = currPage;\r\n }\r\n productid: number;\r\n storefrontid: number;\r\n isrestricted: boolean;\r\n rowForm: number = 0;\r\n rowTo: number = 3;\r\n mostRecent: boolean = false;\r\n ReviewsPerPage: number = 4;\r\n CurrentPageSelected: ProductReviewsPage;\r\n}\r\n\r\nexport class ProductReviewVoteRequest {\r\n constructor(rid: number, sfcid: number) {\r\n this.reviewId = rid;\r\n this.sfCustomerId = sfcid;\r\n }\r\n reviewId: number;\r\n sfCustomerId: number;\r\n}","module.exports = React;","module.exports = ReactDOM;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { ReviewsComponentReact } from \"./src/ReviewsComponentReact\";\r\n\r\n//if(!document.getElementById(\"divProdDetailBelowTheFold\")){\r\n\r\n// var divModalContentElement = document.createElement(\"div\");\r\n// divModalContentElement.id = \"divProdDetailBelowTheFold\";\r\n \r\n// var aboveTheFoldDiv = document.getElementsByClassName(\"product-detail__top\")[0];\r\n// aboveTheFoldDiv.parentNode.appendChild(divModalContentElement)\r\n\r\n//}\r\n\r\nReactDOM.render(\r\n <ReviewsComponentReact />,\r\n document.getElementById(\"reviewsReact\")\r\n);"],"names":["props","truncateHeightThreshold","state","value","isLoggedIn","truncateContent","showMoreText","undefined","showLessText","containerId","Truncated","TruncateHeight","TruncateOverlayHeight","truncateClickedByUser","ToggleTruncate_CLICK","bind","UNSAFE_componentWillReceiveProps","nextProps","this","setState","ShowTruncate","componentDidUpdate","height","divElement","clientHeight","window","$GlobalMiddleware","getWindowWidth","AddTruncate","RemoveTruncate","render","getTruncateContent","getEmptyContnet","className","style","ref","getShowMoreShowLessButtons","onClick","pos","getBoundingClientRect","pageYOffset","top","scrollIntoView","React","Component","TruncateComponentReact","ProductReviewVoteRequest","_config","SfConfigModel","_serviceModel","ServiceModel","_IsMobileDevice","renderData","dataIsLoaded","stateObserver","Observer","sfCustomer","SfCustomerModel","ProdReviews","SfProductReviewsJsonStruct","descriptionPanelSizeSelectorClass","IsMobileDevice","setPageIndex_CLICK","voteReviewUp_CLICK","componentWillMount","ReviewsComponentReact","componentDidMount","setDataOnInit","openPanel_CLICK","closePanel_CLICK","previousPage_CLICK","evt","location","pageIndex","_prodReviews","CurrentSelectedPage","PageId","setPageIndex","nextPage_CLICK","pageCount","ProdReviewsPages","length","page","reviewsSort_CHANGE","selection","target","ProdReviewsRequest","mostRecent","ProductReviewsPage","CurrentPageSelected","loadData","scrollToTopOfReviews_CLICK","prodReview","CURRENT_USER_VOTED","headerMiddleware","$HeaderMiddleware","SfCustomer","LoggedIn","postDataPromise","PRODUCT_REVIEW_ID","CustomerID","GetBaseUrl","VoteOnReviewUrl","then","response","success","VOTED_UP","MyAccountMiddleware","myAccount_RevealLogin_CLICK","pageId","setPanelSizeClass","txtPanelSizeClass","prodMainWrapper","get_Prod","STORE_FRONT_ID","PRODUCT_ID","get_IsRestrictedSite","prodMain","SfProductEssentials","AVERAGE_REVIEW_SCORE","TOTAL_REVIEWS","loadDataOnInit","ReviewsFilteredData","ProdReviewsFilteredData","ProductReviewsPages","CurrentPage","sfProdReviewsRequest","$sfConfigModel","IsRestrictedSite","GetReviewsUrl","result","SfProductReviewsSorted","$prodMainWrapper","data","url","fetch","method","mode","cache","credentials","headers","body","JSON","stringify","json","catch","error","console","getDataPromise","initResizeObserverAndSubscribeToSubject","localResizeObserver","id","name","update","suppliedContext","receiveNotification_ReviewsResizeObserver","setTimeout","refObserver","SubscribeResize","exception","log","self","windowWidth","getReviewsContentBody","getPaginationAndSortingToolbarContent","Fragment","getReviewListContent","key","getPaginationContent","htmlFor","stringResourcesReviews","SortBy","onChange","MostHelpful","Newest","href","Previous","xmlns","viewBox","width","d","getPageNumbersMAP","Next","pageData","pageNumbersContent","i","map","truncatePagination","push","index","sfProductReviewsSorted","reviewList","TITLE","getStartContent","PRODUCT_REVIEW_SCORE","By","FIRST_NAME","On","REVIEW_DATE_UIFormatted","VerifiedPurchase","verifiedPurchase","MachineTranslated","eval","Language","getTruncateComponent","WasThisReviewHelpfulToYou","Yes","prodReviewScore","getSetStarWidthForStyle","src","starRating","USER_COMMENT","getTruncateFunction","TruncateFuncReact","dangerouslySetInnerHTML","createMarkup","__html","children","context","_baseURL","_storeFrontId","_isRestrictedSite","GetBaseUrlFromDocumentMiddleware","get_StoreFrontId","document","getElementById","postJSONDataPromise","storeFrontId","productId","isRestricted","avgReviewScore","totReviews","ReviewsDataLoaded","_reviewsPerPage","SfProductReviewsRequest","HasReviews","_prodReviewPages","totPages","PagesCount","Array","_pages","ReviewsPerPage","Math","ceil","pgId","ProductReviewsSorting","pid","sfid","currPage","rowForm","rowTo","productid","storefrontid","isrestricted","rid","sfcid","reviewId","sfCustomerId","module","exports","ReactDOM","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}