@widergy/mobile-ui 1.18.5 → 1.19.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
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.19.0](https://github.com/widergy/mobile-ui/compare/v1.18.6...v1.19.0) (2024-08-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* event multitracking ([#334](https://github.com/widergy/mobile-ui/issues/334)) ([5364c58](https://github.com/widergy/mobile-ui/commit/5364c58894d65a5b0662393c17d745e5eca40356))
|
|
7
|
+
|
|
8
|
+
## [1.18.6](https://github.com/widergy/mobile-ui/compare/v1.18.5...v1.18.6) (2024-08-23)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* utselectablecard border radius ([#331](https://github.com/widergy/mobile-ui/issues/331)) ([00f17a6](https://github.com/widergy/mobile-ui/commit/00f17a6ac99f764df6f82b61fd733a7fddae8e27))
|
|
14
|
+
|
|
1
15
|
## [1.18.5](https://github.com/widergy/mobile-ui/compare/v1.18.4...v1.18.5) (2024-08-23)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { bool, func, number, shape, string } from 'prop-types';
|
|
3
3
|
import { Image, View } from 'react-native';
|
|
4
|
-
import
|
|
5
|
-
import { isEmpty } from 'lodash';
|
|
4
|
+
import isEmpty from 'lodash/isEmpty';
|
|
6
5
|
|
|
7
6
|
import Touchable from '../Touchable';
|
|
8
7
|
import Surface from '../Surface';
|
|
@@ -10,8 +9,9 @@ import UTTooltip from '../UTTooltip';
|
|
|
10
9
|
import { useTheme } from '../../theming';
|
|
11
10
|
import UTIcon from '../UTIcon';
|
|
12
11
|
import UTLabel from '../UTLabel';
|
|
12
|
+
import { mergeMultipleStyles } from '../../utils/styleUtils';
|
|
13
13
|
|
|
14
|
-
import { getColorTheme,
|
|
14
|
+
import { getColorTheme, ownStyles, ICON_SIZE, getAppearanceStyles, ownSizeStyles } from './styles';
|
|
15
15
|
|
|
16
16
|
const UTSelectableCard = ({
|
|
17
17
|
additionalInfo = {},
|
|
@@ -28,9 +28,10 @@ const UTSelectableCard = ({
|
|
|
28
28
|
tooltip
|
|
29
29
|
}) => {
|
|
30
30
|
const theme = useTheme();
|
|
31
|
-
const themedStyles =
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const themedStyles = mergeMultipleStyles(
|
|
32
|
+
ownStyles,
|
|
33
|
+
getAppearanceStyles(theme)[appearance],
|
|
34
|
+
ownSizeStyles[size],
|
|
34
35
|
theme?.UTSelectableCard,
|
|
35
36
|
style
|
|
36
37
|
);
|
|
@@ -43,10 +44,10 @@ const UTSelectableCard = ({
|
|
|
43
44
|
disabled={disabled}
|
|
44
45
|
onPress={() => onPress?.()}
|
|
45
46
|
style={[
|
|
46
|
-
themedStyles
|
|
47
|
-
selected && themedStyles
|
|
48
|
-
disabled && themedStyles
|
|
49
|
-
themedStyles
|
|
47
|
+
themedStyles.appearance,
|
|
48
|
+
selected && themedStyles.selectedContainer,
|
|
49
|
+
disabled && themedStyles.disabledContainer,
|
|
50
|
+
themedStyles.size
|
|
50
51
|
]}
|
|
51
52
|
>
|
|
52
53
|
<View style={themedStyles.container}>
|
|
@@ -2,88 +2,102 @@ import { StyleSheet } from 'react-native';
|
|
|
2
2
|
|
|
3
3
|
export const ICON_SIZE = 40;
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
additionalInfo: {
|
|
8
|
-
textAlign: 'right'
|
|
9
|
-
},
|
|
10
|
-
checkIcon: {
|
|
11
|
-
marginLeft: 16
|
|
12
|
-
},
|
|
13
|
-
column: {
|
|
14
|
-
alignSelf: 'center'
|
|
15
|
-
},
|
|
16
|
-
container: {
|
|
17
|
-
alignItems: 'center',
|
|
18
|
-
display: 'flex',
|
|
19
|
-
flexDirection: 'row'
|
|
20
|
-
},
|
|
21
|
-
description: {
|
|
22
|
-
marginTop: 4
|
|
23
|
-
},
|
|
24
|
-
icon: {
|
|
25
|
-
marginRight: 16
|
|
26
|
-
},
|
|
27
|
-
outerContainer: {
|
|
28
|
-
borderRadius: 4
|
|
29
|
-
},
|
|
30
|
-
selectedTitleAndTooltip: {
|
|
31
|
-
maxWidth: 300
|
|
32
|
-
},
|
|
33
|
-
textContainer: {
|
|
34
|
-
display: 'flex',
|
|
35
|
-
flexDirection: 'row',
|
|
36
|
-
flexGrow: 1,
|
|
37
|
-
justifyContent: 'space-between'
|
|
38
|
-
},
|
|
39
|
-
titleAndTooltip: {
|
|
40
|
-
alignItems: 'center',
|
|
41
|
-
display: 'flex',
|
|
42
|
-
flexDirection: 'row'
|
|
43
|
-
},
|
|
44
|
-
titleMargin: {
|
|
45
|
-
marginRight: 8
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
// Sizes
|
|
49
|
-
mediumSize: {
|
|
50
|
-
padding: 24
|
|
51
|
-
},
|
|
52
|
-
smallSize: {
|
|
53
|
-
padding: 16
|
|
54
|
-
},
|
|
5
|
+
const WHITE = 'white';
|
|
6
|
+
const GRAY = 'gray';
|
|
55
7
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
8
|
+
export const getAppearanceStyles = (theme = {}) => ({
|
|
9
|
+
[WHITE]: {
|
|
10
|
+
appearance: {
|
|
11
|
+
backgroundColor: theme.Palette.light['01'],
|
|
59
12
|
borderColor: 'transparent',
|
|
13
|
+
borderRadius: 4,
|
|
60
14
|
borderWidth: 2
|
|
61
15
|
},
|
|
62
|
-
|
|
63
|
-
backgroundColor: theme.
|
|
16
|
+
disabledContainer: {
|
|
17
|
+
backgroundColor: theme.Palette.light['03'],
|
|
64
18
|
borderColor: 'transparent',
|
|
65
19
|
borderWidth: 2
|
|
66
20
|
},
|
|
67
|
-
|
|
68
|
-
borderColor: theme.
|
|
21
|
+
selectedContainer: {
|
|
22
|
+
borderColor: theme.Palette.accent['05'],
|
|
69
23
|
borderWidth: 2
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
backgroundColor: theme.
|
|
75
|
-
borderColor: theme.
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
[GRAY]: {
|
|
27
|
+
appearance: {
|
|
28
|
+
backgroundColor: theme.Palette.light['03'],
|
|
29
|
+
borderColor: theme.Palette.light['05'],
|
|
30
|
+
borderRadius: 4,
|
|
76
31
|
borderWidth: 1
|
|
77
32
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
borderWidth: 2
|
|
33
|
+
disabledContainer: {
|
|
34
|
+
borderWidth: 1
|
|
81
35
|
},
|
|
82
|
-
|
|
83
|
-
backgroundColor: theme.
|
|
84
|
-
borderColor: theme.
|
|
85
|
-
borderWidth:
|
|
36
|
+
selectedContainer: {
|
|
37
|
+
backgroundColor: theme.Palette.accent['01'],
|
|
38
|
+
borderColor: theme.Palette.accent['03'],
|
|
39
|
+
borderWidth: 1
|
|
86
40
|
}
|
|
87
|
-
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const MEDIUM = 'medium';
|
|
45
|
+
const SMALL = 'small';
|
|
46
|
+
|
|
47
|
+
export const ownSizeStyles = {
|
|
48
|
+
[MEDIUM]: {
|
|
49
|
+
size: {
|
|
50
|
+
padding: 24
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
[SMALL]: {
|
|
54
|
+
size: {
|
|
55
|
+
padding: 16
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const ownStyles = StyleSheet.create({
|
|
61
|
+
additionalInfo: {
|
|
62
|
+
textAlign: 'right'
|
|
63
|
+
},
|
|
64
|
+
checkIcon: {
|
|
65
|
+
marginLeft: 16
|
|
66
|
+
},
|
|
67
|
+
column: {
|
|
68
|
+
alignSelf: 'center'
|
|
69
|
+
},
|
|
70
|
+
container: {
|
|
71
|
+
alignItems: 'center',
|
|
72
|
+
display: 'flex',
|
|
73
|
+
flexDirection: 'row'
|
|
74
|
+
},
|
|
75
|
+
description: {
|
|
76
|
+
marginTop: 4
|
|
77
|
+
},
|
|
78
|
+
icon: {
|
|
79
|
+
marginRight: 16
|
|
80
|
+
},
|
|
81
|
+
outerContainer: {
|
|
82
|
+
borderRadius: 4
|
|
83
|
+
},
|
|
84
|
+
selectedTitleAndTooltip: {
|
|
85
|
+
maxWidth: 300
|
|
86
|
+
},
|
|
87
|
+
textContainer: {
|
|
88
|
+
display: 'flex',
|
|
89
|
+
flexDirection: 'row',
|
|
90
|
+
flexGrow: 1,
|
|
91
|
+
justifyContent: 'space-between'
|
|
92
|
+
},
|
|
93
|
+
titleAndTooltip: {
|
|
94
|
+
alignItems: 'center',
|
|
95
|
+
display: 'flex',
|
|
96
|
+
flexDirection: 'row'
|
|
97
|
+
},
|
|
98
|
+
titleMargin: {
|
|
99
|
+
marginRight: 8
|
|
100
|
+
}
|
|
101
|
+
});
|
|
88
102
|
|
|
89
103
|
export const getColorTheme = (selected, disabled) => (selected ? 'accent' : disabled ? 'gray' : 'dark');
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* VERSION 5.X.X ONLY, version 6.x.x introduces breaking changes
|
|
5
5
|
* */
|
|
6
6
|
|
|
7
|
+
import { isEmpty, merge } from 'lodash';
|
|
8
|
+
|
|
7
9
|
const LOG_EVENT = 'LOG_EVENT';
|
|
8
10
|
const SET_CURRENT_SCREEN = 'SET_CURRENT_SCREEN';
|
|
9
11
|
const SET_USER_ID = 'SET_USER_ID';
|
|
@@ -65,11 +67,64 @@ export const multiTracking = trackerArgumentsArray =>
|
|
|
65
67
|
createAnalyticsMiddleware(trackerArguments.eventsMapper, trackerArguments.analytics)
|
|
66
68
|
);
|
|
67
69
|
|
|
70
|
+
export const mixpanelUserIdentify = mixpanelInstance => userProfileProperties => {
|
|
71
|
+
const { id } = userProfileProperties;
|
|
72
|
+
if (mixpanelInstance) {
|
|
73
|
+
mixpanelInstance.identify(`${id}`);
|
|
74
|
+
mixpanelInstance.getPeople().set({
|
|
75
|
+
$name: `${id}`,
|
|
76
|
+
$email: null,
|
|
77
|
+
...userProfileProperties
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const mixpanelUserReset = mixpanelInstance => () => {
|
|
83
|
+
if (mixpanelInstance) mixpanelInstance.reset();
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const mixpanelEventsFlush = mixpanelInstance => () => {
|
|
87
|
+
if (mixpanelInstance) mixpanelInstance.flush();
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const singleMixpanelEvent = mixpanelInstance => eventData => {
|
|
91
|
+
const { name, ...yourProperties } = eventData;
|
|
92
|
+
if (mixpanelInstance) mixpanelInstance.track(name, yourProperties);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const singleFirebaseEvent = analyticsIntance => eventData => {
|
|
96
|
+
const { action, category, currency, label, value } = eventData;
|
|
97
|
+
if (analyticsIntance) analyticsIntance.logEvent(category, { action, currency, label, value });
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export const singleInhouseEvent = sendInhouseAnalytics => eventData => {
|
|
101
|
+
sendInhouseAnalytics(null, eventData);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const singleEventMultitracking = (trackers, eventDefinitions) => (name, eventData) => {
|
|
105
|
+
const mergedData = merge(eventDefinitions[name] || {}, eventData || {});
|
|
106
|
+
const { sharedProps, ...trackerProps } = mergedData;
|
|
107
|
+
const trackersArray = Object.keys(mergedData);
|
|
108
|
+
if (!isEmpty(trackers))
|
|
109
|
+
trackersArray.forEach(trackerName => {
|
|
110
|
+
const eventTracker = trackers[trackerName];
|
|
111
|
+
const fullEventData = merge(trackerProps[trackerName], sharedProps);
|
|
112
|
+
eventTracker?.(fullEventData);
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
|
|
68
116
|
export default {
|
|
69
117
|
createAnalyticsMiddleware,
|
|
118
|
+
mixpanelEventsFlush,
|
|
119
|
+
mixpanelUserIdentify,
|
|
120
|
+
mixpanelUserReset,
|
|
121
|
+
multiTracking,
|
|
122
|
+
setUserTracking,
|
|
123
|
+
singleEventMultitracking,
|
|
124
|
+
singleFirebaseEvent,
|
|
125
|
+
singleInhouseEvent,
|
|
126
|
+
singleMixpanelEvent,
|
|
70
127
|
tracker,
|
|
71
128
|
trackEvent,
|
|
72
|
-
trackScreen
|
|
73
|
-
setUserTracking,
|
|
74
|
-
multiTracking
|
|
129
|
+
trackScreen
|
|
75
130
|
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import isArray from 'lodash/isArray';
|
|
2
|
+
import mergeWith from 'lodash/mergeWith';
|
|
3
|
+
|
|
1
4
|
export const SHADOW_OPACITY = 0.1;
|
|
2
5
|
|
|
3
6
|
const shadowLevels = {
|
|
@@ -65,6 +68,18 @@ export const getCustomStyles = (variants, props, styles, stylePrefix = '') =>
|
|
|
65
68
|
.map(variant => (props[variant] ? styles[`${variant}${stylePrefix}`] : null))
|
|
66
69
|
.filter(style => style !== null);
|
|
67
70
|
|
|
71
|
+
const asArray = value => (isArray(value) ? value : [value]);
|
|
72
|
+
|
|
73
|
+
export const mergeMultipleStyles = (...params) => {
|
|
74
|
+
return mergeWith({}, ...params, (valueA, valueB) => {
|
|
75
|
+
if (valueA && valueB && (isArray(valueA) || isArray(valueB))) {
|
|
76
|
+
return [...asArray(valueA), ...asArray(valueB)];
|
|
77
|
+
}
|
|
78
|
+
// By returning `undefined`, lodash will use its default merging behavior for objects
|
|
79
|
+
return undefined;
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
|
|
68
83
|
export default {
|
|
69
84
|
generateLayoutMeasuresObject,
|
|
70
85
|
getCustomStyles
|
package/package.json
CHANGED