diff --git a/packages/app-page-builder-elements/src/contexts/PageElements.tsx b/packages/app-page-builder-elements/src/contexts/PageElements.tsx index 5c083744fa5..bd1f0e9c336 100644 --- a/packages/app-page-builder-elements/src/contexts/PageElements.tsx +++ b/packages/app-page-builder-elements/src/contexts/PageElements.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useCallback } from "react"; +import React, { createContext, useCallback, useEffect } from "react"; import { Breakpoint, StylesObjects, @@ -6,6 +6,7 @@ import { PageElementsProviderProps } from "~/types"; import { css, cx, CSSObject } from "@emotion/css"; +import { setUsingPageElements } from "~/utils"; export const PageElementsContext = createContext(null); @@ -115,6 +116,11 @@ export const PageElementsProvider: React.FC = ({ return styles.map(item => css(item)); }, []); + // Provides a way to check whether the `PageElementsProvider` React component was mounted or not, + // in a non-React context. In React contexts, it's strongly recommended the value of `usePageElements` + // React hook is checked instead (a `null` value means the provider React component wasn't mounted). + useEffect(() => setUsingPageElements(true), []); + const value: PageElementsContextValue = { theme, renderers, diff --git a/packages/app-page-builder-elements/src/utils/index.ts b/packages/app-page-builder-elements/src/utils/index.ts new file mode 100644 index 00000000000..a1034cc0ab9 --- /dev/null +++ b/packages/app-page-builder-elements/src/utils/index.ts @@ -0,0 +1,12 @@ +// Provides a way to check whether the `PageElementsProvider` React component was mounted or not, +// in a non-React context. In React contexts, it's strongly recommended the value of `usePageElements` +// React hook is checked instead (a `null` value means the provider React component wasn't mounted). +let usingPageElementsFlag = false; + +export const usingPageElements = () => { + return usingPageElementsFlag; +}; + +export const setUsingPageElements = (value: boolean) => { + usingPageElementsFlag = value; +};