/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable @typescript-eslint/no-require-imports */ import 'requestidlecallback-polyfill' import { WrapRootElementBrowserArgs } from 'gatsby' import React, { ElementType, StrictMode } from 'react' import ReactDOM from 'react-dom' // Webpack + TS magic to make this work const { OrderFormProvider } = require('./src/sdk/orderForm/Provider') const { MinicartProvider } = require('./src/sdk/minicart/index') const { default: VTEXRCProvider } = require('./src/sdk/pixel/vtexrc/index') const { Progress, onRouteUpdate: progressOnRouteUpdate, } = require('./src/sdk/progress') export const replaceHydrateFunction = () => async ( element: ElementType, container: Element, callback: any ) => { if (typeof IntersectionObserver === 'undefined') { await import('intersection-observer') } const development = (process.env.GATSBY_BUILD_STAGE as any).includes( 'develop' ) const { unstable_createRoot: createRoot }: any = ReactDOM const root = createRoot(container, { hydrate: !development, hydrationOptions: { onHydrated: callback, }, }) root.render(element) } export const wrapRootElement = ({ element }: WrapRootElementBrowserArgs) => { const root = ( {element} ) if (process.env.NODE_ENV === 'development') { return {root} } return root } export const wrapPageElement = ({ element, props: { location }, }: WrapRootElementBrowserArgs | any) => ( {element} ) export const onRouteUpdate = () => { progressOnRouteUpdate() }