{"version":3,"file":"static/chunks/173.66ee1ffcd9bc45a4.js","mappings":"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","sources":["webpack://_N_E/./components/organisms/DynamicsForm/DynamicsForm.js"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n// helpers\nimport {\n analytics,\n getLeadGenSubmitDetail,\n getLeadGenSubmitDetailWH,\n getLeadGenSubmitSuccess,\n getLeadGenSubmitSuccessWH,\n} from '../../../utils/analytics';\n// ui\nimport HtmlStringEmbed from '../../molecules/HtmlStringEmbed/HtmlStringEmbed';\n// constants\nimport { CtfLeadGenType, CtfWHLeadGenType } from '../../../utils/constants';\nimport { isWHEnv, removeKeys } from '@/utils/helper';\n\n// There are 2 ways to use dynamics form:\n// 1. Extend outbound marketing forms using code\n////// benefits: performance\n// https://learn.microsoft.com/en-us/dynamics365/customer-insights/journeys/developer/marketing-form-client-side-extensibility\n////// benefits: realtime\n// 2. Extend Customer Insights - Journeys marketing forms using code\n// https://learn.microsoft.com/en-us/dynamics365/customer-insights/journeys/developer/realtime-marketing-form-client-side-extensibility\n\nexport default function DynamicsForm({\n id,\n name,\n content,\n type,\n dynamicScripts,\n}) {\n const formRef = useRef();\n const isWH = isWHEnv();\n\n const generateFormData = (form) => {\n let formData = new FormData(form);\n\n for (var pair of formData.entries()) {\n console.log(pair[0] + \": \" + pair[1]);\n }\n\n const obj = Object.fromEntries(formData);\n\n let keysToRemove = ['firstname', 'lastname', 'emailaddress1', 'mobilephone', 'address1_line1'];\n return removeKeys(obj, keysToRemove);\n }\n\n const handleSubmit = useCallback((e) => {\n analytics({\n window,\n document,\n detail: getLeadGenSubmitDetail(e, {\n isPromotional: type === CtfLeadGenType.OFFER,\n }),\n });\n }, []);\n\n // const handleSubmitWH = useCallback((e) => {\n // localStorage.setItem('formSubmit', JSON.stringify(e));\n // localStorage.setItem('formSubmitdata', JSON.stringify(e.target))\n // alert('submitting form', e)\n // analytics({\n // window,\n // document,\n // detail: getLeadGenSubmitDetailWH(e, {\n // form_type: type,\n // }),\n // });\n\n // }, []);\n\n const handleSubmitWH = (e) => {\n const forms = e.target;\n\n const newObject = generateFormData(forms);\n\n analytics({\n window,\n document,\n detail: getLeadGenSubmitDetailWH(e, {\n ...newObject,\n form_name: type,\n lead_type: type === CtfWHLeadGenType.SIGNUP ? \"Sign-up\" : \"Enquiry\",\n lead_enquiry_type: type === CtfWHLeadGenType.SIGNUP ? undefined : type.replace(\"form\", \" \"),\n }),\n });\n }\n\n const handlePostSubmit = useCallback(\n ({ detail: { successful: isSuccessful } } = {}) => {\n if (!isSuccessful) return;\n\n analytics({\n window,\n document,\n detail: getLeadGenSubmitSuccess(null, {\n isPromotional: type === CtfLeadGenType.OFFER,\n }),\n });\n },\n []\n );\n\n // const handlePostSubmitWH = useCallback(\n // ({ detail: { successful: isSuccessful } } = {}) => {\n // if (!isSuccessful) return;\n\n // analytics({\n // window,\n // document,\n // detail: getLeadGenSubmitSuccessWH(null, {\n // form_type: type,\n // }),\n // });\n // },\n // []\n // );\n\n const handlePostSubmitWH = (e) => {\n const { detail: { successful: isSuccessfull } } = e;\n if (!isSuccessfull) return;\n const forms = e.target;\n\n const newObject = generateFormData(forms);\n analytics({\n window,\n document,\n detail: getLeadGenSubmitSuccessWH(null, {\n ...newObject,\n form_name: type,\n lead_type: type === CtfWHLeadGenType.SIGNUP ? \"Sign-up\" : \"Enquiry\",\n lead_enquiry_type: type === CtfWHLeadGenType.SIGNUP ? undefined : type.replace(\"form\", \" \"),\n }),\n });\n }\n useEffect(() => {\n const isRealtimeForm = !window?.MsCrmMkt;\n if (!isRealtimeForm) return;\n console.log('is Realtime form');\n\n let form = formRef?.current?.querySelector('form');\n\n const initForm = () => {\n form = formRef?.current?.querySelector('form');\n if (!form) return;\n if(isWH) {\n form.addEventListener('submit', handleSubmitWH);\n form.addEventListener('d365mkt-afterformsubmit', handlePostSubmitWH);\n return;\n }\n form.addEventListener('submit', handleSubmit);\n form.addEventListener('d365mkt-afterformsubmit', handlePostSubmit);\n };\n if (formRef?.current) {\n formRef?.current.addEventListener('d365mkt-afterformload', initForm);\n }\n\n return () => {\n if (formRef?.current) {\n formRef?.current.removeEventListener('d365mkt-afterformload', initForm);\n }\n if (form) {\n console.log('remove event listener');\n if(isWH) {\n form.removeEventListener('submit', handleSubmitWH);\n form.removeEventListener('d365mkt-afterformsubmit', handlePostSubmitWH);\n return;\n }\n form.removeEventListener('submit', handleSubmit);\n form.removeEventListener('d365mkt-afterformsubmit', handlePostSubmit);\n }\n };\n }, [handlePostSubmit, handleSubmit, handlePostSubmitWH, handleSubmitWH]);\n\n useEffect(() => {\n const isOutboundForm = !!window?.MsCrmMkt;\n if (!isOutboundForm) return;\n\n const handlePostSubmitOutbond = () => {\n handlePostSubmit({ detail: { successful: true } });\n };\n\n const handlePostSubmitOutbondWH = () => {\n handlePostSubmitWH({ detail: { successful: true } });\n };\n\n if(isWH) {\n MsCrmMkt.MsCrmFormLoader.on('formSubmit', handleSubmitWH);\n MsCrmMkt.MsCrmFormLoader.on('afterFormSubmit', handlePostSubmitOutbondWH);\n return () => {\n MsCrmMkt.MsCrmFormLoader.off('formSubmit', handleSubmitWH);\n MsCrmMkt.MsCrmFormLoader.off('afterFormSubmit', handlePostSubmitOutbondWH);\n };\n }\n\n MsCrmMkt.MsCrmFormLoader.on('formSubmit', handleSubmit);\n MsCrmMkt.MsCrmFormLoader.on('afterFormSubmit', handlePostSubmitOutbond);\n\n return () => {\n MsCrmMkt.MsCrmFormLoader.off('formSubmit', handleSubmit);\n MsCrmMkt.MsCrmFormLoader.off('afterFormSubmit', handlePostSubmitOutbond);\n };\n }, [handlePostSubmit, handleSubmit, handlePostSubmitWH, handleSubmitWH]);\n\n // Reload dynamics365 script after cookie consent change\n useEffect(() => {\n if (!formRef) return;\n\n if (!dynamicScripts?.length || !Array.isArray(dynamicScripts)) return;\n dynamicScripts.map((src) => {\n const script = document.createElement('script');\n script.src = src;\n script.onload = () => {\n console.log('Dynamics365 form script loaded successfully');\n };\n script.onerror = () => {\n console.error('Failed to load Dynamics365 form script');\n };\n formRef.current.appendChild(script);\n });\n }, [formRef]);\n\n return (\n