CINXE.COM
Request a Quotation | Quantifoil
<!doctype html><html lang="en"><head> <meta charset="utf-8"> <title>Request a Quotation | Quantifoil</title> <link rel="shortcut icon" href="https://www.quantifoil.com/hubfs/Website/Admin%20Only/Logos/quantifoil-favicon.png"> <meta name="description" content="Please fill in the form to request a quote for our most popular film and grid combinations. If you can't find what you're looking for, contact us for help."> <!-- SPT Labtech header CSS ---> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script> <!--SAF header END CSS--> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta property="og:description" content="Please fill in the form to request a quote for our most popular film and grid combinations. If you can't find what you're looking for, contact us for help."> <meta property="og:title" content="Request a Quotation | Quantifoil"> <meta name="twitter:description" content="Please fill in the form to request a quote for our most popular film and grid combinations. If you can't find what you're looking for, contact us for help."> <meta name="twitter:title" content="Request a Quotation | Quantifoil"> <style> a.cta_button{-moz-box-sizing:content-box !important;-webkit-box-sizing:content-box !important;box-sizing:content-box !important;vertical-align:middle}.hs-breadcrumb-menu{list-style-type:none;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px}.hs-breadcrumb-menu-item{float:left;padding:10px 0px 10px 10px}.hs-breadcrumb-menu-divider:before{content:'›';padding-left:10px}.hs-featured-image-link{border:0}.hs-featured-image{float:right;margin:0 0 20px 20px;max-width:50%}@media (max-width: 568px){.hs-featured-image{float:none;margin:0;width:100%;max-width:100%}}.hs-screen-reader-text{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px} </style> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338892503/1650468878724/Quantifoil-Theme-2022/css/_containers-dnd-main.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338889188/1650468880621/Quantifoil-Theme-2022/css/_layout.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47339139305/1650468880014/Quantifoil-Theme-2022/css/bootstrap.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338892505/1650469455533/Quantifoil-Theme-2022/css/global.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338889189/1650468879802/Quantifoil-Theme-2022/css/animate.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47339139306/1650468879126/Quantifoil-Theme-2022/css/theme-override.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/module_assets/47338893017/1648550420681/module_47338893017_quantifoil-menu.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/module_assets/47339182789/1648550413914/module_47339182789_global_banner.min.css"> <link rel="stylesheet" href="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/module_assets/47339141574/1681204334782/module_47339141574_Quotation_System.min.css"> <style> #quotation-system-container { background-color: #f4f7f9; } #quotation-system-header h2 { color: #354775; } .quotation-step-title { color: #354775; } #quotation-system button, a.contant-us-button { color: #354775; border: 2px solid #354775; } #quotation-system button a { color: #354775; } #quotation-system button:hover, a.contant-us-button:hover { background-color: #354775; } .quote-item.open .quote-item-header { background-color: #354775; } </style> <!-- Editor Styles --> <style id="hs_editor_style" type="text/css"> #hs_cos_wrapper_widget_1729849866100 { display: block !important; padding-bottom: 20px !important; padding-top: 20px !important } #hs_cos_wrapper_widget_1729849866100 { display: block !important; padding-bottom: 20px !important; padding-top: 20px !important } .main_area-row-2-force-full-width-section > .row-fluid { max-width: none !important; } /* HubSpot Styles (default) */ .main_area-row-2-padding { padding-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; } </style> <script src="https://unpkg.com/react@17/umd/react.production.min.js"></script> <script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script> <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> <!-- Added by GoogleAnalytics integration --> <script> var _hsp = window._hsp = window._hsp || []; _hsp.push(['addPrivacyConsentListener', function(consent) { if (consent.allowed || (consent.categories && consent.categories.analytics)) { (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create','UA-157914212-1','auto'); ga('send','pageview'); }}]); </script> <!-- /Added by GoogleAnalytics integration --> <!-- Added by GoogleAnalytics4 integration --> <script> var _hsp = window._hsp = window._hsp || []; window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} var useGoogleConsentModeV2 = true; var waitForUpdateMillis = 1000; if (!window._hsGoogleConsentRunOnce) { window._hsGoogleConsentRunOnce = true; gtag('consent', 'default', { 'ad_storage': 'denied', 'analytics_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'wait_for_update': waitForUpdateMillis }); if (useGoogleConsentModeV2) { _hsp.push(['useGoogleConsentModeV2']) } else { _hsp.push(['addPrivacyConsentListener', function(consent){ var hasAnalyticsConsent = consent && (consent.allowed || (consent.categories && consent.categories.analytics)); var hasAdsConsent = consent && (consent.allowed || (consent.categories && consent.categories.advertisement)); gtag('consent', 'update', { 'ad_storage': hasAdsConsent ? 'granted' : 'denied', 'analytics_storage': hasAnalyticsConsent ? 'granted' : 'denied', 'ad_user_data': hasAdsConsent ? 'granted' : 'denied', 'ad_personalization': hasAdsConsent ? 'granted' : 'denied' }); }]); } } gtag('js', new Date()); gtag('set', 'developer_id.dZTQ1Zm', true); gtag('config', 'G-S3R98DYBXB'); </script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-S3R98DYBXB"></script> <!-- /Added by GoogleAnalytics4 integration --> <!-- Added by GoogleTagManager integration --> <script> var _hsp = window._hsp = window._hsp || []; window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} var useGoogleConsentModeV2 = true; var waitForUpdateMillis = 1000; var hsLoadGtm = function loadGtm() { if(window._hsGtmLoadOnce) { return; } if (useGoogleConsentModeV2) { gtag('set','developer_id.dZTQ1Zm',true); gtag('consent', 'default', { 'ad_storage': 'denied', 'analytics_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'wait_for_update': waitForUpdateMillis }); _hsp.push(['useGoogleConsentModeV2']) } (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-546P2HZ'); window._hsGtmLoadOnce = true; }; _hsp.push(['addPrivacyConsentListener', function(consent){ if(consent.allowed || (consent.categories && consent.categories.analytics)){ hsLoadGtm(); } }]); </script> <!-- /Added by GoogleTagManager integration --> <link rel="canonical" href="https://www.quantifoil.com/request-quote"> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-S3R98DYBXB"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-S3R98DYBXB'); </script> <meta property="og:url" content="https://www.quantifoil.com/request-quote"> <meta name="twitter:card" content="summary"> <meta http-equiv="content-language" content="en"> <meta name="generator" content="HubSpot"></head> <body onload="randombg()"> <!-- Added by GoogleTagManager integration --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-546P2HZ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- /Added by GoogleTagManager integration --> <div class="body-wrapper hs-content-id-47343040490 hs-site-page page "> <div data-global-resource-path="Quantifoil-Theme-2022/templates/partials/header.html"><!--Header--> <header class="header"> <div class="container"> <a class="logo" href="/"> <img src="https://www.quantifoil.com/hubfs/Website/Admin%20Only/Logos/QF-Master-Logo.svg" alt="Quantifoil"> </a> <div class="nav-outer"> <a href="javascript:void(0)" class="menuImage"> <span class="line1"></span> <span class="line2"></span> <span class="line3"></span> </a> <style> .srch-btn{position:absolute;right:1px;top:1px;background:url(https://www.quantifoil.com/hubfs/raw_assets/public/Quantifoil-Theme-2022/images/search-icon.svg) no-repeat center center;border:none;outline:none;cursor:pointer;font-size:0;width:40px;z-index:1;bottom:1px} </style> <!--<div class="nav-outer"> <a href="javascript:void(0)" class="menuImage"> <span class="line1"></span> <span class="line2"></span> <span class="line3"></span> </a>--> <div class="menu iphonNav"> <ul class="nav-lt"> <li class="sub-menu"> <a class=" " href="javascript:void(0);">Our products</a> <ul class="applications sub-nav-outer"> <li class="nav1"> <span class="nav-hd"> <a href="https://www.quantifoil.com/products"> View all products </a> </span> <ul> <li class="nav1-inr"> <div class="cmn-nav"> <a href="https://www.quantifoil.com/products/hexaufoil"> HexAuFoil </a> <a href="https://www.quantifoil.com/products/quantifoil"> QUANTIFOIL<sup>®</sup> Holey Carbon Supports for Cryo-EM </a> <a href="https://www.quantifoil.com/products/ultraufoil"> UltrAuFoil<sup>®</sup> Holey Gold Sample Supports </a> <a href="https://www.quantifoil.com/products/ultrathin-carbon-layer"> Additional Ultrathin Continuous Carbon Layer </a> <a href="https://www.quantifoil.com/products/carbon-coated-grids"> Conventional & Continuous Carbon Films </a> <a href="https://www.quantifoil.com/products/sio2-films"> SiO<sub>2</sub> Films </a> <a href="https://www.quantifoil.com/products/custom"> Custom Cryo-EM Sample Supports and Special Treatments </a> <a href="https://www.quantifoil.com/products/quantifoil-active"> QUANTIFOIL<sup>®</sup> Active </a> <a href="https://www.quantifoil.com/resources/how-our-grids-are-packed-shipment"> How our supports are packed for shipment </a> </div> </li> </ul> </li> </ul> </li> <li class="sub-menu"> <a class="simple-link " href="https://www.quantifoil.com/our-company">Our company</a> </li> <li class="sub-menu"> <a class="simple-link " href="https://www.quantifoil.com/news">News and social updates</a> </li> <li class="sub-menu"> <a class="simple-link " href="https://www.quantifoil.com/resources">Support</a> </li> <li class="sub-menu"> </li> </ul> <ul class="nav-rt"> <li><a href="https://www.quantifoil.com/contact">Contact us</a></li> <li class="book-btn"><span id="hs_cos_wrapper_module_16240008250073_" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_cta" style="" data-hs-cos-general-type="widget" data-hs-cos-type="cta"><!--HubSpot Call-to-Action Code --><span class="hs-cta-wrapper" id="hs-cta-wrapper-7d672cba-ea63-4348-9a80-081976b4a921"><span class="hs-cta-node hs-cta-7d672cba-ea63-4348-9a80-081976b4a921" id="hs-cta-7d672cba-ea63-4348-9a80-081976b4a921"><!--[if lte IE 8]><div id="hs-cta-ie-element"></div><![endif]--><a href="https://hubspot-cta-redirect-eu1-prod.s3.amazonaws.com/cta/redirect/25689746/7d672cba-ea63-4348-9a80-081976b4a921"><img class="hs-cta-img" id="hs-cta-img-7d672cba-ea63-4348-9a80-081976b4a921" style="border-width:0px;" src="https://hubspot-no-cache-eu1-prod.s3.amazonaws.com/cta/default/25689746/7d672cba-ea63-4348-9a80-081976b4a921.png" alt="Request a quotation"></a></span><script charset="utf-8" src="/hs/cta/cta/current.js"></script><script type="text/javascript"> hbspt.cta._relativeUrls=true;hbspt.cta.load(25689746, '7d672cba-ea63-4348-9a80-081976b4a921', {"useNewLoader":"true","region":"eu1"}); </script></span><!-- end HubSpot Call-to-Action Code --></span></li> </ul> </div> <!--<div class="srch-block"> <a class="srch-icon" href="javascript:void(0);"><img src="//25689746.fs1.hubspotusercontent-eu1.net/hubfs/25689746/raw_assets/public/Quantifoil-Theme-2022/images/search-icon.svg" alt=""></a> <div class="seach-box"> <input type="text" class="srch-inpt" placeholder="Search"> <button class="srch-btn">Search</button> </div> </div> </div>--> </div> </div> </header> <!--Header--></div> <div class="container-fluid m-0 p-0"> <div class="row-fluid-wrapper"> <div class="row-fluid"> <div class="span12 widget-span widget-type-cell " style="" data-widget-type="cell" data-x="0" data-w="12"> <div class="row-fluid-wrapper row-depth-1 row-number-1 dnd-section"> <div class="row-fluid "> <div class="span12 widget-span widget-type-custom_widget dnd-module" style="" data-widget-type="custom_widget" data-x="0" data-w="12"> <div class="application-banner image" style="background-image: url('https://www.quantifoil.com/hubfs/grids%20on%20slide-flip.jpg')"> <div class="overlay"> <div class="grey-overlay"> <div class="container"> <div class="breadcrumb-container"> <ol class="breadcrumb custom-breadcrumb"> <li class="breadcrumb-item" data="1"><a href="/">Home</a></li> <li class="breadcrumb-item"> Request a quotation </li> </ol> </div> </div> <div class="container"> <div class="flex"> <div class="application-bnr-text medium"> <div class="text-block"> <h1 class="title-symbol">Request a quotation</h1> <div id="hs_cos_wrapper_main_area-module-1_" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_inline_rich_text" style="" data-hs-cos-general-type="widget" data-hs-cos-type="inline_rich_text" data-hs-cos-field="banner_content.description"><p>Please fill in the form to request a quote for our most popular film and grid combinations. If you can't find what you are looking for, <a href="/contact#direct" rel="noopener">contact us</a> and we will be happy to help. For more information about how to order from Quantifoil please refer to our <a href="/resources/order-process" rel="noopener">short guide</a>.</p></div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div><!--end widget-span --> </div><!--end row--> </div><!--end row-wrapper --> <div class="row-fluid-wrapper row-depth-1 row-number-2 dnd-section"> <div class="row-fluid "> <div class="span12 widget-span widget-type-cell dnd-column" style="" data-widget-type="cell" data-x="0" data-w="12"> <div class="row-fluid-wrapper row-depth-1 row-number-3 dnd-row"> <div class="row-fluid "> <div class="span12 widget-span widget-type-custom_widget dnd-module" style="" data-widget-type="custom_widget" data-x="0" data-w="12"> <div id="hs_cos_wrapper_widget_1729849866100" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module widget-type-rich_text" style="" data-hs-cos-general-type="widget" data-hs-cos-type="module"><span id="hs_cos_wrapper_widget_1729849866100_" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_rich_text" style="" data-hs-cos-general-type="widget" data-hs-cos-type="rich_text"><p style="font-weight: bold; font-size: 24px; text-align: center;">Want a quote for HexAuFoil grids, our new ultrasmall hole gold sample supports? <a href="/products/hexaufoil" rel="noopener" target="_blank">Please click here.</a></p></span></div> </div><!--end widget-span --> </div><!--end row--> </div><!--end row-wrapper --> </div><!--end widget-span --> </div><!--end row--> </div><!--end row-wrapper --> <div class="row-fluid-wrapper row-depth-1 row-number-4 main_area-row-2-force-full-width-section main_area-row-2-padding dnd-section"> <div class="row-fluid "> <div class="span12 widget-span widget-type-custom_widget dnd-module" style="" data-widget-type="custom_widget" data-x="0" data-w="12"> <div id="hs_cos_wrapper_widget_1648562879298" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module" style="" data-hs-cos-general-type="widget" data-hs-cos-type="module"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-DyZ88mC6Up2uqS4h/KRgHuoeGwBcD4Ng9SiP4dIRy0EXTlnuz47vAwmeGwVChigm" crossorigin="anonymous"> <script src="https://cdnjs.cloudflare.com/polyfill/v2/polyfill.min.js"></script> <!--[if lte IE 8]> <script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/v2-legacy.js"></script> <![endif]--> <script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/v2.js"></script> <div id="quotation-system-container"> <div id="quotation-system-header"> <h2></h2> <p></p> </div> <div id="quotation-system"></div> </div> </div> </div><!--end widget-span --> </div><!--end row--> </div><!--end row-wrapper --> </div><!--end widget-span --> </div> </div> <div data-global-resource-path="Quantifoil-Theme-2022/templates/partials/footer.html"><footer class="footer"> <div class="container"> <div class="container-fluid footer-inr"> <div class="row-fluid-wrapper"> <div class="row-fluid"> <div class="span12 widget-span widget-type-cell " style="" data-widget-type="cell" data-x="0" data-w="12"> <div class="row-fluid-wrapper row-depth-1 row-number-1 dnd-section"> <div class="row-fluid "> <div class="span12 widget-span widget-type-cell dnd-column" style="" data-widget-type="cell" data-x="0" data-w="12"> <div class="row-fluid-wrapper row-depth-1 row-number-2 dnd-row"> <div class="row-fluid "> <div class="span12 widget-span widget-type-custom_widget dnd-module" style="" data-widget-type="custom_widget" data-x="0" data-w="12"> <div class="ftr-btm-sec d-flex justify-content-between align-items-center"> <ul class="links d-flex"> <li> <a href="https://www.quantifoil.com/privacy"> Privacy Notice & Cookies </a></li> <li> <a href="https://www.quantifoil.com/impressum"> Impressum </a></li> </ul> <span>© 2024 Quantifoil Micro Tools GmbH - part of SPT Labtech</span> </div> </div><!--end widget-span --> </div><!--end row--> </div><!--end row-wrapper --> </div><!--end widget-span --> </div><!--end row--> </div><!--end row-wrapper --> </div><!--end widget-span --> </div> </div> </div> </div> </footer></div> <!-- HubSpot performance collection script --> <script defer src="/hs/hsstatic/content-cwv-embed/static-1.1293/embed.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47339134414/1650468880549/Quantifoil-Theme-2022/js/popper.min.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47339139317/1650468880396/Quantifoil-Theme-2022/js/bootstrap.min.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47339182575/1650468879585/Quantifoil-Theme-2022/js/animation.min.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338889202/1650468878678/Quantifoil-Theme-2022/js/owl.carousel.min.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47339134413/1650468879439/Quantifoil-Theme-2022/js/mobile-menu.min.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338889200/1650468883471/Quantifoil-Theme-2022/js/counter.min.js"></script> <script src="https://www.quantifoil.com/hs-fs/hub/25689746/hub_generated/template_assets/47338889201/1650468878457/Quantifoil-Theme-2022/js/custom.min.js"></script> <script> var hsVars = hsVars || {}; hsVars['language'] = 'en'; </script> <script src="/hs/hsstatic/cos-i18n/static-1.53/bundles/project.js"></script> <script> if (!!document.documentMode) { console.log('This application does not support Internet Explorer 11 and older for security and privacy reasons. Please use a more up-to-date browser to use this feature.'); hbspt.forms.create({ region: "eu1", target: '#quotation-system', portalId: "25689746", formId: "dc0b2f28-f2f4-4e60-b6e1-6ef348779285" }); } </script> <script type="text/babel"> var databaseItemsTable = [ { id: '50941316054', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C11nAu20-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Au 200 mesh grids' }, { id: '50941316055', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C11nAu30-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Au 300 mesh grids' }, { id: '50941316056', special_layer: '', special_layer_thickness: '', foil_material: 'UltrAuFoil® Gold', foil_geometry: 'R 0.6/1', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-A11nAu30-01', description: 'UltrAuFoil® (Gold) R 0.6/1 on Au 300 mesh grids' }, { id: '50941316057', special_layer: '', special_layer_thickness: '', foil_material: 'UltrAuFoil® Gold', foil_geometry: 'R 0.6/1', grid_material: 'Gold', grid_mesh: '300', pack_size: '50', product: 'N1-A11nAu30-50', description: 'UltrAuFoil® (Gold) R 0.6/1 on Au 300 mesh grids' }, { id: '50941316058', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Gold', grid_mesh: '400', pack_size: '100', product: 'N1-C11nAu40-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Au 400 mesh grids' }, { id: '50941316059', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C11nCu20-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Cu 200 mesh grids' }, { id: '50941316060', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C11nCu30-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Cu 300 mesh grids' }, { id: '50941316061', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C11nCu30-50', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Cu 300 mesh grids' }, { id: '50941316063', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C11nCu40-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Cu 400 mesh grids' }, { id: '50941316064', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C11nCR30-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Cu/Rh 300 mesh grids' }, { id: '50941316065', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 0.6/1', grid_material: 'Molybdenum (HQ)', grid_mesh: '200', pack_size: '100', product: 'N1-C11nMH20-01', description: 'QUANTIFOIL® (Carbon) R 0.6/1 on Mo HQ 200 mesh grids' }, { id: '50941316067', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/1', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C21nAu30-01', description: 'QUANTIFOIL® (Carbon) R 1/1 on Au 300 mesh grids' }, { id: '50941316068', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C21nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1/1 on Cu 300 mesh grids' }, { id: '50941316069', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/1', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C21nCu40-01', description: 'QUANTIFOIL® (Carbon) R 1/1 on Cu 400 mesh grids' }, { id: '50941316070', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/1', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C21nCR30-01', description: 'QUANTIFOIL® (Carbon) R 1/1 on Cu/Rh 300 mesh grids' }, { id: '50941316071', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C12nAu20-01', description: 'QUANTIFOIL® (Carbon) R 1/2 on Au 200 mesh grids' }, { id: '50941316072', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/2', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C12nAu30-01', description: 'QUANTIFOIL® (Carbon) R 1/2 on Au 300 mesh grids' }, { id: '50941316073', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/2', grid_material: 'Gold', grid_mesh: '400', pack_size: '100', product: 'N1-C12nAu40-01', description: 'QUANTIFOIL® (Carbon) R 1/2 on Au 400 mesh grids' }, { id: '50941316074', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C12nCu20-01', description: 'QUANTIFOIL® (Carbon) R 1/2 on Cu 200 mesh grids' }, { id: '50941316075', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C12nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1/2 on Cu 300 mesh grids' }, { id: '50941316076', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/2', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C12nCu40-01', description: 'QUANTIFOIL® (Carbon) R 1/2 on Cu 400 mesh grids' }, { id: '50941316077', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C13nAu20-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Au 200 mesh grids' }, { id: '50941316078', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 1/4', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-S13nAu20-01', description: 'QUANTIFOIL® (SiO2) R 1/4 on Au 200 mesh grids' }, { id: '50941316079', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C13nAu30-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Au 300 mesh grids' }, { id: '50941316080', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'N1-C13nAuH2-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Au H2 finder grids' }, { id: '50941316081', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 1/4', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'N1-S13nAuH2-01', description: 'QUANTIFOIL® (SiO2) R 1/4 on Au H2 finder grids' }, { id: '50941316082', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C13nCu20-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Cu 200 mesh grids' }, { id: '50941316083', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C13nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Cu 300 mesh grids' }, { id: '50941316084', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Copper', grid_mesh: 'G202', pack_size: '100', product: 'N1-C13nCu2G-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Cu G202 mesh grids' }, { id: '50941316085', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1/4', grid_material: 'Molybdenum (HQ)', grid_mesh: '200', pack_size: '100', product: 'N1-C13nMH20-01', description: 'QUANTIFOIL® (Carbon) R 1/4 on Mo HQ 200 mesh grids' }, { id: '50941316086', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '100x400', pack_size: '100', product: 'N1-C14nAu14-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 100 x 400 mesh grids' }, { id: '50941316087', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C14nAu20-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 200 mesh grids' }, { id: '50941316088', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C14nAu20-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 200 mesh grids' }, { id: '50941316089', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'C2-C14nAu20-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Au 200 mesh grids' }, { id: '50941316282', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C14nAu30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 300 mesh grids' }, { id: '50941316283', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '300', pack_size: '50', product: 'N1-C14nAu30-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 300 mesh grids' }, { id: '50941316284', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'C2-C14nAu30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Au 300 mesh grids5' }, { id: '50941316285', special_layer: '', special_layer_thickness: '', foil_material: 'UltrAuFoil® Gold', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-A14nAu30-01', description: 'UltrAuFoil® (Gold) R 1.2/1.3 on Au 300 mesh grids' }, { id: '50941316286', special_layer: '', special_layer_thickness: '', foil_material: 'UltrAuFoil® Gold', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '300', pack_size: '50', product: 'N1-A14nAu30-50', description: 'UltrAuFoil® (Gold) R 1.2/1.3 on Au 300 mesh grids' }, { id: '50941316287', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '400', pack_size: '100', product: 'N1-C14nAu40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 400 mesh grids' }, { id: '50941316288', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '400', pack_size: '50', product: 'N1-C14nAu40-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au 400 mesh grids' }, { id: '50941316289', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: '400', pack_size: '100', product: 'C2-C14nAu40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Au 400 mesh grids' }, { id: '50941316290', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Gold', grid_mesh: 'G200F1', pack_size: '100', product: 'N1-C14nAuG1-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Au G200F1 finder grids' }, { id: '50941316291', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C14nCu20-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu 200 mesh grids' }, { id: '50941316292', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'N1-C14nCu20-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu 200 mesh grids' }, { id: '50941316293', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'C2-C14nCu20-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50941316294', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C14nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu 300 mesh grids' }, { id: '50941316295', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'N1-C14nCu30-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu 300 mesh grids' }, { id: '50941316296', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C2-C14nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50941316297', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'C2-C14nCu30-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50941316298', special_layer: 'Carbon (UTC)', special_layer_thickness: '3nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C3-C14nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 3 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50941316299', special_layer: 'Carbon (UTC)', special_layer_thickness: '5nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C5-C14nCu30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 5 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50941316300', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C14nCu40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu 400 mesh grids' }, { id: '50941316301', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '400', pack_size: '50', product: 'N1-C14nCu40-50', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu 400 mesh grids' }, { id: '50941316302', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'C2-C14nCu40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 2 nm continuous Carbon on Cu 400 mesh grids' }, { id: '50941316303', special_layer: 'Carbon (UTC)', special_layer_thickness: '5nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'C5-C14nCu40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 + 5 nm continuous Carbon on Cu 400 mesh grids' }, { id: '50941316304', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper/Rhodium', grid_mesh: '200', pack_size: '100', product: 'N1-C14nCR20-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu/Rh 200 mesh grids' }, { id: '50941316305', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C14nCR30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu/Rh 300 mesh grids' }, { id: '50941316306', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Copper/Rhodium', grid_mesh: '400', pack_size: '100', product: 'N1-C14nCR40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Cu/Rh 400 mesh grids' }, { id: '50941316307', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Molybdenum (HQ)', grid_mesh: '200', pack_size: '100', product: 'N1-C14nMH20-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Mo HQ 200 mesh grids' }, { id: '50941316309', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Nickel', grid_mesh: '300', pack_size: '100', product: 'N1-C14nNi30-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Ni 300 mesh grids' }, { id: '50941316310', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 1.2/1.3', grid_material: 'Nickel', grid_mesh: '400', pack_size: '100', product: 'N1-C14nNi40-01', description: 'QUANTIFOIL® (Carbon) R 1.2/1.3 on Ni 400 mesh grids' }, { id: '50941316311', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 1.2/20', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-S20nAu20-01', description: 'QUANTIFOIL® (SiO2) R 1.2/20 on Au 200 mesh grids' }, { id: '50941316312', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C15nAu20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Au 200 mesh grids' }, { id: '50941316313', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: '200', pack_size: '50', product: 'N1-C15nAu20-50', description: 'QUANTIFOIL® (Carbon) R 2/1 on Au 200 mesh grids' }, { id: '50941316314', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'C2-C15nAu20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 + 2 nm continuous Carbon on Au 200 mesh grids' }, { id: '50941316315', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-S15nAu20-01', description: 'QUANTIFOIL® (SiO2) R 2/1 on Au 200 mesh grids' }, { id: '50941316316', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C15nAu30-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Au 300 mesh grids' }, { id: '50941316317', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: '400', pack_size: '100', product: 'N1-C15nAu40-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Au 400 mesh grids' }, { id: '50941316318', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: 'G200F1', pack_size: '100', product: 'N1-C15nAuG1-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Au G200F1 finder grids' }, { id: '50941316319', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'N1-C15nAuH2-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Au H2 finder grids' }, { id: '50941316320', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C15nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu 200 mesh grids' }, { id: '50941316321', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'N1-C15nCu20-50', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu 200 mesh grids' }, { id: '50941316322', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'C2-C15nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50941316323', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'C2-C15nCu20-50', description: 'QUANTIFOIL® (Carbon) R 2/1 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50941316324', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-S15nCu20-01', description: 'QUANTIFOIL® (SiO2) R 2/1 on Cu 200 mesh grids' }, { id: '50941316325', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C15nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu 300 mesh grids' }, { id: '50941316326', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'N1-C15nCu30-50', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu 300 mesh grids' }, { id: '50941316327', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C2-C15nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/1 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50941316328', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C15nCu40-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu 400 mesh grids' }, { id: '50941316329', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'C2-C15nCu40-01', description: 'QUANTIFOIL® (Carbon) R 2/1 + 2 nm continuous Carbon on Cu 400 mesh grids' }, { id: '50941316330', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper', grid_mesh: 'G200F1', pack_size: '100', product: 'N1-C15nCuG1-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu G200F1 finder grids' }, { id: '50941316331', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper/Rhodium', grid_mesh: '200', pack_size: '100', product: 'N1-C15nCR20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu/Rh 200 mesh grids' }, { id: '50941316332', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C15nCR30-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Cu/Rh 300 mesh grids' }, { id: '50941316333', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Molybdenum (HQ)', grid_mesh: '200', pack_size: '100', product: 'N1-C15nMH20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Mo HQ 200 mesh grids' }, { id: '50941316335', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Nickel', grid_mesh: '200', pack_size: '100', product: 'N1-C15nNi20-01', description: 'QUANTIFOIL® (Carbon) R 2/1 on Ni 200 mesh grids' }, { id: '50941316336', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Nickel', grid_mesh: '200', pack_size: '50', product: 'N1-C15nNi20-50', description: 'QUANTIFOIL® (Carbon) R 2/1 on Ni 200 mesh grids' }, { id: '50941316337', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C16nAu20-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au 200 mesh grids' }, { id: '50941316338', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '50', product: 'N1-C16nAu20-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au 200 mesh grids' }, { id: '50941316339', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-S16nAu20-01', description: 'QUANTIFOIL® (SiO2) R 2/2 on Au 200 mesh grids' }, { id: '50941316340', special_layer: '', special_layer_thickness: '', foil_material: 'UltrAuFoil® Gold', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-A16nAu20-01', description: 'UltrAuFoil® (Gold) R 2/2 on Au 200 mesh grids' }, { id: '50941316341', special_layer: '', special_layer_thickness: '', foil_material: 'UltrAuFoil® Gold', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '50', product: 'N1-A16nAu20-50', description: 'UltrAuFoil® (Gold) R 2/2 on Au 200 mesh grids' }, { id: '50941316342', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C16nAu30-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au 300 mesh grids' }, { id: '50941316343', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '300', pack_size: '50', product: 'N1-C16nAu30-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au 300 mesh grids' }, { id: '50941316344', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-S16nAu30-01', description: 'QUANTIFOIL® (SiO2) R 2/2 on Au 300 mesh grids' }, { id: '50941316345', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: '400', pack_size: '100', product: 'N1-C16nAu40-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au 400 mesh grids' }, { id: '50941316538', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: 'G200F1', pack_size: '100', product: 'N1-C16nAuG1-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au G200F1 finder grids' }, { id: '50941316539', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: 'G200F1', pack_size: '50', product: 'N1-C16nAuG1-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au G200F1 finder grids' }, { id: '50941316540', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'N1-C16nAuH2-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Au H2 finder grids' }, { id: '50941316541', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'C2-C16nAuH2-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Au H2 finder grids' }, { id: '50941316542', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/2', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'N1-S16nAuH2-01', description: 'QUANTIFOIL® (SiO2) R 2/2 on Au H2 finder grids' }, { id: '50941316543', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C16nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu 200 mesh grids' }, { id: '50941316544', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'N1-C16nCu20-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu 200 mesh grids' }, { id: '50941316545', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Polymer', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-P16nCu20-01', description: 'QUANTIFOIL® (Polymer) R 2/2 on Cu 200 mesh grids' }, { id: '50941316546', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'C2-C16nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50941316547', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'C2-C16nCu20-50', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50941316548', special_layer: 'Carbon (UTC)', special_layer_thickness: '3nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'C3-C16nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 3 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50941316549', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-S16nCu20-01', description: 'QUANTIFOIL® (SiO2) R 2/2 on Cu 200 mesh grids' }, { id: '50941316550', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C16nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu 300 mesh grids' }, { id: '50958296507', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'N1-C16nCu30-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu 300 mesh grids' }, { id: '50958296508', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C2-C16nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296509', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'C2-C16nCu30-50', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296510', special_layer: 'Carbon (UTC)', special_layer_thickness: '3nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C3-C16nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 3 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296511', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-S16nCu30-01', description: 'QUANTIFOIL® (SiO2) R 2/2 on Cu 300 mesh grids' }, { id: '50958296512', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C16nCu40-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu 400 mesh grids' }, { id: '50958296513', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '400', pack_size: '50', product: 'N1-C16nCu40-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu 400 mesh grids' }, { id: '50958296514', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'C2-C16nCu40-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Cu 400 mesh grids' }, { id: '50958296515', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Silicon Dioxide', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-S16nCu40-01', description: 'QUANTIFOIL® (SiO2) R 2/2 on Cu 400 mesh grids' }, { id: '50958296516', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: 'G200F1', pack_size: '100', product: 'N1-C16nCuG1-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu G200F1 finder grids' }, { id: '50958296517', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: 'H2', pack_size: '100', product: 'N1-C16nCuH2-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu H2 finder grids' }, { id: '50958296518', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper', grid_mesh: 'H2', pack_size: '100', product: 'C2-C16nCuH2-01', description: 'QUANTIFOIL® (Carbon) R 2/2 + 2 nm continuous Carbon on Cu H2 finder grids' }, { id: '50958296519', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper/Rhodium', grid_mesh: '200', pack_size: '100', product: 'N1-C16nCR20-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu/Rh 200 mesh grids' }, { id: '50958296520', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper/Rhodium', grid_mesh: '200', pack_size: '50', product: 'N1-C16nCR20-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu/Rh 200 mesh grids' }, { id: '50958296521', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C16nCR30-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Cu/Rh 300 mesh grids' }, { id: '50958296522', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Molybdenum (HQ)', grid_mesh: '200', pack_size: '100', product: 'N1-C16nMH20-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Mo HQ 200 mesh grids' }, { id: '50958296523', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Nickel', grid_mesh: '200', pack_size: '50', product: 'N1-C16nNi20-50', description: 'QUANTIFOIL® (Carbon) R 2/2 on Ni 200 mesh grids' }, { id: '50958296524', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/2', grid_material: 'Nickel', grid_mesh: '300', pack_size: '100', product: 'N1-C16nNi30-01', description: 'QUANTIFOIL® (Carbon) R 2/2 on Ni 300 mesh grids' }, { id: '50958296525', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C17nAu20-01', description: 'QUANTIFOIL® (Carbon) R 2/4 on Au 200 mesh grids' }, { id: '50958296526', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C17nAu30-01', description: 'QUANTIFOIL® (Carbon) R 2/4 on Au 300 mesh grids' }, { id: '50958296527', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C17nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/4 on Cu 200 mesh grids' }, { id: '50958296528', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'C2-C17nCu20-01', description: 'QUANTIFOIL® (Carbon) R 2/4 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50958296529', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C17nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/4 on Cu 300 mesh grids' }, { id: '50958296530', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'N1-C17nCu30-50', description: 'QUANTIFOIL® (Carbon) R 2/4 on Cu 300 mesh grids' }, { id: '50958296531', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C2-C17nCu30-01', description: 'QUANTIFOIL® (Carbon) R 2/4 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296532', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/4', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C17nCR30-01', description: 'QUANTIFOIL® (Carbon) R 2/4 on Cu/Rh 300 mesh grids' }, { id: '50958296533', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3/3', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C18nAu30-01', description: 'QUANTIFOIL® (Carbon) R 3/3 on Au 300 mesh grids' }, { id: '50958296534', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3/3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C18nCu30-01', description: 'QUANTIFOIL® (Carbon) R 3/3 on Cu 300 mesh grids' }, { id: '50958296535', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3/3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C2-C18nCu30-01', description: 'QUANTIFOIL® (Carbon) R 3/3 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296536', special_layer: 'Carbon (UTC)', special_layer_thickness: '3nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3/3', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C3-C18nCu30-01', description: 'QUANTIFOIL® (Carbon) R 3/3 + 3 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296537', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3/5', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C41nAu20-01', description: 'QUANTIFOIL® (Carbon) R 3/5 on Au 200 mesh grids' }, { id: '50958296538', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3/5', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C41nCu30-01', description: 'QUANTIFOIL® (Carbon) R 3/5 on Cu 300 mesh grids' }, { id: '50958296539', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C19nAu20-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Au 200 mesh grids' }, { id: '50958296540', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C19nAu30-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Au 300 mesh grids' }, { id: '50958296541', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Gold', grid_mesh: 'G200F2', pack_size: '100', product: 'N1-C19nAuG2-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Au G200F2 finder grids' }, { id: '50958296542', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Gold', grid_mesh: 'H2', pack_size: '100', product: 'N1-C19nAuH2-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Au H2 finder grids' }, { id: '50958296543', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C19nCu20-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Cu 200 mesh grids' }, { id: '50958296544', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'N1-C19nCu20-50', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Cu 200 mesh grids' }, { id: '50958296545', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Polymer', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-P19nCu20-01', description: 'QUANTIFOIL® (Polymer) R 3.5/1 on Cu 200 mesh grids' }, { id: '50958296546', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'C2-C19nCu20-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 + 2 nm continuous Carbon on Cu 200 mesh grids' }, { id: '50958296547', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C19nCu30-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Cu 300 mesh grids' }, { id: '50958296548', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'N1-C19nCu30-50', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Cu 300 mesh grids' }, { id: '50958296549', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C19nCu40-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Cu 400 mesh grids' }, { id: '50958296550', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 3.5/1', grid_material: 'Copper/Rhodium', grid_mesh: '200', pack_size: '100', product: 'N1-C19nCR20-01', description: 'QUANTIFOIL® (Carbon) R 3.5/1 on Cu/Rh 200 mesh grids' }, { id: '50958296551', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 5/20', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C43nCu30-01', description: 'QUANTIFOIL® (Carbon) R 5/20 on Cu 300 mesh grids' }, { id: '50958296552', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 6/6.5', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C44nCu30-01', description: 'QUANTIFOIL® (Carbon) R 6/6.5 on Cu 300 mesh grids' }, { id: '50958296553', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 10/5', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C46nCu20-01', description: 'QUANTIFOIL® (Carbon) R 10/5 on Cu 200 mesh grids' }, { id: '50958296554', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 10/5', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C46nAu20-01', description: 'QUANTIFOIL® (Carbon) R 10/5 on Au 200 mesh grids' }, { id: '50958296555', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 10/10', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C47nCu20-01', description: 'QUANTIFOIL® (Carbon) R 10/10 on Cu 200 mesh grids' }, { id: '50958296556', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 10/10', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C47nAu20-01', description: 'QUANTIFOIL® (Carbon) R 10/10 on Au 200 mesh grids' }, { id: '50958296557', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 10/20', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C48nCu20-01', description: 'QUANTIFOIL® (Carbon) R 10/20 on Cu 200 mesh grids' }, { id: '50958296558', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 10/20', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C48nAu20-01', description: 'QUANTIFOIL® (Carbon) R 10/20 on Au 200 mesh grids' }, { id: '50958296559', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 17/5', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C49nCu20-01', description: 'QUANTIFOIL® (Carbon) R 17/5 on Cu 200 mesh grids' }, { id: '50958296560', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 17/5', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C49nAu20-01', description: 'QUANTIFOIL® (Carbon) R 17/5 on Au 200 mesh grids' }, { id: '50958296561', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'S 7/2', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C32nAu20-01', description: 'QUANTIFOIL® (Carbon) S 7/2 on Au 200 mesh grids' }, { id: '50958296562', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'S 7/2', grid_material: 'Copper', grid_mesh: '100x400', pack_size: '100', product: 'N1-C32nCu14-01', description: 'QUANTIFOIL® (Carbon) S 7/2 on Cu 100 x 400 mesh grids' }, { id: '50958296563', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'S 7/2', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C32nCu20-01', description: 'QUANTIFOIL® (Carbon) S 7/2 on Cu 200 mesh grids' }, { id: '50958296564', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'S 7/2', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'C2-C32nCu30-01', description: 'QUANTIFOIL® (Carbon) S 7/2 + 2 nm continuous Carbon on Cu 300 mesh grids' }, { id: '50958296565', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'S 7/2', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'C2-C32nCu40-01', description: 'QUANTIFOIL® (Carbon) S 7/2 + 2 nm continuous Carbon on Cu 400 mesh grids' }, { id: '50958296566', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'Multi A', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C31nAu20-01', description: 'QUANTIFOIL® (Carbon) Multi A on Au 200 mesh grids' }, { id: '50958296567', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'Multi A', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C31nAu30-01', description: 'QUANTIFOIL® (Carbon) Multi A on Au 300 mesh grids' }, { id: '50958296568', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'Multi A', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C31nCu20-01', description: 'QUANTIFOIL® (Carbon) Multi A on Cu 200 mesh grids' }, { id: '50958296569', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'Multi A', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C31nCu30-01', description: 'QUANTIFOIL® (Carbon) Multi A on Cu 300 mesh grids' }, { id: '50958296762', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'Multi A', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C31nCu40-01', description: 'QUANTIFOIL® (Carbon) Multi A on Cu 400 mesh grids' }, { id: '50958296763', special_layer: '', special_layer_thickness: '', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'Multi A', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'N1-C31nCR30-01', description: 'QUANTIFOIL® (Carbon) Multi A on Cu/Rh 300 mesh grids' }, { id: '50958296764', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Continuous Carbon', grid_material: 'Gold', grid_mesh: '200', pack_size: '100', product: 'N1-C73nAu20-01', description: 'Carbon Support Film on Au 200 mesh grids' }, { id: '50958296765', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Continuous Carbon', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C73nCu20-01', description: 'Carbon Support Film on Cu 200 mesh grids' }, { id: '50958296766', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Continuous Carbon', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C73nCu30-01', description: 'Carbon Support Film on Cu 300 mesh grids' }, { id: '50958296767', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Continuous Carbon', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C73nCu40-01', description: 'Carbon Support Film on Cu 400 mesh grids' }, { id: '50958296768', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Classic Holey', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C75nCu20-01', description: 'Classic Holey Carbon Film on Cu 200 mesh grids' }, { id: '50958296769', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Classic Holey', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C75nCu30-01', description: 'Classic Holey Carbon Film on Cu 300 mesh grids' }, { id: '50958296770', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Classic Holey', grid_material: 'Copper', grid_mesh: '300', pack_size: '50', product: 'N1-C75nCu30-50', description: 'Classic Holey Carbon Film on Cu 300 mesh grids' }, { id: '50958296771', special_layer: '', special_layer_thickness: '', foil_material: 'Formvar®', foil_geometry: 'Continuous (F)', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C71nCu40-01', description: 'Formvar® Film on Cu 400 mesh grids' }, { id: '50958296772', special_layer: '', special_layer_thickness: '', foil_material: 'Formvar®/Carbon', foil_geometry: 'Continuous (F/C)', grid_material: 'Copper', grid_mesh: '100', pack_size: '100', product: 'N1-C72nCu10-01', description: 'Formvar®/Carbon Film on Cu 100 mesh grids' }, { id: '50958296773', special_layer: '', special_layer_thickness: '', foil_material: 'Formvar®/Carbon', foil_geometry: 'Continuous (F/C)', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C72nCu20-01', description: 'Formvar®/Carbon Film on Cu 200 mesh grids' }, { id: '50958296774', special_layer: '', special_layer_thickness: '', foil_material: 'Formvar®/Carbon', foil_geometry: 'Continuous (F/C)', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C72nCu30-01', description: 'Formvar®/Carbon Film on Cu 300 mesh grids' }, { id: '50958296775', special_layer: '', special_layer_thickness: '', foil_material: 'Formvar®/Carbon', foil_geometry: 'Continuous (F/C)', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C72nCu40-01', description: 'Formvar®/Carbon Film on Cu 400 mesh grids' }, { id: '50958296776', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Lacey', grid_material: 'Gold', grid_mesh: '300', pack_size: '100', product: 'N1-C74nAu30-01', description: 'Lacey Carbon Film on Au 300 mesh grids' }, { id: '50958296777', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Lacey', grid_material: 'Copper', grid_mesh: '200', pack_size: '100', product: 'N1-C74nCu20-01', description: 'Lacey Carbon Film on Cu 200 mesh grids' }, { id: '50958296778', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Lacey', grid_material: 'Copper', grid_mesh: '200', pack_size: '50', product: 'N1-C74nCu20-50', description: 'Lacey Carbon Film on Cu 200 mesh grids' }, { id: '50958296779', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Lacey', grid_material: 'Copper', grid_mesh: '300', pack_size: '100', product: 'N1-C74nCu30-01', description: 'Lacey Carbon Film on Cu 300 mesh grids' }, { id: '50958296780', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Lacey', grid_material: 'Copper', grid_mesh: '400', pack_size: '100', product: 'N1-C74nCu40-01', description: 'Lacey Carbon Film on Cu 400 mesh grids' }, { id: '50958296781', special_layer: '', special_layer_thickness: '', foil_material: 'Carbon', foil_geometry: 'Lacey', grid_material: 'Molybdenum (HQ)', grid_mesh: '200', pack_size: '100', product: 'N1-C74nMH20-01', description: 'Lacey Carbon Film on Mo HQ 200 mesh grids' }, { id: '53442278610', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper/Rhodium', grid_mesh: '200', pack_size: '100', product: 'C2-C15nCR20-01', description: 'QUANTIFOIL® Carbon R 2/1 on + 2 nm continuous Carbon on Cu/Rh 200 mesh grids' }, { id: '53442278611', special_layer: 'Carbon (UTC)', special_layer_thickness: '2nm', foil_material: 'QUANTIFOIL® Carbon', foil_geometry: 'R 2/1', grid_material: 'Copper/Rhodium', grid_mesh: '300', pack_size: '100', product: 'C2-C15nCR30-01', description: 'QUANTIFOIL® Carbon R 2/1 + 2 nm continuous Carbon on Cu/Rh 300 mesh grids' }, ]; var codeTable = [ { id: '47339046336', property: 'foil_material', value: 'UltrAuFoil® Gold', code: 'A' }, { id: '47339046338', property: 'foil_material', value: 'QUANTIFOIL® Carbon', code: 'C' }, { id: '47339046339', property: 'foil_material', value: 'QUANTIFOIL® Polymer', code: 'P' }, { id: '47339046340', property: 'foil_material', value: 'QUANTIFOIL® Silicon Dioxide', code: 'S' }, { id: '47339046341', property: 'foil_geometry', value: 'R 0.6/1', code: '11' }, { id: '47339046342', property: 'foil_geometry', value: 'R 1/2', code: '12' }, { id: '47339046343', property: 'foil_geometry', value: 'R 1/4', code: '13' }, { id: '47339046344', property: 'foil_geometry', value: 'R 1.2/1.3', code: '14' }, { id: '47339046345', property: 'foil_geometry', value: 'R 2/1', code: '15' }, { id: '47339046346', property: 'foil_geometry', value: 'R 2/2', code: '16' }, { id: '47339046347', property: 'foil_geometry', value: 'R 2/4', code: '17' }, { id: '47339046348', property: 'foil_geometry', value: 'R 3/3', code: '18' }, { id: '47339046349', property: 'foil_geometry', value: 'R 3.5/1', code: '19' }, { id: '47339499707', property: 'foil_geometry', value: 'R 1.2/20', code: '20' }, { id: '47339499708', property: 'foil_geometry', value: 'R 1/1', code: '21' }, { id: '47339499709', property: 'foil_geometry', value: 'R 3.8/1', code: '22' }, { id: '47339499710', property: 'foil_geometry', value: 'Multi A', code: '31' }, { id: '47339499711', property: 'foil_geometry', value: 'S 7/2', code: '32' }, { id: '47339499712', property: 'foil_geometry', value: 'R 3/5', code: '41' }, { id: '47339499713', property: 'foil_geometry', value: 'R 5/10', code: '42' }, { id: '47339499714', property: 'foil_geometry', value: 'R 5/20', code: '43' }, { id: '47339499715', property: 'foil_geometry', value: 'R 6/6.5', code: '44' }, { id: '47339499716', property: 'foil_geometry', value: 'R 6/100', code: '45' }, { id: '47339499717', property: 'foil_geometry', value: 'R 10/5', code: '46' }, { id: '47339499718', property: 'foil_geometry', value: 'R 10/10', code: '47' }, { id: '47339499719', property: 'foil_geometry', value: 'R 10/20', code: '48' }, { id: '47339049414', property: 'foil_geometry', value: 'R 17/5', code: '49' }, { id: '47339049415', property: 'foil_geometry', value: 'R 25/15 Hex', code: '50' }, { id: '47339049416', property: 'foil_geometry', value: 'S 35/10', code: '52' }, { id: '47339049417', property: 'foil_geometry', value: 'R 5/2', code: '54' }, { id: '47339049418', property: 'foil_geometry', value: 'R 8/3', code: '55' }, { id: '47339049419', property: 'foil_geometry', value: 'Continuous (F)', code: '71' }, { id: '47339049420', property: 'foil_geometry', value: 'Continuous (F/C)', code: '72' }, { id: '47339049421', property: 'foil_geometry', value: 'Continuous Carbon', code: '73' }, { id: '47339049422', property: 'foil_geometry', value: 'Lacey', code: '74' }, { id: '47339049423', property: 'foil_geometry', value: 'Classic Holey', code: '75' }, { id: '47339049424', property: 'grid_mesh', value: '100', code: '10' }, { id: '47339049425', property: 'grid_mesh', value: '', code: '' }, { id: '47339049426', property: 'grid_mesh', value: '300', code: '30' }, { id: '47339049427', property: 'grid_mesh', value: '200', code: '20' }, { id: '47339499720', property: 'grid_mesh', value: '400', code: '40' }, { id: '47339499721', property: 'grid_mesh', value: 'H2', code: 'H2' }, { id: '47339499722', property: 'grid_mesh', value: 'G200F1', code: 'G1' }, { id: '47339499723', property: 'grid_mesh', value: '100x400', code: '14' }, { id: '47339499724', property: 'grid_mesh', value: 'G200F2', code: 'G2' }, { id: '47339499725', property: 'grid_mesh', value: 'G202', code: '2G' }, { id: '47339499726', property: 'grid_material', value: 'Gold', code: 'Au' }, { id: '47339499727', property: 'grid_material', value: 'Copper', code: 'Cu' }, { id: '47339499728', property: 'grid_material', value: 'Copper/Rhodium', code: 'CR' }, { id: '47339499729', property: 'grid_material', value: 'Molybdenum (HQ)', code: 'MH' }, { id: '47339499730', property: 'grid_material', value: 'Molybdenum', code: 'Mo' }, { id: '47339499731', property: 'grid_material', value: 'Nickel', code: 'Ni' }, { id: '47339499732', property: 'pack_size', value: '10', code: '10' }, { id: '47339499733', property: 'pack_size', value: '20', code: '20' }, { id: '47339499734', property: 'pack_size', value: '25', code: '25' }, { id: '47339499735', property: 'pack_size', value: '50', code: '50' }, { id: '47339499736', property: 'pack_size', value: '100', code: '01' }, { id: '47339499737', property: 'pack_size', value: '', code: '' }, { id: '47339499738', property: 'special_layer', value: '', code: 'N' }, { id: '47339499739', property: 'special_layer', value: 'Carbon (UTC)', code: 'C' }, { id: '47339499740', property: 'special_layer_thickness', value: '', code: '1' }, { id: '47339499741', property: 'special_layer_thickness', value: '2nm', code: '2' }, { id: '47339499742', property: 'special_layer_thickness', value: '3nm', code: '3' }, { id: '47339499743', property: 'special_layer_thickness', value: '5nm', code: '5' }, { id: '47339499744', property: 'foil_material', value: '', code: '' }, { id: '47339499745', property: 'foil_geometry', value: '', code: '' }, { id: '47339499746', property: 'grid_material', value: '', code: '' }, { id: '47339499747', property: 'foil_material', value: 'Formvar®/Carbon', code: 'C' }, { id: '47339499748', property: 'foil_material', value: 'Formvar®', code: 'C' }, { id: '47339499749', property: 'foil_material', value: 'Carbon', code: 'C' }, ]; var shipping_address_same_as_billing_address_default = true; 'use strict'; const { useState, useEffect } = React; function StepTwoForm({formData, setFormData, setErrorMessage}){ // On Form Data State Change useEffect(() => { // Check if Local Form Data Exists function isEmpty(obj) { for(var prop in obj) { if(obj.hasOwnProperty(prop)) return false; } return true; } if(isEmpty(formData)){ var allInputsInStepTwo = Array.prototype.slice.call(document.getElementById("step-two-form").querySelectorAll(".quote-form-input")); var tempInputObject = {}; for(const input in allInputsInStepTwo){ tempInputObject = {...tempInputObject, [allInputsInStepTwo[input].name]: allInputsInStepTwo[input].value}; } setFormData(tempInputObject); } },[]); useEffect(() => { saveLocalFormData(); }, [formData]); function onFormChangeHandler(event){ // Check if there are any required fields still not met // Remove error message if all required fields are met // Remove required warning class if input has value if(event.target.value != ''){ event.target.closest('.quote-input-container').classList.remove('required'); } // Update Form Data setFormData( {...formData, [event.target.name]: event.target.value} ) } function getLocalFormData() { if (localStorage.getItem("formData") === null) { localStorage.setItem("formData", JSON.stringify({})); } else { let formDataLocal = JSON.parse(localStorage.getItem("formData")); setFormData(formDataLocal); } } function saveLocalFormData() { localStorage.setItem("formData", JSON.stringify(formData)); } return ( <div> <form id="step-two-form"> <h3 className="quote-form-title">Payment options</h3> <div className="quote-input-container"> <label className="quote-form-label">Please enter your Institute or Company's VAT ID (EU) or EIN (US), if known:</label> <input type="text" name="tax_id" maxLength="15" className="quote-form-input" onChange={onFormChangeHandler} value={formData.tax_id}/> </div> <div className="quote-input-container"> <label className="quote-form-label">Payment option*</label> <select className="quote-form-input" name="payment_option" required onChange={onFormChangeHandler} value={formData.payment_option}> <option value="">------</option> <option value="Wire Transfer">Wire Transfer</option> <option value="Credit Card">Credit Card</option> </select> <p className="required">This field is required.</p> <div className="quote-form-helper">Credit card payments are subject to an additional handling fee.</div> </div> <hr/> <h3 className="quote-form-title">Your details</h3> <div className="quote-input-container"> <label className="quote-form-label">Title*</label> <select className="quote-form-input" name="title" required onChange={onFormChangeHandler} value={formData.title}> <option value="">------</option> <option value="Miss">Miss</option> <option value="Mrs">Mrs</option> <option value="Ms">Ms</option> <option value="Mr">Mr</option> <option value="Dr">Dr</option> <option value="Prof">Prof</option> </select> </div> <div className="quote-input-container-two-column"> <div className="quote-input-container"> <label className="quote-form-label">First Name*</label> <input type="text" name="first_name" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.first_name} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Last Name*</label> <input type="text" name="last_name" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.last_name} /> </div> <div className="clear"></div> </div> <div className="quote-input-container"> <label className="quote-form-label">Email Address*</label> <input type="email" name="email" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.email} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Telephone*</label> <input type="tel" name="phone" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.phone} /> </div> <hr/> <h3 className="quote-form-title">Your company information</h3> <div className="quote-input-container"> <label className="quote-form-label">Organisation name*</label> <input type="text" name="org_name" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.org_name} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Department</label> <input type="text" name="department" className="quote-form-input" onChange={onFormChangeHandler} value={formData.department} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Address line 1*</label> <input type="text" name="address_line_1" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.address_line_1} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Address line 2</label> <input type="text" name="address_line_2" className="quote-form-input" onChange={onFormChangeHandler} value={formData.address_line_2} /> </div> <div className="quote-input-container-two-column"> <div className="quote-input-container"> <label className="quote-form-label">City*</label> <input type="text" name="city" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.city} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Postcode*</label> <input type="text" name="postcode" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.postcode} /> </div> <div className="clear"></div> </div> <div className="quote-input-container-two-column"> <div className="quote-input-container"> <label className="quote-form-label">Country*</label> <select className="quote-form-input" name="country" required onChange={onFormChangeHandler} value={formData.country}> <option label="Please Select" disabled="" value="">Please Select</option> <option label="Afghanistan" value="Afghanistan">Afghanistan</option> <option label="Albania" value="Albania">Albania</option> <option label="Algeria" value="Algeria">Algeria</option> <option label="American Samoa" value="American Samoa">American Samoa</option> <option label="Andorra" value="Andorra">Andorra</option> <option label="Angola" value="Angola">Angola</option> <option label="Anguilla" value="Anguilla">Anguilla</option> <option label="Antarctica" value="Antarctica">Antarctica</option> <option label="Antigua and Barbuda" value="Antigua and Barbuda">Antigua and Barbuda</option> <option label="Argentina" value="Argentina">Argentina</option> <option label="Armenia" value="Armenia">Armenia</option> <option label="Aruba" value="Aruba">Aruba</option> <option label="Australia" value="Australia">Australia</option> <option label="Austria" value="Austria">Austria</option> <option label="Azerbaijan" value="Azerbaijan">Azerbaijan</option> <option label="Bahamas" value="Bahamas">Bahamas</option> <option label="Bahrain" value="Bahrain">Bahrain</option> <option label="Bangladesh" value="Bangladesh">Bangladesh</option> <option label="Barbados" value="Barbados">Barbados</option> <option label="Belarus" value="Belarus">Belarus</option> <option label="Belgium" value="Belgium">Belgium</option> <option label="Belize" value="Belize">Belize</option> <option label="Benin" value="Benin">Benin</option> <option label="Bermuda" value="Bermuda">Bermuda</option> <option label="Bhutan" value="Bhutan">Bhutan</option> <option label="Bolivia" value="Bolivia">Bolivia</option> <option label="Bonaire, Sint Eustatius and Saba" value="Bonaire, Sint Eustatius and Saba">Bonaire, Sint Eustatius and Saba</option> <option label="Bosnia and Herzegovina" value="Bosnia and Herzegovina">Bosnia and Herzegovina</option> <option label="Botswana" value="Botswana">Botswana</option> <option label="Bouvet Island" value="Bouvet Island">Bouvet Island</option> <option label="Brazil" value="Brazil">Brazil</option> <option label="British Indian Ocean Territory" value="British Indian Ocean Territory">British Indian Ocean Territory</option> <option label="Brunei Darussalam" value="Brunei Darussalam">Brunei Darussalam</option> <option label="Bulgaria" value="Bulgaria">Bulgaria</option> <option label="Burkina Faso" value="Burkina Faso">Burkina Faso</option> <option label="Burundi" value="Burundi">Burundi</option> <option label="Cabo Verde" value="Cabo Verde">Cabo Verde</option> <option label="Cambodia" value="Cambodia">Cambodia</option> <option label="Cameroon" value="Cameroon">Cameroon</option> <option label="Canada" value="Canada">Canada</option> <option label="Cayman Islands" value="Cayman Islands">Cayman Islands</option> <option label="Central African Republic" value="Central African Republic">Central African Republic</option> <option label="Chad" value="Chad">Chad</option> <option label="Chile" value="Chile">Chile</option> <option label="China" value="China">China</option> <option label="Christmas Island" value="Christmas Island">Christmas Island</option> <option label="Cocos (Keeling) Islands" value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option> <option label="Colombia" value="Colombia">Colombia</option> <option label="Comoros" value="Comoros">Comoros</option> <option label="Congo" value="Congo">Congo</option> <option label="Congo (the Democratic Republic of the)" value="Congo (the Democratic Republic of the)">Congo (the Democratic Republic of the)</option> <option label="Cook Islands" value="Cook Islands">Cook Islands</option> <option label="Costa Rica" value="Costa Rica">Costa Rica</option> <option label="Croatia" value="Croatia">Croatia</option> <option label="Cuba" value="Cuba">Cuba</option> <option label="Curaçao" value="Curaçao">Curaçao</option> <option label="Cyprus" value="Cyprus">Cyprus</option> <option label="Czech Republic" value="Czech Republic">Czech Republic</option> <option label="Côte d'Ivoire" value="Côte d'Ivoire">Côte d'Ivoire</option> <option label="Denmark" value="Denmark">Denmark</option> <option label="Djibouti" value="Djibouti">Djibouti</option> <option label="Dominica" value="Dominica">Dominica</option> <option label="Dominican Republic" value="Dominican Republic">Dominican Republic</option> <option label="Ecuador" value="Ecuador">Ecuador</option> <option label="Egypt" value="Egypt">Egypt</option> <option label="El Salvador" value="El Salvador">El Salvador</option> <option label="Equatorial Guinea" value="Equatorial Guinea">Equatorial Guinea</option> <option label="Eritrea" value="Eritrea">Eritrea</option> <option label="Estonia" value="Estonia">Estonia</option> <option label="Eswatini" value="Eswatini">Eswatini</option> <option label="Ethiopia" value="Ethiopia">Ethiopia</option> <option label="Falkland Islands [Malvinas]" value="Falkland Islands [Malvinas]">Falkland Islands [Malvinas]</option> <option label="Faroe Islands" value="Faroe Islands">Faroe Islands</option> <option label="Fiji" value="Fiji">Fiji</option> <option label="Finland" value="Finland">Finland</option> <option label="France" value="France">France</option> <option label="French Guiana" value="French Guiana">French Guiana</option> <option label="French Polynesia" value="French Polynesia">French Polynesia</option> <option label="French Southern Territories" value="French Southern Territories">French Southern Territories</option> <option label="Gabon" value="Gabon">Gabon</option> <option label="Gambia" value="Gambia">Gambia</option> <option label="Georgia" value="Georgia">Georgia</option> <option label="Germany" value="Germany">Germany</option> <option label="Ghana" value="Ghana">Ghana</option> <option label="Gibraltar" value="Gibraltar">Gibraltar</option> <option label="Greece" value="Greece">Greece</option> <option label="Greenland" value="Greenland">Greenland</option> <option label="Grenada" value="Grenada">Grenada</option> <option label="Guadeloupe" value="Guadeloupe">Guadeloupe</option> <option label="Guam" value="Guam">Guam</option> <option label="Guatemala" value="Guatemala">Guatemala</option> <option label="Guernsey" value="Guernsey">Guernsey</option> <option label="Guinea" value="Guinea">Guinea</option> <option label="Guinea-Bissau" value="Guinea-Bissau">Guinea-Bissau</option> <option label="Guyana" value="Guyana">Guyana</option> <option label="Haiti" value="Haiti">Haiti</option> <option label="Heard Island and McDonald Islands" value="Heard Island and McDonald Islands">Heard Island and McDonald Islands</option> <option label="Holy See" value="Holy See">Holy See</option> <option label="Honduras" value="Honduras">Honduras</option> <option label="Hong Kong" value="Hong Kong">Hong Kong</option> <option label="Hungary" value="Hungary">Hungary</option> <option label="Iceland" value="Iceland">Iceland</option> <option label="India" value="India">India</option> <option label="Indonesia" value="Indonesia">Indonesia</option> <option label="Iran (Islamic Republic of)" value="Iran (Islamic Republic of)">Iran (Islamic Republic of)</option> <option label="Iraq" value="Iraq">Iraq</option> <option label="Ireland" value="Ireland">Ireland</option> <option label="Isle of Man" value="Isle of Man">Isle of Man</option> <option label="Israel" value="Israel">Israel</option> <option label="Italy" value="Italy">Italy</option> <option label="Jamaica" value="Jamaica">Jamaica</option> <option label="Japan" value="Japan">Japan</option> <option label="Jersey" value="Jersey">Jersey</option> <option label="Jordan" value="Jordan">Jordan</option> <option label="Kazakhstan" value="Kazakhstan">Kazakhstan</option> <option label="Kenya" value="Kenya">Kenya</option> <option label="Kiribati" value="Kiribati">Kiribati</option> <option label="Korea (the Democratic People's Republic of)" value="Korea (the Democratic People's Republic of)">Korea (the Democratic People's Republic of)</option> <option label="Korea (the Republic of)" value="Korea (the Republic of)">Korea (the Republic of)</option> <option label="Kuwait" value="Kuwait">Kuwait</option> <option label="Kyrgyzstan" value="Kyrgyzstan">Kyrgyzstan</option> <option label="Lao People's Democratic Republic" value="Lao People's Democratic Republic">Lao People's Democratic Republic</option> <option label="Latvia" value="Latvia">Latvia</option> <option label="Lebanon" value="Lebanon">Lebanon</option> <option label="Lesotho" value="Lesotho">Lesotho</option> <option label="Liberia" value="Liberia">Liberia</option> <option label="Libya" value="Libya">Libya</option> <option label="Liechtenstein" value="Liechtenstein">Liechtenstein</option> <option label="Lithuania" value="Lithuania">Lithuania</option> <option label="Luxembourg" value="Luxembourg">Luxembourg</option> <option label="Macao" value="Macao">Macao</option> <option label="Madagascar" value="Madagascar">Madagascar</option> <option label="Malawi" value="Malawi">Malawi</option> <option label="Malaysia" value="Malaysia">Malaysia</option> <option label="Maldives" value="Maldives">Maldives</option> <option label="Mali" value="Mali">Mali</option> <option label="Malta" value="Malta">Malta</option> <option label="Marshall Islands" value="Marshall Islands">Marshall Islands</option> <option label="Martinique" value="Martinique">Martinique</option> <option label="Mauritania" value="Mauritania">Mauritania</option> <option label="Mauritius" value="Mauritius">Mauritius</option> <option label="Mayotte" value="Mayotte">Mayotte</option> <option label="Mexico" value="Mexico">Mexico</option> <option label="Micronesia (Federated States of)" value="Micronesia (Federated States of)">Micronesia (Federated States of)</option> <option label="Moldova (the Republic of)" value="Moldova (the Republic of)">Moldova (the Republic of)</option> <option label="Monaco" value="Monaco">Monaco</option> <option label="Mongolia" value="Mongolia">Mongolia</option> <option label="Montenegro" value="Montenegro">Montenegro</option> <option label="Montserrat" value="Montserrat">Montserrat</option> <option label="Morocco" value="Morocco">Morocco</option> <option label="Mozambique" value="Mozambique">Mozambique</option> <option label="Myanmar" value="Myanmar">Myanmar</option> <option label="Namibia" value="Namibia">Namibia</option> <option label="Nauru" value="Nauru">Nauru</option> <option label="Nepal" value="Nepal">Nepal</option> <option label="New Caledonia" value="New Caledonia">New Caledonia</option> <option label="New Zealand" value="New Zealand">New Zealand</option> <option label="Nicaragua" value="Nicaragua">Nicaragua</option> <option label="Niger" value="Niger">Niger</option> <option label="Nigeria" value="Nigeria">Nigeria</option> <option label="Niue" value="Niue">Niue</option> <option label="Norfolk Island" value="Norfolk Island">Norfolk Island</option> <option label="North Macedonia" value="North Macedonia">North Macedonia</option> <option label="Northern Mariana Islands" value="Northern Mariana Islands">Northern Mariana Islands</option> <option label="Norway" value="Norway">Norway</option> <option label="Oman" value="Oman">Oman</option> <option label="Pakistan" value="Pakistan">Pakistan</option> <option label="Palau" value="Palau">Palau</option> <option label="Palestine, State of" value="Palestine, State of">Palestine, State of</option> <option label="Panama" value="Panama">Panama</option> <option label="Papua New Guinea" value="Papua New Guinea">Papua New Guinea</option> <option label="Paraguay" value="Paraguay">Paraguay</option> <option label="Peru" value="Peru">Peru</option> <option label="Philippines" value="Philippines">Philippines</option> <option label="Pitcairn" value="Pitcairn">Pitcairn</option> <option label="Poland" value="Poland">Poland</option> <option label="Portugal" value="Portugal">Portugal</option> <option label="Puerto Rico" value="Puerto Rico">Puerto Rico</option> <option label="Qatar" value="Qatar">Qatar</option> <option label="Romania" value="Romania">Romania</option> <option label="Russia" value="Russia">Russia</option> <option label="Rwanda" value="Rwanda">Rwanda</option> <option label="Réunion" value="Réunion">Réunion</option> <option label="Saint Barthélemy" value="Saint Barthélemy">Saint Barthélemy</option> <option label="Saint Helena, Ascension and Tristan da Cunha" value="Saint Helena, Ascension and Tristan da Cunha">Saint Helena, Ascension and Tristan da Cunha</option> <option label="Saint Kitts and Nevis" value="Saint Kitts and Nevis">Saint Kitts and Nevis</option> <option label="Saint Lucia" value="Saint Lucia">Saint Lucia</option> <option label="Saint Martin (French part)" value="Saint Martin (French part)">Saint Martin (French part)</option> <option label="Saint Pierre and Miquelon" value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option> <option label="Saint Vincent and the Grenadines" value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option> <option label="Samoa" value="Samoa">Samoa</option> <option label="San Marino" value="San Marino">San Marino</option> <option label="Sao Tome and Principe" value="Sao Tome and Principe">Sao Tome and Principe</option> <option label="Saudi Arabia" value="Saudi Arabia">Saudi Arabia</option> <option label="Senegal" value="Senegal">Senegal</option> <option label="Serbia" value="Serbia">Serbia</option> <option label="Seychelles" value="Seychelles">Seychelles</option> <option label="Sierra Leone" value="Sierra Leone">Sierra Leone</option> <option label="Singapore" value="Singapore">Singapore</option> <option label="Sint Maarten (Dutch part)" value="Sint Maarten (Dutch part)">Sint Maarten (Dutch part)</option> <option label="Slovakia" value="Slovakia">Slovakia</option> <option label="Slovenia" value="Slovenia">Slovenia</option> <option label="Solomon Islands" value="Solomon Islands">Solomon Islands</option> <option label="Somalia" value="Somalia">Somalia</option> <option label="South Africa" value="South Africa">South Africa</option> <option label="South Georgia and the South Sandwich Islands" value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option> <option label="South Sudan" value="South Sudan">South Sudan</option> <option label="Spain" value="Spain">Spain</option> <option label="Sri Lanka" value="Sri Lanka">Sri Lanka</option> <option label="Sudan" value="Sudan">Sudan</option> <option label="Suriname" value="Suriname">Suriname</option> <option label="Svalbard and Jan Mayen" value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option> <option label="Sweden" value="Sweden">Sweden</option> <option label="Switzerland" value="Switzerland">Switzerland</option> <option label="Syrian Arab Republic" value="Syrian Arab Republic">Syrian Arab Republic</option> <option label="Taiwan" value="Taiwan">Taiwan</option> <option label="Tajikistan" value="Tajikistan">Tajikistan</option> <option label="Tanzania" value="Tanzania">Tanzania</option> <option label="Thailand" value="Thailand">Thailand</option> <option label="The Netherlands" value="The Netherlands">The Netherlands</option> <option label="Timor-Leste" value="Timor-Leste">Timor-Leste</option> <option label="Togo" value="Togo">Togo</option> <option label="Tokelau" value="Tokelau">Tokelau</option> <option label="Tonga" value="Tonga">Tonga</option> <option label="Trinidad and Tobago" value="Trinidad and Tobago">Trinidad and Tobago</option> <option label="Tunisia" value="Tunisia">Tunisia</option> <option label="Turkey" value="Turkey">Turkey</option> <option label="Turkmenistan" value="Turkmenistan">Turkmenistan</option> <option label="Turks and Caicos Islands" value="Turks and Caicos Islands">Turks and Caicos Islands</option> <option label="Tuvalu" value="Tuvalu">Tuvalu</option> <option label="Uganda" value="Uganda">Uganda</option> <option label="Ukraine" value="Ukraine">Ukraine</option> <option label="United Arab Emirates" value="United Arab Emirates">United Arab Emirates</option> <option label="United Kingdom" value="United Kingdom">United Kingdom</option> <option label="United States of America" value="United States of America">United States of America</option> <option label="Uruguay" value="Uruguay">Uruguay</option> <option label="Uzbekistan" value="Uzbekistan">Uzbekistan</option> <option label="Vanuatu" value="Vanuatu">Vanuatu</option> <option label="Venezuela (Bolivarian Republic of)" value="Venezuela (Bolivarian Republic of)">Venezuela (Bolivarian Republic of)</option> <option label="Vietnam" value="Vietnam">Vietnam</option> <option label="Virgin Islands (British)" value="Virgin Islands (British)">Virgin Islands (British)</option> <option label="Virgin Islands (U.S.)" value="Virgin Islands (U.S.)">Virgin Islands (U.S.)</option> <option label="Wallis and Futuna" value="Wallis and Futuna">Wallis and Futuna</option> <option label="Western Sahara*" value="Western Sahara*">Western Sahara*</option> <option label="Yemen" value="Yemen">Yemen</option> <option label="Zambia" value="Zambia">Zambia</option> <option label="Zimbabwe" value="Zimbabwe">Zimbabwe</option> <option label="Åland Islands" value="Åland Islands">Åland Islands</option> </select> </div> <div className="quote-input-container"> <label className="quote-form-label">County*</label> <input type="text" name="county" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.county} /> </div> <div className="clear"></div> </div> </form> </div> ); } function StepThreeForm({formData, setFormData}){ // On 3rd Form Render useEffect(() => { var allInputsInStepThree = Array.prototype.slice.call(document.getElementById("step-three-form").querySelectorAll(".quote-form-input,.quote-form-checkbox")); var tempThirdFormInputsObject = {}; for(const input in allInputsInStepThree){ for(const item in formData){ if ([allInputsInStepThree[input].name][0] != item){ if(allInputsInStepThree[input].name == 'shipping_billing_address'){ tempThirdFormInputsObject = {...tempThirdFormInputsObject, [allInputsInStepThree[input].name]: shipping_address_same_as_billing_address_default}; } else { tempThirdFormInputsObject = {...tempThirdFormInputsObject, [allInputsInStepThree[input].name]: allInputsInStepThree[input].value}; } } } } setFormData( {...formData, ...tempThirdFormInputsObject} ) },[]); // On FormData State Change useEffect(() => { saveLocalFormData(); }, [formData]); function onFormChangeHandler(event){ if(event.target.value != ''){ event.target.closest('.quote-input-container').classList.remove('required'); } setFormData( {...formData, [event.target.name]: event.target.value} ) } function handleCheckedChange(){ if (formData.shipping_billing_address){ setFormData( {...formData, shipping_billing_address: false} ) } else { setFormData( {...formData, shipping_billing_address: true} ) } } function getLocalFormData() { if (localStorage.getItem("formData") === null) { localStorage.setItem("formData", JSON.stringify({})); } else { let formDataLocal = JSON.parse(localStorage.getItem("formData")); setFormData(formDataLocal); } } function saveLocalFormData() { localStorage.setItem("formData", JSON.stringify(formData)); } return ( <div> <form id="step-three-form"> <h3 className="quote-form-title">Shipping preferences</h3> <div id="step-three-form-section-one"> <div className="quote-input-container"> <label className="quote-form-label">Is your shipping address the same as your billing address?</label> <input className="quote-form-checkbox" type="checkbox" name="shipping_billing_address" checked={formData.shipping_billing_address} onChange={handleCheckedChange} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Shipping preference*</label> <select className="quote-form-input" name="shipping_preference" onChange={onFormChangeHandler} value={formData.shipping_preference} required> <option value="">------</option> <option value="Customer's shipping provider">Customer's shipping provider</option> <option value="Quantifoil's shipping provider">Quantifoil's shipping provider</option> </select> </div> </div> {!formData.shipping_billing_address ? ( <div id="step-three-form-section-two"> <hr/> <h3 className="quote-form-title">Shipping address</h3> <div className="quote-input-container"> <div className="quote-input-container"> <label className="quote-form-label">Name*</label> <input type="text" name="shipping_name" className="quote-form-input" onChange={onFormChangeHandler} value={formData.shipping_name} /> </div> </div> <div className="quote-input-container"> <label className="quote-form-label">Organisation name*</label> <input type="text" name="shipping_org_name" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.shipping_org_name} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Department</label> <input type="text" name="shipping_department" className="quote-form-input" onChange={onFormChangeHandler} value={formData.shipping_department} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Address line 1*</label> <input type="text" name="shipping_address_line_1" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.shipping_address_line_1} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Address line 2</label> <input type="text" name="shipping_address_line_2" className="quote-form-input" onChange={onFormChangeHandler} value={formData.shipping_address_line_2} /> </div> <div className="quote-input-container-two-column"> <div className="quote-input-container"> <label className="quote-form-label">City*</label> <input type="text" name="shipping_city" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.shipping_city} /> </div> <div className="quote-input-container"> <label className="quote-form-label">Postcode*</label> <input type="text" name="shipping_postcode" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.shipping_postcode} /> </div> <div className="clear"></div> </div> <div className="quote-input-container-two-column"> <div className="quote-input-container"> <label className="quote-form-label">Country*</label> <select name="shipping_country" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.shipping_country}> <option label="Please Select" disabled="" value="">Please Select</option> <option label="Afghanistan" value="Afghanistan">Afghanistan</option> <option label="Albania" value="Albania">Albania</option> <option label="Algeria" value="Algeria">Algeria</option> <option label="American Samoa" value="American Samoa">American Samoa</option> <option label="Andorra" value="Andorra">Andorra</option> <option label="Angola" value="Angola">Angola</option> <option label="Anguilla" value="Anguilla">Anguilla</option> <option label="Antarctica" value="Antarctica">Antarctica</option> <option label="Antigua and Barbuda" value="Antigua and Barbuda">Antigua and Barbuda</option> <option label="Argentina" value="Argentina">Argentina</option> <option label="Armenia" value="Armenia">Armenia</option> <option label="Aruba" value="Aruba">Aruba</option> <option label="Australia" value="Australia">Australia</option> <option label="Austria" value="Austria">Austria</option> <option label="Azerbaijan" value="Azerbaijan">Azerbaijan</option> <option label="Bahamas" value="Bahamas">Bahamas</option> <option label="Bahrain" value="Bahrain">Bahrain</option> <option label="Bangladesh" value="Bangladesh">Bangladesh</option> <option label="Barbados" value="Barbados">Barbados</option> <option label="Belarus" value="Belarus">Belarus</option> <option label="Belgium" value="Belgium">Belgium</option> <option label="Belize" value="Belize">Belize</option> <option label="Benin" value="Benin">Benin</option> <option label="Bermuda" value="Bermuda">Bermuda</option> <option label="Bhutan" value="Bhutan">Bhutan</option> <option label="Bolivia" value="Bolivia">Bolivia</option> <option label="Bonaire, Sint Eustatius and Saba" value="Bonaire, Sint Eustatius and Saba">Bonaire, Sint Eustatius and Saba</option> <option label="Bosnia and Herzegovina" value="Bosnia and Herzegovina">Bosnia and Herzegovina</option> <option label="Botswana" value="Botswana">Botswana</option> <option label="Bouvet Island" value="Bouvet Island">Bouvet Island</option> <option label="Brazil" value="Brazil">Brazil</option> <option label="British Indian Ocean Territory" value="British Indian Ocean Territory">British Indian Ocean Territory</option> <option label="Brunei Darussalam" value="Brunei Darussalam">Brunei Darussalam</option> <option label="Bulgaria" value="Bulgaria">Bulgaria</option> <option label="Burkina Faso" value="Burkina Faso">Burkina Faso</option> <option label="Burundi" value="Burundi">Burundi</option> <option label="Cabo Verde" value="Cabo Verde">Cabo Verde</option> <option label="Cambodia" value="Cambodia">Cambodia</option> <option label="Cameroon" value="Cameroon">Cameroon</option> <option label="Canada" value="Canada">Canada</option> <option label="Cayman Islands" value="Cayman Islands">Cayman Islands</option> <option label="Central African Republic" value="Central African Republic">Central African Republic</option> <option label="Chad" value="Chad">Chad</option> <option label="Chile" value="Chile">Chile</option> <option label="China" value="China">China</option> <option label="Christmas Island" value="Christmas Island">Christmas Island</option> <option label="Cocos (Keeling) Islands" value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option> <option label="Colombia" value="Colombia">Colombia</option> <option label="Comoros" value="Comoros">Comoros</option> <option label="Congo" value="Congo">Congo</option> <option label="Congo (the Democratic Republic of the)" value="Congo (the Democratic Republic of the)">Congo (the Democratic Republic of the)</option> <option label="Cook Islands" value="Cook Islands">Cook Islands</option> <option label="Costa Rica" value="Costa Rica">Costa Rica</option> <option label="Croatia" value="Croatia">Croatia</option> <option label="Cuba" value="Cuba">Cuba</option> <option label="Curaçao" value="Curaçao">Curaçao</option> <option label="Cyprus" value="Cyprus">Cyprus</option> <option label="Czech Republic" value="Czech Republic">Czech Republic</option> <option label="Côte d'Ivoire" value="Côte d'Ivoire">Côte d'Ivoire</option> <option label="Denmark" value="Denmark">Denmark</option> <option label="Djibouti" value="Djibouti">Djibouti</option> <option label="Dominica" value="Dominica">Dominica</option> <option label="Dominican Republic" value="Dominican Republic">Dominican Republic</option> <option label="Ecuador" value="Ecuador">Ecuador</option> <option label="Egypt" value="Egypt">Egypt</option> <option label="El Salvador" value="El Salvador">El Salvador</option> <option label="Equatorial Guinea" value="Equatorial Guinea">Equatorial Guinea</option> <option label="Eritrea" value="Eritrea">Eritrea</option> <option label="Estonia" value="Estonia">Estonia</option> <option label="Eswatini" value="Eswatini">Eswatini</option> <option label="Ethiopia" value="Ethiopia">Ethiopia</option> <option label="Falkland Islands [Malvinas]" value="Falkland Islands [Malvinas]">Falkland Islands [Malvinas]</option> <option label="Faroe Islands" value="Faroe Islands">Faroe Islands</option> <option label="Fiji" value="Fiji">Fiji</option> <option label="Finland" value="Finland">Finland</option> <option label="France" value="France">France</option> <option label="French Guiana" value="French Guiana">French Guiana</option> <option label="French Polynesia" value="French Polynesia">French Polynesia</option> <option label="French Southern Territories" value="French Southern Territories">French Southern Territories</option> <option label="Gabon" value="Gabon">Gabon</option> <option label="Gambia" value="Gambia">Gambia</option> <option label="Georgia" value="Georgia">Georgia</option> <option label="Germany" value="Germany">Germany</option> <option label="Ghana" value="Ghana">Ghana</option> <option label="Gibraltar" value="Gibraltar">Gibraltar</option> <option label="Greece" value="Greece">Greece</option> <option label="Greenland" value="Greenland">Greenland</option> <option label="Grenada" value="Grenada">Grenada</option> <option label="Guadeloupe" value="Guadeloupe">Guadeloupe</option> <option label="Guam" value="Guam">Guam</option> <option label="Guatemala" value="Guatemala">Guatemala</option> <option label="Guernsey" value="Guernsey">Guernsey</option> <option label="Guinea" value="Guinea">Guinea</option> <option label="Guinea-Bissau" value="Guinea-Bissau">Guinea-Bissau</option> <option label="Guyana" value="Guyana">Guyana</option> <option label="Haiti" value="Haiti">Haiti</option> <option label="Heard Island and McDonald Islands" value="Heard Island and McDonald Islands">Heard Island and McDonald Islands</option> <option label="Holy See" value="Holy See">Holy See</option> <option label="Honduras" value="Honduras">Honduras</option> <option label="Hong Kong" value="Hong Kong">Hong Kong</option> <option label="Hungary" value="Hungary">Hungary</option> <option label="Iceland" value="Iceland">Iceland</option> <option label="India" value="India">India</option> <option label="Indonesia" value="Indonesia">Indonesia</option> <option label="Iran (Islamic Republic of)" value="Iran (Islamic Republic of)">Iran (Islamic Republic of)</option> <option label="Iraq" value="Iraq">Iraq</option> <option label="Ireland" value="Ireland">Ireland</option> <option label="Isle of Man" value="Isle of Man">Isle of Man</option> <option label="Israel" value="Israel">Israel</option> <option label="Italy" value="Italy">Italy</option> <option label="Jamaica" value="Jamaica">Jamaica</option> <option label="Japan" value="Japan">Japan</option> <option label="Jersey" value="Jersey">Jersey</option> <option label="Jordan" value="Jordan">Jordan</option> <option label="Kazakhstan" value="Kazakhstan">Kazakhstan</option> <option label="Kenya" value="Kenya">Kenya</option> <option label="Kiribati" value="Kiribati">Kiribati</option> <option label="Korea (the Democratic People's Republic of)" value="Korea (the Democratic People's Republic of)">Korea (the Democratic People's Republic of)</option> <option label="Korea (the Republic of)" value="Korea (the Republic of)">Korea (the Republic of)</option> <option label="Kuwait" value="Kuwait">Kuwait</option> <option label="Kyrgyzstan" value="Kyrgyzstan">Kyrgyzstan</option> <option label="Lao People's Democratic Republic" value="Lao People's Democratic Republic">Lao People's Democratic Republic</option> <option label="Latvia" value="Latvia">Latvia</option> <option label="Lebanon" value="Lebanon">Lebanon</option> <option label="Lesotho" value="Lesotho">Lesotho</option> <option label="Liberia" value="Liberia">Liberia</option> <option label="Libya" value="Libya">Libya</option> <option label="Liechtenstein" value="Liechtenstein">Liechtenstein</option> <option label="Lithuania" value="Lithuania">Lithuania</option> <option label="Luxembourg" value="Luxembourg">Luxembourg</option> <option label="Macao" value="Macao">Macao</option> <option label="Madagascar" value="Madagascar">Madagascar</option> <option label="Malawi" value="Malawi">Malawi</option> <option label="Malaysia" value="Malaysia">Malaysia</option> <option label="Maldives" value="Maldives">Maldives</option> <option label="Mali" value="Mali">Mali</option> <option label="Malta" value="Malta">Malta</option> <option label="Marshall Islands" value="Marshall Islands">Marshall Islands</option> <option label="Martinique" value="Martinique">Martinique</option> <option label="Mauritania" value="Mauritania">Mauritania</option> <option label="Mauritius" value="Mauritius">Mauritius</option> <option label="Mayotte" value="Mayotte">Mayotte</option> <option label="Mexico" value="Mexico">Mexico</option> <option label="Micronesia (Federated States of)" value="Micronesia (Federated States of)">Micronesia (Federated States of)</option> <option label="Moldova (the Republic of)" value="Moldova (the Republic of)">Moldova (the Republic of)</option> <option label="Monaco" value="Monaco">Monaco</option> <option label="Mongolia" value="Mongolia">Mongolia</option> <option label="Montenegro" value="Montenegro">Montenegro</option> <option label="Montserrat" value="Montserrat">Montserrat</option> <option label="Morocco" value="Morocco">Morocco</option> <option label="Mozambique" value="Mozambique">Mozambique</option> <option label="Myanmar" value="Myanmar">Myanmar</option> <option label="Namibia" value="Namibia">Namibia</option> <option label="Nauru" value="Nauru">Nauru</option> <option label="Nepal" value="Nepal">Nepal</option> <option label="New Caledonia" value="New Caledonia">New Caledonia</option> <option label="New Zealand" value="New Zealand">New Zealand</option> <option label="Nicaragua" value="Nicaragua">Nicaragua</option> <option label="Niger" value="Niger">Niger</option> <option label="Nigeria" value="Nigeria">Nigeria</option> <option label="Niue" value="Niue">Niue</option> <option label="Norfolk Island" value="Norfolk Island">Norfolk Island</option> <option label="North Macedonia" value="North Macedonia">North Macedonia</option> <option label="Northern Mariana Islands" value="Northern Mariana Islands">Northern Mariana Islands</option> <option label="Norway" value="Norway">Norway</option> <option label="Oman" value="Oman">Oman</option> <option label="Pakistan" value="Pakistan">Pakistan</option> <option label="Palau" value="Palau">Palau</option> <option label="Palestine, State of" value="Palestine, State of">Palestine, State of</option> <option label="Panama" value="Panama">Panama</option> <option label="Papua New Guinea" value="Papua New Guinea">Papua New Guinea</option> <option label="Paraguay" value="Paraguay">Paraguay</option> <option label="Peru" value="Peru">Peru</option> <option label="Philippines" value="Philippines">Philippines</option> <option label="Pitcairn" value="Pitcairn">Pitcairn</option> <option label="Poland" value="Poland">Poland</option> <option label="Portugal" value="Portugal">Portugal</option> <option label="Puerto Rico" value="Puerto Rico">Puerto Rico</option> <option label="Qatar" value="Qatar">Qatar</option> <option label="Romania" value="Romania">Romania</option> <option label="Russia" value="Russia">Russia</option> <option label="Rwanda" value="Rwanda">Rwanda</option> <option label="Réunion" value="Réunion">Réunion</option> <option label="Saint Barthélemy" value="Saint Barthélemy">Saint Barthélemy</option> <option label="Saint Helena, Ascension and Tristan da Cunha" value="Saint Helena, Ascension and Tristan da Cunha">Saint Helena, Ascension and Tristan da Cunha</option> <option label="Saint Kitts and Nevis" value="Saint Kitts and Nevis">Saint Kitts and Nevis</option> <option label="Saint Lucia" value="Saint Lucia">Saint Lucia</option> <option label="Saint Martin (French part)" value="Saint Martin (French part)">Saint Martin (French part)</option> <option label="Saint Pierre and Miquelon" value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option> <option label="Saint Vincent and the Grenadines" value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option> <option label="Samoa" value="Samoa">Samoa</option> <option label="San Marino" value="San Marino">San Marino</option> <option label="Sao Tome and Principe" value="Sao Tome and Principe">Sao Tome and Principe</option> <option label="Saudi Arabia" value="Saudi Arabia">Saudi Arabia</option> <option label="Senegal" value="Senegal">Senegal</option> <option label="Serbia" value="Serbia">Serbia</option> <option label="Seychelles" value="Seychelles">Seychelles</option> <option label="Sierra Leone" value="Sierra Leone">Sierra Leone</option> <option label="Singapore" value="Singapore">Singapore</option> <option label="Sint Maarten (Dutch part)" value="Sint Maarten (Dutch part)">Sint Maarten (Dutch part)</option> <option label="Slovakia" value="Slovakia">Slovakia</option> <option label="Slovenia" value="Slovenia">Slovenia</option> <option label="Solomon Islands" value="Solomon Islands">Solomon Islands</option> <option label="Somalia" value="Somalia">Somalia</option> <option label="South Africa" value="South Africa">South Africa</option> <option label="South Georgia and the South Sandwich Islands" value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option> <option label="South Sudan" value="South Sudan">South Sudan</option> <option label="Spain" value="Spain">Spain</option> <option label="Sri Lanka" value="Sri Lanka">Sri Lanka</option> <option label="Sudan" value="Sudan">Sudan</option> <option label="Suriname" value="Suriname">Suriname</option> <option label="Svalbard and Jan Mayen" value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option> <option label="Sweden" value="Sweden">Sweden</option> <option label="Switzerland" value="Switzerland">Switzerland</option> <option label="Syrian Arab Republic" value="Syrian Arab Republic">Syrian Arab Republic</option> <option label="Taiwan" value="Taiwan">Taiwan</option> <option label="Tajikistan" value="Tajikistan">Tajikistan</option> <option label="Tanzania" value="Tanzania">Tanzania</option> <option label="Thailand" value="Thailand">Thailand</option> <option label="The Netherlands" value="The Netherlands">The Netherlands</option> <option label="Timor-Leste" value="Timor-Leste">Timor-Leste</option> <option label="Togo" value="Togo">Togo</option> <option label="Tokelau" value="Tokelau">Tokelau</option> <option label="Tonga" value="Tonga">Tonga</option> <option label="Trinidad and Tobago" value="Trinidad and Tobago">Trinidad and Tobago</option> <option label="Tunisia" value="Tunisia">Tunisia</option> <option label="Turkey" value="Turkey">Turkey</option> <option label="Turkmenistan" value="Turkmenistan">Turkmenistan</option> <option label="Turks and Caicos Islands" value="Turks and Caicos Islands">Turks and Caicos Islands</option> <option label="Tuvalu" value="Tuvalu">Tuvalu</option> <option label="Uganda" value="Uganda">Uganda</option> <option label="Ukraine" value="Ukraine">Ukraine</option> <option label="United Arab Emirates" value="United Arab Emirates">United Arab Emirates</option> <option label="United Kingdom" value="United Kingdom">United Kingdom</option> <option label="United States of America" value="United States of America">United States of America</option> <option label="Uruguay" value="Uruguay">Uruguay</option> <option label="Uzbekistan" value="Uzbekistan">Uzbekistan</option> <option label="Vanuatu" value="Vanuatu">Vanuatu</option> <option label="Venezuela (Bolivarian Republic of)" value="Venezuela (Bolivarian Republic of)">Venezuela (Bolivarian Republic of)</option> <option label="Vietnam" value="Vietnam">Vietnam</option> <option label="Virgin Islands (British)" value="Virgin Islands (British)">Virgin Islands (British)</option> <option label="Virgin Islands (U.S.)" value="Virgin Islands (U.S.)">Virgin Islands (U.S.)</option> <option label="Wallis and Futuna" value="Wallis and Futuna">Wallis and Futuna</option> <option label="Western Sahara*" value="Western Sahara*">Western Sahara*</option> <option label="Yemen" value="Yemen">Yemen</option> <option label="Zambia" value="Zambia">Zambia</option> <option label="Zimbabwe" value="Zimbabwe">Zimbabwe</option> <option label="Åland Islands" value="Åland Islands">Åland Islands</option> </select> </div> <div className="quote-input-container"> <label className="quote-form-label">County*</label> <input type="text" name="shipping_county" className="quote-form-input" required onChange={onFormChangeHandler} value={formData.shipping_county} /> </div> <div className="clear"></div> </div> </div> ) : (<></>)} </form> </div> ); } // Quote System function QuotationSystem() { // State Management const [loaded, setLoaded] = useState(false); const [databaseItems, setDatabaseItems] = useState(); const [allItemOptions, setAllItemOptions] = useState([]); const [codeList, setCodeList] = useState(); const [quoteItems, setQuoteItems] = useState([]); const [itemToUpdate, setItemToUpdate] = useState([]); const [clickedProperty, setClickedProperty] = useState(); const [errorMessage, setErrorMessage] = useState(); const [messageSending, setMessageSending] = useState(false); const [successMessage, setSuccessMessage] = useState(); const [formSubmitErrorMessage, setFormSubmitErrorMessage] = useState(); const [stepOneComplete, setStepOneComplete] = useState(false); const [stepTwoComplete, setStepTwoComplete] = useState(false); const [stepThreeComplete, setStepThreeComplete] = useState(false); const [formData, setFormData] = useState({}); // On Mount Effects useEffect(() => { // Set Database Items to State setDatabaseItems(databaseItemsTable); console.log(databaseItemsTable); // Set Code Database Items to State setCodeList(codeTable); console.log('code items have been set'); // Get Local Form Data if exists getLocalFormData(); }, []); // On Database Items State Change Effects useEffect(() => { if(databaseItems){ // Get all Database Item Option Groups let allProductPropertiesArray = []; for ( let i = 0; i < databaseItemsTable.length; i++ ) { for ( const property in databaseItemsTable[i]){ if ( property != 'id' && property != 'description' && property != 'product'){ allProductPropertiesArray.push(property); } } } let filteredAllProductPropertiesArray = Array.from(new Set(allProductPropertiesArray)); // Loop through each Unique Item Option Group and Create Object with Option Title and Values let tempFinalObject = []; for ( var i = 0; i < filteredAllProductPropertiesArray.length; i++ ) { let title = filteredAllProductPropertiesArray[i]; // Create Object for each property and check if required if (title == 'special_layer'){ var objectToAdd = {title: title, options: [], required: false}; } else if (title == 'special_layer_thickness'){ var objectToAdd = {title: title, options: [], required: false}; } else { var objectToAdd = {title: title, options: [], required: true}; } let tempOptionsArray = []; for ( var j = 0; j < databaseItemsTable.length; j++ ) { tempOptionsArray.push(databaseItemsTable[j][title]); } tempOptionsArray = Array.from(new Set(tempOptionsArray)); for ( const option in tempOptionsArray ){ if(title == 'special_layer_thickness'){ var tempObject = { option: tempOptionsArray[option], available: false, parent: title}; } else { var tempObject = { option: tempOptionsArray[option], available: true, parent: title}; } objectToAdd.options.push(tempObject); } tempFinalObject.push(objectToAdd); } setAllItemOptions(tempFinalObject); } }, [databaseItems]); // On All Properties Fetched From Database Items useEffect(() => { if(allItemOptions.length != 0){ setLoaded(true); getLocalQuoteItems(); } }, [allItemOptions]); // On Quote Items State Change useEffect(() => { if(databaseItems){ saveLocalQuoteItems(); } }, [quoteItems]); // On Item Update Create Copy of Item Updated to Seperate State useEffect(() => { if(itemToUpdate.length != 0){ itemFilterHandler(itemToUpdate); } }, [itemToUpdate]); // Local storage function saveLocalQuoteItems() { localStorage.setItem("quoteItems", JSON.stringify(quoteItems)); } function getLocalQuoteItems() { if (localStorage.getItem("quoteItems") === null) { const item_filtering = databaseItems; let uuid = Math.floor((Math.random() * 10000) * (Math.random() * 100)); const newItemTitle = "N1-n-"; let createQuoteItem = {id: uuid, title: newItemTitle, item_filtering, item_property_options: allItemOptions, number_of_packs: 1, additional_comments: ''}; for(let i = 0; i < allItemOptions.length; i++){ createQuoteItem[allItemOptions[i].title] = ''; } setQuoteItems([createQuoteItem]); localStorage.setItem("quoteItems", JSON.stringify(quoteItems)); } else { let quoteItemsLocal = JSON.parse(localStorage.getItem("quoteItems")); setQuoteItems(quoteItemsLocal); } } function getLocalFormData() { if (localStorage.getItem("formData") === null) { localStorage.setItem("formData", JSON.stringify({})); } else { let formDataLocal = JSON.parse(localStorage.getItem("formData")); setFormData(formDataLocal); } } // Quote Item Toggle Options function switchToggleHandler(el){ el.target.closest('.quote-item').classList.toggle('open'); } // Delete Quote Item function deleteItemHandler(el){ const clickedItem = parseInt(el.target.getAttribute("data-index")); setQuoteItems(quoteItems.filter((quoteItem) => quoteItem.id !== clickedItem )); } // Reset Quote Items function resetQuoteItems(){ setQuoteItems([]); const item_filtering = databaseItems; let uuid = Math.floor((Math.random() * 10000) * (Math.random() * 100)); const newItemTitle = "N1-n-"; let createQuoteItem = {id: uuid, title: newItemTitle, item_filtering, item_property_options: allItemOptions, number_of_packs: 1, additional_comments: ''}; for(let i = 0; i < allItemOptions.length; i++){ createQuoteItem[allItemOptions[i].title] = ''; } setQuoteItems([createQuoteItem]); localStorage.setItem("quoteItems", JSON.stringify(quoteItems)); setErrorMessage(); } // Add New Quote Item function addItemHandler(){ const newItemId = Math.floor((Math.random() * 10000) * (Math.random() * 100)); const newItemTitle = "N1-n-"; const item_filtering = databaseItems; let addQuoteItem = {id: newItemId, title: newItemTitle, item_filtering, item_property_options: allItemOptions, number_of_packs: 1, additional_comments: ''}; for(let i = 0; i < allItemOptions.length; i++){ addQuoteItem[allItemOptions[i].title] = ''; } setQuoteItems([...quoteItems, addQuoteItem]); } // Item Option change Functions function handleOptionChange(e){ // Get ID of Quote Item as Integer const currentQuoteItemID = parseInt(e.target.closest('.quote-item').getAttribute('data-index')); // Get Clicked Item Key const clickedQuoteKey = e.target.getAttribute('data-quote-item-key'); // Get Selected Value var selectedValue = e.target.value; if(selectedValue != ''){ e.target.closest('.quote-property-container').classList.remove('required'); } // Add and Remove required field indicator from special layer thickness when special layer selected or deselected if(clickedQuoteKey == 'special_layer' && selectedValue != ''){ console.log('add required'); e.target.parentNode.parentNode.querySelector('[for="special_layer_thickness"]').innerHTML = 'Special Layer Thickness*'; } if(clickedQuoteKey == 'special_layer' && selectedValue == ''){ console.log('remove required'); e.target.parentNode.parentNode.querySelector('[for="special_layer_thickness"]').innerHTML = 'Special Layer Thickness'; e.target.parentNode.parentNode.querySelector('[for="special_layer_thickness"]').parentNode.classList.remove('required'); } // Reset Required Errors if all inputs have values var requiredInputs = document.getElementsByClassName('quote-property-container required'); if (requiredInputs.length > 0) { console.log("There are still required fields that don't have values"); } else if (requiredInputs.length == 0){ setErrorMessage(''); } // Update Quote Item setQuoteItems(quoteItems.map(item => { if (item.id === currentQuoteItemID) { if(clickedQuoteKey === 'special_layer' && selectedValue === ''){ return { ...item, [clickedQuoteKey]: selectedValue, special_layer_thickness: '' } } return { ...item, [clickedQuoteKey]: selectedValue } } return { ...item } })); // Create Array to use for Filtering var updatedItemArray = quoteItems.map(item => { if (item.id === currentQuoteItemID) { if(clickedQuoteKey === 'special_layer' && selectedValue === ''){ return { ...item, [clickedQuoteKey]: selectedValue, special_layer_thickness: '' } } return { ...item, [clickedQuoteKey]: selectedValue } } }); // Clean up Array var filtered = updatedItemArray.filter(function(value, index, arr){ return value != undefined; }); // Set Item To Update State setItemToUpdate(filtered[0]); // Set Selected Value setClickedProperty(clickedQuoteKey); } // Item Filtering Function function itemFilterHandler(item,selectedValue){ // Create Array for Storing Selected Item Properties let itemSelectedProperties = []; // Loop through each set property in Quote item for (const property in item) { // Check that property is not Quote item related or empty if(property != 'id' && property != 'title' && property != 'item_filtering' && property != 'item_property_options' && item[property] != '' && property != 'number_of_packs' && property != 'additional_comments' ){ itemSelectedProperties.push({[property]: item[property]}); } } // Filtered Array var matchingItems = []; // Loop through database items for (let i = 0; i < databaseItems.length; i++) { // Keep count of how many properties match var matches = 0; // Loop through selected item properties and compare to current database item for( let j = 0; j < itemSelectedProperties.length; j++){ var objectkey = Object.keys(itemSelectedProperties[j])[0]; var objectValue = Object.values(itemSelectedProperties[j])[0]; if (databaseItems[i][objectkey] == objectValue) { matches++; } } // Check if database item matched all selected properties if (matches == itemSelectedProperties.length){ matchingItems.push(databaseItems[i]); } } var filteredItemOptionsArray = filterItemOptions(item, matchingItems); var newTitle = titleNamingConverter(item); // Update Quote Item setQuoteItems(quoteItems.map(quoteEntry => { if (quoteEntry.id === item.id) { return { ...quoteEntry, title: newTitle, item_filtering: matchingItems, item_property_options: filteredItemOptionsArray } } return { ...quoteEntry } })); } // Filter Item Options function filterItemOptions(itemToFilter, matchingItemstoFilter){ // GOAL - TO RETURN THE ARRAY OF PROPERTIES WITH EACH ONE'S AVAILBILITY CHECKED IN FILTERED LIST AND UPDATED var updatedItemPropertyOptionsArray = []; // Loop through each option in each property in quote item for (const property in itemToFilter.item_property_options){ var updatedOptionsArray = []; for(const option in itemToFilter.item_property_options[property].options){ var truthCounter = 0; for(const matchingItem in matchingItemstoFilter ){ // Check if option matches any options in filtered list if(itemToFilter.item_property_options[property].options[option].option == matchingItemstoFilter[matchingItem][itemToFilter.item_property_options[property].options[option].parent]) { truthCounter++; } } // Check that option doesn't match any options in the filtered items and the clicked property doesn't match if (truthCounter == 0 && clickedProperty != itemToFilter.item_property_options[property].title){ var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: false }; updatedOptionsArray.push(objectToUpdate); } // Check if special layer is set & if it is - make special layer thickness options available - otherwise make them unavailable else if (itemToFilter.item_property_options[property].options[option].parent == 'special_layer_thickness'){ if (itemToFilter.special_layer == ''){ var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: false }; updatedOptionsArray.push(objectToUpdate); } else { var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: true }; updatedOptionsArray.push(objectToUpdate); } } // Check if the selected option is empty and rerun filters else if (itemToFilter[clickedProperty] == ''){ if (truthCounter == 0){ var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: false }; updatedOptionsArray.push(objectToUpdate); } else if (itemToFilter.item_property_options[property].options[option].parent == 'special_layer_thickness'){ if (itemToFilter.special_layer == ''){ var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: false }; updatedOptionsArray.push(objectToUpdate); } else { var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: true }; updatedOptionsArray.push(objectToUpdate); } } else if (truthCounter > 0){ var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: true }; updatedOptionsArray.push(objectToUpdate); } else { var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: true }; updatedOptionsArray.push(objectToUpdate); } } else if (truthCounter > 0){ var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate, available: true }; updatedOptionsArray.push(objectToUpdate); } else { var objectToUpdate = itemToFilter.item_property_options[property].options[option]; objectToUpdate = { ...objectToUpdate }; updatedOptionsArray.push(objectToUpdate); } } var updatedPropertyObject = {options: updatedOptionsArray, title: updatedOptionsArray[0].parent, required: itemToFilter.item_property_options[property].required}; updatedItemPropertyOptionsArray.push(updatedPropertyObject); } return updatedItemPropertyOptionsArray; } // Make Property Titles Pretty for Display - Remove Underscores and Capitilize First Letter of Each Word function humanize(str) { var i, frags = str.split('_'); for (i=0; i<frags.length; i++) { frags[i] = frags[i].charAt(0).toUpperCase() + frags[i].slice(1); } return frags.join(' '); } // Quote Item Naming Converter function titleNamingConverter(quoteItem){ // Create Object for Property Codes var propertiesCodesObject = {} // Loop through each property in Quote item and compare value to code list for (const property in quoteItem) { // Check that property is not Quote item related or empty if(property != 'id' && property != 'title' && property != 'item_filtering' && property != 'item_property_options' && property != 'additional_comments' && property != 'number_of_packs' ){ for(const codeItem in codeList){ if (property == codeList[codeItem].property && quoteItem[property] == codeList[codeItem].value){ propertiesCodesObject = {...propertiesCodesObject, [property]: codeList[codeItem].code}; } } } } // Create Updated Naming String var updatedNamingString = propertiesCodesObject.special_layer + propertiesCodesObject.special_layer_thickness + '-' + propertiesCodesObject.foil_material + propertiesCodesObject.foil_geometry + 'n' + propertiesCodesObject.grid_material + propertiesCodesObject.grid_mesh + '-' + propertiesCodesObject.pack_size; // Return Updated Name return updatedNamingString; } // Quote Submit Function function quoteSubmit(){ var allRequiredFieldsSet = 0; // Loop through each quote item to check if required fields are selected for(const quoteItem in quoteItems){ var openQuoteitem = false; for (const property in quoteItems[quoteItem]) { var requiredTruthCounter = 0; if(property != 'id' && property != 'title' && property != 'item_filtering' && property != 'item_property_options' && property != 'additional_comments' && property != 'number_of_packs' ){ for(const option in allItemOptions){ if(property == allItemOptions[option].title && allItemOptions[option].required === true && quoteItems[quoteItem][property] == ''){ requiredTruthCounter++; } } } if(property == 'special_layer_thickness' && quoteItems[quoteItem].special_layer != '' && quoteItems[quoteItem].special_layer_thickness == ''){ console.log('thickness not selected'); requiredTruthCounter++; } if (requiredTruthCounter > 0){ document.querySelector(`[data-index="${quoteItems[quoteItem].id}"]`).querySelector(`[name="${property}"]`).parentNode.classList.add('required'); openQuoteitem = true; } } if (openQuoteitem){ document.querySelector(`[data-index="${quoteItems[quoteItem].id}"]`).classList.add('open'); allRequiredFieldsSet++; } else { document.querySelector(`[data-index="${quoteItems[quoteItem].id}"]`).classList.remove('open'); } } if(allRequiredFieldsSet != 0){ setErrorMessage('Please check for any errors in the fields highlighted below.'); smoothScroll(); } else { setErrorMessage(''); setStepOneComplete(true); smoothScroll(); } } // Back to quote list function backToQuoteList() { setErrorMessage(); setStepOneComplete(false); smoothScroll(); } // Step two form submit function stepTwoFormSubmit() { // Check that each required input is set var requiredFields = Array.prototype.slice.call(document.getElementById("step-two-form").querySelectorAll("[required]")); var hasValidationErrors = false; for (const requiredField in requiredFields){ for(const input in formData){ if (requiredFields[requiredField].name == input && formData[input] == ''){ hasValidationErrors = true; requiredFields[requiredField].parentNode.classList.add('required'); } } } // Error message if(hasValidationErrors){ setErrorMessage("Please complete all required fields."); smoothScroll(); } else { // Success setErrorMessage(); setStepTwoComplete(true); smoothScroll(); } } // Back to 2nd step function backToSecondStep() { setErrorMessage(); setStepTwoComplete(false); smoothScroll(); } // Scroll to Error Message function smoothScroll() { document.querySelector('#quotation-system-header').scrollIntoView({ behavior: 'smooth', block: 'start' }); } // Step three form submit function sendEmail() { // Check if shipping address is same as billing address if (formData.shipping_billing_address == true){ var requiredFields = Array.prototype.slice.call(document.getElementById("step-three-form-section-one").querySelectorAll("[required]")); } else { var requiredFields = Array.prototype.slice.call(document.getElementById("step-three-form").querySelectorAll("[required]")); } // Check that each required input is set var hasValidationErrors = false; for (const requiredField in requiredFields){ for(const input in formData){ if (requiredFields[requiredField].name == input && formData[input] == ''){ hasValidationErrors = true; requiredFields[requiredField].parentNode.classList.add('required'); } } } // Error message if(hasValidationErrors){ setErrorMessage("Please complete all required fields."); smoothScroll(); } // Success Handling else { // Success setErrorMessage(); setMessageSending(true); submitHSForm(); } } //Submit to HubSpot function submitHSForm() { // Form variables var timestamp = new Date().getTime(); var hsCookie = getCookie('hubspotutk'); var _email = formData.email; var _title = formData.title; var _first_name = formData.first_name; var _last_name = formData.last_name; var _phone = formData.phone; var _org_name = formData.org_name; var _department = formData.department; var _address = formData.address_line_1 + ' ' + formData.address_line_2; var _city = formData.city; var _post_code = formData.postcode; var _country = formData.country; var _county = formData.county; var _tax_id = formData.tax_id; var _payment_option = formData.payment_option; // Shipping variables var _shipping_preference = formData.shipping_preference; var _shipping_address_same_as_company_address = formData.shipping_billing_address var _shipping_name = formData.shipping_name; var _shipping_org_name = formData.shipping_org_name; var _shipping_department = formData.shipping_department; var _shipping_address_line_1 = formData.shipping_address_line_1; var _shipping_address_line_2 = formData.shipping_address_line_2; var _shipping_city = formData.shipping_city; var _shipping_postcode = formData.shipping_postcode; var _shipping_country = formData.shipping_country; var _shipping_county = formData.shipping_county; // Quote List var _quoteList = []; var fieldsObject = [ { name: "email", value: _email }, { name: "title", value: _title }, { name: "firstname", value: cleanString(_first_name) }, { name: "lastname", value: cleanString(_last_name) }, { name: "phone", value: cleanString(_phone) }, { name: "preferred_payment_method", value: cleanString(_payment_option) }, { name: "company", value: cleanString(_org_name) }, { name: "company_vat_number", value: cleanString(_tax_id) }, { name: "department", value: cleanString(_department) }, { name: "address", value: cleanString(_address) }, { name: "city", value: cleanString(_city) }, { name: "zip", value: cleanString(_post_code) }, { name: "country__master_", value: cleanString(_country) }, { name: "state", value: cleanString(_county) }, { name: "shipping_preference", value: _shipping_preference }, { name: "company_address_same_as_shipping_address", value: _shipping_address_same_as_company_address }, { name: "shipping_name", value: cleanString(_shipping_name) }, { name: "shipping_org_name", value: cleanString(_shipping_org_name) }, { name: "shipping_department", value: cleanString(_shipping_department) }, { name: "shipping_address_line_1", value: cleanString(_shipping_address_line_1) }, { name: "shipping_address_line_2", value: cleanString(_shipping_address_line_2) }, { name: "shipping_city", value: cleanString(_shipping_city) }, { name: "shipping_address_country__master_", value: cleanString(_shipping_country) }, { name: "shipping_county", value: cleanString(_shipping_county) }, { name: "shipping_postcode", value: cleanString(_shipping_postcode) } ]; // Add Quote Items to Fields Object for(var item in quoteItems){ var itemCounter = Number(item) + 1; // Description for(var databaseItem in databaseItems){ if (databaseItems[databaseItem].product == quoteItems[item].title){ var objectDescriptionToPush = { name: "quote_item_" + String(itemCounter) + "_description", value: databaseItems[databaseItem].description }; fieldsObject.push(objectDescriptionToPush); } } // Title if(quoteItems[item].title){ var objectTitleToPush = { name: "quote_item_" + String(itemCounter) + "_title", value: quoteItems[item].title }; fieldsObject.push(objectTitleToPush); } // Pack Size if(quoteItems[item].pack_size){ var objectPackSizeToPush = { name: "quote_item_" + String(itemCounter) + "_pack_size", value: quoteItems[item].pack_size + "/pk" }; fieldsObject.push(objectPackSizeToPush); } // Number of Packs if(quoteItems[item].number_of_packs){ var objectQuantityToPush = { name: "quote_item_" + String(itemCounter) + "_quantity", value: quoteItems[item].number_of_packs * quoteItems[item].pack_size }; fieldsObject.push(objectQuantityToPush); } // Comments if(quoteItems[item].additional_comments){ var objectCommentsToPush = { name: "quote_item_" + String(itemCounter) + "_comments", value: quoteItems[item].additional_comments }; fieldsObject.push(objectCommentsToPush); } }; var fieldsObjectJson = JSON.stringify(fieldsObject); // Build Object var rawData = { "submittedAt": timestamp, "fields": fieldsObject, "context": { "pageUri": "https://www.quantifoil.com/request-quote", "pageName": "3.1 - QF - Request a quote" }, "legalConsentOptions": { "consent": { "consentToProcess": true, "text": "I agree to allow Example Company to store and process my personal data.", "communications": [ { "value": true, "subscriptionTypeId": 999, "text": "I agree to receive marketing communications from Example Company." } ] } } } // Send Form API Request fetch("https://api.hsforms.com/submissions/v3/integration/submit/25689746/c81b3840-6ccb-4959-b06e-13387ee96097", { method: 'POST', headers: { "Content-Type": "application/json", "Cache-Control": "no-cache" }, body: JSON.stringify(rawData), }) .then((response) => { console.log(response); if (response.ok) { return response.json(); } else { throw new Error('Something went wrong. Please try again later or contact us directly.'); } }) .then(data => { setStepThreeComplete(true); setMessageSending(false); setSuccessMessage(data.inlineMessage); resetQuoteItems(); console.log(data); }) .catch((error) => { setStepThreeComplete(true); setMessageSending(false); setFormSubmitErrorMessage(error.message); }); } //Get Hubspot tracking Cookie function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } //Remove special characters function cleanString(string) { if(string){ return string.replace(/[&\/\\#, +()$~%.'":*?<>{}]/g, ' '); } else { return ''; } } // Create Another Request function createAnotherRequest(){ resetQuoteItems(); setSuccessMessage(); setFormSubmitErrorMessage(); setStepThreeComplete(false); setStepTwoComplete(false); setStepOneComplete(false); smoothScroll(); } // Try Again if Failed function tryAgain(){ setErrorMessage(); setMessageSending(true); submitHSForm(); } function createMarkup() { return {__html: successMessage}; } return ( <> {loaded ? ( <> {errorMessage ? ( <div className="error-message">{errorMessage}</div> ) : (<></>) } {!stepOneComplete ? ( <> <h2 className="quotation-step-title">1. Product details</h2> <div className="quote-items"> {quoteItems.map((item,quoteIndex) => { const mystyle = { width: "100%" }; return ( <div className={`quote-item ${quoteItems.length - 1 == 0 || quoteItems[quoteItems.length - 1].id == quoteItems[quoteIndex].id ? ('open'):('')} `} key={item.id} data-index={item.id}> <div className="quote-item-header"> <div className="item-toggle-switch" onClick={switchToggleHandler}><i className="fas fa-chevron-down"></i></div> <div className="item-details" onClick={switchToggleHandler}> <div className="item-details-number"> <h3>{quoteIndex + 1}:</h3> </div> <div className="item-details-title"> <h3>{item.foil_material} {item.foil_geometry} {item.special_layer && item.special_layer_thickness ? `+ ${item.special_layer_thickness} ${item.special_layer}` : ''} {item.grid_material ? ('on ' + item.grid_material):''} {item.grid_mesh ? `${item.grid_mesh}`:''}</h3> <p>Product: {item.number_of_packs} x {item.title}{item.pack_size.length ? (', ' + item.pack_size + '/pk'):('')}</p> </div> </div> {quoteItems.length < 2 ? (<></>) : ( <div className="item-delete"><i onClick={deleteItemHandler} data-index={item.id} className="far fa-trash-alt"></i></div> )} </div> <div className="quote-item-body"> {item.item_property_options.map((property, index) => { return ( <div className="quote-property-container" key={index}> <label htmlFor={property.title} className="quote-property-label">{humanize(property.title)}{property.required ? '*' : ''}</label> <select name={property.title} className="quote-property-select" value={item[property.title]} data-quote-item-key={property.title} onChange={handleOptionChange}> <option value="">---------</option> {property.options.map(option => { if(option.option !== ''){ return ( <option value={option.option} key={option.option} disabled={option.available ? false : true }>{option.option}</option> ) } })} </select> {property.required ? <p className="required">This field is required.</p> : ''} </div> ) })} <div className="quote-property-container"> <label htmlFor="number_of_packs" className="quote-property-label">Number of packs</label> <input name="number_of_packs"className="quote-property-input" type="number" value={item.number_of_packs} data-quote-item-key='number_of_packs' min="1" onChange={handleOptionChange} /> </div> <div className="quote-property-container" style={mystyle}> <label htmlFor="additional_comments" className="quote-property-label">Additional comments</label> <textarea name="additional_comments" className="quote-property-input quote-property-text" defaultValue={item.additional_comments} rows="4" cols="50" data-quote-item-key='additional_comments' onChange={handleOptionChange}></textarea> </div> </div> </div> ); })} </div> <div className="button-section"> <button onClick={addItemHandler} disabled={(quoteItems.length <= 9) ? false : true }>Add Another Item</button> <button onClick={resetQuoteItems}>Reset Quote</button> <button onClick={quoteSubmit}>Continue</button> </div> </> ) : ( <> {!stepTwoComplete ? ( <> <h2 className="quotation-step-title">2. Billing information</h2> <div id="quotation-form-container"> <StepTwoForm formData={formData} setFormData={setFormData} setErrorMessage={setErrorMessage} /> </div> <div className="button-section"> <button onClick={backToQuoteList}>Back</button> <button onClick={stepTwoFormSubmit}>Continue</button> </div> </> ) : ( <> {messageSending ? ( <div className="loading-container"> <div className="loader"> <svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#354775"> <g fill="none" fillRule="evenodd"> <g transform="translate(1 1)" strokeWidth="2"> <circle strokeOpacity=".5" cx="18" cy="18" r="18"/> <path d="M36 18c0-9.94-8.06-18-18-18"> <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/> </path> </g> </g> </svg> </div> </div> ) : (<></>)} {!stepThreeComplete ? ( <> <h2 className="quotation-step-title">3. Shipping information</h2> <div id="quotation-form-container"> <StepThreeForm formData={formData} setFormData={setFormData} setErrorMessage={setErrorMessage} /> <p>We’ll use these details to keep you up to date with Quantifoil news and insights. You can unsubscribe at any time and our <a target="_blank" href="https://www.quantifoil.com/privacy">Privacy Policy</a> contains more detail.</p> </div> <div className="button-section"> <button onClick={backToSecondStep}>Back</button> <button onClick={sendEmail}>Submit</button> </div> </> ) : (<></>)} {successMessage ? ( <> <div className="success-message" dangerouslySetInnerHTML={createMarkup()} /> <div className="button-section"> <button onClick={createAnotherRequest}>Create Another Quote Request</button> <a className="contant-us-button" href="https://www.quantifoil.com/contact" > Contact us </a> </div> </> ) : (<></>)} {formSubmitErrorMessage ? ( <> <h3 className="error-message">{formSubmitErrorMessage}</h3> <div className="button-section"> <button onClick={tryAgain}>Try again</button> <a className="contant-us-button" href="https://www.quantifoil.com/contact" > Contact us </a> </div> </> ) : (<></>)} </> )} </> )} </> ) : ( <> <div className="loading-container"> <div className="loader"> <svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#354775"> <g fill="none" fillRule="evenodd"> <g transform="translate(1 1)" strokeWidth="2"> <circle strokeOpacity=".5" cx="18" cy="18" r="18"/> <path d="M36 18c0-9.94-8.06-18-18-18"> <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/> </path> </g> </g> </svg> </div> </div> </> )} </> ) } ReactDOM.render(<QuotationSystem />, document.getElementById('quotation-system')) </script> <!-- Start of HubSpot Analytics Code --> <script type="text/javascript"> var _hsq = _hsq || []; _hsq.push(["setContentType", "standard-page"]); _hsq.push(["setCanonicalUrl", "https:\/\/www.quantifoil.com\/request-quote"]); _hsq.push(["setPageId", "47343040490"]); _hsq.push(["setContentMetadata", { "contentPageId": 47343040490, "legacyPageId": "47343040490", "contentFolderId": null, "contentGroupId": null, "abTestId": null, "languageVariantId": 47343040490, "languageCode": "en", }]); </script> <script type="text/javascript"> var hbspt = hbspt || {}; (hbspt.targetedContentMetadata = hbspt.targetedContentMetadata || []).push(...[]); var _hsq = _hsq || []; _hsq.push(["setTargetedContentMetadata", hbspt.targetedContentMetadata]); </script> <script type="text/javascript" id="hs-script-loader" async defer src="/hs/scriptloader/25689746.js"></script> <!-- End of HubSpot Analytics Code --> <script type="text/javascript"> var hsVars = { render_id: "613f145d-d0a9-4021-b1f4-561179939041", ticks: 1732382357698, page_id: 47343040490, content_group_id: 0, portal_id: 25689746, app_hs_base_url: "https://app-eu1.hubspot.com", cp_hs_base_url: "https://cp-eu1.hubspot.com", language: "en", analytics_page_type: "standard-page", scp_content_type: "", analytics_page_id: "47343040490", category_id: 1, folder_id: 0, is_hubspot_user: false } </script> <script defer src="/hs/hsstatic/HubspotToolsMenu/static-1.354/js/index.js"></script> </body></html>