@abihealth/goapp-react-native 1.45.1 → 1.45.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/CHANGELOG.md +7 -0
- package/dist/common/components/ErrorBanner.d.ts +9 -0
- package/dist/common/components/ErrorBanner.js +88 -0
- package/dist/common/components/FormControl.js +3 -2
- package/dist/common/hooks/useForm.js +5 -1
- package/dist/common/icons/InfoIcon.d.ts +4 -1
- package/dist/common/icons/InfoIcon.js +3 -2
- package/dist/common/screens/RatingScreen.js +8 -7
- package/dist/video-consultations/screens/DeliveryAddressScreen.js +2 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.45.2](https://github.com/abiglobalhealth/react-native-sdk/compare/goapp-react-native-v1.45.1...goapp-react-native-v1.45.2) (2025-10-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* abi-11089 alpha bug errors found ([#254](https://github.com/abiglobalhealth/react-native-sdk/issues/254)) ([a1ef92b](https://github.com/abiglobalhealth/react-native-sdk/commit/a1ef92b77f89d85a17141f36782d53b40bf04539))
|
|
9
|
+
|
|
3
10
|
## [1.45.1](https://github.com/abiglobalhealth/react-native-sdk/compare/goapp-react-native-v1.45.0...goapp-react-native-v1.45.1) (2025-10-22)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Animated } from 'react-native';
|
|
3
|
+
interface ErrorBannerProps {
|
|
4
|
+
title: string;
|
|
5
|
+
message: string;
|
|
6
|
+
animationValue?: Animated.Value;
|
|
7
|
+
}
|
|
8
|
+
export declare const ErrorBanner: ({ title, message }: ErrorBannerProps) => React.JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ErrorBanner = void 0;
|
|
37
|
+
var Text_1 = require("../components/Text");
|
|
38
|
+
var useTheme_1 = require("../hooks/useTheme");
|
|
39
|
+
var InfoIcon_1 = require("../icons/InfoIcon");
|
|
40
|
+
var react_1 = __importStar(require("react"));
|
|
41
|
+
var react_native_1 = require("react-native");
|
|
42
|
+
var ErrorBanner = function (_a) {
|
|
43
|
+
var title = _a.title, message = _a.message;
|
|
44
|
+
var theme = (0, useTheme_1.useTheme)();
|
|
45
|
+
var styles = getStyles(theme);
|
|
46
|
+
(0, react_1.useEffect)(function () {
|
|
47
|
+
var timeout = setTimeout(function () {
|
|
48
|
+
react_native_1.AccessibilityInfo.announceForAccessibility(message);
|
|
49
|
+
}, 100);
|
|
50
|
+
return function () { return clearTimeout(timeout); };
|
|
51
|
+
}, []);
|
|
52
|
+
return (<react_native_1.View style={styles.container} accessibilityRole="alert" accessibilityLiveRegion="polite">
|
|
53
|
+
<InfoIcon_1.InfoIcon color={theme.palette.white}/>
|
|
54
|
+
<react_native_1.View>
|
|
55
|
+
<Text_1.Text variant="sm" style={styles.text} bold>
|
|
56
|
+
{title}
|
|
57
|
+
</Text_1.Text>
|
|
58
|
+
<Text_1.Text variant="sm" style={styles.text}>
|
|
59
|
+
{message}
|
|
60
|
+
</Text_1.Text>
|
|
61
|
+
</react_native_1.View>
|
|
62
|
+
</react_native_1.View>);
|
|
63
|
+
};
|
|
64
|
+
exports.ErrorBanner = ErrorBanner;
|
|
65
|
+
var getStyles = function (_a) {
|
|
66
|
+
var spacing = _a.spacing, palette = _a.palette;
|
|
67
|
+
return react_native_1.StyleSheet.create({
|
|
68
|
+
container: {
|
|
69
|
+
position: 'absolute',
|
|
70
|
+
top: spacing.md,
|
|
71
|
+
left: spacing.md,
|
|
72
|
+
right: spacing.md,
|
|
73
|
+
backgroundColor: palette.error,
|
|
74
|
+
flexDirection: 'row',
|
|
75
|
+
alignItems: 'center',
|
|
76
|
+
justifyContent: 'flex-start',
|
|
77
|
+
paddingVertical: spacing.xs,
|
|
78
|
+
paddingHorizontal: spacing.sm,
|
|
79
|
+
columnGap: spacing.sm,
|
|
80
|
+
borderRadius: spacing.xs,
|
|
81
|
+
zIndex: 1000
|
|
82
|
+
},
|
|
83
|
+
text: {
|
|
84
|
+
color: '#FFFFFF',
|
|
85
|
+
textAlign: 'left'
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
};
|
|
@@ -16,7 +16,7 @@ var FormControl = function (_a) {
|
|
|
16
16
|
{label}
|
|
17
17
|
</Text_1.Text>)}
|
|
18
18
|
{children}
|
|
19
|
-
<Text_1.Text variant="sm"
|
|
19
|
+
<Text_1.Text variant="sm" style={[styles.error, customComponentStyle === null || customComponentStyle === void 0 ? void 0 : customComponentStyle.errorStyle]}>
|
|
20
20
|
{error}
|
|
21
21
|
</Text_1.Text>
|
|
22
22
|
</react_native_1.View>);
|
|
@@ -39,7 +39,8 @@ var getStyles = function (_a) {
|
|
|
39
39
|
},
|
|
40
40
|
error: {
|
|
41
41
|
minHeight: spacing.xs,
|
|
42
|
-
textAlign: 'auto'
|
|
42
|
+
textAlign: 'auto',
|
|
43
|
+
color: palette.error
|
|
43
44
|
}
|
|
44
45
|
});
|
|
45
46
|
};
|
|
@@ -90,8 +90,12 @@ var useForm = function () {
|
|
|
90
90
|
if (firstErrorField_1) {
|
|
91
91
|
inputRef_1 = currentRefs.get(firstErrorField_1);
|
|
92
92
|
setTimeout(function () {
|
|
93
|
-
|
|
93
|
+
if (!inputRef_1)
|
|
94
|
+
return;
|
|
94
95
|
react_native_1.AccessibilityInfo.announceForAccessibility(parsedErrors_1[firstErrorField_1]);
|
|
96
|
+
var reactTag = (0, react_native_1.findNodeHandle)(inputRef_1);
|
|
97
|
+
if (reactTag)
|
|
98
|
+
react_native_1.AccessibilityInfo.setAccessibilityFocus(reactTag);
|
|
95
99
|
}, 100);
|
|
96
100
|
}
|
|
97
101
|
}
|
|
@@ -40,10 +40,11 @@ exports.InfoIcon = void 0;
|
|
|
40
40
|
var useTheme_1 = require("../hooks/useTheme");
|
|
41
41
|
var react_1 = __importDefault(require("react"));
|
|
42
42
|
var react_native_svg_1 = __importStar(require("react-native-svg"));
|
|
43
|
-
var InfoIcon = function () {
|
|
43
|
+
var InfoIcon = function (_a) {
|
|
44
|
+
var color = _a.color;
|
|
44
45
|
var font = (0, useTheme_1.useTheme)().font;
|
|
45
46
|
return (<react_native_svg_1.default width={31} height={32} viewBox="0 0 31 32" fill="none">
|
|
46
|
-
<react_native_svg_1.Path d="M15.5 23.75C15.9392 23.75 16.3073 23.6015 16.6044 23.3044C16.9015 23.0073 17.05 22.6392 17.05 22.2V16C17.05 15.5608 16.9015 15.1927 16.6044 14.8956C16.3073 14.5985 15.9392 14.45 15.5 14.45C15.0608 14.45 14.6927 14.5985 14.3956 14.8956C14.0985 15.1927 13.95 15.5608 13.95 16V22.2C13.95 22.6392 14.0985 23.0073 14.3956 23.3044C14.6927 23.6015 15.0608 23.75 15.5 23.75ZM15.5 11.35C15.9392 11.35 16.3073 11.2015 16.6044 10.9044C16.9015 10.6073 17.05 10.2392 17.05 9.8C17.05 9.36083 16.9015 8.99271 16.6044 8.69563C16.3073 8.39854 15.9392 8.25 15.5 8.25C15.0608 8.25 14.6927 8.39854 14.3956 8.69563C14.0985 8.99271 13.95 9.36083 13.95 9.8C13.95 10.2392 14.0985 10.6073 14.3956 10.9044C14.6927 11.2015 15.0608 11.35 15.5 11.35ZM15.5 31.5C13.3558 31.5 11.3408 31.0931 9.455 30.2794C7.56917 29.4656 5.92875 28.3612 4.53375 26.9662C3.13875 25.5713 2.03437 23.9308 1.22063 22.045C0.406875 20.1592 0 18.1442 0 16C0 13.8558 0.406875 11.8408 1.22063 9.955C2.03437 8.06917 3.13875 6.42875 4.53375 5.03375C5.92875 3.63875 7.56917 2.53437 9.455 1.72063C11.3408 0.906875 13.3558 0.5 15.5 0.5C17.6442 0.5 19.6592 0.906875 21.545 1.72063C23.4308 2.53437 25.0713 3.63875 26.4662 5.03375C27.8612 6.42875 28.9656 8.06917 29.7794 9.955C30.5931 11.8408 31 13.8558 31 16C31 18.1442 30.5931 20.1592 29.7794 22.045C28.9656 23.9308 27.8612 25.5713 26.4662 26.9662C25.0713 28.3612 23.4308 29.4656 21.545 30.2794C19.6592 31.0931 17.6442 31.5 15.5 31.5Z" fill={font.base.color}/>
|
|
47
|
+
<react_native_svg_1.Path d="M15.5 23.75C15.9392 23.75 16.3073 23.6015 16.6044 23.3044C16.9015 23.0073 17.05 22.6392 17.05 22.2V16C17.05 15.5608 16.9015 15.1927 16.6044 14.8956C16.3073 14.5985 15.9392 14.45 15.5 14.45C15.0608 14.45 14.6927 14.5985 14.3956 14.8956C14.0985 15.1927 13.95 15.5608 13.95 16V22.2C13.95 22.6392 14.0985 23.0073 14.3956 23.3044C14.6927 23.6015 15.0608 23.75 15.5 23.75ZM15.5 11.35C15.9392 11.35 16.3073 11.2015 16.6044 10.9044C16.9015 10.6073 17.05 10.2392 17.05 9.8C17.05 9.36083 16.9015 8.99271 16.6044 8.69563C16.3073 8.39854 15.9392 8.25 15.5 8.25C15.0608 8.25 14.6927 8.39854 14.3956 8.69563C14.0985 8.99271 13.95 9.36083 13.95 9.8C13.95 10.2392 14.0985 10.6073 14.3956 10.9044C14.6927 11.2015 15.0608 11.35 15.5 11.35ZM15.5 31.5C13.3558 31.5 11.3408 31.0931 9.455 30.2794C7.56917 29.4656 5.92875 28.3612 4.53375 26.9662C3.13875 25.5713 2.03437 23.9308 1.22063 22.045C0.406875 20.1592 0 18.1442 0 16C0 13.8558 0.406875 11.8408 1.22063 9.955C2.03437 8.06917 3.13875 6.42875 4.53375 5.03375C5.92875 3.63875 7.56917 2.53437 9.455 1.72063C11.3408 0.906875 13.3558 0.5 15.5 0.5C17.6442 0.5 19.6592 0.906875 21.545 1.72063C23.4308 2.53437 25.0713 3.63875 26.4662 5.03375C27.8612 6.42875 28.9656 8.06917 29.7794 9.955C30.5931 11.8408 31 13.8558 31 16C31 18.1442 30.5931 20.1592 29.7794 22.045C28.9656 23.9308 27.8612 25.5713 26.4662 26.9662C25.0713 28.3612 23.4308 29.4656 21.545 30.2794C19.6592 31.0931 17.6442 31.5 15.5 31.5Z" fill={color || font.base.color}/>
|
|
47
48
|
</react_native_svg_1.default>);
|
|
48
49
|
};
|
|
49
50
|
exports.InfoIcon = InfoIcon;
|
|
@@ -71,6 +71,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
71
71
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
72
|
exports.RatingScreen = void 0;
|
|
73
73
|
var Button_1 = require("../components/Button");
|
|
74
|
+
var ErrorBanner_1 = require("../components/ErrorBanner");
|
|
74
75
|
var ConsultationHeader_1 = require("../components/headers/ConsultationHeader");
|
|
75
76
|
var ScreenWrapper_1 = require("../components/ScreenWrapper");
|
|
76
77
|
var Text_1 = require("../components/Text");
|
|
@@ -102,10 +103,6 @@ var RatingScreen = function (_a) {
|
|
|
102
103
|
react_native_1.Animated.timing(shakeAnimation, { toValue: 0, duration: 50, useNativeDriver: true })
|
|
103
104
|
]).start();
|
|
104
105
|
};
|
|
105
|
-
(0, react_1.useEffect)(function () {
|
|
106
|
-
if (showError)
|
|
107
|
-
startShake();
|
|
108
|
-
}, [showError]);
|
|
109
106
|
var handleRate = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
110
107
|
var updatedConsultation;
|
|
111
108
|
return __generator(this, function (_a) {
|
|
@@ -113,6 +110,7 @@ var RatingScreen = function (_a) {
|
|
|
113
110
|
case 0:
|
|
114
111
|
if (!selectedRating) {
|
|
115
112
|
setShowError(true);
|
|
113
|
+
startShake();
|
|
116
114
|
return [2 /*return*/];
|
|
117
115
|
}
|
|
118
116
|
_a.label = 1;
|
|
@@ -137,6 +135,7 @@ var RatingScreen = function (_a) {
|
|
|
137
135
|
updateConsultation(null);
|
|
138
136
|
};
|
|
139
137
|
return (<ScreenWrapper_1.ScreenWrapper header={<ConsultationHeader_1.ConsultationHeader />} containerStyle={styles.container}>
|
|
138
|
+
{showError && <ErrorBanner_1.ErrorBanner title={t('accessibility.error.required_rating.title')} message={t('rating.validation')}/>}
|
|
140
139
|
<react_native_1.View style={styles.innerContainer}>
|
|
141
140
|
<RatingIcon_1.RatingIcon />
|
|
142
141
|
|
|
@@ -155,7 +154,8 @@ var RatingScreen = function (_a) {
|
|
|
155
154
|
<StarIcon_1.StarIcon selected={selectedRating >= rating}/>
|
|
156
155
|
</react_native_1.TouchableOpacity>); })}
|
|
157
156
|
</react_native_1.Animated.View>
|
|
158
|
-
|
|
157
|
+
|
|
158
|
+
{showError && (<Text_1.Text center variant="sm" style={styles.error} accessibilityRole="alert" accessibilityLiveRegion="polite">
|
|
159
159
|
{t('rating.validation')}
|
|
160
160
|
</Text_1.Text>)}
|
|
161
161
|
</react_native_1.View>
|
|
@@ -172,7 +172,7 @@ var RatingScreen = function (_a) {
|
|
|
172
172
|
};
|
|
173
173
|
exports.RatingScreen = RatingScreen;
|
|
174
174
|
var getStyles = function (_a) {
|
|
175
|
-
var spacing = _a.spacing;
|
|
175
|
+
var spacing = _a.spacing, palette = _a.palette;
|
|
176
176
|
return react_native_1.StyleSheet.create({
|
|
177
177
|
container: {
|
|
178
178
|
paddingTop: spacing.xxl,
|
|
@@ -195,7 +195,8 @@ var getStyles = function (_a) {
|
|
|
195
195
|
rowGap: 0
|
|
196
196
|
},
|
|
197
197
|
error: {
|
|
198
|
-
paddingVertical: spacing.xs
|
|
198
|
+
paddingVertical: spacing.xs,
|
|
199
|
+
color: palette.error
|
|
199
200
|
}
|
|
200
201
|
});
|
|
201
202
|
};
|
|
@@ -85,6 +85,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
85
85
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
86
86
|
exports.DeliveryAddressScreen = void 0;
|
|
87
87
|
var Button_1 = require("../../common/components/Button");
|
|
88
|
+
var ErrorBanner_1 = require("../../common/components/ErrorBanner");
|
|
88
89
|
var FormControl_1 = __importDefault(require("../../common/components/FormControl"));
|
|
89
90
|
var FormWrapper_1 = require("../../common/components/FormWrapper");
|
|
90
91
|
var Header_1 = require("../../common/components/headers/Header");
|
|
@@ -95,7 +96,6 @@ var useConsultation_1 = require("../../common/hooks/useConsultation");
|
|
|
95
96
|
var useForm_1 = require("../../common/hooks/useForm");
|
|
96
97
|
var useTheme_1 = require("../../common/hooks/useTheme");
|
|
97
98
|
var useTranslation_1 = require("../../common/hooks/useTranslation");
|
|
98
|
-
var WarningIcon_1 = __importDefault(require("../../common/icons/WarningIcon"));
|
|
99
99
|
var deliveryAddress_1 = require("../../common/types/deliveryAddress");
|
|
100
100
|
var logger_1 = require("../../common/utils/logger");
|
|
101
101
|
var video_1 = require("../api/video");
|
|
@@ -223,10 +223,7 @@ var DeliveryAddressScreen = function (_a) {
|
|
|
223
223
|
});
|
|
224
224
|
}); };
|
|
225
225
|
return (<ScreenWrapper_1.ScreenWrapper header={<Header_1.Header title={t('general.consultation.videoConsultation.title')} leftIcon={<VideoConsultationIcon_1.VideoConsultationIcon />}/>} containerStyle={styles.container} scrollEnabled={false}>
|
|
226
|
-
{error &&
|
|
227
|
-
<WarningIcon_1.default />
|
|
228
|
-
<Text_1.Text style={styles.warningText}>{t('error.address')}</Text_1.Text>
|
|
229
|
-
</react_native_1.View>)}
|
|
226
|
+
{error && <ErrorBanner_1.ErrorBanner title={t('accessibility.error.required_fields.title')} message={t('accessibility.error.required_fields.description')}/>}
|
|
230
227
|
|
|
231
228
|
<react_native_1.View>
|
|
232
229
|
<Text_1.Text variant="h2" center>
|