;
@@ -86,7 +78,6 @@ function updateRoot(wrapper: AnyWrapper) {
}
type AppContext = {
- polaris: PolarisContext;
intl: I18n;
scrollLockManager: ScrollLockManager;
stickyManager: StickyManager;
@@ -119,10 +110,6 @@ export function mountWithAppProvider(
): PolarisContextReactWrapper
{
const {context: ctx = {}} = options;
- const polarisDefault = createPolarisContext({i18n: translations});
- const polaris =
- (ctx.polaris && merge(polarisDefault, ctx.polaris)) || polarisDefault;
-
const intlTranslations =
(ctx.intl && merge(translations, ctx.intl)) || translations;
const intl = new I18n(intlTranslations);
@@ -151,7 +138,6 @@ export function mountWithAppProvider
(
const appBridge = ctx.appBridge || null;
const context: AppContext = {
- polaris,
themeProvider,
frame,
intl,
@@ -174,40 +160,13 @@ export function polarisContextReactWrapper
(
element: React.ReactElement
,
{app}: AppContextOptions,
): PolarisContextReactWrapper
{
- function TestProvider
(props: P) {
- let content: React.ReactNode = element;
-
- if (Object.keys(props).length > 0) {
- content = React.cloneElement(React.Children.only(element), props);
- }
-
- return (
-
-
-
-
-
-
-
- {content}
-
-
-
-
-
-
-
- );
- }
+ const appBridge: any = app.appBridge;
- const wrapper = mount
();
-
- Object.defineProperty(wrapper, 'app', {
- enumerable: true,
- writable: false,
- configurable: false,
- value: app,
- });
+ const wrapper = mount
(
+
+ {element}
+ ,
+ );
return wrapper as PolarisContextReactWrapper
;
}
diff --git a/src/test-utilities/react-testing.tsx b/src/test-utilities/react-testing.tsx
index 30a4c336670..cbd9602ed58 100644
--- a/src/test-utilities/react-testing.tsx
+++ b/src/test-utilities/react-testing.tsx
@@ -1,104 +1,23 @@
import React from 'react';
import {createMount} from '@shopify/react-testing';
import {ClientApplication} from '@shopify/app-bridge';
-import {createPolarisContext} from '../utilities/create-polaris-context';
-// eslint-disable-next-line shopify/strict-component-boundaries
-import {FrameContext, FrameContextType} from '../components/Frame';
-import {
- createThemeContext,
- ThemeProviderContextType,
- ThemeProviderContext,
-} from '../utilities/theme';
-import {
- ScrollLockManager,
- ScrollLockManagerContext,
-} from '../utilities/scroll-lock-manager';
-import {StickyManager, StickyManagerContext} from '../utilities/sticky-manager';
-import {
- createAppBridge,
- AppBridgeContext,
- AppBridgeOptions,
-} from '../utilities/app-bridge';
-import {I18n, I18nContext, TranslationDictionary} from '../utilities/i18n';
+import {createThemeContext} from '../utilities/theme';
+import {ScrollLockManager} from '../utilities/scroll-lock-manager';
+import {StickyManager} from '../utilities/sticky-manager';
+import {createAppBridge} from '../utilities/app-bridge';
+import {I18n} from '../utilities/i18n';
import translations from '../../locales/en.json';
-import {PolarisContext} from '../components/types';
import {DeepPartial} from '../types';
import {merge} from '../utilities/merge';
-import {Link, LinkContext, LinkLikeComponent} from '../utilities/link';
+import {Link} from '../utilities/link';
+import {PolarisTestProvider} from './PolarisTestProvider';
+import {ComplexProviders, SimpleProviders, ReturnedContext} from './types';
-interface ComplexProviders {
- polaris: PolarisContext;
- themeProvider: ThemeProviderContextType;
- frame: FrameContextType;
-}
-
-interface SimpleProvidersWithSameReturn {
- scrollLockManager: ScrollLockManager;
- stickyManager: StickyManager;
-}
-interface SimpleProvidersWithAltReturn {
- intl: TranslationDictionary | TranslationDictionary[];
- appBridge: AppBridgeOptions;
- link: LinkLikeComponent;
-}
-type SimpleProviders = SimpleProvidersWithSameReturn &
- SimpleProvidersWithAltReturn;
-
-type ReturnedContext = ComplexProviders &
- SimpleProvidersWithSameReturn & {
- intl: I18n;
- appBridge: ClientApplication<{}> | null;
- link: Link;
- };
type Options = DeepPartial & Partial;
type Context = ReturnedContext;
-interface Props extends ReturnedContext {
- children: React.ReactElement;
-}
-
-function noop() {}
-
-export function TestProvider({
- children,
- polaris,
- themeProvider,
- frame,
- intl,
- scrollLockManager,
- stickyManager,
- appBridge,
- link,
- ...props
-}: Props) {
- const childWithProps =
- Object.keys(props).length > 0
- ? React.cloneElement(children, props)
- : children;
-
- return (
-
-
-
-
-
-
-
-
- {childWithProps}
-
-
-
-
-
-
-
-
- );
-}
export const mountWithContext = createMount({
context({
- polaris,
themeProvider,
frame,
intl,
@@ -107,11 +26,6 @@ export const mountWithContext = createMount({
appBridge,
link,
}) {
- const polarisContextDefault = createPolarisContext();
- const polarisContext =
- (polaris && merge(polarisContextDefault, polaris)) ||
- polarisContextDefault;
-
const intlTranslations =
(intl && merge(translations, intl)) || translations;
const intlContext = new I18n(intlTranslations);
@@ -150,7 +64,6 @@ export const mountWithContext = createMount({
const linkContext = new Link(link);
return {
- polaris: polarisContext,
themeProvider: themeProviderContext,
frame: frameContext,
intl: intlContext,
@@ -163,7 +76,6 @@ export const mountWithContext = createMount({
render(
element,
{
- polaris,
themeProvider,
frame,
intl,
@@ -174,8 +86,7 @@ export const mountWithContext = createMount({
},
) {
return (
- ({
link={link}
>
{element}
-
+
);
},
});
+
+function noop() {}
diff --git a/src/test-utilities/tests/PolarisTestProvider.test.tsx b/src/test-utilities/tests/PolarisTestProvider.test.tsx
new file mode 100644
index 00000000000..c91234eefa8
--- /dev/null
+++ b/src/test-utilities/tests/PolarisTestProvider.test.tsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import {mount} from '@shopify/react-testing';
+import {PolarisTestProvider} from '../PolarisTestProvider';
+
+describe('PolarisTestProvider', () => {
+ it("doesn't render in strict mode by default", () => {
+ const polarisTestProvider = mount(
+
+ Hello
+ ,
+ );
+
+ expect(polarisTestProvider).not.toContainReactComponent(React.StrictMode);
+ });
+
+ it('renders in strict mode with strict', () => {
+ const polarisTestProvider = mount(
+
+ Hello
+ ,
+ );
+
+ expect(polarisTestProvider).toContainReactComponent(React.StrictMode);
+ });
+});
diff --git a/src/test-utilities/tests/react-testing.test.tsx b/src/test-utilities/tests/react-testing.test.tsx
deleted file mode 100644
index 49a4fca35ff..00000000000
--- a/src/test-utilities/tests/react-testing.test.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from 'react';
-import {mount} from '@shopify/react-testing';
-import {createThemeContext} from 'utilities/theme';
-import {ScrollLockManager} from 'utilities/scroll-lock-manager';
-import {StickyManager} from 'utilities/sticky-manager';
-import {I18n} from 'utilities/i18n';
-import {Link} from 'utilities/link';
-import {TestProvider} from '../react-testing';
-import {createPolarisContext} from '../../utilities/create-polaris-context';
-
-describe('TestProvider', () => {
- it('renders in strict mode', () => {
- const testProvider = mount(
-
- Polaris
- ,
- );
- expect(testProvider).toContainReactComponent(React.StrictMode);
- });
-});
-
-function noop() {}
diff --git a/src/test-utilities/types.ts b/src/test-utilities/types.ts
new file mode 100644
index 00000000000..6843e6e2720
--- /dev/null
+++ b/src/test-utilities/types.ts
@@ -0,0 +1,33 @@
+import {ClientApplication} from '@shopify/app-bridge';
+// eslint-disable-next-line shopify/strict-component-boundaries
+import {FrameContextType} from '../components/Frame';
+import {ThemeProviderContextType} from '../utilities/theme';
+import {ScrollLockManager} from '../utilities/scroll-lock-manager';
+import {StickyManager} from '../utilities/sticky-manager';
+import {AppBridgeOptions} from '../utilities/app-bridge';
+import {I18n, TranslationDictionary} from '../utilities/i18n';
+import {Link, LinkLikeComponent} from '../utilities/link';
+
+export interface ComplexProviders {
+ themeProvider: ThemeProviderContextType;
+ frame: FrameContextType;
+}
+
+export interface SimpleProvidersWithSameReturn {
+ scrollLockManager: ScrollLockManager;
+ stickyManager: StickyManager;
+}
+export interface SimpleProvidersWithAltReturn {
+ intl: TranslationDictionary | TranslationDictionary[];
+ appBridge: AppBridgeOptions;
+ link: LinkLikeComponent;
+}
+export type SimpleProviders = SimpleProvidersWithSameReturn &
+ SimpleProvidersWithAltReturn;
+
+export type ReturnedContext = ComplexProviders &
+ SimpleProvidersWithSameReturn & {
+ intl: I18n;
+ appBridge: ClientApplication<{}> | null;
+ link: Link;
+ };
diff --git a/src/utilities/app-bridge/context.tsx b/src/utilities/app-bridge/context.tsx
index acf2b3feb0d..d5d6e96b5ab 100644
--- a/src/utilities/app-bridge/context.tsx
+++ b/src/utilities/app-bridge/context.tsx
@@ -1,6 +1,6 @@
-import {createContext} from 'react';
+import React from 'react';
import {ClientApplication} from '@shopify/app-bridge';
-export const AppBridgeContext = createContext | null>(
+export const AppBridgeContext = React.createContext | null>(
null,
);
diff --git a/src/utilities/banner-context.tsx b/src/utilities/banner-context.tsx
index 2222625db81..eba581b998d 100644
--- a/src/utilities/banner-context.tsx
+++ b/src/utilities/banner-context.tsx
@@ -1,3 +1,3 @@
import React from 'react';
-export const BannerContext = React.createContext(false);
+export const BannerContext = React.createContext(false);
diff --git a/src/utilities/i18n/context.tsx b/src/utilities/i18n/context.tsx
index faa7b8695a8..ecaec109511 100644
--- a/src/utilities/i18n/context.tsx
+++ b/src/utilities/i18n/context.tsx
@@ -1,4 +1,4 @@
-import {createContext} from 'react';
+import React from 'react';
import {I18n} from './I18n';
-export const I18nContext = createContext(new I18n({}));
+export const I18nContext = React.createContext(new I18n({}));
diff --git a/src/utilities/link/context.tsx b/src/utilities/link/context.tsx
index 7243944ffca..8679714bc4b 100644
--- a/src/utilities/link/context.tsx
+++ b/src/utilities/link/context.tsx
@@ -1,4 +1,4 @@
-import {createContext} from 'react';
+import React from 'react';
import {Link} from './link';
-export const LinkContext = createContext(new Link());
+export const LinkContext = React.createContext(new Link());
diff --git a/src/utilities/scroll-lock-manager/context.tsx b/src/utilities/scroll-lock-manager/context.tsx
index 2904d254152..3702930bdf9 100644
--- a/src/utilities/scroll-lock-manager/context.tsx
+++ b/src/utilities/scroll-lock-manager/context.tsx
@@ -1,6 +1,6 @@
-import {createContext} from 'react';
+import React from 'react';
import {ScrollLockManager} from './scroll-lock-manager';
-export const ScrollLockManagerContext = createContext(
+export const ScrollLockManagerContext = React.createContext(
null,
);
diff --git a/src/utilities/sticky-manager/context.tsx b/src/utilities/sticky-manager/context.tsx
index c543596880b..df6eb977cdc 100644
--- a/src/utilities/sticky-manager/context.tsx
+++ b/src/utilities/sticky-manager/context.tsx
@@ -1,4 +1,6 @@
-import {createContext} from 'react';
+import React from 'react';
import {StickyManager} from './sticky-manager';
-export const StickyManagerContext = createContext(null);
+export const StickyManagerContext = React.createContext(
+ null,
+);
diff --git a/src/utilities/within-content-context.tsx b/src/utilities/within-content-context.tsx
new file mode 100644
index 00000000000..7c42af29a83
--- /dev/null
+++ b/src/utilities/within-content-context.tsx
@@ -0,0 +1,3 @@
+import React from 'react';
+
+export const WithinContentContext = React.createContext(false);