@shopgate/pwa-ui-shared 6.20.0-beta.8 → 6.20.0-rc.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.
- package/AddToCartButton/spec.js +4 -1
- package/Dialog/components/HtmlContentDialog/index.js +6 -0
- package/Dialog/components/HtmlContentDialog/spec.js +1 -0
- package/Dialog/constants.js +1 -1
- package/Dialog/index.js +3 -3
- package/Form/TextField/index.js +1 -1
- package/Price/index.js +1 -1
- package/package.json +5 -5
package/AddToCartButton/spec.js
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
import _regeneratorRuntime from"@babel/runtime/regenerator";function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}import React from'react';import{mount}from'enzyme';import
|
|
1
|
+
import _regeneratorRuntime from"@babel/runtime/regenerator";function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}import React from'react';import{mount}from'enzyme';import AddToCartButton from"./index";/**
|
|
2
|
+
* Flushes the promise queue.
|
|
3
|
+
* @returns {Promise}
|
|
4
|
+
*/var flushPromises=function flushPromises(){return new Promise(function(resolve){return setImmediate(resolve);});};describe('<AddToCartButton />',function(){it('should render in loading state and should not be clickable',function(){var spy=jest.fn(function(){return new Promise(function(resolve){return resolve();});});var wrapper=mount(/*#__PURE__*/React.createElement(AddToCartButton,{onClick:spy,isLoading:true,isOrderable:true,isDisabled:false}));wrapper.find('button').prop('onClick')();expect(wrapper).toMatchSnapshot();expect(spy).toHaveBeenCalledTimes(0);});it('should render with checkmark icon and should not be clickable the second time',/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){var spy,wrapper;return _regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:spy=jest.fn(function(){return new Promise(function(resolve){return resolve();});});wrapper=mount(/*#__PURE__*/React.createElement(AddToCartButton,{onClick:spy,isLoading:false,isOrderable:true,isDisabled:false}));wrapper.find('button').prop('onClick')();wrapper.update();_context.next=6;return flushPromises();case 6:wrapper.find('button').prop('onClick')();wrapper.update();_context.next=10;return flushPromises();case 10:expect(wrapper).toMatchSnapshot();expect(spy).toHaveBeenCalledTimes(1);case 12:case"end":return _context.stop();}}},_callee);})));it('should render with cart icon and should be clickable',function(){var spy=jest.fn(function(){return new Promise(function(resolve){return resolve();});});var wrapper=mount(/*#__PURE__*/React.createElement(AddToCartButton,{onClick:spy,isLoading:false,isOrderable:true,isDisabled:false}));wrapper.find('button').prop('onClick')();expect(wrapper).toMatchSnapshot();expect(spy).toHaveBeenCalledTimes(1);});});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from'react';import PropTypes from'prop-types';import BasicDialog from"../BasicDialog";/**
|
|
2
|
+
* Renders a simple dialog with a title and html content as a message.
|
|
3
|
+
* This is the default dialog if no type has been specified.
|
|
4
|
+
* @param {Object} props The component properties.
|
|
5
|
+
* @returns {JSX} The rendered component.
|
|
6
|
+
*/var HtmlContentDialog=function HtmlContentDialog(_ref){var actions=_ref.actions,message=_ref.message,title=_ref.title;return/*#__PURE__*/React.createElement(BasicDialog,{title:title,actions:actions},/*#__PURE__*/React.createElement("div",{dangerouslySetInnerHTML:{__html:message}}));};HtmlContentDialog.defaultProps={title:BasicDialog.defaultProps.title};export default HtmlContentDialog;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from'react';import{shallow}from'enzyme';import HtmlContentDialog from"./index";var message='<p><i>This is a html message.</i></p>';var title='This is the title.';describe('<HtmlContentDialog />',function(){it('should render with minimal props',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(HtmlContentDialog,{message:message,actions:[]}));expect(wrapper).toMatchSnapshot();expect(wrapper.html()).toMatch(message);});it('should render with title and html message',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(HtmlContentDialog,{title:title,message:message,actions:[]}));expect(wrapper).toMatchSnapshot();expect(wrapper.html()).toMatch(title);});it('should render with title, html message and messageParams',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(HtmlContentDialog,{title:title,message:"Message with {name}",params:{name:'Placeholder'},actions:[]}));expect(wrapper).toMatchSnapshot();});it('should render the actions',function(){var actions=[{label:'fooAction',action:function action(){}}];var wrapper=shallow(/*#__PURE__*/React.createElement(HtmlContentDialog,{title:title,message:message,actions:actions}));expect(wrapper).toMatchSnapshot();expect(wrapper.html()).toMatch(actions[0].label);});it('should pass title through',function(){var customTitle=/*#__PURE__*/React.createElement("div",null,"Title");var wrapper=shallow(/*#__PURE__*/React.createElement(HtmlContentDialog,{title:customTitle,message:message,params:{},actions:[]}));expect(wrapper.find('BaseDialog').prop('title')).toEqual(customTitle);});});
|
package/Dialog/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export var DIALOG_TEXT_MESSAGE='DIALOG_TEXT_MESSAGE';export var MODAL_VARIANT_SELECT='MODAL_VARIANT_SELECT';export var MODAL_ACTION_TYPE_NORMAL='normal';export var MODAL_ACTION_TYPE_PRIMARY='primary';export var MODAL_ACTION_TYPE_DANGER='danger';
|
|
1
|
+
export var DIALOG_TEXT_MESSAGE='DIALOG_TEXT_MESSAGE';export var DIALOG_HTML_CONTENT='DIALOG_HTML_CONTENT';export var MODAL_VARIANT_SELECT='MODAL_VARIANT_SELECT';export var MODAL_ACTION_TYPE_NORMAL='normal';export var MODAL_ACTION_TYPE_PRIMARY='primary';export var MODAL_ACTION_TYPE_DANGER='danger';
|
package/Dialog/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var _dialogTypes;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 from'react';import PropTypes from'prop-types';import Modal from'@shopgate/pwa-common/components/Modal';import Backdrop from'@shopgate/pwa-common/components/Backdrop';import{MODAL_PIPELINE_ERROR}from'@shopgate/pwa-common/constants/ModalTypes';import I18n from'@shopgate/pwa-common/components/I18n';import{DIALOG_TEXT_MESSAGE,MODAL_VARIANT_SELECT,MODAL_ACTION_TYPE_PRIMARY,MODAL_ACTION_TYPE_NORMAL}from"./constants";import PipelineErrorDialog from"./components/PipelineErrorDialog";import TextMessageDialog from"./components/TextMessageDialog";import BasicDialog from"./components/BasicDialog";import VariantSelectModal from"./components/VariantSelectModal";var dialogTypes=(_dialogTypes={},_defineProperty(_dialogTypes,DIALOG_TEXT_MESSAGE,TextMessageDialog),_defineProperty(_dialogTypes,MODAL_PIPELINE_ERROR,PipelineErrorDialog),_defineProperty(_dialogTypes,MODAL_VARIANT_SELECT,VariantSelectModal),_dialogTypes);/**
|
|
1
|
+
var _dialogTypes;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 from'react';import PropTypes from'prop-types';import Modal from'@shopgate/pwa-common/components/Modal';import Backdrop from'@shopgate/pwa-common/components/Backdrop';import{MODAL_PIPELINE_ERROR}from'@shopgate/pwa-common/constants/ModalTypes';import I18n from'@shopgate/pwa-common/components/I18n';import{DIALOG_TEXT_MESSAGE,MODAL_VARIANT_SELECT,MODAL_ACTION_TYPE_PRIMARY,MODAL_ACTION_TYPE_NORMAL,DIALOG_HTML_CONTENT}from"./constants";import PipelineErrorDialog from"./components/PipelineErrorDialog";import TextMessageDialog from"./components/TextMessageDialog";import HtmlContentDialog from"./components/HtmlContentDialog";import BasicDialog from"./components/BasicDialog";import VariantSelectModal from"./components/VariantSelectModal";var dialogTypes=(_dialogTypes={},_defineProperty(_dialogTypes,DIALOG_TEXT_MESSAGE,TextMessageDialog),_defineProperty(_dialogTypes,DIALOG_HTML_CONTENT,HtmlContentDialog),_defineProperty(_dialogTypes,MODAL_PIPELINE_ERROR,PipelineErrorDialog),_defineProperty(_dialogTypes,MODAL_VARIANT_SELECT,VariantSelectModal),_dialogTypes);/**
|
|
2
2
|
* The main component for rendering dialogs.
|
|
3
3
|
* This component takes care of choosing the correct component body for the given type
|
|
4
4
|
* and render it on a modal overlay.
|
|
5
5
|
* @param {Object} props The component props.
|
|
6
6
|
* @returns {JSX}
|
|
7
7
|
*/var Dialog=function Dialog(_ref){var modal=_ref.modal,onConfirm=_ref.onConfirm,onDismiss=_ref.onDismiss,children=_ref.children;// Assemble the actions.
|
|
8
|
-
var actions=[];var confirm=modal.confirm,dismiss=modal.dismiss,title=modal.title,titleParams=modal.titleParams,message=modal.message,params=modal.params,type=modal.type;// Push dismiss action first so the button is rendered first
|
|
8
|
+
var actions=[];var confirm=modal.confirm,dismiss=modal.dismiss,title=modal.title,titleParams=modal.titleParams,message=modal.message,params=modal.params,type=modal.type,content=modal.content;// Push dismiss action first so the button is rendered first
|
|
9
9
|
if(dismiss){// We have a dismiss label, add a dismiss action.
|
|
10
10
|
actions.push({label:modal.dismiss,action:onDismiss,type:MODAL_ACTION_TYPE_PRIMARY});}if(confirm){// We have a confirm label, add a confirm action.
|
|
11
|
-
actions.push({label:modal.confirm,action:onConfirm,type:MODAL_ACTION_TYPE_NORMAL});}var dialogType=type;if(!dialogType&&message){dialogType=DIALOG_TEXT_MESSAGE;}var dialogTitle=title;if(titleParams){dialogTitle=/*#__PURE__*/React.createElement(I18n.Text,{string:title,params:titleParams});}var dialogProps={actions:actions,title:dialogTitle,params:params,message:message||undefined,children:children};var DialogComponent=dialogTypes[dialogType]||BasicDialog;return/*#__PURE__*/React.createElement(Modal,null,/*#__PURE__*/React.createElement(Backdrop,{isVisible:true,level:0}),/*#__PURE__*/React.createElement(DialogComponent,dialogProps));};Dialog.defaultProps={children:null,onConfirm:function onConfirm(){},onDismiss:function onDismiss(){}};export default Dialog;
|
|
11
|
+
actions.push({label:modal.confirm,action:onConfirm,type:MODAL_ACTION_TYPE_NORMAL});}var dialogType=type;if(!dialogType&&message){dialogType=DIALOG_TEXT_MESSAGE;}var dialogTitle=title;if(titleParams){dialogTitle=/*#__PURE__*/React.createElement(I18n.Text,{string:title,params:titleParams});}var dialogProps={actions:actions,title:dialogTitle,params:params,message:message||undefined,children:children};var DialogComponent=dialogTypes[dialogType]||BasicDialog;return/*#__PURE__*/React.createElement(Modal,null,/*#__PURE__*/React.createElement(Backdrop,{isVisible:true,level:0}),/*#__PURE__*/React.createElement(DialogComponent,dialogProps,content));};Dialog.defaultProps={children:null,onConfirm:function onConfirm(){},onDismiss:function onDismiss(){}};export default Dialog;
|
package/Form/TextField/index.js
CHANGED
|
@@ -11,4 +11,4 @@ function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeo
|
|
|
11
11
|
*/_createClass(TextField,[{key:"render",value:/**
|
|
12
12
|
* Renders the text field.
|
|
13
13
|
* @return {JSX}
|
|
14
|
-
*/function render(){var _this$props=this.props,className=_this$props.className,placeholder=_this$props.placeholder,label=_this$props.label,errorText=_this$props.errorText,leftElement=_this$props.leftElement,rightElement=_this$props.rightElement,hasUnderline=_this$props.hasUnderline,props=_objectWithoutProperties(_this$props,_excluded);return/*#__PURE__*/React.createElement(FormElement,{className:"".concat(className," ui-shared__form__text-field"),htmlFor:props.name,placeholder:placeholder,label:label,errorText:errorText,hasUnderline:hasUnderline,hasValue:!!props.value,isFocused:this.state.isFocused},/*#__PURE__*/React.createElement(Grid,null,leftElement&&/*#__PURE__*/React.createElement(Grid.Item,{grow:0,className:style.element},leftElement),/*#__PURE__*/React.createElement(Grid.Item,{grow:1,className:style.container},/*#__PURE__*/React.createElement(Input,_extends({},props,{onFocusChange:this.handleFocusChange,className:style[props.multiLine?'multiLine':'input'],validateOnBlur:true}))),rightElement&&/*#__PURE__*/React.createElement(Grid.Item,{grow:0,className:style.element},rightElement)));}}]);return TextField;}(Component);_defineProperty(TextField,"defaultProps",{attributes:null,className:'',errorText:'',hasUnderline:true,label:'',leftElement:null,onChange:noop,placeholder:'',multiLine:false,rightElement:null,value:'',type:'text'});export default TextField;
|
|
14
|
+
*/function render(){var _this$props=this.props,className=_this$props.className,placeholder=_this$props.placeholder,label=_this$props.label,errorText=_this$props.errorText,leftElement=_this$props.leftElement,rightElement=_this$props.rightElement,hasUnderline=_this$props.hasUnderline,props=_objectWithoutProperties(_this$props,_excluded);return/*#__PURE__*/React.createElement(FormElement,{className:"".concat(className," ui-shared__form__text-field"),htmlFor:props.name,placeholder:placeholder,label:label,errorText:errorText,hasUnderline:hasUnderline,hasValue:!!props.value,isFocused:this.state.isFocused},/*#__PURE__*/React.createElement(Grid,null,leftElement&&/*#__PURE__*/React.createElement(Grid.Item,{grow:0,className:style.element},leftElement),/*#__PURE__*/React.createElement(Grid.Item,{grow:1,className:style.container},/*#__PURE__*/React.createElement(Input,_extends({},props,{onFocusChange:this.handleFocusChange,className:style[props.multiLine?'multiLine':'input'],validateOnBlur:true}))),rightElement&&/*#__PURE__*/React.createElement(Grid.Item,{grow:0,className:style.element},rightElement)));}}]);return TextField;}(Component);_defineProperty(TextField,"defaultProps",{attributes:null,className:'',errorText:'',hasUnderline:true,label:'',leftElement:null,onChange:noop,placeholder:'',multiLine:false,rightElement:null,value:'',type:'text',maxlength:''});export default TextField;
|
package/Price/index.js
CHANGED
|
@@ -9,7 +9,7 @@ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj
|
|
|
9
9
|
* @param {Object} context The component context.
|
|
10
10
|
* @return {JSX}
|
|
11
11
|
*/var Price=function Price(props,context){var _useWidgetSettings=useWidgetSettings('@shopgate/engage/components/TaxDisclaimer'),show=_useWidgetSettings.show,hint=_useWidgetSettings.hint;// use widget setting if set to true/false, otherwise use market logic
|
|
12
|
-
var showDisclaimer=typeof show==='boolean'?show:showTaxDisclaimer;var containerClasses=classNames(styles.container,props.className,_defineProperty({},styles.discounted,props.discounted),'price','ui-shared__price');var _context$i18n=context.i18n(),__=_context$i18n.__,_p=_context$i18n._p;var ariaPrice;if(props.unitPriceMin){ariaPrice=__('price.from',{price:_p(props.unitPriceMin,props.currency,props.fractions)});}else{ariaPrice=_p(props.unitPrice,props.currency,props.fractions);}ariaPrice=ariaPrice.replace('-',"\u2212");/* eslint-disable jsx-a11y/aria-role */ /**
|
|
12
|
+
var showDisclaimer=typeof show==='boolean'?show:showTaxDisclaimer;var containerClasses=classNames(styles.container,props.className,_defineProperty({},styles.discounted,props.discounted),'price',props.discounted?'ui-shared__price-discounted':'ui-shared__price');var _context$i18n=context.i18n(),__=_context$i18n.__,_p=_context$i18n._p;var ariaPrice;if(props.unitPriceMin){ariaPrice=__('price.from',{price:_p(props.unitPriceMin,props.currency,props.fractions)});}else{ariaPrice=_p(props.unitPrice,props.currency,props.fractions);}ariaPrice=ariaPrice.replace('-',"\u2212");/* eslint-disable jsx-a11y/aria-role */ /**
|
|
13
13
|
* A unitPriceMin > 0 means, that the product has child products with different prices.
|
|
14
14
|
* The unitPriceMin contains the lowest of these prices and will be
|
|
15
15
|
* displayed with a 'From' prefix.
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shopgate/pwa-ui-shared",
|
|
3
|
-
"version": "6.20.0-
|
|
3
|
+
"version": "6.20.0-rc.2",
|
|
4
4
|
"description": "Shopgate's shared UI components.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@shopgate/pwa-ui-ios": "6.20.0-
|
|
9
|
-
"@shopgate/pwa-ui-material": "6.20.0-
|
|
8
|
+
"@shopgate/pwa-ui-ios": "6.20.0-rc.2",
|
|
9
|
+
"@shopgate/pwa-ui-material": "6.20.0-rc.2"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@shopgate/pwa-common": "6.20.0-
|
|
13
|
-
"@shopgate/pwa-common-commerce": "6.20.0-
|
|
12
|
+
"@shopgate/pwa-common": "6.20.0-rc.2",
|
|
13
|
+
"@shopgate/pwa-common-commerce": "6.20.0-rc.2",
|
|
14
14
|
"classnames": "^2.2.5",
|
|
15
15
|
"react": "~16.12.0"
|
|
16
16
|
},
|