@shopgate/pwa-common 7.30.0-alpha.7 → 7.30.0-alpha.9

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.
Files changed (306) hide show
  1. package/App.js +48 -6
  2. package/action-creators/app/index.js +75 -12
  3. package/action-creators/app/spec.js +96 -1
  4. package/action-creators/client/index.js +27 -5
  5. package/action-creators/client/spec.js +44 -1
  6. package/action-creators/error/index.js +15 -3
  7. package/action-creators/index.js +9 -1
  8. package/action-creators/menu/index.js +23 -4
  9. package/action-creators/menu/spec.js +37 -1
  10. package/action-creators/modal/index.js +15 -3
  11. package/action-creators/modal/spec.js +26 -1
  12. package/action-creators/page/index.js +24 -4
  13. package/action-creators/page/spec.js +38 -1
  14. package/action-creators/router/index.js +48 -7
  15. package/action-creators/url/index.js +24 -4
  16. package/action-creators/url/spec.js +45 -1
  17. package/action-creators/user/index.js +90 -13
  18. package/action-creators/user/spec.js +186 -2
  19. package/actions/app/handleDeepLink.js +11 -2
  20. package/actions/app/handleLink.js +62 -6
  21. package/actions/app/handlePushNotification.js +32 -4
  22. package/actions/app/handleUniversalLink.js +11 -2
  23. package/actions/app/registerLinkEvents.js +24 -3
  24. package/actions/client/fetchClientInformation.js +26 -2
  25. package/actions/menu/fetchMenu.js +23 -2
  26. package/actions/modal/closeModal.js +18 -2
  27. package/actions/modal/promiseMap.js +3 -1
  28. package/actions/modal/showModal.js +54 -8
  29. package/actions/page/fetchPageConfig.js +69 -2
  30. package/actions/page/getPageConfig.js +6 -2
  31. package/actions/page/index.js +1 -1
  32. package/actions/router/historyPop.js +12 -2
  33. package/actions/router/historyPopToRoute.js +27 -2
  34. package/actions/router/historyPush.js +12 -2
  35. package/actions/router/historyRedirect.js +21 -2
  36. package/actions/router/historyReplace.js +20 -3
  37. package/actions/router/historyReset.js +11 -2
  38. package/actions/router/historyResetTo.js +12 -2
  39. package/actions/router/index.js +17 -1
  40. package/actions/router/routeDidPop.js +11 -2
  41. package/actions/router/routeDidPush.js +13 -2
  42. package/actions/router/routeDidReplace.js +11 -2
  43. package/actions/router/routeDidReset.js +11 -2
  44. package/actions/router/routeDidUpdate.js +10 -2
  45. package/actions/router/routeWillPop.js +11 -2
  46. package/actions/router/routeWillPush.js +13 -2
  47. package/actions/router/routeWillReplace.js +11 -2
  48. package/actions/router/routeWillReset.js +11 -2
  49. package/actions/router/windowOpenOverride.js +10 -2
  50. package/actions/user/fetchRegisterUrl.js +36 -2
  51. package/actions/user/fetchUser.js +29 -3
  52. package/actions/user/getUser.js +6 -2
  53. package/actions/user/index.js +1 -1
  54. package/actions/user/login.js +76 -9
  55. package/actions/user/logout.js +30 -2
  56. package/collections/AuthRoutes.js +73 -14
  57. package/collections/Configuration.js +54 -7
  58. package/collections/EmbeddedMedia.js +84 -11
  59. package/collections/PersistedReducers.js +41 -6
  60. package/collections/Redirects.js +103 -17
  61. package/collections/index.js +5 -1
  62. package/collections/media-providers/MediaProvider.js +151 -26
  63. package/collections/media-providers/Vimeo.js +113 -19
  64. package/collections/media-providers/YouTube.js +74 -14
  65. package/collections/media-providers/index.js +3 -1
  66. package/collections/media-providers/style.js +52 -2
  67. package/components/Backdrop/index.js +95 -6
  68. package/components/Backdrop/spec.js +23 -1
  69. package/components/Backdrop/style.js +11 -2
  70. package/components/Button/index.js +47 -5
  71. package/components/Button/spec.js +36 -1
  72. package/components/Button/style.js +6 -1
  73. package/components/Checkbox/index.js +126 -32
  74. package/components/Checkbox/spec.js +94 -3
  75. package/components/Consume/helpers/buildParams.js +13 -2
  76. package/components/Consume/index.js +14 -2
  77. package/components/CountdownTimer/index.js +115 -17
  78. package/components/CountdownTimer/spec.js +126 -12
  79. package/components/Drawer/index.js +131 -16
  80. package/components/Drawer/spec.js +76 -1
  81. package/components/Drawer/style.js +37 -1
  82. package/components/Dropdown/index.js +65 -6
  83. package/components/Dropdown/style.js +4 -1
  84. package/components/Dropdown/transitions.js +34 -1
  85. package/components/Ellipsis/index.js +16 -2
  86. package/components/Ellipsis/spec.js +13 -1
  87. package/components/EmbeddedMedia/index.js +56 -6
  88. package/components/EmbeddedMedia/spec.js +52 -3
  89. package/components/ErrorBoundary/connector.js +9 -2
  90. package/components/ErrorBoundary/index.js +43 -7
  91. package/components/Grid/components/Item/index.js +40 -4
  92. package/components/Grid/components/Item/spec.js +23 -1
  93. package/components/Grid/components/Item/style.js +17 -3
  94. package/components/Grid/index.js +36 -4
  95. package/components/Grid/spec.js +23 -1
  96. package/components/Grid/style.js +11 -2
  97. package/components/HtmlSanitizer/connector.js +24 -3
  98. package/components/HtmlSanitizer/index.js +104 -12
  99. package/components/HtmlSanitizer/spec.js +214 -7
  100. package/components/I18n/components/FormatDate/index.js +26 -2
  101. package/components/I18n/components/FormatDate/spec.js +46 -1
  102. package/components/I18n/components/FormatNumber/index.js +34 -2
  103. package/components/I18n/components/FormatNumber/spec.js +41 -2
  104. package/components/I18n/components/FormatPrice/index.js +32 -2
  105. package/components/I18n/components/FormatPrice/spec.js +46 -1
  106. package/components/I18n/components/FormatTime/index.js +26 -2
  107. package/components/I18n/components/FormatTime/spec.js +43 -2
  108. package/components/I18n/components/I18nProvider/index.js +52 -9
  109. package/components/I18n/components/I18nProvider/spec.js +39 -1
  110. package/components/I18n/components/Placeholder/index.js +8 -2
  111. package/components/I18n/components/Placeholder/spec.js +30 -1
  112. package/components/I18n/components/Translate/index.js +68 -7
  113. package/components/I18n/components/Translate/spec.js +30 -1
  114. package/components/I18n/index.js +16 -1
  115. package/components/Icon/index.js +25 -2
  116. package/components/Icon/style.js +6 -1
  117. package/components/Image/Image.js +176 -19
  118. package/components/Image/ImageInner.js +48 -2
  119. package/components/Image/index.js +1 -1
  120. package/components/Image/style.js +29 -2
  121. package/components/InfiniteContainer/index.js +381 -49
  122. package/components/InfiniteContainer/spec.js +199 -10
  123. package/components/Input/components/DateInput.js +262 -6
  124. package/components/Input/components/MultiLineInput.js +98 -12
  125. package/components/Input/components/SimpleInput.js +207 -31
  126. package/components/Input/index.js +32 -3
  127. package/components/Input/spec.js +122 -1
  128. package/components/KeyboardConsumer/index.js +48 -7
  129. package/components/Link/connector.js +7 -1
  130. package/components/Link/index.js +96 -11
  131. package/components/Link/spec.js +56 -1
  132. package/components/Link/style.js +10 -1
  133. package/components/List/components/Item/index.js +35 -3
  134. package/components/List/components/Item/style.js +16 -1
  135. package/components/List/index.js +20 -2
  136. package/components/List/spec.js +31 -1
  137. package/components/Loading/index.js +6 -2
  138. package/components/Modal/index.js +38 -3
  139. package/components/Modal/style.js +36 -1
  140. package/components/ModalContainer/connector.js +17 -3
  141. package/components/ModalContainer/index.js +36 -3
  142. package/components/ModalContainer/spec.js +105 -5
  143. package/components/Picker/components/Button/index.js +34 -2
  144. package/components/Picker/components/Button/style.js +19 -1
  145. package/components/Picker/components/List/index.js +33 -2
  146. package/components/Picker/components/List/style.js +17 -1
  147. package/components/Picker/components/Modal/index.js +60 -7
  148. package/components/Picker/components/Modal/style.js +78 -1
  149. package/components/Picker/index.js +167 -21
  150. package/components/Picker/spec.js +83 -2
  151. package/components/Portal/index.js +130 -19
  152. package/components/ProductCharacteristics/connector.js +33 -4
  153. package/components/ProductCharacteristics/context.js +2 -1
  154. package/components/ProductCharacteristics/helpers/index.js +135 -21
  155. package/components/ProductCharacteristics/index.js +266 -31
  156. package/components/RangeSlider/components/Handle/index.js +25 -2
  157. package/components/RangeSlider/components/Handle/style.js +14 -1
  158. package/components/RangeSlider/helper.js +43 -8
  159. package/components/RangeSlider/index.js +228 -38
  160. package/components/RangeSlider/style.js +14 -1
  161. package/components/Route/RouteNotFound.js +46 -3
  162. package/components/Route/index.js +78 -10
  163. package/components/Router/connector.js +9 -2
  164. package/components/Router/index.js +237 -31
  165. package/components/ScannerContainer/connector.js +9 -2
  166. package/components/ScannerContainer/index.js +42 -6
  167. package/components/Select/components/Item/index.js +20 -4
  168. package/components/Select/components/Item/style.js +4 -1
  169. package/components/Select/index.js +149 -28
  170. package/components/Select/spec.js +86 -2
  171. package/components/Select/style.js +17 -1
  172. package/components/SelectBox/components/Item/index.js +47 -5
  173. package/components/SelectBox/components/Item/style.js +7 -1
  174. package/components/SelectBox/index.js +173 -17
  175. package/components/SelectBox/spec.js +59 -3
  176. package/components/SelectBox/style.js +18 -1
  177. package/components/Slider/index.js +6 -2
  178. package/components/SurroundPortals/index.js +26 -2
  179. package/components/Swiper/components/SwiperItem/index.js +28 -4
  180. package/components/Swiper/components/SwiperItem/spec.js +21 -1
  181. package/components/Swiper/components/SwiperItem/styles.js +5 -1
  182. package/components/Swiper/index.js +210 -18
  183. package/components/Swiper/styles.js +75 -7
  184. package/components/Toaster/index.js +10 -2
  185. package/components/Transition/index.js +89 -13
  186. package/components/Widgets/components/Widget/index.js +52 -4
  187. package/components/Widgets/components/Widget/spec.js +68 -3
  188. package/components/Widgets/components/Widget/style.js +21 -3
  189. package/components/Widgets/components/WidgetGrid/index.js +52 -7
  190. package/components/Widgets/components/WidgetGrid/spec.js +46 -2
  191. package/components/Widgets/components/WidgetGrid/style.js +8 -1
  192. package/components/Widgets/helpers/shouldShowWidget.js +44 -7
  193. package/components/Widgets/index.js +127 -15
  194. package/components/Widgets/spec.js +228 -6
  195. package/components/index.js +9 -1
  196. package/constants/ActionTypes.js +97 -19
  197. package/constants/Configuration.js +12 -2
  198. package/constants/Device.js +29 -2
  199. package/constants/DisplayOptions.js +8 -1
  200. package/constants/MenuIDs.js +2 -1
  201. package/constants/ModalTypes.js +1 -1
  202. package/constants/PageIDs.js +1 -1
  203. package/constants/Pipelines.js +7 -1
  204. package/constants/Portals.js +136 -3
  205. package/constants/Registration.js +3 -1
  206. package/constants/RoutePaths.js +13 -2
  207. package/constants/Tracking.js +3 -1
  208. package/constants/client.js +6 -1
  209. package/constants/ui.js +2 -1
  210. package/constants/user.js +6 -2
  211. package/context/index.js +33 -3
  212. package/helpers/config/index.js +139 -21
  213. package/helpers/config/mock.js +200 -8
  214. package/helpers/config/theme.js +50 -4
  215. package/helpers/data/index.js +204 -29
  216. package/helpers/data/spec.js +187 -7
  217. package/helpers/date/index.js +58 -6
  218. package/helpers/date/spec.js +92 -1
  219. package/helpers/dom/index.js +48 -11
  220. package/helpers/environment/index.js +14 -2
  221. package/helpers/html/decodeHTML.js +7 -1
  222. package/helpers/html/handleDOM.js +172 -21
  223. package/helpers/html/parseHTML.js +67 -12
  224. package/helpers/i18n/getDateFormatter.js +23 -4
  225. package/helpers/i18n/getNumberFormatter.js +32 -4
  226. package/helpers/i18n/getPriceFormatter.js +38 -4
  227. package/helpers/i18n/getTimeFormatter.js +23 -4
  228. package/helpers/i18n/getTranslator.js +62 -8
  229. package/helpers/i18n/index.js +5 -1
  230. package/helpers/i18n/mergeTranslations.js +36 -9
  231. package/helpers/i18n/messageCache.js +3 -1
  232. package/helpers/legacy/index.js +47 -9
  233. package/helpers/modal/withShowModal.js +13 -2
  234. package/helpers/portals/portalCollection.js +28 -6
  235. package/helpers/portals/routePortals.js +12 -1
  236. package/helpers/redux/compareObjects.js +7 -2
  237. package/helpers/redux/generateResultHash.js +36 -3
  238. package/helpers/redux/generateSortedHash.js +7 -2
  239. package/helpers/redux/hasExpired.js +10 -2
  240. package/helpers/redux/index.js +7 -1
  241. package/helpers/redux/mutable.js +143 -24
  242. package/helpers/redux/shouldFetchData.js +46 -10
  243. package/helpers/redux/shouldFetchFilters.js +17 -4
  244. package/helpers/router/index.js +49 -5
  245. package/helpers/style/index.js +43 -4
  246. package/helpers/style/spec.js +108 -2
  247. package/helpers/tracking/index.js +52 -9
  248. package/helpers/validation/index.js +39 -12
  249. package/helpers/validation/spec.js +10 -1
  250. package/package.json +3 -4
  251. package/providers/index.js +4 -1
  252. package/providers/loading/context.js +2 -1
  253. package/providers/loading/index.js +137 -22
  254. package/providers/toast/context.js +2 -1
  255. package/providers/toast/index.js +105 -11
  256. package/reducers/client/connectivity.js +22 -2
  257. package/reducers/client/index.js +7 -1
  258. package/reducers/client/info.js +27 -2
  259. package/reducers/index.js +23 -4
  260. package/reducers/menu/index.js +5 -1
  261. package/reducers/menu/menusById.js +41 -2
  262. package/reducers/modal/index.js +14 -2
  263. package/reducers/page/index.js +68 -5
  264. package/reducers/router/index.js +48 -2
  265. package/reducers/url/index.js +42 -3
  266. package/reducers/user/data.js +27 -2
  267. package/reducers/user/index.js +7 -1
  268. package/reducers/user/login.js +65 -2
  269. package/selectors/client.js +138 -21
  270. package/selectors/history.js +49 -11
  271. package/selectors/menu.js +34 -6
  272. package/selectors/modal.js +15 -4
  273. package/selectors/page.js +25 -4
  274. package/selectors/router.js +154 -30
  275. package/selectors/url.js +25 -4
  276. package/selectors/user.js +90 -13
  277. package/store/index.js +60 -6
  278. package/store/middelwares/logger.js +7 -1
  279. package/store/middelwares/streams.js +19 -2
  280. package/streams/app.js +60 -8
  281. package/streams/client.js +8 -2
  282. package/streams/error.js +14 -3
  283. package/streams/index.js +6 -1
  284. package/streams/interval.js +6 -2
  285. package/streams/main.js +27 -2
  286. package/streams/router.js +45 -8
  287. package/streams/user.js +89 -15
  288. package/streams/view.js +97 -25
  289. package/styles/reset/form.js +57 -5
  290. package/styles/reset/index.js +6 -1
  291. package/styles/reset/media.js +22 -1
  292. package/styles/reset/root.js +33 -1
  293. package/styles/reset/table.js +10 -1
  294. package/styles/reset/typography.js +26 -1
  295. package/subscriptions/app.js +148 -17
  296. package/subscriptions/error.js +292 -13
  297. package/subscriptions/helpers/buildRegisterUrl.js +25 -6
  298. package/subscriptions/helpers/clearUpInAppBrowser.js +14 -3
  299. package/subscriptions/helpers/handleLinks.js +267 -25
  300. package/subscriptions/helpers/pipeline.js +12 -1
  301. package/subscriptions/history.js +34 -6
  302. package/subscriptions/index.js +25 -4
  303. package/subscriptions/menu.js +22 -5
  304. package/subscriptions/mock.js +39 -7
  305. package/subscriptions/router.js +336 -23
  306. package/subscriptions/user.js +93 -3
@@ -1,6 +1,45 @@
1
- function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import React from'react';import{mount}from'enzyme';import{i18n}from'@shopgate/engage/core';import I18n from"../../index";import FormatNumber from"./index";jest.unmock('@shopgate/engage/core/helpers/i18n');describe('<FormatNumber>',function(){describe('i18n not ready',function(){it('should return same number and className when i18n is not ready',function(){var component=mount(React.createElement(FormatNumber,{number:1,fractions:2,className:"some-class"}));expect(component.html().includes('some-class')).toBe(true);expect(component.text().includes('1')).toBe(true);expect(component).toMatchSnapshot();});});describe('i18n ready',function(){i18n.init({locales:{},lang:'en-US'});var pairs=[[1,'1.00',2],[0.1,'0.10',2],[1,'1.000',3],[1,'1',0]];/**
1
+ import React from 'react';
2
+ import { mount } from 'enzyme';
3
+ import { i18n } from '@shopgate/engage/core';
4
+ import I18n from "../../index";
5
+ import FormatNumber from "./index";
6
+ jest.unmock('@shopgate/engage/core/helpers/i18n');
7
+ describe('<FormatNumber>', () => {
8
+ describe('i18n not ready', () => {
9
+ it('should return same number and className when i18n is not ready', () => {
10
+ const component = mount(/*#__PURE__*/React.createElement(FormatNumber, {
11
+ number: 1,
12
+ fractions: 2,
13
+ className: "some-class"
14
+ }));
15
+ expect(component.html().includes('some-class')).toBe(true);
16
+ expect(component.text().includes('1')).toBe(true);
17
+ expect(component).toMatchSnapshot();
18
+ });
19
+ });
20
+ describe('i18n ready', () => {
21
+ i18n.init({
22
+ locales: {},
23
+ lang: 'en-US'
24
+ });
25
+ const pairs = [[1, '1.00', 2], [0.1, '0.10', 2], [1, '1.000', 3], [1, '1', 0]];
26
+
27
+ /**
2
28
  * Makes a component.
3
29
  * @param {number} number Number
4
30
  * @param {number} fractions Decimal points.
5
31
  * @returns {Object}
6
- */var makeComponent=function makeComponent(number,fractions){return mount(React.createElement(I18n.Provider,null,React.createElement("div",null,React.createElement(FormatNumber,{number:number,fractions:fractions}))));};pairs.forEach(function(_ref){var _ref2=_slicedToArray(_ref,3),input=_ref2[0],expexted=_ref2[1],fractions=_ref2[2];it("should format ".concat(input," into ").concat(expexted),function(){var component=makeComponent(input,fractions);expect(component.text().includes("".concat(expexted))).toBe(true);expect(component).toMatchSnapshot();});});});});
32
+ */
33
+ const makeComponent = (number, fractions) => mount(/*#__PURE__*/React.createElement(I18n.Provider, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FormatNumber, {
34
+ number: number,
35
+ fractions: fractions
36
+ }))));
37
+ pairs.forEach(([input, expexted, fractions]) => {
38
+ it(`should format ${input} into ${expexted}`, () => {
39
+ const component = makeComponent(input, fractions);
40
+ expect(component.text().includes(`${expexted}`)).toBe(true);
41
+ expect(component).toMatchSnapshot();
42
+ });
43
+ });
44
+ });
45
+ });
@@ -1,5 +1,35 @@
1
- var _excluded=["className"];function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}import React,{memo}from'react';import PropTypes from'prop-types';import{i18n}from'@shopgate/engage/core/helpers/i18n';/**
1
+ import React, { memo } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { i18n } from '@shopgate/engage/core/helpers/i18n';
4
+ /**
2
5
  * Formats a price.
3
6
  * @param {Object} props The component props.
4
7
  * @returns {JSX}
5
- */var FormatPrice=function FormatPrice(props){var className=props.className,formatProps=_objectWithoutProperties(props,_excluded);if(!className){return FormatPrice.format(formatProps);}return React.createElement("span",{className:className},FormatPrice.format(formatProps));};FormatPrice.format=function(_ref){var price=_ref.price,currency=_ref.currency,fractions=_ref.fractions;if(!i18n.ready){return price;}return i18n.price(price,currency,fractions);};FormatPrice.defaultProps={className:null,fractions:true};export default memo(FormatPrice);
8
+ */
9
+ const FormatPrice = props => {
10
+ const {
11
+ className,
12
+ ...formatProps
13
+ } = props;
14
+ if (!className) {
15
+ return FormatPrice.format(formatProps);
16
+ }
17
+ return /*#__PURE__*/React.createElement("span", {
18
+ className: className
19
+ }, FormatPrice.format(formatProps));
20
+ };
21
+ FormatPrice.format = ({
22
+ price,
23
+ currency,
24
+ fractions
25
+ }) => {
26
+ if (!i18n.ready) {
27
+ return price;
28
+ }
29
+ return i18n.price(price, currency, fractions);
30
+ };
31
+ FormatPrice.defaultProps = {
32
+ className: null,
33
+ fractions: true
34
+ };
35
+ export default /*#__PURE__*/memo(FormatPrice);
@@ -1 +1,46 @@
1
- import React from'react';import{mount}from'enzyme';import{i18n}from'@shopgate/engage/core';import I18n from"../../index";jest.unmock('@shopgate/engage/core/helpers/i18n');describe('<FormatPrice />',function(){var locales={greeting:'Hello {price}'};var price=1234.56;var formattedPrice='€1,234.56';var currency='EUR';var lang='en-US';i18n.init({locales:locales,lang:lang});describe('Given the component was mounted to the DOM',function(){var renderedElement;it('should match snapshot',function(){renderedElement=mount(React.createElement(I18n.Provider,null,React.createElement("div",null,React.createElement("span",{className:"only-price"},React.createElement(I18n.Price,{price:price,currency:currency})),React.createElement("span",{className:"text-with-price"},React.createElement(I18n.Text,{string:"greeting"},React.createElement(I18n.Price,{forKey:"price",price:price,currency:currency}))))));expect(renderedElement).toMatchSnapshot();});it('should render formatted price',function(){var text=renderedElement.find('.only-price').text();expect(text).toBe(formattedPrice);});it('should render within translated text',function(){var text=renderedElement.find('.text-with-price').text();expect(text).toBe("Hello ".concat(formattedPrice));});});});
1
+ import React from 'react';
2
+ import { mount } from 'enzyme';
3
+ import { i18n } from '@shopgate/engage/core';
4
+ import I18n from "../../index";
5
+ jest.unmock('@shopgate/engage/core/helpers/i18n');
6
+ describe('<FormatPrice />', () => {
7
+ const locales = {
8
+ greeting: 'Hello {price}'
9
+ };
10
+ const price = 1234.56;
11
+ const formattedPrice = '€1,234.56';
12
+ const currency = 'EUR';
13
+ const lang = 'en-US';
14
+ i18n.init({
15
+ locales,
16
+ lang
17
+ });
18
+ describe('Given the component was mounted to the DOM', () => {
19
+ let renderedElement;
20
+ it('should match snapshot', () => {
21
+ renderedElement = mount(/*#__PURE__*/React.createElement(I18n.Provider, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("span", {
22
+ className: "only-price"
23
+ }, /*#__PURE__*/React.createElement(I18n.Price, {
24
+ price: price,
25
+ currency: currency
26
+ })), /*#__PURE__*/React.createElement("span", {
27
+ className: "text-with-price"
28
+ }, /*#__PURE__*/React.createElement(I18n.Text, {
29
+ string: "greeting"
30
+ }, /*#__PURE__*/React.createElement(I18n.Price, {
31
+ forKey: "price",
32
+ price: price,
33
+ currency: currency
34
+ }))))));
35
+ expect(renderedElement).toMatchSnapshot();
36
+ });
37
+ it('should render formatted price', () => {
38
+ const text = renderedElement.find('.only-price').text();
39
+ expect(text).toBe(formattedPrice);
40
+ });
41
+ it('should render within translated text', () => {
42
+ const text = renderedElement.find('.text-with-price').text();
43
+ expect(text).toBe(`Hello ${formattedPrice}`);
44
+ });
45
+ });
46
+ });
@@ -1,5 +1,29 @@
1
- import React,{Fragment,memo}from'react';import PropTypes from'prop-types';import{i18n}from'@shopgate/engage/core/helpers/i18n';/**
1
+ import React, { Fragment, memo } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { i18n } from '@shopgate/engage/core/helpers/i18n';
4
+
5
+ /**
2
6
  * Formats a time.
3
7
  * @param {Object} props The component props.
4
8
  * @returns {JSX}
5
- */var FormatTime=function FormatTime(_ref){var timestamp=_ref.timestamp,format=_ref.format;return React.createElement(Fragment,null,FormatTime.format({timestamp:timestamp,format:format}));};FormatTime.format=function(_ref2){var timestamp=_ref2.timestamp,format=_ref2.format;if(!i18n.ready){return timestamp;}return i18n.time(timestamp,format);};FormatTime.defaultProps={format:'medium'};export default memo(FormatTime);
9
+ */
10
+ const FormatTime = ({
11
+ timestamp,
12
+ format
13
+ }) => /*#__PURE__*/React.createElement(Fragment, null, FormatTime.format({
14
+ timestamp,
15
+ format
16
+ }));
17
+ FormatTime.format = ({
18
+ timestamp,
19
+ format
20
+ }) => {
21
+ if (!i18n.ready) {
22
+ return timestamp;
23
+ }
24
+ return i18n.time(timestamp, format);
25
+ };
26
+ FormatTime.defaultProps = {
27
+ format: 'medium'
28
+ };
29
+ export default /*#__PURE__*/memo(FormatTime);
@@ -1,2 +1,43 @@
1
- import React from'react';import{mount}from'enzyme';import{i18n}from'@shopgate/engage/core';import I18n from"../../index";jest.unmock('@shopgate/engage/core/helpers/i18n');describe('<FormatTime />',function(){var locales={greeting:'Hello {time}'};var timestamp=new Date('Dec 25, 1999 04:25:45').getTime();var formattedTime='4:25:45 AM';var format='medium';var lang='en-US';i18n.init({locales:locales,lang:lang});describe('Given the component was mounted to the DOM',function(){// TODO: Handle snapshot test.
2
- var renderedElement=mount(React.createElement(I18n.Provider,null,React.createElement("div",null,React.createElement("span",{className:"only-time"},React.createElement(I18n.Time,{timestamp:timestamp,format:format})),React.createElement("span",{className:"text-with-time"},React.createElement(I18n.Text,{string:"greeting"},React.createElement(I18n.Time,{forKey:"time",timestamp:timestamp,format:format}))))));it('should render formatted time',function(){var text=renderedElement.find('.only-time').text();expect(text).toBe(formattedTime);});it('should render within translated text',function(){var text=renderedElement.find('.text-with-time').text();expect(text).toBe("Hello ".concat(formattedTime));});});});
1
+ import React from 'react';
2
+ import { mount } from 'enzyme';
3
+ import { i18n } from '@shopgate/engage/core';
4
+ import I18n from "../../index";
5
+ jest.unmock('@shopgate/engage/core/helpers/i18n');
6
+ describe('<FormatTime />', () => {
7
+ const locales = {
8
+ greeting: 'Hello {time}'
9
+ };
10
+ const timestamp = new Date('Dec 25, 1999 04:25:45').getTime();
11
+ const formattedTime = '4:25:45 AM';
12
+ const format = 'medium';
13
+ const lang = 'en-US';
14
+ i18n.init({
15
+ locales,
16
+ lang
17
+ });
18
+ describe('Given the component was mounted to the DOM', () => {
19
+ // TODO: Handle snapshot test.
20
+ const renderedElement = mount(/*#__PURE__*/React.createElement(I18n.Provider, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("span", {
21
+ className: "only-time"
22
+ }, /*#__PURE__*/React.createElement(I18n.Time, {
23
+ timestamp: timestamp,
24
+ format: format
25
+ })), /*#__PURE__*/React.createElement("span", {
26
+ className: "text-with-time"
27
+ }, /*#__PURE__*/React.createElement(I18n.Text, {
28
+ string: "greeting"
29
+ }, /*#__PURE__*/React.createElement(I18n.Time, {
30
+ forKey: "time",
31
+ timestamp: timestamp,
32
+ format: format
33
+ }))))));
34
+ it('should render formatted time', () => {
35
+ const text = renderedElement.find('.only-time').text();
36
+ expect(text).toBe(formattedTime);
37
+ });
38
+ it('should render within translated text', () => {
39
+ const text = renderedElement.find('.text-with-time').text();
40
+ expect(text).toBe(`Hello ${formattedTime}`);
41
+ });
42
+ });
43
+ });
@@ -1,16 +1,59 @@
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 _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{i18n}from'@shopgate/engage/core/helpers/i18n';import{logger}from'@shopgate/pwa-core/helpers';/**
1
+ import React, { Component } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { i18n } from '@shopgate/engage/core/helpers/i18n';
4
+ import { logger } from '@shopgate/pwa-core/helpers';
5
+
6
+ /**
2
7
  * A React component that provides child components with i18n features.
3
8
  * @returns {React.Component}
4
- */var I18nProvider=/*#__PURE__*/function(_Component){/**
9
+ */
10
+ export default class I18nProvider extends Component {
11
+ /**
5
12
  * @inheritDoc
6
- */function I18nProvider(props){var _this2;_classCallCheck(this,I18nProvider);_this2=_callSuper(this,I18nProvider,[props]);// eslint-disable-next-line react/prop-types
7
- /**
8
- * Gets a shortcut to i18n functionality with preset language.
9
- * @returns {Object}
10
- */_defineProperty(_this2,"getI18nInstance",function(){return{__:i18n.text,_p:i18n.price,_d:i18n.date,_t:i18n.time,_n:i18n.number};});if(_this2.props.lang||_this2.props.locales){logger.warn("===== I18nProvider deprecated =====\nI18nProvider and it's related components (@shopgate/pwa-common/component/I18n) or context types are deprecated and will be removed in @shopgate/engage v7.0.0.\nPlease use { i18n } from @shopgate/engage/core.\n===================================\n ");}return _this2;}/**
13
+ */
14
+ constructor(props) {
15
+ super(props);
16
+ // eslint-disable-next-line react/prop-types
17
+ /**
18
+ * Gets a shortcut to i18n functionality with preset language.
19
+ * @returns {Object}
20
+ */
21
+ this.getI18nInstance = () => ({
22
+ __: i18n.text,
23
+ _p: i18n.price,
24
+ _d: i18n.date,
25
+ _t: i18n.time,
26
+ _n: i18n.number
27
+ });
28
+ if (this.props.lang || this.props.locales) {
29
+ logger.warn(`===== I18nProvider deprecated =====\nI18nProvider and it's related components (@shopgate/pwa-common/component/I18n) or context types are deprecated and will be removed in @shopgate/engage v7.0.0.\nPlease use { i18n } from @shopgate/engage/core.\n===================================
30
+ `);
31
+ }
32
+ }
33
+
34
+ /**
11
35
  * Provides context for child components.
12
36
  * @returns {Object}
13
- */_inherits(I18nProvider,_Component);return _createClass(I18nProvider,[{key:"getChildContext",value:function getChildContext(){return{i18n:this.getI18nInstance};}},{key:"render",value:/**
37
+ */
38
+ getChildContext() {
39
+ return {
40
+ i18n: this.getI18nInstance
41
+ };
42
+ }
43
+ /**
14
44
  * Renders the component.
15
45
  * @returns {JSX}
16
- */function render(){var children=this.props.children;return children?React.cloneElement(children):null;}}]);}(Component);_defineProperty(I18nProvider,"childContextTypes",{i18n:PropTypes.func.isRequired});_defineProperty(I18nProvider,"defaultProps",{children:null});export{I18nProvider as default};
46
+ */
47
+ render() {
48
+ const {
49
+ children
50
+ } = this.props;
51
+ return children ? /*#__PURE__*/React.cloneElement(children) : null;
52
+ }
53
+ }
54
+ I18nProvider.childContextTypes = {
55
+ i18n: PropTypes.func.isRequired
56
+ };
57
+ I18nProvider.defaultProps = {
58
+ children: null
59
+ };
@@ -1 +1,39 @@
1
- import React from'react';import{shallow}from'enzyme';import{i18n as i18nHelper}from'@shopgate/engage/core';import I18nProvider from"./index";jest.unmock('@shopgate/engage/core/helpers/i18n');describe('<I18nProvider />',function(){var locales={greeting:'Guten Tag {name}'};var lang='de-DE';i18nHelper.init({locales:locales,lang:lang});describe('Given the component was mounted to the DOM',function(){var renderedElement;var renderedInstance;it('should match snapshot',function(){renderedElement=shallow(React.createElement(I18nProvider,null));renderedInstance=renderedElement.instance();expect(renderedElement).toMatchSnapshot();});it('should provide access to i18n via context',function(){var _renderedInstance$get=renderedInstance.getChildContext(),i18n=_renderedInstance$get.i18n;expect(i18n).toEqual(renderedInstance.getI18nInstance);});it('should translate when calling an instance method',function(){var _renderedInstance$get2=renderedInstance.getI18nInstance(),__=_renderedInstance$get2.__;var translated=__('greeting',{name:'Test'});expect(translated).toBe('Guten Tag Test');});});});
1
+ import React from 'react';
2
+ import { shallow } from 'enzyme';
3
+ import { i18n as i18nHelper } from '@shopgate/engage/core';
4
+ import I18nProvider from "./index";
5
+ jest.unmock('@shopgate/engage/core/helpers/i18n');
6
+ describe('<I18nProvider />', () => {
7
+ const locales = {
8
+ greeting: 'Guten Tag {name}'
9
+ };
10
+ const lang = 'de-DE';
11
+ i18nHelper.init({
12
+ locales,
13
+ lang
14
+ });
15
+ describe('Given the component was mounted to the DOM', () => {
16
+ let renderedElement;
17
+ let renderedInstance;
18
+ it('should match snapshot', () => {
19
+ renderedElement = shallow(/*#__PURE__*/React.createElement(I18nProvider, null));
20
+ renderedInstance = renderedElement.instance();
21
+ expect(renderedElement).toMatchSnapshot();
22
+ });
23
+ it('should provide access to i18n via context', () => {
24
+ const {
25
+ i18n
26
+ } = renderedInstance.getChildContext();
27
+ expect(i18n).toEqual(renderedInstance.getI18nInstance);
28
+ });
29
+ it('should translate when calling an instance method', () => {
30
+ const {
31
+ __
32
+ } = renderedInstance.getI18nInstance();
33
+ const translated = __('greeting', {
34
+ name: 'Test'
35
+ });
36
+ expect(translated).toBe('Guten Tag Test');
37
+ });
38
+ });
39
+ });
@@ -1,6 +1,12 @@
1
- import React,{Fragment}from'react';import PropTypes from'prop-types';/**
1
+ import React, { Fragment } from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ /**
2
5
  * A placeholder for a translation key.
3
6
  * @param {Object} props The component props.
4
7
  * @param {Object} context The component context.
5
8
  * @returns {JSX}
6
- */var Placeholder=function Placeholder(props){return React.createElement(Fragment,null,props.children);};Placeholder.format=function(props){return React.createElement(Placeholder,props);};export default Placeholder;
9
+ */
10
+ const Placeholder = props => /*#__PURE__*/React.createElement(Fragment, null, props.children);
11
+ Placeholder.format = props => /*#__PURE__*/React.createElement(Placeholder, props);
12
+ export default Placeholder;
@@ -1 +1,30 @@
1
- import React from'react';import{mount}from'enzyme';import{i18n}from'@shopgate/engage/core';import I18n from"../../index";jest.unmock('@shopgate/engage/core/helpers/i18n');describe('<Placeholder />',function(){var locales={greeting:'Hello {world}'};var lang='en-US';i18n.init({locales:locales,lang:lang});describe('Given the component was mounted to the DOM',function(){var renderedElement;it('should render',function(){renderedElement=mount(React.createElement(I18n.Provider,null,React.createElement(I18n.Text,{string:"greeting"},React.createElement(I18n.Placeholder,{forKey:"world"},React.createElement("strong",null,"WORLD")),"/")));expect(renderedElement).toMatchSnapshot();});it('should render with a placeholder text',function(){var text=renderedElement.find('strong').text();expect(text).toBe('WORLD');});});});
1
+ import React from 'react';
2
+ import { mount } from 'enzyme';
3
+ import { i18n } from '@shopgate/engage/core';
4
+ import I18n from "../../index";
5
+ jest.unmock('@shopgate/engage/core/helpers/i18n');
6
+ describe('<Placeholder />', () => {
7
+ const locales = {
8
+ greeting: 'Hello {world}'
9
+ };
10
+ const lang = 'en-US';
11
+ i18n.init({
12
+ locales,
13
+ lang
14
+ });
15
+ describe('Given the component was mounted to the DOM', () => {
16
+ let renderedElement;
17
+ it('should render', () => {
18
+ renderedElement = mount(/*#__PURE__*/React.createElement(I18n.Provider, null, /*#__PURE__*/React.createElement(I18n.Text, {
19
+ string: "greeting"
20
+ }, /*#__PURE__*/React.createElement(I18n.Placeholder, {
21
+ forKey: "world"
22
+ }, /*#__PURE__*/React.createElement("strong", null, "WORLD")), "/")));
23
+ expect(renderedElement).toMatchSnapshot();
24
+ });
25
+ it('should render with a placeholder text', () => {
26
+ const text = renderedElement.find('strong').text();
27
+ expect(text).toBe('WORLD');
28
+ });
29
+ });
30
+ });
@@ -1,4 +1,12 @@
1
- var _excluded=["string","children","params","className","role","transform","acceptPlainTextWithPlaceholders"];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;}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 _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}import React from'react';import PropTypes from'prop-types';import{renderToString}from'react-dom/server';import{logger}from'@shopgate/pwa-core';import{i18n}from'@shopgate/engage/core/helpers/i18n';/**
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.array.reduce.js";
3
+ import React from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import { renderToString } from 'react-dom/server';
6
+ import { logger } from '@shopgate/pwa-core';
7
+ import { i18n } from '@shopgate/engage/core/helpers/i18n';
8
+
9
+ /**
2
10
  * Returns a translation and replaces placeholder with children output.
3
11
  * It is possible to either pass JSX components or plain strings as replacement for
4
12
  * the translation keys.
@@ -15,9 +23,62 @@ var _excluded=["string","children","params","className","role","transform","acce
15
23
  * @param {boolean} [acceptPlainTextWithPlaceholders=false] When set to TRUE, the component can
16
24
  * also handle human readable texts that contain text replacement placeholders.
17
25
  * @returns {JSX.Element} The translated string as JSX component.
18
- */var Translate=function Translate(_ref){var string=_ref.string,children=_ref.children,params=_ref.params,className=_ref.className,role=_ref.role,transform=_ref.transform,acceptPlainTextWithPlaceholders=_ref.acceptPlainTextWithPlaceholders,rest=_objectWithoutProperties(_ref,_excluded);if(typeof string!=='string'||string.length===0){return string;}if(!i18n.ready){return React.createElement("span",_extends({className:className,role:role},rest),string);}// When the input string is malformed, return the original string rather than raising an error.
19
- var formatted=string;try{// First replace every occurrence of a translation key with a separator.
20
- var separator='__%S%__';var childrenArray=React.Children.toArray(children);var values=childrenArray.reduce(function(obj,child){return child.props&&child.props.forKey?_extends({},obj,_defineProperty({},child.props.forKey,separator)):obj;},_extends({},params));// Split the tokenized string at the separators.
21
- var stringParts=i18n.text(string,values,{acceptPlainTextWithPlaceholders:acceptPlainTextWithPlaceholders}).split(separator);// Create a new array containing the separated chunks of the text and merge the substitutions.
22
- // The result can be an array with multiple strings and will be joined together.
23
- formatted=stringParts.reduce(function(result,text,index){return[].concat(result,[text,childrenArray[index]]);},[]);}catch(e){logger.error('i18n error for string %s',string,e);}return React.createElement("span",_extends({className:className,role:role},rest),!transform?formatted:transform(renderToString(formatted)));};Translate.defaultProps={children:null,className:null,params:{},role:null,transform:null,acceptPlainTextWithPlaceholders:false};export default Translate;
26
+ */
27
+ const Translate = ({
28
+ string,
29
+ children,
30
+ params,
31
+ className,
32
+ role,
33
+ transform,
34
+ acceptPlainTextWithPlaceholders,
35
+ ...rest
36
+ }) => {
37
+ if (typeof string !== 'string' || string.length === 0) {
38
+ return string;
39
+ }
40
+ if (!i18n.ready) {
41
+ return /*#__PURE__*/React.createElement("span", _extends({
42
+ className: className,
43
+ role: role
44
+ }, rest), string);
45
+ }
46
+
47
+ // When the input string is malformed, return the original string rather than raising an error.
48
+ let formatted = string;
49
+ try {
50
+ // First replace every occurrence of a translation key with a separator.
51
+ const separator = '__%S%__';
52
+ const childrenArray = React.Children.toArray(children);
53
+ const values = childrenArray.reduce((obj, child) => child.props && child.props.forKey ? {
54
+ ...obj,
55
+ [child.props.forKey]: separator
56
+ } : obj, {
57
+ ...params
58
+ });
59
+
60
+ // Split the tokenized string at the separators.
61
+ const stringParts = i18n.text(string, values, {
62
+ acceptPlainTextWithPlaceholders
63
+ }).split(separator);
64
+
65
+ // Create a new array containing the separated chunks of the text and merge the substitutions.
66
+ // The result can be an array with multiple strings and will be joined together.
67
+ formatted = stringParts.reduce((result, text, index) => [...result, text, childrenArray[index]], []);
68
+ } catch (e) {
69
+ logger.error('i18n error for string %s', string, e);
70
+ }
71
+ return /*#__PURE__*/React.createElement("span", _extends({
72
+ className: className,
73
+ role: role
74
+ }, rest), !transform ? formatted : transform(renderToString(formatted)));
75
+ };
76
+ Translate.defaultProps = {
77
+ children: null,
78
+ className: null,
79
+ params: {},
80
+ role: null,
81
+ transform: null,
82
+ acceptPlainTextWithPlaceholders: false
83
+ };
84
+ export default Translate;
@@ -1 +1,30 @@
1
- import React from'react';import{mount}from'enzyme';import{i18n}from'@shopgate/engage/core';import I18n from"../../index";jest.unmock('@shopgate/engage/core/helpers/i18n');describe('<Translate />',function(){var locales={greeting:'Hello {name}'};i18n.init({locales:locales,lang:'en-US'});describe('Given the component was mounted to the DOM',function(){var renderedElement;it('should match snapshot',function(){renderedElement=mount(React.createElement(I18n.Provider,null,React.createElement(I18n.Text,{string:"greeting",params:{name:'Test'}})));expect(renderedElement).toMatchSnapshot();});it('should render translated text',function(){var text=renderedElement.find(I18n.Text).text();expect(text).toBe('Hello Test');});});});
1
+ import React from 'react';
2
+ import { mount } from 'enzyme';
3
+ import { i18n } from '@shopgate/engage/core';
4
+ import I18n from "../../index";
5
+ jest.unmock('@shopgate/engage/core/helpers/i18n');
6
+ describe('<Translate />', () => {
7
+ const locales = {
8
+ greeting: 'Hello {name}'
9
+ };
10
+ i18n.init({
11
+ locales,
12
+ lang: 'en-US'
13
+ });
14
+ describe('Given the component was mounted to the DOM', () => {
15
+ let renderedElement;
16
+ it('should match snapshot', () => {
17
+ renderedElement = mount(/*#__PURE__*/React.createElement(I18n.Provider, null, /*#__PURE__*/React.createElement(I18n.Text, {
18
+ string: "greeting",
19
+ params: {
20
+ name: 'Test'
21
+ }
22
+ })));
23
+ expect(renderedElement).toMatchSnapshot();
24
+ });
25
+ it('should render translated text', () => {
26
+ const text = renderedElement.find(I18n.Text).text();
27
+ expect(text).toBe('Hello Test');
28
+ });
29
+ });
30
+ });
@@ -1 +1,16 @@
1
- import I18nProvider from"./components/I18nProvider";import Placeholder from"./components/Placeholder";import Translate from"./components/Translate";import FormatDate from"./components/FormatDate";import FormatTime from"./components/FormatTime";import FormatPrice from"./components/FormatPrice";import FormatNumber from"./components/FormatNumber";export default{Provider:I18nProvider,Text:Translate,Date:FormatDate,Time:FormatTime,Placeholder:Placeholder,Price:FormatPrice,Number:FormatNumber};
1
+ import I18nProvider from "./components/I18nProvider";
2
+ import Placeholder from "./components/Placeholder";
3
+ import Translate from "./components/Translate";
4
+ import FormatDate from "./components/FormatDate";
5
+ import FormatTime from "./components/FormatTime";
6
+ import FormatPrice from "./components/FormatPrice";
7
+ import FormatNumber from "./components/FormatNumber";
8
+ export default {
9
+ Provider: I18nProvider,
10
+ Text: Translate,
11
+ Date: FormatDate,
12
+ Time: FormatTime,
13
+ Placeholder,
14
+ Price: FormatPrice,
15
+ Number: FormatNumber
16
+ };
@@ -1,4 +1,8 @@
1
- import React from'react';import PropTypes from'prop-types';import styles from"./style";/**
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import styles from "./style";
4
+
5
+ /**
2
6
  * The Icon component.
3
7
  * @param {Object} props The component props.
4
8
  * @param {string} props.content The SVG content of the icon
@@ -6,4 +10,23 @@ import React from'react';import PropTypes from'prop-types';import styles from"./
6
10
  * @param {string} [props.viewBox] The viewBox attribute passed to the SVG
7
11
  * @param {number} [props.size=24] The icon size
8
12
  * @returns {JSX.Element}
9
- */var Icon=function Icon(props){return React.createElement("svg",{className:"".concat(styles," ").concat(props.className," common__icon"),viewBox:props.viewBox,xmlns:"http://www.w3.org/2000/svg",dangerouslySetInnerHTML:{__html:props.content},style:{fontSize:props.size,fill:props.color}});};Icon.defaultProps={className:'',color:null,viewBox:'0 0 24 24',size:'inherit'};export default Icon;
13
+ */
14
+ const Icon = props => /*#__PURE__*/React.createElement("svg", {
15
+ className: `${styles} ${props.className} common__icon`,
16
+ viewBox: props.viewBox,
17
+ xmlns: "http://www.w3.org/2000/svg",
18
+ dangerouslySetInnerHTML: {
19
+ __html: props.content
20
+ },
21
+ style: {
22
+ fontSize: props.size,
23
+ fill: props.color
24
+ }
25
+ });
26
+ Icon.defaultProps = {
27
+ className: '',
28
+ color: null,
29
+ viewBox: '0 0 24 24',
30
+ size: 'inherit'
31
+ };
32
+ export default Icon;
@@ -1 +1,6 @@
1
- import{css}from'glamor';export default css({fill:'currentColor',width:'1em',height:'1em'}).toString();
1
+ import { css } from 'glamor';
2
+ export default css({
3
+ fill: 'currentColor',
4
+ width: '1em',
5
+ height: '1em'
6
+ }).toString();