{"version":3,"file":"3127.7f5c5dd63198b738c0ba.js","mappings":"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","sources":["webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ReduxFormInputs/product-selector-field.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/DynamicContactForm/dynamic-contact-form-content.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/DynamicContactForm/dynamic-contact-form.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/AnimationComponents/slide-vertical-animation.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ReduxFormInputs/text-field.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ReduxFormInputs/textarea-field.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactReducers/ContactForm/contact-form-composer.js"],"sourcesContent":["import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport const ProductSelectorField = field => {\r\n const { error, touched } = field.meta;\r\n const fieldId = field.input.name;\r\n\r\n const inputClasses = classNames({\r\n \"text-input__input\": true,\r\n dirty: field.input.value,\r\n invalid: error && touched\r\n });\r\n\r\n return (\r\n <div className=\"text-input\">\r\n <label htmlFor={fieldId} style={{ position: \"static\" }}>\r\n {field.label} {field.required && <span className=\"required-star\">*</span>}\r\n </label>\r\n <br />\r\n <select\r\n {...field.input}\r\n id={fieldId}\r\n className={inputClasses}\r\n size={18}\r\n multiple={true}\r\n required={field.required}\r\n onFocus={field.onFocus}\r\n onBlur={field.onBlur}\r\n value={field.input.value || []}\r\n style={{ width: \"100%\", height: \"auto\", border: \"solid 1px\", marginTop: \"0\" }}\r\n >\r\n {field.children}\r\n </select>\r\n {touched && error && <span>{error}</span>}\r\n </div>\r\n );\r\n};\r\n","import React, { Suspense, useEffect, useState } from \"react\";\r\nimport { DynamicFieldsList } from \"ReactComponents/TwoColumnGrid/two-column-grid\";\r\nimport { createField } from \"./dynamic-contact-form\";\r\nimport SliderVerticalAnimation from \"ReactComponents/Shared/AnimationComponents/slide-vertical-animation\";\r\n\r\nconst ReCAPTCHA = React.lazy(() => import(\"react-google-recaptcha\"));\r\n\r\nexport const DynamicContactFormContent = ({\r\n DynamicFieldsList,\r\n CaptchaSiteKey,\r\n BtnLabel,\r\n onChangeRecaptcha,\r\n submitting,\r\n captchaToken,\r\n collapsible\r\n}: {\r\n DynamicFieldsList: DynamicFieldsList;\r\n CaptchaSiteKey: string;\r\n BtnLabel: string;\r\n onChangeRecaptcha: (response: string | null) => void;\r\n submitting: boolean;\r\n captchaToken: string | null;\r\n collapsible: boolean;\r\n}) => {\r\n const [didMount, setDidMount] = useState(false);\r\n const [isCollapsed, setIsCollapsed] = useState(true);\r\n\r\n useEffect(() => {\r\n setDidMount(true);\r\n }, []);\r\n\r\n const onInputTouched = () => {\r\n if (!isCollapsed) return;\r\n\r\n setIsCollapsed(false);\r\n };\r\n\r\n const firstInput = DynamicFieldsList[0];\r\n const collapsedDynamicFields = DynamicFieldsList.slice(1);\r\n\r\n return (\r\n <div>\r\n {collapsible ? (\r\n <>\r\n {createField(firstInput, 0, onInputTouched)}\r\n\r\n <SliderVerticalAnimation visible={!isCollapsed}>\r\n {collapsedDynamicFields?.map(field => createField(field))}\r\n\r\n <br />\r\n\r\n {didMount && CaptchaSiteKey ? (\r\n <Suspense fallback={<span>Loading...</span>}>\r\n <div>\r\n <ReCAPTCHA\r\n sitekey={CaptchaSiteKey}\r\n hl=\"da\"\r\n onChange={onChangeRecaptcha}\r\n />\r\n <br />\r\n </div>\r\n </Suspense>\r\n ) : null}\r\n\r\n <br />\r\n\r\n <p>\r\n <button\r\n className=\"footer-widget__button\"\r\n type=\"submit\"\r\n disabled={submitting || (!captchaToken && !!CaptchaSiteKey)}\r\n >\r\n {submitting ? (\r\n <span className=\"loader button-is-loading\">\r\n <span></span>\r\n </span>\r\n ) : (\r\n <span>{BtnLabel}</span>\r\n )}\r\n </button>\r\n </p>\r\n </SliderVerticalAnimation>\r\n </>\r\n ) : (\r\n <>\r\n {DynamicFieldsList ? DynamicFieldsList.map(field => createField(field)) : null}\r\n\r\n <br />\r\n {didMount && CaptchaSiteKey ? (\r\n <Suspense fallback={<span>Loading...</span>}>\r\n <div>\r\n <ReCAPTCHA sitekey={CaptchaSiteKey} hl=\"da\" onChange={onChangeRecaptcha} />\r\n <br />\r\n </div>\r\n </Suspense>\r\n ) : null}\r\n <br />\r\n <p>\r\n <button\r\n className=\"footer-widget__button\"\r\n type=\"submit\"\r\n disabled={submitting || (!captchaToken && !!CaptchaSiteKey)}\r\n >\r\n {submitting ? (\r\n <span className=\"loader button-is-loading\">\r\n <span></span>\r\n </span>\r\n ) : (\r\n <span>{BtnLabel}</span>\r\n )}\r\n </button>\r\n </p>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// @ts-check\r\nimport React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { Field, reduxForm } from \"redux-form\";\r\nimport { contactFormComposer } from \"ReactReducers/ContactForm/contact-form-composer\";\r\nimport { SubmissionError } from \"redux-form\";\r\nimport SliderVerticalAnimation from \"ReactComponents/Shared/AnimationComponents/slide-vertical-animation\";\r\nimport { TextField } from \"../Shared/ReduxFormInputs/text-field\";\r\nimport { TextareaField } from \"../Shared/ReduxFormInputs/textarea-field\";\r\nimport { ProductSelectorField } from \"../Shared/ReduxFormInputs/product-selector-field\";\r\nimport { DynamicContactFormContent } from \"./dynamic-contact-form-content\";\r\nimport classNames from \"classnames\";\r\n\r\nexport const createField = (field, i, customOnChange) => {\r\n const { Type, Name, Label, IsRequired, Sections } = field;\r\n\r\n let component;\r\n\r\n switch (Type) {\r\n case \"Text Field\":\r\n component = TextField;\r\n break;\r\n case \"Text Area\":\r\n component = TextareaField;\r\n break;\r\n case \"Product Selector\":\r\n component = ProductSelectorField;\r\n break;\r\n default:\r\n component = \"input\";\r\n break;\r\n }\r\n\r\n if (Type === \"Product Selector\") {\r\n if (!Sections || !Sections.length) return null;\r\n\r\n return (\r\n <section key={`${Name}-${i}-Products`} style={{ width: \"100%\", marginTop: \"1rem\" }}>\r\n <Field\r\n name={Name}\r\n label={Label}\r\n required={IsRequired}\r\n component={component}\r\n onChange={customOnChange}\r\n size={18}\r\n multiple={true}\r\n >\r\n {Sections.map((section, index) => {\r\n const optGroupKey = `${section.SectionName.split(\" \").join(\"-\")}-${index}`;\r\n return (\r\n <optgroup key={optGroupKey} label={section.SectionName}>\r\n {section.Products &&\r\n section.Products.length > 0 &&\r\n section.Products.map((product, i) => {\r\n const optKey = `${product.ISBN}-${i}`;\r\n return (\r\n <option key={optKey} value={product.ISBN}>\r\n {product.Title}\r\n </option>\r\n );\r\n })}\r\n </optgroup>\r\n );\r\n })}\r\n </Field>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <section key={`${Name}-${i}`}>\r\n <Field\r\n name={Name}\r\n label={Label}\r\n required={IsRequired}\r\n component={component}\r\n onChange={customOnChange}\r\n size={18}\r\n multiple={true}\r\n />\r\n </section>\r\n );\r\n};\r\n\r\nclass DynamicContactForm extends Component {\r\n /**\r\n * @param {any} props\r\n */\r\n constructor(props) {\r\n super(props);\r\n // console.log(\"DynamicContactForm props: \", props);\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n this.verifyReCaptchaCallback = this.verifyReCaptchaCallback.bind(this);\r\n\r\n this.state = {\r\n captchaToken: null,\r\n didMount: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ didMount: true });\r\n }\r\n\r\n /**\r\n * @param {any} data\r\n */\r\n onSubmit(data) {\r\n const { WebApiUrl: webApiUrl, contactFormSubmit } = this.props;\r\n /**\r\n * @type {string | undefined}\r\n */\r\n let captchaToken = undefined;\r\n if (this.state.captchaToken) {\r\n captchaToken = this.state.captchaToken;\r\n }\r\n const { FormTitle, FormHeading, Id } = this.props;\r\n\r\n return new Promise((resolve, reject) => {\r\n const clonedData = JSON.parse(JSON.stringify(data));\r\n let products = \"\";\r\n\r\n if (clonedData.ProductSelector) {\r\n products = clonedData.ProductSelector.join(\", \");\r\n delete clonedData.ProductSelector;\r\n }\r\n contactFormSubmit(\r\n webApiUrl,\r\n {\r\n ...clonedData,\r\n Products: products,\r\n form: \"dynamic\",\r\n formHeading: FormHeading,\r\n formTitle: FormTitle,\r\n formId: Id,\r\n captchaResponse: captchaToken\r\n },\r\n resolve,\r\n reject\r\n );\r\n }).then(response => {\r\n if (!response.Success) {\r\n const errors = {};\r\n if (!response.Payload.fields) {\r\n throw new SubmissionError({});\r\n }\r\n response.Payload.fields.forEach(error => {\r\n errors[error.name] = error.value;\r\n });\r\n throw new SubmissionError(errors);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @param {String | null} captchaToken\r\n */\r\n verifyReCaptchaCallback(captchaToken) {\r\n if (captchaToken) {\r\n this.setState({\r\n captchaToken\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n FormTitle,\r\n FormHeading,\r\n DynamicFieldsList,\r\n BtnLabel,\r\n SubmitSuccessText,\r\n CaptchaSiteKey,\r\n Collapsible,\r\n handleSubmit,\r\n submitting,\r\n submitSucceeded,\r\n TextColor,\r\n noPadding\r\n } = this.props;\r\n\r\n const { captchaToken } = this.state;\r\n\r\n const formContentProps = {\r\n DynamicFieldsList,\r\n CaptchaSiteKey,\r\n BtnLabel,\r\n onChangeRecaptcha: (/** @type {string | null} */ response) =>\r\n this.verifyReCaptchaCallback(response),\r\n submitting,\r\n captchaToken\r\n };\r\n\r\n const headingClasses = classNames(\r\n \"content-header\",\r\n TextColor ? `${TextColor}--text` : \"color-black--text\"\r\n );\r\n\r\n const contentRowClasses = classNames(`content-row content-row--50`, {\r\n \"content-row--no-padding\": noPadding\r\n });\r\n\r\n return (\r\n <div className=\"content-module\">\r\n <div className={contentRowClasses}>\r\n <h2 className={headingClasses} dangerouslySetInnerHTML={{ __html: FormHeading }} />\r\n <div className=\"content-inner content-block content--dark\">\r\n <SliderVerticalAnimation visible={!submitSucceeded}>\r\n <form onSubmit={handleSubmit(this.onSubmit)}>\r\n <h3>{FormTitle}</h3>\r\n <Field name=\"ItemId\" component=\"input\" type=\"hidden\" />\r\n <Field\r\n name=\"formId\"\r\n component=\"input\"\r\n type=\"hidden\"\r\n value=\"dynamicContactForm\"\r\n />\r\n <Field\r\n name=\"formHeading\"\r\n component=\"input\"\r\n type=\"hidden\"\r\n value={FormHeading}\r\n />\r\n <Field name=\"formTitle\" component=\"input\" type=\"hidden\" value={FormTitle} />\r\n\r\n <DynamicContactFormContent {...formContentProps} collapsible={Collapsible} />\r\n </form>\r\n </SliderVerticalAnimation>\r\n <SliderVerticalAnimation visible={submitSucceeded}>\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: SubmitSuccessText }}></div>\r\n </div>\r\n </SliderVerticalAnimation>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (_, props) => {\r\n const initialValues = props.DynamicFieldsList.reduce((initialValues, item) => {\r\n initialValues[item.Name] = item.Value;\r\n return initialValues;\r\n }, {});\r\n\r\n return {\r\n initialValues\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(\r\n reduxForm({\r\n form: \"dynamicContactForm\"\r\n })(contactFormComposer(DynamicContactForm))\r\n);\r\n","// @ts-check\r\nimport AnimateHeight from \"react-animate-height\";\r\nimport React from \"react\";\r\n\r\n/**\r\n * @component\r\n * @param {object} props\r\n * @param {boolean} props.visible visible or not\r\n * @param {number} [props.delayIn] seconds to delay animating in\r\n * @param {number} [props.delayOut] seconds to delay animating in\r\n * @param {number} [props.delay] seconds to delay animating in\r\n * @param {boolean} [props.fade] should the content fade while animating height\r\n * @param {React.ReactNode} props.children React children\r\n *\r\n */\r\nfunction SlideVerticalAnimation(props) {\r\n const height = props.visible ? \"auto\" : 0;\r\n const delay =\r\n props.visible && props.delayIn\r\n ? props.delayIn\r\n : !props.visible && props.delayOut\r\n ? props.delayOut\r\n : props.delay || 0;\r\n\r\n return (\r\n <AnimateHeight duration={250} height={height} delay={delay} animateOpacity={props.fade}>\r\n {props.children}\r\n </AnimateHeight>\r\n );\r\n}\r\n\r\nexport default SlideVerticalAnimation;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport const TextField = field => {\r\n const { error, touched } = field.meta;\r\n\r\n const inputClasses = classNames({\r\n \"text-input__input\": true,\r\n dirty: field.input.value,\r\n invalid: error && touched\r\n });\r\n\r\n return (\r\n <div className=\"text-input\">\r\n <input\r\n {...field.input}\r\n className={inputClasses}\r\n id={field.input.name}\r\n type={field.type || \"text\"}\r\n onFocus={field.onFocus}\r\n onBlur={field.onBlur}\r\n maxLength={field.maxLength}\r\n required={field.required}\r\n />\r\n <label htmlFor={field.input.name} className=\"text-input__label\">\r\n {field.label} {field.required && <span className=\"required-star\">*</span>}\r\n </label>\r\n {error && touched && <span className=\"text-input__error-msg\">{error}</span>}\r\n </div>\r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport const TextareaField = field => {\r\n const { error, touched } = field.meta;\r\n const inputClasses = classNames({\r\n dirty: field.input.value,\r\n invalid: error && touched\r\n });\r\n\r\n return (\r\n <div className=\"textarea-field\">\r\n <textarea\r\n {...field.input}\r\n id={field.input.name}\r\n className={inputClasses}\r\n onFocus={field.onFocus}\r\n onBlur={field.onBlur}\r\n required={field.required}\r\n ></textarea>\r\n <label htmlFor={field.input.name} className=\"text-input__label\">\r\n {field.label} {field.required && <span className=\"required-star\">*</span>}\r\n </label>\r\n {error && touched && <span className=\"field-error\">{error}</span>}\r\n </div>\r\n );\r\n};\r\n","import { connect } from \"react-redux\";\r\nimport { contactFormSelector, contactFormActions } from \"./contact-form-reducer\";\r\n\r\nexport function contactFormComposer(Component) {\r\n const mapStateToProps = function (state) {\r\n return {\r\n contactFormSubmitPending: contactFormSelector.contactFormSubmitPending(state),\r\n contactFormSubmitSuccess: contactFormSelector.contactFormSubmitSuccess(state)\r\n };\r\n };\r\n\r\n const mapDispatchToProps = function (dispatch) {\r\n return {\r\n contactFormSubmit: (webApiUrl, formInfo, resolve, reject) =>\r\n dispatch(contactFormActions.contactFormSubmit(webApiUrl, formInfo, resolve, reject))\r\n };\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(Component);\r\n}\r\n"],"names":["ProductSelectorField","field","meta","error","touched","fieldId","input","name","inputClasses","classNames","dirty","value","invalid","div","className","label","htmlFor","style","position","required","span","br","select","id","size","multiple","onFocus","onBlur","width","height","border","marginTop","children","ReCAPTCHA","React","DynamicContactFormContent","DynamicFieldsList","CaptchaSiteKey","BtnLabel","onChangeRecaptcha","submitting","captchaToken","collapsible","useState","didMount","setDidMount","isCollapsed","setIsCollapsed","useEffect","firstInput","collapsedDynamicFields","slice","createField","SliderVerticalAnimation","visible","map","Suspense","fallback","sitekey","hl","onChange","p","button","type","disabled","i","customOnChange","component","Type","Name","Label","IsRequired","Sections","TextField","TextareaField","length","section","key","Field","index","optGroupKey","SectionName","split","join","optgroup","Products","product","optKey","ISBN","option","Title","DynamicContactForm","props","onSubmit","bind","verifyReCaptchaCallback","state","componentDidMount","this","setState","Promise","JSON","parse","clonedData","ProductSelector","products","contactFormSubmit","FormTitle","formId","captchaResponse","resolve","reject","response","Payload","errors","headingClasses","contentRowClasses","dangerouslySetInnerHTML","Collapsible","submitSucceeded","SubmitSuccessText","initialValues","contactFormComposer","connect","form","SlideVerticalAnimation","maxLength","textarea","Component","contactFormSubmitPending","contactFormSelector","contactFormSubmitSuccess","dispatch","webApiUrl","formInfo","contactFormActions"],"sourceRoot":""}