{"version":3,"sources":["webpack:///./Scripts/Containers/BuyButton.Container.js","webpack:///./Scripts/Containers/withReactiveStyleBuyButton.js"],"names":["BuyButtonContainer","props","this","onClick","articleNumber","quantityFieldId","price","currency","Component","connect","state","dispatch","onSuccess","cart","receive","onError","ex","catchError","error","loadError","withReactiveStyleBuyButton","quantity","document","getElementById","value","addToCartService","StateStyles","WrappedComponent","stylePrefix","stateClass","startTime","setState","success","changeState","querySelector","active","click","autoReset","onNeutralState","resetTimeout","loadingDuration","minimumLoadingTime","params","a","onLoadingState","data","onCompleteState","undefined","window","fbq","className","onButtonClick"],"mappings":"wpBAQMA,E,gCACF,WAAYC,GAAO,+BACTA,G,kCAGV,WAAS,WACL,OACI,kBAAC,IAAD,OAAeC,KAAKD,MAApB,CACIE,QAAS,SAACC,EAAeC,EAAiBC,EAAOC,GAAxC,OAAqD,EAAKN,MAAME,QAAQ,CAAEC,gBAAeC,kBAAiBC,QAAOC,qB,GARzGC,aAgClBC,uBAnBS,SAAAC,GACpB,MAAO,MAGgB,SAAAC,GACvB,MAAO,CACHC,UAAW,SAACC,GACRF,EAASG,YAAQD,KAErBE,QAAS,SAACC,GACNL,EAASM,YAAWD,GAAI,SAAAE,GAAK,OAAIC,YAAUD,WASxCT,CACHW,YAA2BpB,GALvB,SAAC,GAAwD,IAAtDI,EAAsD,EAAtDA,cAAeC,EAAuC,EAAvCA,gBAAiBC,EAAsB,EAAtBA,MAAOC,EAAe,EAAfA,SAChDc,EAAWhB,EAAkBiB,SAASC,eAAelB,GAAiBmB,MAAQ,EACpF,OAAOC,YAAiB,CAAErB,gBAAeiB,WAAUf,QAAOC,eAGM,0B,ypBCvCpE,IAAMmB,EACO,YADPA,EAEO,YAFPA,EAGK,UAkBI,SAASN,EAA2BO,EAAkBxB,EAASyB,GAC1E,yCACI,WAAY3B,GAAO,0BACf,cAAMA,IACDS,MAAQ,CACTmB,WAAY,GACZC,UAAW,GAJA,EADvB,0CASI,WACI5B,KAAK6B,SAAS,CACVF,WAAY,GACZC,UAAW,MAZvB,4BAgBI,WAAiB,MACb5B,KAAK6B,SAAS,CACVF,WAAY,gBAAGD,IAAL,OAAmBF,GAC7BI,UAAW,UAnBvB,6BAuBI,SAAgBE,GAAS,WACfC,EAAc,WAAM,MACtB,EAAKF,SAAS,CACVF,WAAY,gBAAGD,IAAL,OAAmBI,EAAUN,EAAsBA,KAG9DM,GACC,KAAW,WACP,IAAInB,EAAOS,SAASY,cAAc,mBAC9BC,EAASb,SAASY,cAAc,kCACzB,MAARrB,GACIsB,GACHtB,EAAKuB,UAGV,MAIkB,IAAzB,EAAKnC,MAAMoC,WAAuB,KAAW,WACzC,EAAKC,mBACN,EAAKrC,MAAMsC,cAAgB,MAG5BC,EAAkB,MAAatC,KAAKQ,MAAMoB,UAC1CW,EAAqBvC,KAAKD,MAAMwC,oBAAsB,IAGxDD,GAAmBC,EACnBR,IAEA,KAAW,WACPA,MACDQ,EAAqBD,KAxDpC,4CA4DI,WAAoBE,GAApB,eAAAC,EAAA,sEAEQzC,KAAK0C,iBAFb,SAG2BzC,EAAQuC,GAHnC,QAGcG,EAHd,SAKY3C,KAAK4C,iBAAgB,GACrB5C,KAAKD,MAAMW,UAAUiC,GACJE,MAAdC,OAAOC,KACNA,IAAI,QAAS,cAGjB/C,KAAKoC,iBAXjB,gDAcQpC,KAAK4C,iBAAgB,GACrB5C,KAAKD,MAAMc,QAAX,MAfR,yDA5DJ,kEA+EI,WAAS,WACL,OACI,0BAAMmC,UAAWhD,KAAKQ,MAAMmB,YACxB,kBAACF,EAAD,KAAkBxB,QAAS,SAACuC,GAAD,OAAY,EAAKS,cAAcT,KAAaxC,KAAKD,aAlF5F,GAAqBO","file":"11.c2fb1212c527d8c0ffb8.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport BuyButton from '../Components/BuyButton';\r\nimport { receive, loadError } from '../Actions/Cart.action';\r\nimport { catchError } from '../Actions/Error.action';\r\nimport { add as addToCartService} from '../Services/Cart.service';\r\nimport withReactiveStyleBuyButton from './withReactiveStyleBuyButton';\r\n\r\nclass BuyButtonContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.onClick({ articleNumber, quantityFieldId, price, currency })} />\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return { }\r\n}\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n onSuccess: (cart) => {\r\n dispatch(receive(cart));\r\n },\r\n onError: (ex) => {\r\n dispatch(catchError(ex, error => loadError(error)));\r\n }\r\n }\r\n}\r\n\r\nconst onClick = ({ articleNumber, quantityFieldId, price, currency }) => {\r\n const quantity = quantityFieldId ? document.getElementById(quantityFieldId).value : 1;\r\n return addToCartService({ articleNumber, quantity, price, currency });\r\n}\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n withReactiveStyleBuyButton(BuyButtonContainer, onClick, 'buy-button-container'));","import React, { Component } from 'react';\r\n\r\nconst StateStyles = {\r\n LOADING: \"--loading\",\r\n SUCCESS: \"--success\",\r\n ERROR: \"--error\",\r\n};\r\n\r\n/**\r\n * Represents a HOC which wraps a BuyButton or ReorderButton and applies diffrent styles to it\r\n * depending on its click state.\r\n * @param {*} WrappedComponent The button component.\r\n * @param {*} onClick The button's onClick event.\r\n * @param {*} stylePrefix The style prefix to append state's modifiers. For\r\n * example, 'button' will result as 'button--loading'.\r\n * \r\n * Some available props that the HOC component supports:\r\n * autoReset : it is true by default. Not its value, but the behaviour is like that. Unless people set it as false, by default, button is always reset to neutral state after the request is completed.\r\n * resetTimeout: Number milisecond after the complete state, the style of button will be reset. If don't set, it is 2000\r\n * minimumLoadingTime: Mininum milisecond to display the loading state. If don't set, it is 1000\r\n * onSuccess: callback if onClick method returns data\r\n * onError: callback if onClick method throws an exception\r\n */\r\nexport default function withReactiveStyleBuyButton(WrappedComponent, onClick, stylePrefix) {\r\n return class extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n stateClass: '',\r\n startTime: 0,\r\n }\r\n }\r\n\r\n onNeutralState() {\r\n this.setState({\r\n stateClass: '',\r\n startTime: 0,\r\n });\r\n }\r\n \r\n onLoadingState() {\r\n this.setState({\r\n stateClass: `${stylePrefix}${StateStyles.LOADING}`,\r\n startTime: Date.now(),\r\n });\r\n }\r\n \r\n onCompleteState(success) {\r\n const changeState = () => {\r\n this.setState({\r\n stateClass: `${stylePrefix}${success ? StateStyles.SUCCESS : StateStyles.ERROR}`,\r\n });\r\n \r\n if(success){\r\n setTimeout(() => {\r\n var cart = document.querySelector('#miniCart .icon');\r\n var active = document.querySelector('.cart__info.cart__info--hidden');\r\n if(cart != null){\r\n if(active){\r\n cart.click();\r\n }\r\n }\r\n }, 500);\r\n }\r\n // if `autoReset` is true, which is default, the style will be changed\r\n // to neutral after a `resetTimeout` amount of time (2 seconds by default).\r\n this.props.autoReset !== false && setTimeout(() => {\r\n this.onNeutralState();\r\n }, this.props.resetTimeout || 2000);\r\n }\r\n\r\n const loadingDuration = Date.now() - this.state.startTime;\r\n const minimumLoadingTime = this.props.minimumLoadingTime || 1000;\r\n // ensure the loading indicator is displayed at least a `minimumLoadingTime`\r\n // amount of time before changing it to Success or Error.\r\n if (loadingDuration >= minimumLoadingTime) {\r\n changeState();\r\n } else {\r\n setTimeout(() => {\r\n changeState();\r\n }, minimumLoadingTime - loadingDuration);\r\n }\r\n }\r\n\r\n async onButtonClick(params) {\r\n try {\r\n this.onLoadingState();\r\n const data = await onClick(params);\r\n if(data) {\r\n this.onCompleteState(true);\r\n this.props.onSuccess(data);\r\n if(window.fbq != undefined){\r\n fbq('track', 'AddToCart');\r\n }\r\n } else {\r\n this.onNeutralState();\r\n }\r\n } catch(err) {\r\n this.onCompleteState(false);\r\n this.props.onError(err);\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n \r\n this.onButtonClick(params)} {...this.props} />\r\n \r\n );\r\n }\r\n }\r\n}"],"sourceRoot":""}