@shopgate/pwa-common 7.27.1 → 7.27.2-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component}from'react';import PropTypes from'prop-types';import isEqual from'lodash/isEqual';import WidgetGrid from"./components/WidgetGrid";import shouldShowWidget from"./helpers/shouldShowWidget";var WIDGET_GRID_TYPE='@shopgate/commerce-widgets/widget-grid';var GRID_COLUMNS=12;// One grid row has 12 columns. // TODO: is it deprecated since css grid?
1
+ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component}from'react';import PropTypes from'prop-types';import isEqual from'lodash/isEqual';import{withThemeWidgets}from'@shopgate/engage/core/hocs';import WidgetGrid from"./components/WidgetGrid";import shouldShowWidget from"./helpers/shouldShowWidget";var WIDGET_GRID_TYPE='@shopgate/commerce-widgets/widget-grid';var GRID_COLUMNS=12;// One grid row has 12 columns. // TODO: is it deprecated since css grid?
2
2
  /**
3
3
  * Creates a grid wrapper for widget(s).
4
4
  * @param {string} key The unique key.
@@ -12,7 +12,7 @@ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="s
12
12
  */function Widgets(props){var _this2;_classCallCheck(this,Widgets);_this2=_callSuper(this,Widgets,[props]);_this2.autoReloadInterval=undefined;if(_this2.hasSchedulableWidgets()){_this2.startAutoRerender();}return _this2;}/**
13
13
  * @param {Object} nextProps The next component props.
14
14
  * @return {JSX}
15
- */_inherits(Widgets,_Component);return _createClass(Widgets,[{key:"shouldComponentUpdate",value:function shouldComponentUpdate(nextProps){if(!isEqual(this.props.components,nextProps.components)){return true;}if(!isEqual(this.props.widgets,nextProps.widgets)){return true;}return false;}/**
15
+ */_inherits(Widgets,_Component);return _createClass(Widgets,[{key:"shouldComponentUpdate",value:function shouldComponentUpdate(nextProps){if(!isEqual(this.props.themeWidgets,nextProps.themeWidgets)){return true;}if(!isEqual(this.props.widgets,nextProps.widgets)){return true;}return false;}/**
16
16
  * Component will unmount lifecycle method.
17
17
  */},{key:"componentWillUnmount",value:function componentWillUnmount(){this.stopAutoRerender();}/**
18
18
  * Checks if any widget is schedulable.
@@ -28,9 +28,9 @@ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="s
28
28
  */},{key:"doAutoRerender",value:function doAutoRerender(){this.forceUpdate();this.startAutoRerender();}/**
29
29
  * Create array of elements from widget configuration.
30
30
  * @returns {Array} Array of JSX elements.
31
- */},{key:"createArrayOfElements",value:function createArrayOfElements(){var _this$props=this.props,_this$props$widgets=_this$props.widgets,widgets=_this$props$widgets===void 0?[]:_this$props$widgets,components=_this$props.components;return widgets.filter(function(widget){return shouldShowWidget(widget.settings);}).map(function(widget,index){if(!components[widget.type]&&widget.type!==WIDGET_GRID_TYPE){return null;}var key="w".concat((widget===null||widget===void 0?void 0:widget.id)||index);if(widget.type===WIDGET_GRID_TYPE){// If it's a grid just create it and pass the child widgets.
31
+ */},{key:"createArrayOfElements",value:function createArrayOfElements(){var _this$props=this.props,_this$props$widgets=_this$props.widgets,widgets=_this$props$widgets===void 0?[]:_this$props$widgets,components=_this$props.themeWidgets;return widgets.filter(function(widget){return shouldShowWidget(widget.settings);}).map(function(widget,index){if(!components[widget.type]&&widget.type!==WIDGET_GRID_TYPE){return null;}var key="w".concat((widget===null||widget===void 0?void 0:widget.id)||index);if(widget.type===WIDGET_GRID_TYPE){// If it's a grid just create it and pass the child widgets.
32
32
  return createGridWrapper(key,widget.settings.widgets,components);}if(widget.height){// If it has a definite height wrap the widget in a grid.
33
33
  return createGridWrapper(key,[_extends({},widget,{col:0,row:0,width:GRID_COLUMNS})],components);}// In all other cases just create and return the widget component.
34
34
  return React.createElement(components[widget.type],_extends({},widget,{key:key}));});}/**
35
35
  * @return {JSX}
36
- */},{key:"render",value:function render(){var _this$props2=this.props,widgets=_this$props2.widgets,components=_this$props2.components;if(!widgets){return null;}return React.createElement("div",{className:"common__widgets"},this.createArrayOfElements(widgets,components));}}]);}(Component);_defineProperty(Widgets,"defaultProps",{components:null,widgets:null});export default Widgets;
36
+ */},{key:"render",value:function render(){var _this$props2=this.props,widgets=_this$props2.widgets,components=_this$props2.themeWidgets;if(!widgets){return null;}return React.createElement("div",{className:"common__widgets"},this.createArrayOfElements(widgets,components));}}]);}(Component);_defineProperty(Widgets,"defaultProps",{widgets:null});export default withThemeWidgets(Widgets);
@@ -1,10 +1,13 @@
1
- function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React from'react';import{mount}from'enzyme';import Widgets from"./index";jest.useFakeTimers();jest.mock('react',function(){return _extends({},require.requireActual('react'),{Suspense:function Suspense(_ref){var children=_ref.children;return children;}});});/**
1
+ import React from'react';import{mount}from'enzyme';import{ThemeResourcesProvider}from'@shopgate/engage/core/providers';import Widgets from"./index";jest.useFakeTimers();jest.mock('@shopgate/pwa-common/context',function(){return{ThemeContext:{Provider:function Provider(_ref){var children=_ref.children;return children;}}};});/**
2
2
  * A mock Image component.
3
3
  * @returns {JSX}
4
4
  */var Image=function Image(){return React.createElement("img",{alt:""});};/* eslint-disable react/prop-types */ /**
5
5
  * A mock WidgetGrid component.
6
6
  * @param {Array} children Array of children.
7
7
  * @returns {JSX}
8
- */var WidgetGrid=function WidgetGrid(_ref2){var children=_ref2.children;return React.createElement("div",{className:"widget-grid"},children);};/* eslint-enable react/prop-types */var components={'@shopgate/commerce-widgets/image':Image,'@shopgate/commerce-widgets/widget-grid':WidgetGrid};describe('<Widgets />',function(){it('should render a grid if height is defined',function(){var widgets=[{col:0,row:0,width:12,height:3,settings:{id:83535,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'}];var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));expect(wrapper.find('WidgetGrid').exists()).toBe(true);});it('should not wrap a widget which is not a grid and has no height',function(){var widgets=[{col:0,row:0,width:12,settings:{id:83535,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'}];var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));expect(wrapper).toMatchSnapshot();expect(wrapper.find('WidgetGrid').exists()).toBe(false);});it('should render a grid if the widget is of type grid',function(){var widgets=[{type:'@shopgate/commerce-widgets/widget-grid',settings:{widgets:[{col:0,row:0,width:12,height:5,settings:{id:'84961',alt:'',image:'https://data.shopgate.com/shop_widget_images/23836/aedc545959f55e3f73851eca0ed40a75.min.jpeg',link:'/category/'},type:'@shopgate/commerce-widgets/image'}]}}];var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));expect(wrapper).toMatchSnapshot();expect(wrapper.find('WidgetGrid').exists()).toBe(true);});it('should render only one widget when the second one is not published and third one is invalid',function(){var widgets=[{col:0,row:0,width:12,settings:{id:835351,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'},{col:0,row:0,width:12,settings:{id:835352,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/imagefoo'},{col:0,row:0,width:12,settings:{published:false,id:835353,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'}];var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));expect(wrapper).toMatchSnapshot();expect(wrapper.find('img').length).toBe(1);});it('should schedule a re-render when widget is scheduled',function(){var minutesToNextFullHour=60-new Date().getMinutes();var msToNextFullHour=minutesToNextFullHour*60000;var scheduledFromMs=Date.now()+msToNextFullHour-1;var scheduledToMs=Date.now()+minutesToNextFullHour+1000;/* eslint-disable camelcase */var widgets=[{col:0,row:0,width:12,settings:{id:835351,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg',published:true,plan:true,planDate:{valid_from:new Date(scheduledFromMs).toISOString(),valid_to:new Date(scheduledToMs).toISOString()}},type:'@shopgate/commerce-widgets/image'}];/* eslint-enable camelcase */var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));wrapper.instance().forceUpdate=jest.fn();expect(wrapper.find(Image).exists()).toBe(false);jest.advanceTimersByTime(msToNextFullHour);expect(wrapper.instance().forceUpdate).toHaveBeenCalledTimes(1);// In real life next timeout should be in 60 minutes.
8
+ */var WidgetGrid=function WidgetGrid(_ref2){var children=_ref2.children;return React.createElement("div",{className:"widget-grid"},children);};/* eslint-enable react/prop-types */var components={'@shopgate/commerce-widgets/image':Image,'@shopgate/commerce-widgets/widget-grid':WidgetGrid};/**
9
+ * @param {Object[]} widgets Widgets to be rendered.
10
+ * @returns {JSX.Element}
11
+ */var createWrapper=function createWrapper(widgets){return mount(React.createElement(ThemeResourcesProvider,{widgets:components,components:{}},React.createElement(Widgets,{widgets:widgets})));};describe('<Widgets />',function(){it('should render a grid if height is defined',function(){var widgets=[{col:0,row:0,width:12,height:3,settings:{id:83535,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'}];var wrapper=createWrapper(widgets);expect(wrapper.find('WidgetGrid').exists()).toBe(true);});it('should not wrap a widget which is not a grid and has no height',function(){var widgets=[{col:0,row:0,width:12,settings:{id:83535,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'}];var wrapper=createWrapper(widgets);expect(wrapper).toMatchSnapshot();expect(wrapper.find('WidgetGrid').exists()).toBe(false);});it('should render a grid if the widget is of type grid',function(){var widgets=[{type:'@shopgate/commerce-widgets/widget-grid',settings:{widgets:[{col:0,row:0,width:12,height:5,settings:{id:'84961',alt:'',image:'https://data.shopgate.com/shop_widget_images/23836/aedc545959f55e3f73851eca0ed40a75.min.jpeg',link:'/category/'},type:'@shopgate/commerce-widgets/image'}]}}];var wrapper=createWrapper(widgets);expect(wrapper).toMatchSnapshot();expect(wrapper.find('WidgetGrid').exists()).toBe(true);});it('should render only one widget when the second one is not published and third one is invalid',function(){var widgets=[{col:0,row:0,width:12,settings:{id:835351,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'},{col:0,row:0,width:12,settings:{id:835352,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/imagefoo'},{col:0,row:0,width:12,settings:{published:false,id:835353,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg'},type:'@shopgate/commerce-widgets/image'}];var wrapper=createWrapper(widgets);expect(wrapper).toMatchSnapshot();expect(wrapper.find('img').length).toBe(1);});it('should schedule a re-render when widget is scheduled',function(){var minutesToNextFullHour=60-new Date().getMinutes();var msToNextFullHour=minutesToNextFullHour*60000;var scheduledFromMs=Date.now()+msToNextFullHour-1;var scheduledToMs=Date.now()+minutesToNextFullHour+1000;/* eslint-disable camelcase */var widgets=[{col:0,row:0,width:12,settings:{id:835351,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg',published:true,plan:true,planDate:{valid_from:new Date(scheduledFromMs).toISOString(),valid_to:new Date(scheduledToMs).toISOString()}},type:'@shopgate/commerce-widgets/image'}];/* eslint-enable camelcase */var wrapper=createWrapper(widgets);var instance=wrapper.find('Widgets').instance();instance.forceUpdate=jest.fn();expect(wrapper.find(Image).exists()).toBe(false);jest.advanceTimersByTime(msToNextFullHour);expect(instance.forceUpdate).toHaveBeenCalledTimes(1);// In real life next timeout should be in 60 minutes.
9
12
  // This test has same Date and fake timers.
10
- jest.advanceTimersByTime(msToNextFullHour);expect(wrapper.instance().forceUpdate).toHaveBeenCalledTimes(2);wrapper.instance().componentWillUnmount();expect(clearTimeout).toHaveBeenCalled();});it('should render only wrapper when widgets array is empty',function(){var widgets=[];var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));expect(wrapper.find('Image').exists()).toBe(false);});it('should render null when no widgets are passed',function(){var wrapper=mount(React.createElement(Widgets,{components:components}));expect(wrapper.html()).toBe(null);});it('should check settings of child widgets inside widget-grid',function(){var widgets=[{height:2,id:'index-5-@shopgate/commerce-widgets/widget-grid',type:'@shopgate/commerce-widgets/widget-grid',settings:{widgets:[{col:0,row:0,height:2,width:2,settings:{id:835351,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg',published:true,plan:false},type:'@shopgate/commerce-widgets/image'},{col:2,row:0,height:2,width:2,settings:{id:835352,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg',published:false,plan:false},type:'@shopgate/commerce-widgets/image'}]}}];var wrapper=mount(React.createElement(Widgets,{components:components,widgets:widgets}));expect(wrapper.find('img').length).toBe(1);});});
13
+ jest.advanceTimersByTime(msToNextFullHour);expect(instance.forceUpdate).toHaveBeenCalledTimes(2);instance.componentWillUnmount();expect(clearTimeout).toHaveBeenCalled();});it('should render only wrapper when widgets array is empty',function(){var widgets=[];var wrapper=createWrapper(widgets);expect(wrapper.find('Image').exists()).toBe(false);});it('should render null when no widgets are passed',function(){var wrapper=createWrapper(undefined);expect(wrapper.find('Widgets').html()).toBe(null);});it('should check settings of child widgets inside widget-grid',function(){var widgets=[{height:2,id:'index-5-@shopgate/commerce-widgets/widget-grid',type:'@shopgate/commerce-widgets/widget-grid',settings:{widgets:[{col:0,row:0,height:2,width:2,settings:{id:835351,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg',published:true,plan:false},type:'@shopgate/commerce-widgets/image'},{col:2,row:0,height:2,width:2,settings:{id:835352,image:'https://data.shopgate.com/shop_widget_images/23836/92204c0f264ac30d6836994c2fb64eb1.min.jpeg',published:false,plan:false},type:'@shopgate/commerce-widgets/image'}]}}];var wrapper=createWrapper(widgets);expect(wrapper.find('img').length).toBe(1);});});
package/context/index.js CHANGED
@@ -1 +1,106 @@
1
- import React from'react';import{RouterContext,RouteContext}from'@virtuous/react-conductor';export{RouterContext};export{RouteContext};export var ThemeContext=React.createContext();export var Theme=ThemeContext.Consumer;
1
+ import React from'react';import{RouterContext,RouteContext}from'@virtuous/react-conductor';export{RouterContext};export{RouteContext};/**
2
+ * @deprecated
3
+ * Use `ThemeResourcesContext` instead.
4
+ *
5
+ * This context will NOT expose components that can be imported directly from the `@shopgate/engage`
6
+ * package (see list below). All other components can be accessed through the `components` property.
7
+ *
8
+ * ```js
9
+ * import { ThemeResourcesContext } from '@shopgate/engage/core/contexts';
10
+ * ```
11
+ *
12
+ * To access the `components` property value use the `useThemeComponents()` hook:
13
+ *
14
+ * ```js
15
+ * import { useThemeComponents } from '@shopgate/engage/core/hooks';
16
+ * const { ProductCard } = useThemeComponents();
17
+ * ```
18
+ *
19
+ * Or inject the components context value using the HOC:
20
+ *
21
+ * ```js
22
+ * import { withThemeComponents } from '@shopgate/engage/core/hocs';
23
+ *
24
+ * function MyComponent({ themeComponents }) {
25
+ * const { ProductCard } = themeComponents;
26
+ * return <ProductCard />;
27
+ * }
28
+ *
29
+ * export default withThemeComponents(MyComponent);
30
+ * ```
31
+ *
32
+ * ---
33
+ * Use these updated imports instead of deprecated context values:
34
+ *
35
+ * ```js
36
+ * // Deprecated: Drawer → use SheetDrawer
37
+ * import { SheetDrawer } from '@shopgate/engage/components';
38
+ *
39
+ * // Deprecated: PriceDifference → use PriceDifference
40
+ * import { PriceDifference } from '@shopgate/engage/product/components';
41
+ *
42
+ * // Deprecated: ProductSlider → use ProductSlider
43
+ * import { ProductSlider } from '@shopgate/engage/product/components';
44
+ *
45
+ * // Deprecated: SelectOption → use SelectOption
46
+ * import { SelectOption } from '@shopgate/engage/product/components';
47
+ *
48
+ * // Deprecated: TextOption → use TextOption
49
+ * import { TextOption } from '@shopgate/engage/product/components';
50
+ *
51
+ * // Deprecated: View → use View
52
+ * import { View } from '@shopgate/engage/components'
53
+ *
54
+ * // Deprecated: { contexts: { ProductContext }} → use ProductContext
55
+ * import { ProductContext } from '@shopgate/engage/product/contexts';
56
+ * ```
57
+ */export var ThemeContext=React.createContext({/** @deprecated */Drawer:null,/** @deprecated */ProductSlider:null,/** @deprecated */View:null,/** @deprecated */TextOption:null,/** @deprecated */SelectOption:null,/** @deprecated */PriceDifference:null,AppBar:null,ProductCard:null,ProductGrid:null,ProductHeader:null,contexts:{/** @deprecated */ProductContext:null}});/**
58
+ * @deprecated
59
+ * Use `useThemeComponents()` or `withThemeComponents()` instead.
60
+ *
61
+ * Hook and HOC will NOT expose components that can be imported directly from the `@shopgate/engage`
62
+ * package (see list below).
63
+ *
64
+ * ```js
65
+ * import { useThemeComponents } from '@shopgate/engage/core/hooks';
66
+ * const { ProductCard } = useThemeComponents();
67
+ * ```
68
+ *
69
+ * Or inject the full context value using the HOC:
70
+ *
71
+ * ```js
72
+ * import { withThemeComponents } from '@shopgate/engage/core/hocs';
73
+ *
74
+ * function MyComponent({ themeComponents }) {
75
+ * const { ProductCard } = themeComponents;
76
+ * return <ProductCard />;
77
+ * }
78
+ *
79
+ * export default withThemeComponents(MyComponent);
80
+ *````
81
+ * ---
82
+ * Use these updated imports instead of deprecated context values:
83
+ *
84
+ * ```js
85
+ * // Deprecated: Drawer → use SheetDrawer
86
+ * import { SheetDrawer } from '@shopgate/engage/components';
87
+ *
88
+ * // Deprecated: PriceDifference → use PriceDifference
89
+ * import { PriceDifference } from '@shopgate/engage/product/components';
90
+ *
91
+ * // Deprecated: ProductSlider → use ProductSlider
92
+ * import { ProductSlider } from '@shopgate/engage/product/components';
93
+ *
94
+ * // Deprecated: SelectOption → use SelectOption
95
+ * import { SelectOption } from '@shopgate/engage/product/components';
96
+ *
97
+ * // Deprecated: TextOption → use TextOption
98
+ * import { TextOption } from '@shopgate/engage/product/components';
99
+ *
100
+ * // Deprecated: View → use View
101
+ * import { View } from '@shopgate/engage/components'
102
+ *
103
+ * // Deprecated: { contexts: { ProductContext }} → use ProductContext
104
+ * import { ProductContext } from '@shopgate/engage/product/contexts';
105
+ * ```
106
+ */export var Theme=ThemeContext.Consumer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopgate/pwa-common",
3
- "version": "7.27.1",
3
+ "version": "7.27.2-beta.2",
4
4
  "description": "Common library for the Shopgate Connect PWA.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Shopgate <support@shopgate.com>",
@@ -17,7 +17,7 @@
17
17
  "dependencies": {
18
18
  "@redux-devtools/extension": "^3.3.0",
19
19
  "@sentry/browser": "6.0.1",
20
- "@shopgate/pwa-benchmark": "7.27.1",
20
+ "@shopgate/pwa-benchmark": "7.27.2-beta.2",
21
21
  "@virtuous/conductor": "~2.5.0",
22
22
  "@virtuous/react-conductor": "~2.5.0",
23
23
  "@virtuous/redux-persister": "1.1.0-beta.7",
@@ -43,7 +43,7 @@
43
43
  "url-search-params": "^0.10.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@shopgate/pwa-core": "7.27.1",
46
+ "@shopgate/pwa-core": "7.27.2-beta.2",
47
47
  "@types/react-portal": "^3.0.9",
48
48
  "lodash": "^4.17.4",
49
49
  "prop-types": "~15.8.1",