\n {loadingState === LOADING_STATES.ready && title}\n
\n {itemIds.map((itemId, index) => (\n \n \n
\n ))}\n \n {loadingState === LOADING_STATES.loading && loader}\n {loadingState === LOADING_STATES.error && errorFallback}\n {loadingState === LOADING_STATES.end && noMoreItemsMarker}\n {infiniteScrollEnabled &&\n loadingState !== LOADING_STATES.end &&\n loadingState !== LOADING_STATES.error && (\n
\n )}\n {loadingState === LOADING_STATES.ready && children}\n
\n );\n}\n\nRecommendations.propTypes = {\n className: PropTypes.string,\n collapseIfEmpty: PropTypes.bool,\n createRequestUrl: PropTypes.func.isRequired,\n enableQuickView: PropTypes.bool,\n errorFallback: PropTypes.node,\n infiniteScrollEnabled: PropTypes.bool,\n itm: PropTypes.object,\n loader: PropTypes.node.isRequired,\n noMoreItemsMarker: PropTypes.node,\n onError: PropTypes.func,\n onReachedEnd: PropTypes.func,\n openQuickView: PropTypes.func,\n title: PropTypes.element\n};\n\nRecommendations.defaultProps = {\n className: '',\n collapseIfEmpty: true,\n enableQuickView: false,\n infiniteScrollEnabled: false\n};\n\nconst mapStateToProps = state => ({\n items: state.items.cache,\n isLoggedIn: state.member.isLoggedIn,\n preferredCurrency: state.multiCurrency.preferredCurrency,\n enableQuickView: state.environment.featureSwitches['quick-view']\n});\n\nconst mapDispatchToProps = dispatch => ({\n addItems: items => dispatch(itemActions.add(items)),\n openQuickView: (itemId, itemIds, openedFrom) =>\n dispatch(uiActions.openQuickView({ itemIds, itemId, openedFrom })),\n toggleWishlist: itemId => dispatch(itemActions.wishlist(itemId))\n});\n\nexport { Recommendations, LOADING_STATES };\nexport default connect(mapStateToProps, mapDispatchToProps)(Recommendations);\n","export { default } from './recommendations';\nexport {\n recommendationsRequestBuilder,\n similarItemsRequestBuilder,\n similarItemsFromShopRequestBuilder,\n similarItemsFromCampaignRequestBuilder\n} from './recommendations-requests';\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport RadioSwitch from 'tradera-components/form-controls/radio-switch';\n\nconst ContentSwitch = props => {\n const { className, defaultSelected, onSwitch, options, title } = props;\n const [selected, setSelected] = useState(\n defaultSelected || Object.keys(options)[0]\n );\n // Keep track of which options have been shown to only render what's needed\n const [renderedOptions, setRenderedOptions] = useState([selected]);\n const onChange = useCallback(\n selected => {\n if (!renderedOptions.includes(selected)) {\n setRenderedOptions([...renderedOptions, selected]);\n }\n setSelected(selected);\n if (onSwitch) onSwitch(selected);\n },\n [onSwitch, renderedOptions, setRenderedOptions, setSelected]\n );\n\n return (\n