{"version":3,"file":"7979.4403bebb265843027067.js","mappings":"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","sources":["webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/AnimationComponents/view-more-section.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/hooks/useIsOverflow.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Basket/notice-list.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Modal/modal-spinner.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/AnimationComponents/load-spinner.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/FormInputs/dropdown-checkboxes.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-email.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Tabs/tab.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Tabs/tabs.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactReducers/Profile/profile-composer.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactReducers/ProductPicker/product-picker-composer.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductPicker/product-picker-radio-select.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductPicker/product-picker-selected-details.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductPicker/product-picker-selected-typelist.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/LoginModal/login-modal.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductPicker/product-picker.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductDescription/product-description-error-boundary.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductDescription/product-description.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TrialLicense/TrialLicenseMediaTypeList/trial-license-media-type-radio-item.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TrialLicense/TrialLicenseMediaTypeList/trial-license-media-type-list.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-chevron-right.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductMediaLink/product-media-link-with-callback.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-book-open.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactReducers/TrialLicense/trial-license-composer.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TrialLicense/trial-license-link.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/ProductMediaLink/product-media-link.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-bars.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/product-review-block.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/tab-facts.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-pdf.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/tab-free-materials.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Icons/icon-website.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/ProductPage/product-page.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactViews/ProductPage/product-page-view.js"],"sourcesContent":["import React, { ReactNode, useState } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport { useIsOverflow } from \"hooks/useIsOverflow\";\r\n\r\ninterface IViewMoreSectionProps {\r\n children: ReactNode;\r\n}\r\nconst ViewMoreSection = ({ children }: IViewMoreSectionProps) => {\r\n const { ref, isOverflow } = useIsOverflow();\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const toggle = () => setIsOpen(!isOpen);\r\n\r\n const rootClasses = classNames({\r\n \"view-more-section\": true,\r\n \"no-shadow\": !isOverflow || isOpen,\r\n open: isOpen\r\n });\r\n const arrowClasses = classNames({\r\n \"arrow-icon\": isOverflow || isOpen,\r\n \"arrow-icon-down\": !isOpen,\r\n \"arrow-icon-up\": isOpen\r\n });\r\n\r\n return (\r\n <>\r\n
\r\n {children}\r\n
\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ViewMoreSection;\r\n","import { useLayoutEffect, useRef, useState } from \"react\";\r\n\r\nexport const useIsOverflow = (callback?: (hasOverflow: boolean) => void) => {\r\n const [isOverflow, setIsOverflow] = useState(false);\r\n const ref = useRef(null);\r\n\r\n useLayoutEffect(() => {\r\n const { current } = ref;\r\n\r\n const trigger = () => {\r\n const hasOverflow =\r\n (current as HTMLDivElement).scrollHeight > (current as HTMLDivElement).clientHeight;\r\n\r\n setIsOverflow(hasOverflow);\r\n\r\n if (callback) callback(hasOverflow);\r\n };\r\n if (current != null) {\r\n trigger();\r\n }\r\n }, [callback, ref]);\r\n\r\n return { ref, isOverflow };\r\n};\r\n","import React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nclass NoticeList extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const noticeArray = this.props.noticeArray;\r\n const contentInfoClasses = classNames(\"content-info\", {\r\n \"no-icon\": this.props.noIcon\r\n });\r\n\r\n return (\r\n
\r\n {noticeArray.map((item, idx) => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default NoticeList;\r\n","import React from \"react\";\r\nimport Modal from \"ReactComponents/Modal/modal\";\r\nimport LoadSpinner from \"ReactComponents/Shared/AnimationComponents/load-spinner\";\r\n\r\nfunction ModalSpinner(props) {\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ModalSpinner;\r\n","import React, { Component } from \"react\";\r\n\r\nclass LoadSpinner extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default LoadSpinner;\r\n","import React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\n/**\r\n * @param (object Array) this.props.dataSource\r\n * @param (function) this.props.onChange (will recive new dataSouceArray)\r\n * @param (boolean) expanded (show or hide)\r\n * @param (function) used to close expanded variable with this.props.closeFunction(false)\r\n */\r\nclass DropdownCheckboxes extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n data: this.props.dataSource.slice() || []\r\n };\r\n\r\n this.dropdownRef = React.createRef();\r\n this.keyEventHandler = this.keyEventHandler.bind(this);\r\n this.close = this.close.bind(this);\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n this.updateItem = this.updateItem.bind(this);\r\n this.checkboxSubmitHandler = this.checkboxSubmitHandler.bind(this);\r\n }\r\n\r\n close() {\r\n this.setState({\r\n data: this.props.dataSource\r\n });\r\n this.props.closeFunction(false);\r\n }\r\n\r\n keyEventHandler(e) {\r\n if (e.key == \"Escape\") {\r\n this.close();\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.expanded) {\r\n document.addEventListener(\"click\", this.handleClickOutside, { capture: true });\r\n document.addEventListener(\"keyup\", this.keyEventHandler);\r\n } else {\r\n document.removeEventListener(\"click\", this.handleClickOutside, { capture: true });\r\n document.removeEventListener(\"keyup\", this.keyEventHandler);\r\n }\r\n }\r\n\r\n handleClickOutside(event) {\r\n const domNode = this.dropdownRef.current;\r\n if (!domNode || !domNode.contains(event.target)) {\r\n this.close();\r\n }\r\n }\r\n\r\n checkboxSubmitHandler() {\r\n this.props.onChange(this.state.data);\r\n }\r\n\r\n updateItem(item, idx) {\r\n const arr = this.state.data;\r\n const newarr = arr.slice().map((obj, i) => {\r\n if (i == idx) {\r\n obj.Selected = !item.Selected;\r\n }\r\n return Object.assign({}, obj);\r\n });\r\n this.setState({\r\n data: newarr\r\n });\r\n }\r\n\r\n render() {\r\n const list = (\r\n \r\n );\r\n\r\n const classes = classNames({\r\n \"dropdown-checkbox\": true,\r\n isExpanded: this.props.expanded\r\n });\r\n const selectBtnText = this.props.selectBtnText || \"Vælg klasser\";\r\n\r\n return (\r\n
\r\n {this.props.expanded && (\r\n
\r\n
{list}
\r\n
\r\n \r\n {selectBtnText}\r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default DropdownCheckboxes;\r\n","import React, { Component } from \"react\";\r\n\r\nclass IconEmail extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default IconEmail;\r\n","import React, { Component } from \"react\";\r\n\r\nclass Tab extends Component {\r\n render() {\r\n return (\r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Tab;\r\n","import React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nclass Tabs extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n isCurrent: 0,\r\n counter: 0\r\n };\r\n\r\n this.setCurrent = this.setCurrent.bind(this);\r\n this.onKeyDown = this.onKeyDown.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.initialCurrentIndex !== this.props.initialCurrentIndex) {\r\n this.setState({\r\n isCurrent: this.props.initialCurrentIndex,\r\n counter: this.props.initialCurrentIndex\r\n });\r\n }\r\n }\r\n\r\n setCurrent(tab, counter) {\r\n this.setState({\r\n isCurrent: tab,\r\n counter: counter\r\n });\r\n }\r\n\r\n onKeyDown(e) {\r\n const tabs = document.querySelectorAll('[role=\"tab\"]');\r\n\r\n let tabFocus = this.state.isCurrent;\r\n let counter = this.state.counter;\r\n\r\n const availableFocusIndex = [];\r\n\r\n tabs.forEach((item, index) => {\r\n if (!item.disabled) {\r\n availableFocusIndex.push(index);\r\n }\r\n });\r\n\r\n if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\" || e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\r\n tabs[tabFocus].setAttribute(\"tabindex\", -1);\r\n // Move right\r\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") {\r\n counter++;\r\n tabFocus = availableFocusIndex[counter];\r\n // If we're at the end, go to the start\r\n if (counter >= availableFocusIndex.length) {\r\n tabFocus = 0;\r\n counter = 0;\r\n }\r\n // Move left\r\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") {\r\n counter--;\r\n tabFocus = availableFocusIndex[counter];\r\n // If we're at the start, move to the end\r\n if (counter < 0) {\r\n tabFocus = tabs.length - 1;\r\n counter = availableFocusIndex.length - 1;\r\n }\r\n }\r\n\r\n tabs[tabFocus].setAttribute(\"tabindex\", 0);\r\n tabs[tabFocus].focus();\r\n this.setCurrent(tabFocus, counter);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const tabList = document.querySelector('[role=\"tablist\"]');\r\n tabList.addEventListener(\"keydown\", this.onKeyDown, false);\r\n }\r\n\r\n componentWillUnmount() {\r\n const tabList = document.querySelector('[role=\"tablist\"]');\r\n tabList.removeEventListener(\"keydown\", this.onKeyDown, false);\r\n }\r\n\r\n render() {\r\n const childTabs = this.props.children.filter(child => {\r\n return child != false;\r\n });\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {childTabs.map((child, index) => {\r\n const tabClasses = classNames({\r\n tabs__menu__tab: true,\r\n active: this.state.isCurrent == index,\r\n disabled: child.props.isDisabled\r\n });\r\n return (\r\n this.setCurrent(index)}\r\n >\r\n {child.props.label}\r\n {child.props.labelCount && {child.props.labelCount}}\r\n \r\n );\r\n })}\r\n
\r\n
\r\n\r\n
{childTabs[this.state.isCurrent]}
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Tabs;\r\n","// @ts-check\r\nimport { connect } from \"react-redux\";\r\nimport { profileSelector, profileActions } from \"./profile-reducer\";\r\n\r\nexport const mapStateToProps = function (state) {\r\n return {\r\n userInfo: profileSelector.userInfo(state),\r\n loggedIn: profileSelector.loggedIn(state),\r\n loginUrl: profileSelector.loginUrl(state),\r\n logoutUrl: profileSelector.logoutUrl(state),\r\n profileLinks: profileSelector.profileLinks(state),\r\n userName: profileSelector.userName(state),\r\n userCreatePending: profileSelector.userCreatePending(state),\r\n loginRedirecting: profileSelector.loginRedirecting(state),\r\n createLoginContent: profileSelector.createLoginContent(state),\r\n createProfileUrl: profileSelector.createProfileUrl(state),\r\n createProfileUniLoginUrl: profileSelector.createProfileUniLoginUrl(state),\r\n uniPromptContent: profileSelector.uniPromptContent(state),\r\n isUniLoggedInOnly: profileSelector.isUniLoggedInOnly(state)\r\n };\r\n};\r\n\r\nexport const mapDispatchToProps = function (dispatch) {\r\n return {\r\n userLoggedIn: () => dispatch(profileActions.userLoggedIn()),\r\n userLogin: () => dispatch(profileActions.userLogin()),\r\n unicConnect: () => dispatch(profileActions.unicConnect()),\r\n userLogout: () => dispatch(profileActions.userLogout()),\r\n userCreateSubmit: (userinfo, resolve, reject, apiUrl) =>\r\n dispatch(profileActions.userCreateSubmit({ userinfo, resolve, reject, apiUrl })),\r\n getNewsletterProfile: (email, resolve, reject, apiUrl) =>\r\n dispatch(profileActions.getNewsletterProfile({ email, resolve, reject, apiUrl }))\r\n };\r\n};\r\n\r\nexport function profileComposer(Component) {\r\n return connect(mapStateToProps, mapDispatchToProps)(Component);\r\n}\r\n","import { connect } from \"react-redux\";\r\nimport { productPickerSelector, productPickerActions } from \"./product-picker-reducer\";\r\nimport { profileSelector } from \"../Profile/profile-reducer\";\r\nimport { basketSelector, basketActions } from \"ReactReducers/Basket/basket-reducer\";\r\n\r\nexport function productPickerComposer(Component) {\r\n const mapStateToProps = function (state) {\r\n return {\r\n productPickerWork: productPickerSelector.work(state),\r\n productPickerProduct: productPickerSelector.productIndex(state),\r\n productPickerBasketProductConfig: productPickerSelector.basketProductConfig(state),\r\n amount: productPickerSelector.amount(state),\r\n salesConfigIndex: productPickerSelector.salesConfigIndex(state),\r\n periodValueIndex: productPickerSelector.periodValueIndex(state),\r\n primaryPrice: productPickerSelector.primaryPrice(state),\r\n secondaryPrice: productPickerSelector.secondaryPrice(state),\r\n classesValue: productPickerSelector.classesValue(state),\r\n isGettingProductPrice: productPickerSelector.isGettingProductPrice(state),\r\n isAdding: basketSelector.isAdding(state),\r\n basket: basketSelector.basket(state),\r\n loggedIn: profileSelector.loggedIn(state)\r\n };\r\n };\r\n\r\n const mapDispatchToProps = function (dispatch) {\r\n return {\r\n setWork: work => dispatch(productPickerActions.setWork(work)),\r\n setProductIndex: productIndex => dispatch(productPickerActions.setProductIndex(productIndex)),\r\n setAmount: quantity => dispatch(productPickerActions.setAmount(quantity)),\r\n setSalesConfigIndex: index => dispatch(productPickerActions.setSalesConfigIndex(index)),\r\n setPeriodValueIndex: index => dispatch(productPickerActions.setPeriodValueIndex(index)),\r\n setClassesValue: classesData => dispatch(productPickerActions.setClassesValue(classesData)),\r\n basketAdd: basketItem => dispatch(basketActions.basketAdd(basketItem))\r\n };\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(Component);\r\n}\r\n","import React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport { InfoTypes } from \"ReactComponents/Shared/Constants/info-types\";\r\nimport propTypes from \"prop-types\";\r\nimport AmountInput from \"ReactComponents/Shared/FormInputs/amount-input\";\r\nimport DeliveryCostsModalButton from \"ReactComponents/DeliveryCostsModalButton/delivery-costs-modal-button\";\r\n\r\nclass ProductPickerRadioSelect extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.clickHandler = this.clickHandler.bind(this);\r\n }\r\n\r\n clickHandler(e, index) {\r\n e.preventDefault();\r\n const event = e;\r\n event.target.value = index;\r\n this.props.onChange(event);\r\n }\r\n\r\n render() {\r\n const currentSalesConfig = this.props.salesConfigIndex || 0;\r\n\r\n return (\r\n
\r\n {this.props.Work.Products.map((product, index) => {\r\n const isCurrent = this.props.Work.Products[this.props.current].Id == product.Id;\r\n const productConfig = product.PriceConfigurations[currentSalesConfig];\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst ProductComponent = ({\r\n index,\r\n isCurrent,\r\n product,\r\n productConfig,\r\n setAmount,\r\n amount,\r\n clickHandler,\r\n productDeliveryInfo\r\n}) => {\r\n const classList = classNames(\"product-picker__item\", {\r\n selected: isCurrent,\r\n \"radio__indicator--selected\": isCurrent,\r\n \"product-picker__item--selected\": isCurrent\r\n });\r\n const inStockClasses = classNames(\"price-label__stock\", {\r\n \"info-type--info\": product.InfoType == InfoTypes.info,\r\n \"info-type--alert\": product.InfoType == InfoTypes.alert\r\n });\r\n const priceClasses = classNames(\"product-picker__item__price\", {\r\n discounted: product.DiscountedPrice\r\n });\r\n const hasPriceConfiguration = product.PriceConfigurations.length > 0;\r\n const hasProductInfoTextButNoPriceConfiguration = product.ProductInfoText && !hasPriceConfiguration;\r\n\r\n if (hasPriceConfiguration) {\r\n amount = amount ?? productConfig.Quantity;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n if (!isCurrent) {\r\n clickHandler(e, index);\r\n }\r\n }}\r\n >\r\n
\r\n \r\n
\r\n\r\n
\r\n

{product.MediaType}

\r\n {hasPriceConfiguration && (\r\n
\r\n
\r\n \r\n {product.StockText ? (\r\n {product.StockText}\r\n ) : (\r\n {product.PriceUnit}\r\n )}\r\n {\" - \"}\r\n \r\n \r\n {product.PrimaryPrice}\r\n \r\n {product.DiscountedPrice && (\r\n \r\n {product.DiscountedPrice}\r\n \r\n )}\r\n
\r\n {product.SecondaryPrice}\r\n {product.IsPhysical && productDeliveryInfo && (\r\n \r\n )}\r\n {isCurrent && productConfig.IsBuyable && productConfig.AllowQuantity && (\r\n
\r\n {\r\n setAmount(e.target.value);\r\n }}\r\n min=\"1\"\r\n value={amount}\r\n />\r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n {isCurrent && hasProductInfoTextButNoPriceConfiguration && (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nProductPickerRadioSelect.propTypes = {\r\n Work: propTypes.object.isRequired\r\n};\r\n\r\nexport default ProductPickerRadioSelect;\r\n","import React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport ReactSuperSelect from \"react-super-select\";\r\nimport DropdownCheckboxes from \"ReactComponents/Shared/FormInputs/dropdown-checkboxes\";\r\nimport { productPickerComposer } from \"ReactReducers/ProductPicker/product-picker-composer\";\r\nimport Modal from \"ReactComponents/Modal/modal\";\r\n\r\nclass ProductPickerSelectedDetails extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n tempAmount: 0,\r\n showClassSelector: false,\r\n infoModalShow: false\r\n };\r\n this.selectChangeHandler = this.selectChangeHandler.bind(this);\r\n this.classSelectorVisible = this.classSelectorVisible.bind(this);\r\n this.classSelectorSubmitHandler = this.classSelectorSubmitHandler.bind(this);\r\n this.openInfoModal = this.openInfoModal.bind(this);\r\n this.closeInfoModal = this.closeInfoModal.bind(this);\r\n }\r\n\r\n openInfoModal() {\r\n this.setState({ infoModalShow: true });\r\n }\r\n\r\n closeInfoModal() {\r\n this.setState({ infoModalShow: false });\r\n }\r\n\r\n selectChangeHandler(objectSelected, ArrayOfChoices) {\r\n for (let i = 0; i < ArrayOfChoices.length; i++) {\r\n if (\r\n ArrayOfChoices[i].UnitValue == objectSelected.UnitValue &&\r\n ArrayOfChoices[i].UnitTypeCode == objectSelected.UnitTypeCode\r\n ) {\r\n this.props.setPeriodValueIndex(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n classSelectorVisible(value) {\r\n this.setState({\r\n showClassSelector: value\r\n });\r\n }\r\n\r\n classSelectorSubmitHandler(value) {\r\n this.classSelectorVisible(false);\r\n this.props.setClassesValue(value);\r\n }\r\n\r\n getPriceBasisText() {\r\n const c = this.props.configs;\r\n const classOptions = c.ClassOptions.Options;\r\n const relevantClasses =\r\n this.props.product.RelevantClasses && this.props.product.RelevantClasses.Classes;\r\n\r\n if (c.IsSchoolLicenseAndRelevantClasses && relevantClasses) {\r\n // Price based on relevant classes\r\n const generateString = () => {\r\n const classCount = relevantClasses && relevantClasses.length;\r\n let preText = \"\";\r\n //TODO: maybe get flag from Sitecore if price configuration is pr. student?\r\n const isPriceUnitStudent = this.props.product.PriceUnit.includes(\"elev\");\r\n\r\n if (isPriceUnitStudent) {\r\n let studentCount = 0;\r\n relevantClasses &&\r\n relevantClasses.map(item => {\r\n studentCount += item.StudentCount;\r\n });\r\n preText = studentCount + \" \" + this.props.labels.StudentsLabel;\r\n } else {\r\n preText = classCount + \" \" + this.props.labels.ClassesLabel;\r\n }\r\n\r\n return (\r\n \r\n {preText} (\r\n {relevantClasses &&\r\n relevantClasses.map((item, index) => {\r\n const after = index + 1 == classCount ? \"\" : \", \";\r\n return (\r\n \r\n {item.ClassName}\r\n {after}\r\n \r\n );\r\n })}\r\n )\r\n \r\n );\r\n };\r\n\r\n return generateString();\r\n } else if (c.ShowClassDropdown) {\r\n // Price based on custom selected classes\r\n const classes = classOptions.filter(item => item.Selected);\r\n const numStudents = classes && classes.map(item => item.Value).reduce((a, b) => a + b, 0);\r\n return c.PriceBasisText.replace(/\\{0\\}/g, classes.length).replace(/\\{1\\}/g, numStudents);\r\n } else {\r\n const numStudents =\r\n classOptions && classOptions.map(item => item.Value).reduce((a, b) => a + b, 0);\r\n return c.PriceBasisText.replace(/\\{0\\}/g, classOptions.length).replace(/\\{1\\}/g, numStudents);\r\n }\r\n }\r\n\r\n render() {\r\n //const product = this.props.product;\r\n const c = this.props.configs;\r\n\r\n const customSelectedValueTemplate = arr => {\r\n const obj = arr[0];\r\n return (\r\n
\r\n {obj.AccessPeriodText}\r\n {obj.PriceText}\r\n
\r\n );\r\n };\r\n\r\n const customOptionTemplate = obj => {\r\n return (\r\n
\r\n {obj.AccessPeriodText}\r\n {obj.PriceText}\r\n
\r\n );\r\n };\r\n\r\n const periodSelectHandler = objSelected => {\r\n if (objSelected) {\r\n this.selectChangeHandler(objSelected, c.PeriodOptions);\r\n }\r\n };\r\n\r\n const renderSelectClassesButton = selectedClasses => {\r\n const hasSelectedClasses = selectedClasses.length > 0;\r\n const btnClasses = classNames({\r\n \"button button--slim\": true,\r\n \"button-primary\": !hasSelectedClasses,\r\n \"button-secondary\": hasSelectedClasses\r\n });\r\n const btnText = hasSelectedClasses ? c.EditSelectedLevels : c.ChooseSelectedLevelsText;\r\n return (\r\n {\r\n this.classSelectorVisible(true);\r\n }}\r\n >\r\n {btnText}\r\n \r\n );\r\n };\r\n\r\n const renderConfigInputInfo = () => {\r\n const showPeriodDropdown = c.PeriodOptions.length && c.PeriodOptions.length > 1;\r\n // default selected\r\n const selectedPeriodObject = c.PeriodOptions.filter(item => {\r\n return item.Selected;\r\n })[0];\r\n const selectedClasses = c.ClassOptions.Options.filter(obj => obj.Selected).map(obj => obj.Label);\r\n\r\n return (\r\n
\r\n {c.ShowClassOptions && (\r\n
\r\n
\r\n \r\n
\r\n {renderSelectClassesButton(selectedClasses)}\r\n
\r\n
\r\n
\r\n )}\r\n {showPeriodDropdown && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n const renderSummaryInfo = () => {\r\n const hasContent = c.AccessText || c.AccessPeriodText || c.AccessRenewText;\r\n const priceBasisNotification = c.IsSchoolLicenseAndRelevantClasses\r\n ? this.props.labels.PriceBasisNotification\r\n : null;\r\n\r\n return (\r\n
\r\n {hasContent && (\r\n
\r\n \r\n \r\n {c.AccessLabel && c.AccessText && (\r\n \r\n \r\n \r\n \r\n )}\r\n {c.AccessPeriodLabel && !!c.AccessPeriodText && (\r\n \r\n \r\n {c.PeriodOptions.length > 1 &&\r\n this.props.isGettingProductPrice ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n {c.AccessRenewLabel && c.AccessRenewText && (\r\n \r\n \r\n \r\n \r\n )}\r\n {c.PriceBasisLabel && (\r\n \r\n \r\n {this.props.isGettingProductPrice ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n {c.ShowClassOptions &&\r\n !c.PriceBasisLabel &&\r\n this.props.isGettingProductPrice && ( // First time getting PriceBasisText for class license\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
{c.AccessLabel}\r\n {c.AccessText.replace(/\\{0\\}/g, this.props.amount)}\r\n
{c.AccessPeriodLabel}\r\n
\r\n \r\n
\r\n
{c.AccessPeriodText}
{c.AccessRenewLabel}{c.AccessRenewText}
{c.PriceBasisLabel}\r\n
\r\n \r\n
\r\n
\r\n {this.getPriceBasisText()}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {priceBasisNotification && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n {(c.LicenseLabel != null || c.LicenseText != null) && (\r\n
\r\n
\r\n
\r\n \r\n {c.LicenseLabel}\r\n \r\n {c.LicenseTypeText && !c.LicenseText && (\r\n {c.LicenseTypeText}\r\n )}\r\n {c.LicenseTypeText && c.LicenseText && (\r\n
{c.LicenseTypeText}
\r\n )}\r\n
\r\n {/* TODO: Should be the institution, but we are not getting any. Change design for LicenseTypeText, if we'll get LicenseText! */}\r\n {c.LicenseText && (\r\n
{c.LicenseText}
\r\n )}\r\n
\r\n
\r\n
\r\n )}\r\n\r\n {!c.IsBuyable && c.BuyableNote && (\r\n
\r\n
\r\n
\r\n )}\r\n\r\n {c.IsBuyable && (\r\n
\r\n {renderSummaryInfo()}\r\n {renderConfigInputInfo()}\r\n
\r\n )}\r\n\r\n {c.PriceInfoLinkText &&
}\r\n {c.PriceInfoLinkText && (\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default productPickerComposer(ProductPickerSelectedDetails);\r\n","import React, { Component } from \"react\";\r\nimport ProductPickerSelectedDetails from \"./product-picker-selected-details\";\r\nimport IconArrow from \"ReactComponents/Shared/Icons/icon-arrow\";\r\nimport { productPickerComposer } from \"ReactReducers/ProductPicker/product-picker-composer\";\r\nimport propTypes from \"prop-types\";\r\n\r\nclass ProductPickerSelectedTypelist extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.selectConfig = this.selectConfig.bind(this);\r\n }\r\n\r\n selectConfig(e, index) {\r\n this.props.setSalesConfigIndex(index);\r\n }\r\n\r\n render() {\r\n const product = this.props.product;\r\n const productConfigs = product.PriceConfigurations;\r\n const hasMoreProductConfigs = productConfigs.length !== 1;\r\n const showList = this.props.salesConfigIndex === null;\r\n const current = this.props.salesConfigIndex || 0;\r\n\r\n const showTypeList = () => {\r\n return (\r\n
\r\n {productConfigs.map((conf, index) => {\r\n return (\r\n
\r\n
\r\n \r\n {conf.LicenseLabel || \"!LicenseLabel\"}\r\n \r\n \r\n {conf.ConfigurationSummary || \"!ConfigurationSummary\"}\r\n \r\n
\r\n
\r\n {\r\n this.selectConfig(e, index);\r\n }}\r\n >\r\n {conf.ConfigurationSelect}\r\n \r\n
\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n };\r\n\r\n const showSelectedType = () => {\r\n return (\r\n
\r\n {hasMoreProductConfigs ? (\r\n
\r\n {\r\n this.selectConfig(e, null);\r\n }}\r\n >\r\n \r\n \r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n {productConfigs.map((conf, index) => {\r\n const hasContent =\r\n conf.AccessText || conf.AccessPeriodText || conf.AccessRenewText;\r\n\r\n if (\r\n (hasContent || conf.ShowClassOptions) &&\r\n (current == index || !hasMoreProductConfigs)\r\n ) {\r\n return (\r\n \r\n );\r\n }\r\n })}\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n {showList && hasMoreProductConfigs ? showTypeList() : showSelectedType()}\r\n
\r\n );\r\n }\r\n}\r\n\r\nProductPickerSelectedTypelist.propTypes = {\r\n product: propTypes.object.isRequired\r\n};\r\n\r\nexport default productPickerComposer(ProductPickerSelectedTypelist);\r\n","import React from \"react\";\r\nimport Modal from \"ReactComponents/Modal/modal\";\r\n\r\nexport interface LoginModalprops {\r\n labels: {\r\n LoginIntroText: string;\r\n LoginButtonText: string;\r\n CreateProfileButtonText: string;\r\n };\r\n CreateProfileUrl: string;\r\n onLoginClick: () => void;\r\n onClose: () => void;\r\n isOpen: boolean;\r\n}\r\n\r\nconst LoginModal = (props: LoginModalprops) => {\r\n return (\r\n \r\n \r\n
\r\n

\r\n \r\n

\r\n

\r\n \r\n {props.labels.CreateProfileButtonText}\r\n \r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default LoginModal;\r\n","import React, { Component } from \"react\";\r\nimport ProductPickerRadioSelect from \"./product-picker-radio-select\";\r\nimport SpinnerButton from \"ReactComponents/Shared/FormInputs/spinner-button\";\r\nimport NoticeList from \"ReactComponents/Basket/notice-list\";\r\nimport * as priceConfigUtils from \"ReactComponents/Shared/Utils/priceConfigUtils\";\r\nimport Modal from \"../../Modal/modal\";\r\nimport * as tracking from \"ReactComponents/Shared/Utils/tracking\";\r\nimport ProductPickerSelectedTypelist from \"./product-picker-selected-typelist\";\r\nimport DeliveryCostsModalButton from \"ReactComponents/DeliveryCostsModalButton/delivery-costs-modal-button\";\r\nimport LoginModal from \"ReactComponents/LoginModal/login-modal\";\r\nimport { ADD_TO_BASKET_LOCALSTORAGE_KEY, SINGLE_USER_LICENSE_CODE } from \"../../../constants\";\r\n\r\nclass ProductPicker extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n ghModalOpen: false,\r\n loginModalOpen: false\r\n };\r\n\r\n this.onChangeHandler = this.onChangeHandler.bind(this);\r\n this.submitHandler = this.submitHandler.bind(this);\r\n this.productInBasket = this.productInBasket.bind(this);\r\n this.getUpdateInButtonState = this.getUpdateInButtonState.bind(this);\r\n this.toggleLoginModal = this.toggleLoginModal.bind(this);\r\n this.onLoginAndAddToBasket = this.onLoginAndAddToBasket.bind(this);\r\n }\r\n\r\n isLoading() {\r\n if (this.props.currentProduct) {\r\n return this.props.isAdding.indexOf(this.props.currentProduct.Id) != -1;\r\n }\r\n }\r\n\r\n onChangeHandler(e) {\r\n this.props.onChange(e);\r\n }\r\n\r\n toggleLoginModal(open) {\r\n this.setState({\r\n loginModalOpen: open\r\n });\r\n }\r\n\r\n submitHandler() {\r\n this.props.addToBasket();\r\n }\r\n\r\n productInBasket(productId) {\r\n const basketHasItems =\r\n this.props.basket && this.props.basket.BasketItems && this.props.basket.BasketItems.length > 0;\r\n const productInBasket =\r\n basketHasItems && this.props.basket.BasketItems.find(item => item.Isbn == productId);\r\n\r\n return productInBasket || false;\r\n }\r\n\r\n getUpdateInButtonState(currentProduct, basketVersionOfProduct, currentPriceConfig) {\r\n const labels = this.props.Labels.ProductPickerLabels;\r\n const putInBasket = { disabled: false, label: labels.PutInBasketText };\r\n const inBasket = { disabled: true, label: labels.IsInBasketText };\r\n const canUpdateBasket = { disabled: false, label: labels.UpdateBasketText };\r\n const noClassesSelected = { disabled: true, label: labels.NoClassesSelectedText };\r\n const noPeriodSelected = { disabled: true, label: labels.NoPeriodSelectedText };\r\n\r\n const hasPeriodOptions =\r\n currentPriceConfig.PeriodOptions && currentPriceConfig.PeriodOptions.length > 1;\r\n const isPhysicalProduct = currentPriceConfig.AccessFormCode == 0;\r\n const sameAccessFormInBasket =\r\n currentPriceConfig.AccessFormCode == basketVersionOfProduct.AccessFormCode;\r\n\r\n const checkPeriodOptions = () => {\r\n const currentPeriod = currentPriceConfig.PeriodOptions.filter(item => {\r\n return item.Selected;\r\n })[0];\r\n\r\n const sameUnitTypeCode =\r\n currentPeriod && currentPeriod.UnitTypeCode == basketVersionOfProduct.PeriodUnitTypeCode;\r\n const sameUnitValue =\r\n currentPeriod && currentPeriod.UnitValue == basketVersionOfProduct.PeriodUnitValue;\r\n const samePeriod = sameUnitTypeCode && sameUnitValue;\r\n const sameAmountAsInBasket = basketVersionOfProduct.Count == this.props.amount;\r\n\r\n if (!currentPeriod) {\r\n // No period selected\r\n //console.log(\"checkPeriodOptions - No period selected\")\r\n return noPeriodSelected;\r\n } else if (!currentProduct.IsInBasket) {\r\n // Not in basket\r\n //console.log(\"checkPeriodOptions - Not in basket\")\r\n return putInBasket;\r\n } else if (sameAccessFormInBasket && samePeriod && sameAmountAsInBasket) {\r\n // Same license type as in basket && same period && same amount\r\n //console.log(\"checkPeriodOptions - Same license type as in basket && samePeriod && same amount\")\r\n return inBasket;\r\n } else {\r\n //console.log(\"checkPeriodOptions - else\")\r\n return canUpdateBasket;\r\n }\r\n };\r\n\r\n if (isPhysicalProduct) {\r\n // Physical products\r\n //console.log(\"Physical product\");\r\n if (!basketVersionOfProduct) {\r\n return putInBasket;\r\n }\r\n return basketVersionOfProduct.Count != this.props.amount ? canUpdateBasket : inBasket;\r\n } else {\r\n // License product (school/class/teacher or single user)\r\n //console.log(\"License product (school/class/teacher or single user)\");\r\n\r\n if (currentPriceConfig.ShowClassOptions) {\r\n // Has CLASS OPTIONS\r\n //console.log(\"License product - CLASS OPTIONS\");\r\n\r\n const currentClassesValue = currentPriceConfig ? currentPriceConfig.ClassOptions.Options : [];\r\n const selectedClasses =\r\n currentClassesValue && priceConfigUtils.classesSelectedArray(currentClassesValue);\r\n const sameClassesInBasket =\r\n selectedClasses &&\r\n priceConfigUtils.sameClassesSelected(basketVersionOfProduct.Classes, currentClassesValue);\r\n\r\n if (selectedClasses && selectedClasses.length < 1) {\r\n // No classes selected\r\n return noClassesSelected;\r\n } else if (!currentProduct.IsInBasket) {\r\n // Not in basket\r\n return putInBasket;\r\n } else if (sameAccessFormInBasket && sameClassesInBasket) {\r\n // Same selection as in basket\r\n return inBasket;\r\n } else {\r\n return canUpdateBasket;\r\n }\r\n } else if (hasPeriodOptions) {\r\n // Has PERIOD OPTIONS\r\n //console.log(\"License product - PERIOD OPTIONS\");\r\n return checkPeriodOptions();\r\n } else if (currentPriceConfig.IsSchoolLicenseAndRelevantClasses) {\r\n // Has RELEVANT CLASSES\r\n //console.log(\"License product - RELEVANT CLASSES\");\r\n\r\n if (!currentProduct.IsInBasket) {\r\n // Not in basket\r\n return putInBasket;\r\n } else if (currentPriceConfig.AccessFormCode == basketVersionOfProduct.AccessFormCode) {\r\n // Same selection as in basket\r\n return inBasket;\r\n } else {\r\n return canUpdateBasket;\r\n }\r\n } else {\r\n // School-, class- or single-user-license (NO Class options / NO Period options / NO Relevant classes)\r\n //console.log(\"License product - BUT NO Class-options/Period-options/Relevant Classes\");\r\n if (!currentProduct.IsInBasket) {\r\n // Not in basket\r\n //console.log(\"Not in basket\");\r\n return putInBasket;\r\n } else if (currentPriceConfig.AccessFormCode == basketVersionOfProduct.AccessFormCode) {\r\n // Same selection as in basket\r\n //console.log(\"Same selection as in basket\");\r\n if (\r\n currentPriceConfig.AllowQuantity &&\r\n basketVersionOfProduct.Count != this.props.amount\r\n ) {\r\n // Same selection as in basket - but count has changed\r\n //console.log(\"Same selection as in basket - but count has changed\");\r\n return canUpdateBasket;\r\n }\r\n return inBasket;\r\n } else {\r\n // Is in basket, but NOT same accessFormCode E.g. School license (All students + all employees) - not in basket - not a count change\r\n //console.log(\"Is in basket, but NOT same accessFormCode\");\r\n return canUpdateBasket;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Save added product to local storage before login */\r\n onLoginAndAddToBasket() {\r\n const currentPriceConfig =\r\n this.props.currentProduct.PriceConfigurations[this.props.salesConfigIndex] || false;\r\n\r\n const currentClassesValue = currentPriceConfig ? currentPriceConfig.ClassOptions.Options : [];\r\n\r\n localStorage.setItem(\r\n ADD_TO_BASKET_LOCALSTORAGE_KEY,\r\n JSON.stringify({\r\n amount: this.props.amount,\r\n product: this.props.currentProduct,\r\n periodValueIndex: this.props.periodValueIndex,\r\n salesConfigIndex: this.props.salesConfigIndex,\r\n classesValue: currentClassesValue,\r\n workId: this.props.work.Id\r\n })\r\n );\r\n\r\n this.props.userLogin();\r\n }\r\n\r\n render() {\r\n //product and priceconfigs\r\n const currentProduct = this.props.currentProduct;\r\n const configIndex =\r\n currentProduct.PriceConfigurations && currentProduct.PriceConfigurations.length > 1\r\n ? this.props.salesConfigIndex\r\n : 0;\r\n const currentPriceConfig = currentProduct.PriceConfigurations[configIndex] || false;\r\n const isPhysicalProduct = currentPriceConfig.AccessFormCode == 0;\r\n const hasPriceConfiguration = currentProduct.PriceConfigurations.length > 0;\r\n\r\n //ready based on basket\r\n const basketVersionOfProduct = this.productInBasket(currentProduct.Id);\r\n const basketButtonState =\r\n this.getUpdateInButtonState(currentProduct, basketVersionOfProduct, currentPriceConfig) || {};\r\n\r\n const renderHelpConsoleForDevelopment = () => {\r\n return (\r\n
\r\n Current product:\r\n
\r\n Id:{\" \"}\r\n {currentProduct.Id ? {currentProduct.Id} : false/null/undefined}\r\n
\r\n IsInBasket:{\" \"}\r\n {currentProduct.IsInBasket || (isPhysicalProduct && basketVersionOfProduct) ? (\r\n true\r\n ) : (\r\n false\r\n )}\r\n
\r\n

\r\n Current PriceConfiguration[{configIndex}]{\" \"}\r\n

\r\n

\r\n SalesFormCode:{\" \"}\r\n {currentPriceConfig.SalesFormCode}\r\n

\r\n

\r\n AccessFormCode:{\" \"}\r\n {currentPriceConfig.AccessFormCode}\r\n

\r\n IsInBasket:{\" \"}\r\n {this.props.work &&\r\n this.props.work.Products[this.props.currentProductIndex].IsInBasket ? (\r\n true\r\n ) : (\r\n false\r\n )}\r\n
\r\n IsBuyable:{\" \"}\r\n {currentPriceConfig.IsBuyable ? (\r\n true\r\n ) : (\r\n false\r\n )}\r\n
\r\n {currentPriceConfig.ShowClassOptions ? (\r\n
\r\n ShowClassOptions:\r\n true\r\n
\r\n ClassOptions.Label:\r\n {currentPriceConfig.ClassOptions.Label}\r\n
\r\n ClassOptions.Options.length:\r\n \r\n {currentPriceConfig.ClassOptions.Options.length}\r\n \r\n
\r\n
\r\n ) : (\r\n
\r\n ShowClassOptions: false\r\n
\r\n )}\r\n {currentPriceConfig.PeriodOptions ? (\r\n
\r\n {\" \"}\r\n PeriodOptions:\r\n {\r\n alert(JSON.stringify(currentPriceConfig.PeriodOptions));\r\n }}\r\n >\r\n Show json\r\n \r\n
\r\n ) : (\r\n
\r\n {\" \"}\r\n PeriodOptions: false\r\n
\r\n )}\r\n ShouldLogin:{\" \"}\r\n {currentPriceConfig.ShouldLogin ? (\r\n true\r\n ) : (\r\n false\r\n )}\r\n
\r\n Selected:{\" \"}\r\n {currentPriceConfig.Selected ? (\r\n true\r\n ) : (\r\n false\r\n )}\r\n
\r\n AllowQuantity:{\" \"}\r\n {currentPriceConfig.AllowQuantity ? (\r\n true\r\n ) : (\r\n false\r\n )}\r\n
\r\n BuyableNote:{\" \"}\r\n {currentPriceConfig.BuyableNote ? (\r\n {currentPriceConfig.BuyableNote}\r\n ) : (\r\n null\r\n )}\r\n
\r\n ProductInfoText:{\" \"}\r\n {currentProduct.ProductInfoText ? (\r\n {currentProduct.ProductInfoText}\r\n ) : (\r\n null\r\n )}\r\n
\r\n {\r\n alert(JSON.stringify(currentPriceConfig));\r\n }}\r\n >\r\n Show config json\r\n \r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
{this.props.Labels.VariantsLabel}
\r\n \r\n\r\n {currentProduct.PriceConfigurations.length > 0 && !currentProduct.HideConfigurationDetails && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {currentPriceConfig.IsBuyable && (\r\n
\r\n {currentPriceConfig.DiscountedPrice && (\r\n
\r\n {currentPriceConfig.PrimaryPriceText}\r\n {this.props.isGettingProductPrice ? (\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n

\r\n {currentPriceConfig.PrimaryPrice}\r\n

\r\n {currentPriceConfig.DiscountedPrice && (\r\n

\r\n {currentPriceConfig.DiscountedPrice}\r\n

\r\n )}\r\n
\r\n )}\r\n
\r\n )}\r\n {!currentPriceConfig.DiscountedPrice && (\r\n
\r\n {currentPriceConfig.PrimaryPriceText}\r\n {this.props.isGettingProductPrice ? (\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n

\r\n {currentPriceConfig.PrimaryPrice}\r\n

\r\n
\r\n )}\r\n
\r\n )}\r\n

\r\n {currentPriceConfig.SecondaryPrice}\r\n

\r\n {isPhysicalProduct && this.props.Work.ProductDeliveryInfo && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {currentPriceConfig.AccessFormCode === SINGLE_USER_LICENSE_CODE ? (\r\n
\r\n {currentPriceConfig.ShouldLogin && !this.props.loggedIn ? (\r\n this.toggleLoginModal(true)}\r\n >\r\n {basketButtonState.label}\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n ) : (\r\n
\r\n {currentPriceConfig.ShouldLogin && !this.props.loggedIn ? (\r\n {\r\n this.props.userLogin();\r\n }}\r\n >\r\n {basketButtonState.label}\r\n \r\n ) : (\r\n
\r\n {currentPriceConfig.IsBuyable && (\r\n
\r\n {currentProduct.IsInBasket ||\r\n (basketVersionOfProduct && isPhysicalProduct) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n )}\r\n\r\n {this.props.showAddTodoButton && (\r\n {\r\n tracking.growthHackTracking(\"TodoListClick\");\r\n this.setState({ ghModalOpen: true });\r\n }}\r\n >\r\n Tilføj til huskeliste\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {currentProduct.ProductInfoText && hasPriceConfiguration && (\r\n
\r\n \r\n
\r\n )}\r\n {\r\n this.setState({ ghModalOpen: false });\r\n }}\r\n showCloseButton\r\n >\r\n \r\n {/*\r\n This is temporary code that will be removed once GrowthHacking is finished\r\n - that's why there is no string from Sitecore\r\n */}\r\n

\r\n Vi er ved at undersøge behovet for en huskeliste – så tak fordi at du klikkede på\r\n linket. Hvis interessen for en huskeliste er stor, så udvikler vi denne funktion\r\n meget snart!\r\n

\r\n
\r\n \r\n {false && renderHelpConsoleForDevelopment()}\r\n\r\n this.toggleLoginModal(false)}\r\n CreateProfileUrl={this.props.LoginModal.CreateProfileUrl}\r\n />\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ProductPicker;\r\n","import React, { Component } from \"react\";\r\nimport striptags from \"striptags\";\r\n\r\nclass ProductDescriptionErrorBoundary extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n componentDidCatch() {\r\n this.setState({ hasError: true });\r\n\r\n // TODO: Get API function to log error\r\n // logErrorToMyService(error, info);\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n return (\r\n
\r\n
{striptags(this.props.description)}
\r\n
\r\n );\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default ProductDescriptionErrorBoundary;\r\n","import React from \"react\";\r\n\r\ninterface IProductDescriptionProps {\r\n description: string;\r\n}\r\n\r\nconst ProductDescription = ({ description }: IProductDescriptionProps) => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ProductDescription;\r\n","import * as React from \"react\";\r\n\r\nconst TrialLicenseMediaTypeRadioItem = props => {\r\n // todo: selected prop\r\n // ..mediaType\r\n // ...rich content\r\n\r\n // trialLicenseProduct\r\n // - TrialLicenseStatusTitle\r\n // - TrialLicenseStatusText\r\n // - MediaType\r\n // - Product\r\n\r\n // other products\r\n\r\n if (!props.label) return null;\r\n return (\r\n \r\n \r\n \r\n
\r\n {props.label}\r\n \r\n );\r\n};\r\n\r\nexport default TrialLicenseMediaTypeRadioItem;\r\n","// @ts-check\r\nimport SpinnerButton from \"ReactComponents/Shared/FormInputs/spinner-button\";\r\nimport TrialLicenseMediaTypeRadioItem from \"./trial-license-media-type-radio-item\";\r\n// import { trialLicenseMediaTypeListComposer } from \"ReactReducers/TrialLicense/TrialLicenseMediaTypeList/trial-license-media-type-list-composer\";\r\nimport React from \"react\";\r\n\r\nclass TrialLicenseMediaTypeList extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n selectedIndex: 0\r\n };\r\n }\r\n\r\n render() {\r\n if (!this.props.trialLicenseProducts) return null;\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n {this.props.trialLicenseProducts.map((trialLicenseProduct, index) => {\r\n return (\r\n {\r\n this.setState({ selectedIndex: index });\r\n }}\r\n key={index}\r\n selected={index == this.state.selectedIndex}\r\n label={trialLicenseProduct.MediaType}\r\n />\r\n );\r\n })}\r\n
\r\n\r\n
\r\n\r\n {!this.props.trialLicenseOrdered &&\r\n this.props.trialLicenseOrdered !== undefined &&\r\n this.props.trialLicenseProducts[this.state.selectedIndex].OrderAccessButtonText &&\r\n this.props.trialLicenseProducts[this.state.selectedIndex].OrderAccessButtonText.length >\r\n 0 && (\r\n {\r\n this.props.onClick(this.props.trialLicenseProducts[this.state.selectedIndex]);\r\n }}\r\n className=\"trial-license-media-type-list__button button button--slim\"\r\n context=\"Lægger i kurv...\"\r\n label={\r\n this.props.trialLicenseProducts[this.state.selectedIndex]\r\n .OrderAccessButtonText\r\n }\r\n />\r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TrialLicenseMediaTypeList;\r\n","import React from \"react\";\r\n\r\nconst IconChevronRight = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IconChevronRight;\r\n","import React from \"react\";\r\nimport IconChevronRight from \"ReactComponents/Shared/Icons/icon-chevron-right\";\r\n\r\nexport interface IProductMediaLinkWithCallbackProps {\r\n label: string;\r\n icon: JSX.Element;\r\n onClick: () => void;\r\n}\r\n\r\nconst ProductMediaLinkWithCallback = ({ label, icon, onClick }: IProductMediaLinkWithCallbackProps) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProductMediaLinkWithCallback;\r\n","import React from \"react\";\r\n\r\nconst IconBookOpen = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IconBookOpen;\r\n","import { connect } from \"react-redux\";\r\nimport { trialLicenseActions as actions } from \"./trial-license-reducer\";\r\nimport { trialLicenseSelector } from \"./trial-license-reducer\";\r\n\r\nexport function trialLicenseComposer(Component) {\r\n const mapStateToProps = function (state) {\r\n return {\r\n trialLicensePending: trialLicenseSelector.trialLicensePending(state),\r\n trialLicenseValidateSuccess: trialLicenseSelector.trialLicenseValidateSuccess(state),\r\n trialLicenseRequestSuccess: trialLicenseSelector.trialLicenseRequestSuccess(state),\r\n trialLicenseError: trialLicenseSelector.trialLicenseError(state),\r\n trialLicenseErrorMessage: trialLicenseSelector.trialLicenseErrorMessage(state),\r\n trialLicenseStatus: trialLicenseSelector.trialLicenseStatus(state)\r\n };\r\n };\r\n\r\n const mapDispatchToProps = function (dispatch) {\r\n return {\r\n trialLicenseRequest: Payload => dispatch(actions.trialLicenseRequest(Payload)),\r\n trialLicenseValidate: Payload => dispatch(actions.trialLicenseValidate(Payload))\r\n };\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(Component);\r\n}\r\n","// @ts-check\r\nimport React, { Component } from \"react\";\r\nimport Modal from \"ReactComponents/Modal/modal\";\r\nimport { profileComposer } from \"ReactReducers/Profile/profile-composer\";\r\nimport { trialLicenseComposer } from \"ReactReducers/TrialLicense/trial-license-composer\";\r\nimport { basketComposer } from \"ReactReducers/Basket/basket-composer\";\r\nimport TrialLicenseMediaTypeList from \"./TrialLicenseMediaTypeList/trial-license-media-type-list\";\r\nimport ModalSpinner from \"ReactComponents/Modal/modal-spinner\";\r\nimport ProductMediaLinkWithCallback from \"ReactComponents/ProductPage/ProductMediaLink/product-media-link-with-callback\";\r\nimport IconBookOpen from \"ReactComponents/Shared/Icons/icon-book-open\";\r\nimport IconEmail from \"ReactComponents/Shared/Icons/icon-email\";\r\n\r\nclass TrialLicenseLink extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n modalOpen: false,\r\n isAdding: false\r\n };\r\n this.toggleModal = this.toggleModal.bind(this);\r\n this.validateLicense = this.validateLicense.bind(this);\r\n this.onClick = this.onClick.bind(this);\r\n this.addToBasket = this.addToBasket.bind(this);\r\n this.renderTrialLicense = this.renderTrialLicense.bind(this);\r\n }\r\n\r\n toggleModal(value) {\r\n let val = this.state.modalOpen;\r\n if (value != undefined) {\r\n val = value;\r\n }\r\n this.setState({\r\n modalOpen: val\r\n });\r\n }\r\n\r\n // isLoading() {\r\n // if (this.props.TrialLicense.TrialLicenseProductIsbn) {\r\n // const isAdding =\r\n // this.props.isAdding.indexOf(this.props.TrialLicense.TrialLicenseProductIsbn) != -1;\r\n // const isAdding2 = this.props.isAdding.indexOf(this.props.product.Isbn13) != -1;\r\n\r\n // console.log(\"this.props.isAdding\", isAdding);\r\n // console.log(\"this.props.isAdding2\", isAdding2);\r\n\r\n // return isAdding || isAdding2;\r\n // }\r\n // }\r\n\r\n validateLicense() {\r\n if (this.props.TrialLicense.IsUserPermitted) {\r\n const isbn = this.props.TrialLicense.TrialLicenseProductIsbn;\r\n this.props.trialLicenseValidate({ isbn });\r\n } else this.toggleModal(true);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.isAdding.length > this.props.isAdding.length) {\r\n // console.log(\"Added to basket OR something went wrong\");\r\n this.setState({ isAdding: false });\r\n this.setState({ modalOpen: false });\r\n }\r\n\r\n if (\r\n (!prevProps.trialLicenseValidateSuccess && this.props.trialLicenseValidateSuccess) ||\r\n (!prevProps.trialLicenseRequestSuccess && this.props.trialLicenseRequestSuccess) ||\r\n (!prevProps.trialLicenseError && this.props.trialLicenseError)\r\n ) {\r\n this.toggleModal(true);\r\n }\r\n }\r\n\r\n addToBasket(payload) {\r\n this.setState({ isAdding: true });\r\n const basketItem = {\r\n Id: payload.Product.Id,\r\n amount: 1,\r\n product: payload.Product,\r\n BasketLineType: payload.IsPhysical ? \"TeacherCopies\" : \"Trial\",\r\n PeriodUnitTypeCode: payload.Product.TrialAccess?.PeriodUnitTypeCode,\r\n PeriodUnitValue: payload.Product.TrialAccess?.PeriodUnitValue,\r\n SalesFormCode: payload.Product.TrialAccess?.SalesFormCode,\r\n AccessFormCode: payload.Product.TrialAccess?.AccessFormCode\r\n };\r\n this.props.add(basketItem);\r\n }\r\n\r\n onClick(payload) {\r\n this.addToBasket(payload);\r\n }\r\n\r\n render() {\r\n const trialLicense = this.props.TrialLicense;\r\n const createProfileUrl = this.props.createProfileUrl || {};\r\n const productTitle = this.props.product?.Title ?? \"\";\r\n const siteName = this.props.siteName ?? \"\";\r\n const leadText = trialLicense.OrderViaEmail?.LeadText ?? \"\";\r\n const email = trialLicense.OrderViaEmail?.Email ?? \"\";\r\n const buttonText = trialLicense.OrderViaEmail?.ButtonText ?? \"\";\r\n\r\n if (!this.props.loggedIn) {\r\n return (\r\n <>\r\n }\r\n label={trialLicense.OrderTrialAccessText}\r\n onClick={() => this.toggleModal(true)}\r\n />\r\n {\r\n this.toggleModal(false);\r\n }}\r\n showCloseButton\r\n labelledBy=\"trial-license-modal-title\"\r\n >\r\n \r\n \r\n

\r\n \r\n {trialLicense.LoginButtonText}\r\n \r\n

\r\n

\r\n \r\n {trialLicense.CreateProfileButtonText}\r\n \r\n

\r\n\r\n {siteName === \"Gu\" && email && leadText && buttonText && (\r\n <>\r\n

{leadText}

\r\n \r\n \r\n {buttonText}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n }\r\n label={trialLicense.OrderTrialAccessText}\r\n onClick={this.validateLicense}\r\n />\r\n
\r\n \r\n {this.renderTrialLicense(trialLicense, this.props.trialLicenseErrorMessage)}\r\n
\r\n \r\n );\r\n }\r\n\r\n renderTrialLicense(trialLicense, errorMessage) {\r\n if (errorMessage) {\r\n return (\r\n {\r\n this.toggleModal(false);\r\n }}\r\n showCloseButton\r\n labelledBy=\"trial-license-modal-error-title\"\r\n >\r\n \r\n \r\n );\r\n }\r\n\r\n return trialLicense.IsUserPermitted ? (\r\n {\r\n this.toggleModal(false);\r\n }}\r\n showCloseButton\r\n >\r\n
\r\n \r\n
\r\n \r\n ) : (\r\n {\r\n this.toggleModal(false);\r\n }}\r\n showCloseButton\r\n labelledBy=\"trial-license-modal-invalid-permission-title\"\r\n >\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default basketComposer(trialLicenseComposer(profileComposer(TrialLicenseLink)));\r\n","import React from \"react\";\r\nimport IconChevronRight from \"ReactComponents/Shared/Icons/icon-chevron-right\";\r\n\r\nexport interface IProductMediaLinkProps {\r\n label: string;\r\n url: string;\r\n target?: string;\r\n icon: JSX.Element;\r\n}\r\n\r\nconst ProductMediaLink = ({ label, url, target = \"_blank\", icon }: IProductMediaLinkProps) => {\r\n return (\r\n \r\n {icon}\r\n
{label}
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ProductMediaLink;\r\n","import React from \"react\";\r\n\r\nconst IconBars = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IconBars;\r\n","import React, { Component } from \"react\";\r\nimport Swiper from \"react-slick\";\r\nimport SliderNavigationButton from \"ReactComponents/Shared/SliderNavigation/slider-navigation-button\";\r\n\r\nclass ProductReviewBlock extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const reviewsArray = this.props.productReviews;\r\n const reviewsCount = reviewsArray.length;\r\n const swiperSettings = {\r\n infinite: false,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n dots: reviewsCount > 1,\r\n arrows: true,\r\n prevArrow: ,\r\n nextArrow: ,\r\n easing: \"ease\",\r\n speed: \"400\"\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n {reviewsArray &&\r\n reviewsArray.map((review, index) => {\r\n return (\r\n
\r\n
\r\n \r\n {review.ReviewAuthor && (\r\n \r\n )}\r\n {(review.ReviewSource || review.ReviewDate) && (\r\n
\r\n {review.ReviewSource && (\r\n \r\n )}\r\n {review.ReviewDate && (\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ProductReviewBlock;\r\n","import React, { Component } from \"react\";\r\n\r\nclass Facts extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const product = this.props.product;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {product.ProductFacts.map((fact, index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{fact.Label}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Facts;\r\n","import React from \"react\";\r\n\r\nconst IconPDF = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IconPDF;\r\n","import React, { Component } from \"react\";\r\nimport IconPDF from \"ReactComponents/Shared/Icons/icon-pdf\";\r\n\r\nclass Extra extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const freeMaterialGroups = this.props.freeMaterials?.FreeMaterialGroups || [];\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {freeMaterialGroups.map((item, idx) => (\r\n
\r\n {item.GroupType && (\r\n

\r\n \r\n

\r\n )}\r\n {item.GroupMaterials &&\r\n item.GroupMaterials.map((item, idx) => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Extra;\r\n","import React from \"react\";\r\n\r\nconst IconWebsite = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IconWebsite;\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { productPickerComposer } from \"ReactReducers/ProductPicker/product-picker-composer\";\r\nimport { profileComposer } from \"ReactReducers/Profile/profile-composer\";\r\nimport ViewMoreSection from \"ReactComponents/Shared/AnimationComponents/view-more-section\";\r\nimport ProductPicker from \"ReactComponents/ProductPage/ProductPicker/product-picker\";\r\n// import InspectionCopyLink from \"ReactComponents/InspectionCopy/inspection-copy\";\r\nimport IconLogo from \"ReactComponents/Shared/Icons/icon-logo\";\r\nimport ProductDescriptionErrorBoundary from \"./ProductDescription/product-description-error-boundary\";\r\nimport ProductDescription from \"./ProductDescription/product-description\";\r\nimport * as tracking from \"ReactComponents/Shared/Utils/tracking\";\r\nimport IWork from \"interfaces/IWork\";\r\nimport ILabels from \"interfaces/ILabels\";\r\nimport IBasketItem from \"interfaces/IBasketItem\";\r\nimport ITrialLicense from \"interfaces/ITrialLicense\";\r\nimport TrialLicenseLink from \"ReactComponents/TrialLicense/trial-license-link\";\r\nimport { IProfileState } from \"ReactReducers/Profile/profile-reducer\";\r\nimport { Draft } from \"@reduxjs/toolkit\";\r\nimport IInspectionCopy from \"interfaces/IInspectionCopy\";\r\nimport ProductMediaLink from \"./ProductMediaLink/product-media-link\";\r\nimport IconBars from \"ReactComponents/Shared/Icons/icon-bars\";\r\nimport IconBookOpen from \"ReactComponents/Shared/Icons/icon-book-open\";\r\nimport ProductReviewBlock from \"./product-review-block\";\r\nimport Facts from \"./tab-facts\";\r\nimport FreeMaterials from \"ReactComponents/ProductPage/tab-free-materials\";\r\nimport IconWebsite from \"ReactComponents/Shared/Icons/icon-website\";\r\nimport Tabs from \"ReactComponents/Tabs/tabs\";\r\nimport Tab from \"ReactComponents/Tabs/tab\";\r\nimport ProductSlider from \"ReactComponents/ProductSlider/product-slider\";\r\nimport { ADD_TO_BASKET_LOCALSTORAGE_KEY } from \"../../constants\";\r\nimport { FormColumnProps } from \"ReactComponents/TwoColumnGrid/two-column-grid\";\r\nimport DynamicContactForm from \"ReactComponents/DynamicContactForm/dynamic-contact-form\";\r\n\r\nexport interface IProductPageProps {\r\n SiteName: string;\r\n ProductIndex: number;\r\n Work: IWork;\r\n Labels: ILabels;\r\n productPickerWork?: IWork;\r\n productPickerProduct?: number;\r\n amount: number;\r\n TrialLicense?: ITrialLicense;\r\n ShowAddTodoButton: boolean;\r\n ShowReviewLink: boolean;\r\n loggedIn: boolean;\r\n isAdding: string[];\r\n DynamicContactFormViewModel?: FormColumnProps;\r\n userLogin: (state: Draft) => Draft;\r\n InspectionCopy?: IInspectionCopy;\r\n setProductIndex: (productIndex: number) => void;\r\n basketAdd: (basketItem: IBasketItem) => void;\r\n setAmount: (quantity: number) => void;\r\n setWork: (work: IWork) => void;\r\n}\r\n\r\nconst ProductPage: React.FC = props => {\r\n console.log(\"ProductPage\", props);\r\n const [currentProductIndex, setCurrentProductIndex] = useState(0);\r\n\r\n const { ...formProps } = props.DynamicContactFormViewModel ?? null;\r\n\r\n const onChangeProduct = useCallback(\r\n (e: { target: { value: number } }) => {\r\n const productChanged = e.target.value !== currentProductIndex;\r\n if (productChanged) {\r\n const work = props.productPickerWork ? props.productPickerWork : props.Work;\r\n const product = work.Products[e.target.value];\r\n\r\n if (product.ProductPageLink) {\r\n const url = window.location.origin + product.ProductPageLink;\r\n window.history.replaceState({}, \"\", url);\r\n }\r\n\r\n setCurrentProductIndex(e.target.value);\r\n props.setProductIndex(e.target.value);\r\n\r\n tracking.productDetailsView({ product });\r\n }\r\n },\r\n [\r\n props.productPickerWork,\r\n props.Work,\r\n currentProductIndex,\r\n setCurrentProductIndex,\r\n props.setProductIndex\r\n ]\r\n );\r\n\r\n const addToBasket = useCallback(() => {\r\n const work = props.productPickerWork ? props.productPickerWork : props.Work;\r\n const index = props.productPickerProduct ?? currentProductIndex;\r\n const product = work.Products[index];\r\n const addToBasketItem = localStorage.getItem(ADD_TO_BASKET_LOCALSTORAGE_KEY);\r\n\r\n const basketItem = {\r\n Id: product.Id,\r\n amount: props.amount,\r\n product: product\r\n };\r\n\r\n if (addToBasketItem) {\r\n const parsedObj = JSON.parse(addToBasketItem);\r\n basketItem.Id = parsedObj.product.Id;\r\n basketItem.amount = parsedObj.product.Amount;\r\n basketItem.product = parsedObj.product;\r\n }\r\n\r\n props.basketAdd(basketItem);\r\n }, [\r\n props.productPickerWork,\r\n props.Work,\r\n props.basketAdd,\r\n currentProductIndex,\r\n props.productPickerProduct,\r\n props.amount\r\n ]);\r\n\r\n useEffect(() => {\r\n setCurrentProductIndex(props.ProductIndex || 0);\r\n props.setProductIndex(props.ProductIndex ?? 0);\r\n\r\n tracking.productDetailsView({ product: props.Work.Products[props.ProductIndex] });\r\n props.setWork(props.Work);\r\n }, []);\r\n\r\n /* Automatically add to basket if \"addToBasketOnLoginReturn\" key is set in local storage */\r\n useEffect(() => {\r\n const basketItemFromLocalStorage = localStorage.getItem(ADD_TO_BASKET_LOCALSTORAGE_KEY);\r\n\r\n if (!props.loggedIn) {\r\n localStorage.removeItem(ADD_TO_BASKET_LOCALSTORAGE_KEY);\r\n }\r\n\r\n if (basketItemFromLocalStorage && props.loggedIn) {\r\n addToBasket();\r\n\r\n localStorage.removeItem(ADD_TO_BASKET_LOCALSTORAGE_KEY);\r\n }\r\n }, []);\r\n\r\n const work = props.productPickerWork ?? props.Work;\r\n const index = props.productPickerProduct ?? currentProductIndex;\r\n const product = work.Products[index];\r\n\r\n const licenceProduct = props.TrialLicense && work.Products[props.TrialLicense.ProductIndex];\r\n // Insert potential word break after . to gracefully break website titles\r\n const formattedTitle = product.Title.replace(/\\./g, \".\");\r\n\r\n const trialLicenseLinkProps = {\r\n basketAdd: props.basketAdd,\r\n TrialLicense: props.TrialLicense,\r\n product: licenceProduct,\r\n siteName: props.SiteName,\r\n isAdding: props.isAdding\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n {product.CoverImageUrl ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n {product.CustomLink &&\r\n product.CustomLink.LinkText &&\r\n product.CustomLink.LinkUrl && (\r\n }\r\n />\r\n )}\r\n {props.Labels.ReadingSampleLink && (\r\n }\r\n />\r\n )}\r\n {product.HasTrialAccess && props.TrialLicense && (\r\n \r\n )}\r\n {product.SampleUrl && (\r\n }\r\n />\r\n )}\r\n {product.DigitalProductUrl && (\r\n }\r\n />\r\n )}\r\n {props.InspectionCopy &&\r\n props.InspectionCopy.ShowInspectionCopyLink &&\r\n props.DynamicContactFormViewModel &&\r\n props.DynamicContactFormViewModel?.DynamicFieldsList.length > 0 && (\r\n }\r\n label={props.InspectionCopy.ButtonText}\r\n target=\"\"\r\n url=\"#DynamicContactFormAnchorLink\"\r\n />\r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {props.Work.Category}\r\n \r\n\r\n {product.Subtitle &&

{product.Subtitle}

}\r\n\r\n {product.EditorsListLong && (\r\n
\r\n \r\n\r\n {props.Labels.EditorsListShortAbbreviation && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {!product.EditorsListLong && product.AuthorsListLong && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {product.SeriesLinks &&\r\n product.SeriesLinks.length > 0 &&\r\n product.SeriesLinks.map((link, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n \r\n {!!product.Description && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {product.Reviews.length > 0 && (\r\n \r\n \r\n \r\n )}\r\n\r\n {!!product.FreeMaterials && (\r\n \r\n \r\n \r\n )}\r\n\r\n {product.ShowFacts && (\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {product.SystemLinks &&\r\n product.SystemLinks.length > 0 &&\r\n product.SystemLinks.map((link, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n {props.InspectionCopy &&\r\n props.InspectionCopy.ShowInspectionCopyLink &&\r\n props.DynamicContactFormViewModel &&\r\n props.DynamicContactFormViewModel?.DynamicFieldsList.length > 0 && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {(product.SameSeriesProducts || product.SameSubjectProducts) && (\r\n
\r\n {product.SameSeriesProducts && (\r\n \r\n )}\r\n\r\n {product.SameSubjectProducts && (\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default productPickerComposer(profileComposer(ProductPage));\r\n","import * as React from \"react\";\r\nimport ProductPage from \"@/ReactComponents/ProductPage/product-page\";\r\n\r\nconst ProductPageView = props => ;\r\n\r\nexport default ProductPageView;\r\n"],"names":["children","useIsOverflow","callback","useState","isOverflow","setIsOverflow","ref","useRef","useLayoutEffect","hasOverflow","current","scrollHeight","clientHeight","isOpen","setIsOpen","rootClasses","classNames","open","arrowClasses","div","className","button","type","onClick","aria-label","aria-expanded","NoticeList","props","render","noticeArray","this","contentInfoClasses","noIcon","map","item","idx","key","dangerouslySetInnerHTML","__html","Component","Modal","notCloseable","LoadSpinner","role","aria-busy","aria-live","aria-valuetext","span","DropdownCheckboxes","data","dataSource","keyEventHandler","close","handleClickOutside","checkboxSubmitHandler","document","removeEventListener","capture","updateItem","Object","assign","setState","newarr","Label","hidden","id","checked","onChange","classes","isExpanded","dropdownRef","list","selectBtnText","IconEmail","svg","x","y","width","height","viewBox","path","d","Tab","tabIndex","aria-labelledby","label","Tabs","state","isCurrent","counter","setCurrent","bind","onKeyDown","componentDidUpdate","prevProps","initialCurrentIndex","tab","e","tabs","querySelectorAll","tabFocus","availableFocusIndex","forEach","index","disabled","push","setAttribute","length","focus","componentDidMount","querySelector","addEventListener","componentWillUnmount","childTabs","filter","child","tabClasses","tabs__menu__tab","active","isDisabled","aria-selected","aria-controls","labelCount","mapStateToProps","userInfo","profileSelector","loggedIn","loginUrl","logoutUrl","profileLinks","userName","userCreatePending","loginRedirecting","createLoginContent","createProfileUrl","createProfileUniLoginUrl","uniPromptContent","isUniLoggedInOnly","mapDispatchToProps","dispatch","userLoggedIn","profileActions","userLogin","unicConnect","userLogout","userCreateSubmit","userinfo","resolve","reject","apiUrl","getNewsletterProfile","email","profileComposer","connect","productPickerComposer","productPickerWork","productPickerSelector","productPickerProduct","productPickerBasketProductConfig","amount","salesConfigIndex","periodValueIndex","primaryPrice","secondaryPrice","classesValue","isGettingProductPrice","isAdding","basketSelector","basket","setWork","work","productPickerActions","setProductIndex","productIndex","setAmount","quantity","setSalesConfigIndex","setPeriodValueIndex","setClassesValue","classesData","basketAdd","basketItem","basketActions","ProductPickerRadioSelect","clickHandler","preventDefault","event","target","value","currentSalesConfig","Work","Products","product","Id","productConfig","PriceConfigurations","ProductComponent","productDeliveryInfo","ProductDeliveryInfo","classList","selected","inStockClasses","InfoType","InfoTypes","priceClasses","discounted","DiscountedPrice","hasPriceConfiguration","hasProductInfoTextButNoPriceConfiguration","ProductInfoText","Quantity","a","href","ProductPageLink","p","MediaType","StockText","PriceUnit","PrimaryPrice","SecondaryPrice","IsPhysical","DeliveryCostsModalButton","IsBuyable","AllowQuantity","AmountInput","context","Title","min","propTypes","ProductPickerSelectedDetails","tempAmount","showClassSelector","infoModalShow","selectChangeHandler","classSelectorVisible","classSelectorSubmitHandler","openInfoModal","closeInfoModal","objectSelected","ArrayOfChoices","i","UnitValue","UnitTypeCode","getPriceBasisText","c","configs","classOptions","ClassOptions","Options","relevantClasses","RelevantClasses","Classes","IsSchoolLicenseAndRelevantClasses","classCount","preText","includes","studentCount","StudentCount","labels","StudentsLabel","ClassesLabel","after","ClassName","generateString","ShowClassDropdown","Selected","numStudents","Value","reduce","b","PriceBasisText","replace","showPeriodDropdown","selectedPeriodObject","selectedClasses","hasContent","priceBasisNotification","LicenseLabel","LicenseText","LicenseTypeText","hr","BuyableNote","AccessText","AccessPeriodText","AccessRenewText","PriceBasisNotification","table","tbody","AccessLabel","tr","td","AccessPeriodLabel","PeriodOptions","AccessRenewLabel","PriceBasisLabel","ShowClassOptions","obj","expanded","closeFunction","ConfigurationSelect","hasSelectedClasses","btnClasses","btnText","EditSelectedLevels","ChooseSelectedLevelsText","renderSelectClassesButton","ReactSuperSelect","objSelected","placeholder","ChoosePeriodText","initialValue","optionValueKey","optionLabelKey","customOptionTemplateFunction","PriceText","customSelectedValueTemplateFunction","arr","PriceInfoLinkText","toClose","showCloseButton","labelledBy","PriceInfoContentText","ProductPickerSelectedTypelist","selectConfig","productConfigs","hasMoreProductConfigs","showList","conf","strong","ConfigurationSummary","IconArrow","direction","onClose","style","margin","LoginIntroText","onLoginClick","LoginButtonText","CreateProfileUrl","CreateProfileButtonText","ProductPicker","ghModalOpen","loginModalOpen","onChangeHandler","submitHandler","productInBasket","getUpdateInButtonState","toggleLoginModal","onLoginAndAddToBasket","isLoading","currentProduct","indexOf","addToBasket","productId","BasketItems","find","Isbn","basketVersionOfProduct","currentPriceConfig","currentPeriod","sameUnitTypeCode","sameUnitValue","samePeriod","sameAmountAsInBasket","Labels","ProductPickerLabels","putInBasket","PutInBasketText","inBasket","IsInBasketText","canUpdateBasket","UpdateBasketText","noClassesSelected","NoClassesSelectedText","noPeriodSelected","NoPeriodSelectedText","hasPeriodOptions","isPhysicalProduct","AccessFormCode","sameAccessFormInBasket","Count","currentClassesValue","priceConfigUtils","sameClassesInBasket","IsInBasket","PeriodUnitTypeCode","PeriodUnitValue","localStorage","setItem","ADD_TO_BASKET_LOCALSTORAGE_KEY","JSON","stringify","workId","configIndex","basketButtonState","VariantsLabel","currentProductIndex","HideConfigurationDetails","PrimaryPriceText","isTotalButton","SINGLE_USER_LICENSE_CODE","ShouldLogin","SpinnerButton","showAddTodoButton","tracking","LoginModal","ProductDescriptionErrorBoundary","hasError","componentDidCatch","striptags","description","position","padding","cursor","userSelect","join","TrialLicenseMediaTypeList","selectedIndex","trialLicenseProducts","h1","TrialLicenseStatusTitle","trialLicenseProduct","TrialLicenseMediaTypeRadioItem","TrialLicenseStatusText","trialLicenseOrdered","undefined","OrderAccessButtonText","React","fill","xmlns","stroke","strokeWidth","strokeLinecap","icon","IconChevronRight","fillRule","clipRule","strokeLinejoin","TrialLicenseLink","modalOpen","toggleModal","validateLicense","renderTrialLicense","val","TrialLicense","IsUserPermitted","isbn","TrialLicenseProductIsbn","trialLicenseValidate","trialLicenseValidateSuccess","trialLicenseRequestSuccess","trialLicenseError","payload","Product","BasketLineType","TrialAccess","SalesFormCode","add","trialLicense","productTitle","siteName","leadText","OrderViaEmail","LeadText","Email","buttonText","ButtonText","ProductMediaLinkWithCallback","IconBookOpen","OrderTrialAccessText","maxWidth","Url","ModalSpinner","trialLicensePending","trialLicenseErrorMessage","errorMessage","trialLicenseStatus","TrialLicenseProducts","TrialLicenseOrdered","InvalidPermissionText","basketComposer","trialLicenseSelector","trialLicenseRequest","Payload","actions","url","ProductReviewBlock","reviewsArray","productReviews","swiperSettings","infinite","slidesToShow","slidesToScroll","dots","arrows","prevArrow","SliderNavigationButton","arrowDirection","nextArrow","easing","speed","Swiper","review","ReviewText","ReviewAuthor","ReviewSource","ReviewDate","Facts","ProductFacts","fact","Text","fillOpacity","Extra","freeMaterialGroups","freeMaterials","FreeMaterialGroups","GroupType","h3","GroupTitle","GroupMaterials","IconPDF","Description","Extension","circle","cx","cy","r","console","log","setCurrentProductIndex","formProps","DynamicContactFormViewModel","onChangeProduct","useCallback","window","location","origin","history","replaceState","addToBasketItem","getItem","parsedObj","parse","Amount","useEffect","ProductIndex","basketItemFromLocalStorage","removeItem","licenceProduct","formattedTitle","trialLicenseLinkProps","SiteName","CoverImageUrl","img","src","loading","alt","IconLogo","CustomLink","LinkText","LinkUrl","ProductMediaLink","Target","ReadingSampleLink","HasTrialAccess","SampleUrl","IconBars","DigitalProductUrl","IconWebsite","InspectionCopy","ShowInspectionCopyLink","DynamicFieldsList","Category","Subtitle","EditorsListLong","EditorsListShortAbbreviation","AuthorsListLong","SeriesLinks","link","ProductDescriptionText","ViewMoreSection","ProductDescription","Reviews","ProductReviewsTitleText","productReviewsTitleText","FreeMaterials","ExtraMaterialsTab","ShowFacts","FactsTab","SystemLinks","ShowAddTodoButton","DynamicContactForm","SameSeriesProducts","SameSubjectProducts","ProductSlider","Works","RelatedProducts","HideWhenEmpty","TitleText","TabTitle","ViewAllLink","ViewAllLinkText","EmptySliderText","ProductPage"],"sourceRoot":""}