@hackplan/polaris
Version:
Shopify’s product component library
54 lines (53 loc) • 2.39 kB
JavaScript
import * as tslib_1 from "tslib";
import React from 'react';
import { createMount } from '@shopify/react-testing';
// eslint-disable-next-line shopify/strict-component-boundaries
import { createPolarisContext, AppProviderContext, } from '../components/AppProvider';
// eslint-disable-next-line shopify/strict-component-boundaries
import { FrameContext } from '../components/Frame';
// eslint-disable-next-line shopify/strict-component-boundaries
import { createThemeContext, ThemeProviderContext, } from '../components/ThemeProvider';
import merge from '../utilities/merge';
function noop() { }
function TestProvider(_a) {
var { children, polaris, themeProvider, frame } = _a, props = tslib_1.__rest(_a, ["children", "polaris", "themeProvider", "frame"]);
const childWithProps = Object.keys(props).length > 0
? React.cloneElement(children, props)
: children;
return (<AppProviderContext.Provider value={polaris}>
<ThemeProviderContext.Provider value={themeProvider}>
<FrameContext.Provider value={frame}>
{childWithProps}
</FrameContext.Provider>
</ThemeProviderContext.Provider>
</AppProviderContext.Provider>);
}
export const mountWithContext = createMount({
context({ polaris, themeProvider, frame }) {
const polarisContextDefault = createPolarisContext();
const polarisContext = (polaris && merge(polarisContextDefault, polaris)) ||
polarisContextDefault;
const themeproviderContextDefault = createThemeContext();
const themeProviderContext = (themeProvider && merge(themeproviderContextDefault, themeProvider)) ||
themeproviderContextDefault;
const frameContextDefault = {
showToast: noop,
hideToast: noop,
setContextualSaveBar: noop,
removeContextualSaveBar: noop,
startLoading: noop,
stopLoading: noop,
};
const frameContext = (frame && merge(frameContextDefault, frame)) || frameContextDefault;
return {
polaris: polarisContext,
themeProvider: themeProviderContext,
frame: frameContext,
};
},
render(element, { polaris, themeProvider, frame }) {
return (<TestProvider polaris={polaris} themeProvider={themeProvider} frame={frame}>
{element}
</TestProvider>);
},
});