@telefonica/mistica 10.20.0 → 10.21.0
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/CHANGELOG.md +13 -0
- package/dist/button-layout.js +28 -17
- package/dist/package-version.js +1 -1
- package/dist/theme-context-provider.js +8 -2
- package/dist/theme.d.ts +2 -0
- package/dist/theme.js.flow +2 -0
- package/dist/touchable.js +3 -2
- package/dist-es/button-layout.js +28 -17
- package/dist-es/package-version.js +1 -1
- package/dist-es/theme-context-provider.js +8 -2
- package/dist-es/touchable.js +3 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# [10.21.0](https://github.com/Telefonica/mistica-web/compare/v10.20.0...v10.21.0) (2022-01-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **ButtonLayout:** missed button press in button layout when gaining focus ([#396](https://github.com/Telefonica/mistica-web/issues/396)) ([9f3bba5](https://github.com/Telefonica/mistica-web/commit/9f3bba57affeac7b89c7dc831d00ce4ef33cdb5f))
|
|
7
|
+
* **ButtonLayout:** unstable in acceptance tests ([#404](https://github.com/Telefonica/mistica-web/issues/404)) ([11d4772](https://github.com/Telefonica/mistica-web/commit/11d4772c49d5f35bfcfa4ead6826782eccde5a18))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **Touchable:** WEB-435 add hrefDecorator to theme ([#401](https://github.com/Telefonica/mistica-web/issues/401)) ([21a45ee](https://github.com/Telefonica/mistica-web/commit/21a45ee84259af4ccca2a5adf2a7242b442d2874))
|
|
13
|
+
|
|
1
14
|
# [10.20.0](https://github.com/Telefonica/mistica-web/compare/v10.19.0...v10.20.0) (2022-01-24)
|
|
2
15
|
|
|
3
16
|
|
package/dist/button-layout.js
CHANGED
|
@@ -9,6 +9,7 @@ var _jss = require("./jss");
|
|
|
9
9
|
var _hooks = require("./hooks");
|
|
10
10
|
var _button = require("./button");
|
|
11
11
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
12
|
+
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
12
13
|
function _interopRequireDefault(obj) {
|
|
13
14
|
return obj && obj.__esModule ? obj : {
|
|
14
15
|
default: obj
|
|
@@ -207,28 +208,29 @@ var buttonsRange = [
|
|
|
207
208
|
var ButtonLayout = function ButtonLayout(param) {
|
|
208
209
|
var children = param.children, _align = param.align, align = _align === void 0 ? 'full-width' : _align, link = param.link, _withMargins = param.withMargins, withMargins = _withMargins === void 0 ? false : _withMargins;
|
|
209
210
|
var ref = (0, _hooks).useScreenSize(), isTabletOrSmaller = ref.isTabletOrSmaller;
|
|
210
|
-
var ref1 = _slicedToArray(React.useState(true), 2), isMeasuring = ref1[0], setIsMeasuring = ref1[1];
|
|
211
211
|
var childrenCount = React.Children.count(children);
|
|
212
|
-
var
|
|
213
|
-
|
|
212
|
+
var ref1 = _slicedToArray(React.useState({
|
|
213
|
+
isMeasuring: true,
|
|
214
|
+
buttonWidth: 0
|
|
215
|
+
}), 2), buttonStatus = ref1[0], setButtonStatus = ref1[1];
|
|
216
|
+
var updateButtonStatus = function updateButtonStatus(param) {
|
|
217
|
+
var isMeasuring = param.isMeasuring, buttonWidth = param.buttonWidth;
|
|
214
218
|
if (process.env.NODE_ENV !== 'test') {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (process.env.NODE_ENV !== 'test') {
|
|
220
|
-
setIsMeasuring(isMeasuring);
|
|
219
|
+
setButtonStatus({
|
|
220
|
+
isMeasuring: isMeasuring,
|
|
221
|
+
buttonWidth: buttonWidth
|
|
222
|
+
});
|
|
221
223
|
}
|
|
222
224
|
};
|
|
223
225
|
var classes = useStyles({
|
|
224
|
-
buttonWidth: buttonWidth,
|
|
226
|
+
buttonWidth: buttonStatus.buttonWidth,
|
|
225
227
|
isTabletOrSmaller: isTabletOrSmaller,
|
|
226
228
|
align: align,
|
|
227
229
|
childrenCount: childrenCount
|
|
228
230
|
});
|
|
229
231
|
var wrapperElRef = React.useRef(null);
|
|
230
232
|
(0, _hooks).useIsomorphicLayoutEffect(function() {
|
|
231
|
-
if (isMeasuring) {
|
|
233
|
+
if (buttonStatus.isMeasuring) {
|
|
232
234
|
var req = window.requestAnimationFrame(function() {
|
|
233
235
|
if (wrapperElRef.current) {
|
|
234
236
|
var childrenWidths = Array.from(wrapperElRef.current.children).map(function(el) {
|
|
@@ -243,8 +245,10 @@ var ButtonLayout = function ButtonLayout(param) {
|
|
|
243
245
|
var maxChildWidth = Math.ceil((_Math = Math).max.apply(_Math, _toConsumableArray(childrenWidths).concat([
|
|
244
246
|
_button.BUTTON_MIN_WIDTH
|
|
245
247
|
])));
|
|
246
|
-
|
|
247
|
-
|
|
248
|
+
updateButtonStatus({
|
|
249
|
+
isMeasuring: false,
|
|
250
|
+
buttonWidth: maxChildWidth
|
|
251
|
+
});
|
|
248
252
|
}
|
|
249
253
|
});
|
|
250
254
|
return function() {
|
|
@@ -255,11 +259,18 @@ var ButtonLayout = function ButtonLayout(param) {
|
|
|
255
259
|
};
|
|
256
260
|
}, [
|
|
257
261
|
classes.link,
|
|
258
|
-
|
|
262
|
+
buttonStatus
|
|
259
263
|
]);
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
264
|
+
/**
|
|
265
|
+
* Multiple calls to calcLayout are debounced to workaround an issue that can be reproduced in chrome when pressing
|
|
266
|
+
* the button during a focus/visibility change. For example, pressing the button having the focus on the devTools.
|
|
267
|
+
*/ var calcLayout = React.useMemo(function() {
|
|
268
|
+
return (0, _debounce).default(function() {
|
|
269
|
+
updateButtonStatus({
|
|
270
|
+
isMeasuring: true,
|
|
271
|
+
buttonWidth: 0
|
|
272
|
+
});
|
|
273
|
+
}, 50);
|
|
263
274
|
}, []);
|
|
264
275
|
useOnChildrenChangeEffect(wrapperElRef.current, calcLayout);
|
|
265
276
|
useOnFontsReadyEffect(calcLayout);
|
package/dist/package-version.js
CHANGED
|
@@ -148,6 +148,11 @@ var generateId = function() {
|
|
|
148
148
|
// in frontend, use the same generator for all JssProvider renders, this way we avoid classname collisions
|
|
149
149
|
return (0, _jss).createGenerateId();
|
|
150
150
|
}();
|
|
151
|
+
var useDefaultHrefDecorator = function useDefaultHrefDecorator() {
|
|
152
|
+
return function(href) {
|
|
153
|
+
return href;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
151
156
|
var ThemeContextProvider = function ThemeContextProvider(param) {
|
|
152
157
|
var theme = param.theme, children = param.children;
|
|
153
158
|
var classNamePrefix = React.useMemo(// we'll have missmatches when rendering client side. The disadvantage of this is that we can only have one instance of
|
|
@@ -173,7 +178,7 @@ var ThemeContextProvider = function ThemeContextProvider(param) {
|
|
|
173
178
|
platform: (0, _platform).getPlatform(),
|
|
174
179
|
insideNovumNativeApp: (0, _platform).isInsideNovumNativeApp()
|
|
175
180
|
}, theme.platformOverrides);
|
|
176
|
-
var _mediaQueries1, _Link;
|
|
181
|
+
var _mediaQueries1, _Link, _useHrefDecorator;
|
|
177
182
|
return {
|
|
178
183
|
skinName: theme.skin.name,
|
|
179
184
|
i18n: theme.i18n,
|
|
@@ -191,7 +196,8 @@ var ThemeContextProvider = function ThemeContextProvider(param) {
|
|
|
191
196
|
colors: colors,
|
|
192
197
|
Link: (_Link = theme.Link) !== null && _Link !== void 0 ? _Link : _theme.AnchorLink,
|
|
193
198
|
isDarkMode: isDarkModeEnabled,
|
|
194
|
-
isIos: (0, _platform).getPlatform(platformOverrides) === 'ios'
|
|
199
|
+
isIos: (0, _platform).getPlatform(platformOverrides) === 'ios',
|
|
200
|
+
useHrefDecorator: (_useHrefDecorator = theme.useHrefDecorator) !== null && _useHrefDecorator !== void 0 ? _useHrefDecorator : useDefaultHrefDecorator
|
|
195
201
|
};
|
|
196
202
|
}, [
|
|
197
203
|
theme,
|
package/dist/theme.d.ts
CHANGED
|
@@ -98,6 +98,7 @@ export declare type ThemeConfig = {
|
|
|
98
98
|
desktopOrTabletMinHeight: number;
|
|
99
99
|
};
|
|
100
100
|
Link?: LinkComponent;
|
|
101
|
+
useHrefDecorator?: () => (href: string) => string;
|
|
101
102
|
enableTabFocus?: boolean;
|
|
102
103
|
};
|
|
103
104
|
export declare type Theme = {
|
|
@@ -132,5 +133,6 @@ export declare type Theme = {
|
|
|
132
133
|
Link: LinkComponent;
|
|
133
134
|
isDarkMode: boolean;
|
|
134
135
|
isIos: boolean;
|
|
136
|
+
useHrefDecorator: () => (href: string) => string;
|
|
135
137
|
};
|
|
136
138
|
export {};
|
package/dist/theme.js.flow
CHANGED
|
@@ -102,6 +102,7 @@ export type ThemeConfig = {
|
|
|
102
102
|
desktopOrTabletMinHeight: number,
|
|
103
103
|
},
|
|
104
104
|
Link?: LinkComponent,
|
|
105
|
+
useHrefDecorator?: () => (href: string) => string,
|
|
105
106
|
enableTabFocus?: boolean,
|
|
106
107
|
};
|
|
107
108
|
export type Theme = {
|
|
@@ -136,6 +137,7 @@ export type Theme = {
|
|
|
136
137
|
Link: LinkComponent,
|
|
137
138
|
isDarkMode: boolean,
|
|
138
139
|
isIos: boolean,
|
|
140
|
+
useHrefDecorator: () => (href: string) => string,
|
|
139
141
|
};
|
|
140
142
|
declare export {};
|
|
141
143
|
|
package/dist/touchable.js
CHANGED
|
@@ -114,7 +114,8 @@ var useStyles = (0, _jss).createUseStyles(function() {
|
|
|
114
114
|
};
|
|
115
115
|
});
|
|
116
116
|
var Touchable = /*#__PURE__*/ React.forwardRef(function(props, ref) {
|
|
117
|
-
var ref1 = (0, _hooks).useTheme(), texts = ref1.texts, analytics = ref1.analytics, platformOverrides = ref1.platformOverrides, Link = ref1.Link;
|
|
117
|
+
var ref1 = (0, _hooks).useTheme(), texts = ref1.texts, analytics = ref1.analytics, platformOverrides = ref1.platformOverrides, Link = ref1.Link, useHrefDecorator = ref1.useHrefDecorator;
|
|
118
|
+
var hrefDecorator = useHrefDecorator();
|
|
118
119
|
var classes = useStyles();
|
|
119
120
|
var isClicked = React.useRef(false);
|
|
120
121
|
var trackingEvents = [];
|
|
@@ -150,7 +151,7 @@ var Touchable = /*#__PURE__*/ React.forwardRef(function(props, ref) {
|
|
|
150
151
|
};
|
|
151
152
|
var getHref = function getHref() {
|
|
152
153
|
if (props.href) {
|
|
153
|
-
return props.href;
|
|
154
|
+
return hrefDecorator(props.href);
|
|
154
155
|
}
|
|
155
156
|
if (props.to && props.fullPageOnWebView) {
|
|
156
157
|
if (typeof props.to === 'string') {
|
package/dist-es/button-layout.js
CHANGED
|
@@ -4,6 +4,7 @@ import { createUseStyles } from './jss';
|
|
|
4
4
|
import { useScreenSize, useIsomorphicLayoutEffect } from './hooks';
|
|
5
5
|
import { BUTTON_MIN_WIDTH, ButtonPrimary, ButtonSecondary, ButtonDanger } from './button';
|
|
6
6
|
import classNames from 'classnames';
|
|
7
|
+
import debounce from 'lodash/debounce';
|
|
7
8
|
function _arrayWithHoles(arr) {
|
|
8
9
|
if (Array.isArray(arr)) return arr;
|
|
9
10
|
}
|
|
@@ -174,28 +175,29 @@ var buttonsRange = [
|
|
|
174
175
|
var ButtonLayout = function(param) {
|
|
175
176
|
var children = param.children, _align = param.align, align = _align === void 0 ? 'full-width' : _align, link = param.link, _withMargins = param.withMargins, withMargins = _withMargins === void 0 ? false : _withMargins;
|
|
176
177
|
var ref = useScreenSize(), isTabletOrSmaller = ref.isTabletOrSmaller;
|
|
177
|
-
var ref1 = _slicedToArray(React.useState(true), 2), isMeasuring = ref1[0], setIsMeasuring = ref1[1];
|
|
178
178
|
var childrenCount = React.Children.count(children);
|
|
179
|
-
var
|
|
180
|
-
|
|
179
|
+
var ref1 = _slicedToArray(React.useState({
|
|
180
|
+
isMeasuring: true,
|
|
181
|
+
buttonWidth: 0
|
|
182
|
+
}), 2), buttonStatus = ref1[0], setButtonStatus = ref1[1];
|
|
183
|
+
var updateButtonStatus = function(param) {
|
|
184
|
+
var isMeasuring = param.isMeasuring, buttonWidth = param.buttonWidth;
|
|
181
185
|
if (process.env.NODE_ENV !== 'test') {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (process.env.NODE_ENV !== 'test') {
|
|
187
|
-
setIsMeasuring(isMeasuring);
|
|
186
|
+
setButtonStatus({
|
|
187
|
+
isMeasuring: isMeasuring,
|
|
188
|
+
buttonWidth: buttonWidth
|
|
189
|
+
});
|
|
188
190
|
}
|
|
189
191
|
};
|
|
190
192
|
var classes = useStyles({
|
|
191
|
-
buttonWidth: buttonWidth,
|
|
193
|
+
buttonWidth: buttonStatus.buttonWidth,
|
|
192
194
|
isTabletOrSmaller: isTabletOrSmaller,
|
|
193
195
|
align: align,
|
|
194
196
|
childrenCount: childrenCount
|
|
195
197
|
});
|
|
196
198
|
var wrapperElRef = React.useRef(null);
|
|
197
199
|
useIsomorphicLayoutEffect(function() {
|
|
198
|
-
if (isMeasuring) {
|
|
200
|
+
if (buttonStatus.isMeasuring) {
|
|
199
201
|
var req = window.requestAnimationFrame(function() {
|
|
200
202
|
if (wrapperElRef.current) {
|
|
201
203
|
var childrenWidths = Array.from(wrapperElRef.current.children).map(function(el) {
|
|
@@ -210,8 +212,10 @@ var ButtonLayout = function(param) {
|
|
|
210
212
|
var maxChildWidth = Math.ceil((_Math = Math).max.apply(_Math, _toConsumableArray(childrenWidths).concat([
|
|
211
213
|
BUTTON_MIN_WIDTH
|
|
212
214
|
])));
|
|
213
|
-
|
|
214
|
-
|
|
215
|
+
updateButtonStatus({
|
|
216
|
+
isMeasuring: false,
|
|
217
|
+
buttonWidth: maxChildWidth
|
|
218
|
+
});
|
|
215
219
|
}
|
|
216
220
|
});
|
|
217
221
|
return function() {
|
|
@@ -222,11 +226,18 @@ var ButtonLayout = function(param) {
|
|
|
222
226
|
};
|
|
223
227
|
}, [
|
|
224
228
|
classes.link,
|
|
225
|
-
|
|
229
|
+
buttonStatus
|
|
226
230
|
]);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
231
|
+
/**
|
|
232
|
+
* Multiple calls to calcLayout are debounced to workaround an issue that can be reproduced in chrome when pressing
|
|
233
|
+
* the button during a focus/visibility change. For example, pressing the button having the focus on the devTools.
|
|
234
|
+
*/ var calcLayout = React.useMemo(function() {
|
|
235
|
+
return debounce(function() {
|
|
236
|
+
updateButtonStatus({
|
|
237
|
+
isMeasuring: true,
|
|
238
|
+
buttonWidth: 0
|
|
239
|
+
});
|
|
240
|
+
}, 50);
|
|
230
241
|
}, []);
|
|
231
242
|
useOnChildrenChangeEffect(wrapperElRef.current, calcLayout);
|
|
232
243
|
useOnFontsReadyEffect(calcLayout);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// DO NOT EDIT THIS FILE. It's autogenerated by set-version.js
|
|
2
|
-
export var PACKAGE_VERSION = '10.
|
|
2
|
+
export var PACKAGE_VERSION = '10.21.0';
|
|
@@ -113,6 +113,11 @@ var generateId = function() {
|
|
|
113
113
|
// in frontend, use the same generator for all JssProvider renders, this way we avoid classname collisions
|
|
114
114
|
return createGenerateId();
|
|
115
115
|
}();
|
|
116
|
+
var useDefaultHrefDecorator = function() {
|
|
117
|
+
return function(href) {
|
|
118
|
+
return href;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
116
121
|
var ThemeContextProvider = function(param) {
|
|
117
122
|
var theme = param.theme, children = param.children;
|
|
118
123
|
var classNamePrefix = React.useMemo(// Always start the counter in 0 in server side, otherwise every new request to the server will inclrement the counter and
|
|
@@ -139,7 +144,7 @@ var ThemeContextProvider = function(param) {
|
|
|
139
144
|
platform: getPlatform(),
|
|
140
145
|
insideNovumNativeApp: isInsideNovumNativeApp()
|
|
141
146
|
}, theme.platformOverrides);
|
|
142
|
-
var _mediaQueries, _Link;
|
|
147
|
+
var _mediaQueries, _Link, _useHrefDecorator;
|
|
143
148
|
return {
|
|
144
149
|
skinName: theme.skin.name,
|
|
145
150
|
i18n: theme.i18n,
|
|
@@ -157,7 +162,8 @@ var ThemeContextProvider = function(param) {
|
|
|
157
162
|
colors: colors,
|
|
158
163
|
Link: (_Link = theme.Link) !== null && _Link !== void 0 ? _Link : AnchorLink,
|
|
159
164
|
isDarkMode: isDarkModeEnabled,
|
|
160
|
-
isIos: getPlatform(platformOverrides) === 'ios'
|
|
165
|
+
isIos: getPlatform(platformOverrides) === 'ios',
|
|
166
|
+
useHrefDecorator: (_useHrefDecorator = theme.useHrefDecorator) !== null && _useHrefDecorator !== void 0 ? _useHrefDecorator : useDefaultHrefDecorator
|
|
161
167
|
};
|
|
162
168
|
}, [
|
|
163
169
|
theme,
|
package/dist-es/touchable.js
CHANGED
|
@@ -80,7 +80,8 @@ var useStyles = createUseStyles(function() {
|
|
|
80
80
|
};
|
|
81
81
|
});
|
|
82
82
|
var Touchable = /*#__PURE__*/ React.forwardRef(function(props, ref) {
|
|
83
|
-
var ref1 = useTheme(), texts = ref1.texts, analytics = ref1.analytics, platformOverrides = ref1.platformOverrides, Link = ref1.Link;
|
|
83
|
+
var ref1 = useTheme(), texts = ref1.texts, analytics = ref1.analytics, platformOverrides = ref1.platformOverrides, Link = ref1.Link, useHrefDecorator = ref1.useHrefDecorator;
|
|
84
|
+
var hrefDecorator = useHrefDecorator();
|
|
84
85
|
var classes = useStyles();
|
|
85
86
|
var isClicked = React.useRef(false);
|
|
86
87
|
var trackingEvents = [];
|
|
@@ -116,7 +117,7 @@ var Touchable = /*#__PURE__*/ React.forwardRef(function(props, ref) {
|
|
|
116
117
|
};
|
|
117
118
|
var getHref = function() {
|
|
118
119
|
if (props.href) {
|
|
119
|
-
return props.href;
|
|
120
|
+
return hrefDecorator(props.href);
|
|
120
121
|
}
|
|
121
122
|
if (props.to && props.fullPageOnWebView) {
|
|
122
123
|
if (typeof props.to === 'string') {
|