mirror of
https://github.com/mosip/inji-wallet.git
synced 2026-01-09 13:38:01 -05:00
* [INJIMOB-2381] update package.json and resolve dependencies for react 0.73.0 Signed-off-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com> * [INJIMOB-2381] setup for 0.73.6 Signed-off-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com> * [INJIMOB-2381] fix font & image not loading issue changes include - move common image assets to android & iOS folders - update gradle version to 8.2 - add expo-font asset for Inter regular - replace useFont with expo-font - remove flipper (reason: 0.74 react native decoupled flipper) - npm package updates - close icon changed to close text in QRScanner.tsx Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> Signed-off-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com> * [INJIMOB-2381] update android:mosip script as per updated react native version Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix android build failure issue Changes include: - rename android assets folder as per convention - remove unused biometrics dependency - use env from react-native-dotenv as per module registered in babel config - revert conversion of close icon to image in QRScanner component Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix iOS build issue Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] rm unused local images linking in adnroid Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix splash screen not rendering issue in android Issue: Local assets were not loaded via React Native Image component in android, to fix this @react-native/assets-registry has been added Reference: https://github.com/expo/expo/issues/31240#issuecomment-2459049911 Other changes: - remove usage of expo-image as we dont have any explicit usecase for expo-image and its unused Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] rm unused intro slider image assets Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] revert back using local font assets in android Reason: Previously expo-font was used for fonts, to bring back the same compatiblity it is bought back Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] use GestureHandlerRootView in root level to handle gestures ref - https://docs.swmansion.com/react-native-gesture-handler/docs/1.x/#js Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove custom assets and linking for images in iOS Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] use default parameters instead of defaultProps Reason: React 18 has marked defaultProps as deprecated and it is removed in React 19 version. To avoid the issue of deprated usage, its modified. Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove unused terminal option in android build script Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove font assets in android Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] optimize import Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix failing test Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] set package.resolved version to 2 Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix setting of camera view in face scanner Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix setting of camera view in face compare Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove flipper config file Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove unused debug logs Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] refactor use component instead of type Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] refactor use GestureHandlerRootView only on root level Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] refactor remove unused config linking of font assets Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] refactor remove unused image assets Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] fix camera persmission issue in QRScanner use expo-camera to request and getstatus of camera permission instead of expo-barcode-scanner to avoid multiple re-renders of scan screen in flow of camera permission denial Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove package expo-barcode-scanner expo-barcode-scanner is deprecated and its suggested to use expo-camera to handle the scanning flows. The existing bar-code-scanner implementations have been replaced with expo-camera. Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] use extracted enums instead of legacy expo-camera Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove patch for react-native-0.71.8 Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] revert date-fs version to 2.28.0 date-fns is not supporting filipino langauge, so we are maintaining patch for that. The patch created is for version 2.28.0 and updating the version of date-fns is causing conflicts in patch application if updated as well. To avoid this issue, version is kept as 2.28.0 Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] update readme Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] remove usage of legacy expo-camera in getting image type Other changes - remove resolutions block from package.json - sync pbxproj Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> * [INJIMOB-2381] add active prop to expo-camera as per suggestions expo-camera suggests "Only one Camera preview can be active at any given time. If you have multiple screens in your app, you should unmount Camera components whenever a screen is unfocused.". To handle this active prop is used which is set to false on unMount of the component whenever rendering Camera from expo-camera Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> --------- Signed-off-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com> Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com> Signed-off-by: adityankannan-tw <109274996+adityankannan-tw@users.noreply.github.com> Co-authored-by: Abhishek Paul <paul.apaul.abhishek.ap@gmail.com> Co-authored-by: adityankannan-tw <109274996+adityankannan-tw@users.noreply.github.com>
400 lines
10 KiB
TypeScript
400 lines
10 KiB
TypeScript
import React, {useEffect, useRef, useState} from 'react';
|
|
import {useTranslation} from 'react-i18next';
|
|
import {FlatList, Linking, Pressable, SafeAreaView, View} from 'react-native';
|
|
import {Modal} from './ui/Modal';
|
|
import {Column, Text} from './ui';
|
|
import {Theme} from './ui/styleUtils';
|
|
import {BannerNotificationContainer} from './BannerNotificationContainer';
|
|
import getAllConfigurations from '../shared/api';
|
|
|
|
export const HelpScreen: React.FC<HelpScreenProps> = props => {
|
|
const {t} = useTranslation('HelpScreen');
|
|
const [showHelpPage, setShowHelpPage] = useState(false);
|
|
const [injiHelpUrl, setInjiHelpUrl] = useState('');
|
|
const listingRef = useRef();
|
|
|
|
useEffect(() => {
|
|
getAllConfigurations().then(response => {
|
|
setInjiHelpUrl(response.aboutInjiUrl);
|
|
});
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (props.source === 'BackUp') {
|
|
setTimeout(() => {
|
|
if (listingRef?.current != null) {
|
|
listingRef.current.scrollToIndex({
|
|
index: 18,
|
|
animated: true,
|
|
});
|
|
}
|
|
}, 2000);
|
|
} else if (props.source == 'keyManagement') {
|
|
setTimeout(() => {
|
|
if (listingRef?.current != null) {
|
|
listingRef.current.scrollToIndex({
|
|
index: 26,
|
|
animated: true,
|
|
});
|
|
}
|
|
}, 2000);
|
|
}
|
|
}, [showHelpPage]);
|
|
|
|
const getTextField = (value: string, component?: React.ReactElement) => {
|
|
return (
|
|
<Text style={Theme.TextStyles.helpDetails}>
|
|
{value} {component}
|
|
</Text>
|
|
);
|
|
};
|
|
const getLinkedText = (link: string, linkText: string) => {
|
|
return (
|
|
<Text
|
|
style={Theme.TextStyles.urlLinkText}
|
|
onPress={() => {
|
|
Linking.openURL(link);
|
|
}}>
|
|
{linkText}
|
|
</Text>
|
|
);
|
|
};
|
|
const BackupFaqMap = [
|
|
{
|
|
title: t('questions.backup.one'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.backup.one'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.two'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.backup.two'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.three'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.backup.three'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.four'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.backup.four'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.five'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.backup.five'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.six'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.backup.six'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.seven'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.backup.seven'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.backup.eight'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.backup.eight'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
];
|
|
const InjiFaqMap = [
|
|
{
|
|
title: t('questions.inji.one'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.inji.one'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.two'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(
|
|
t('answers.inji.two'),
|
|
getLinkedText(
|
|
'https://docs.mosip.io/1.2.0/id-lifecycle-management/identifiers',
|
|
t('here'),
|
|
),
|
|
)}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.three'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.three-a'))}
|
|
{getTextField(t('answers.inji.three-b'))}
|
|
{getTextField(t('answers.inji.three-c'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.four'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.inji.four'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.five'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.inji.five'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.six'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.inji.six'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.seven'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(
|
|
t('answers.inji.seven'),
|
|
getLinkedText(
|
|
injiHelpUrl +
|
|
'/functional-overview/end-user-guide#downloading-vc',
|
|
t('here'),
|
|
),
|
|
)}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.eight'),
|
|
data: (
|
|
<React.Fragment>{getTextField(t('answers.inji.eight'))}</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.nine'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(
|
|
t('answers.inji.nine'),
|
|
getLinkedText(
|
|
injiHelpUrl +
|
|
'/functional-overview/end-user-guide#activating-a-vc',
|
|
t('here'),
|
|
),
|
|
)}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.ten'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(
|
|
t('answers.inji.ten-a'),
|
|
getLinkedText(
|
|
injiHelpUrl +
|
|
'/functional-overview/feature-workflows#id-4.-qr-code-login-process',
|
|
t('here'),
|
|
),
|
|
)}
|
|
{getTextField(t('answers.inji.ten-b'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.eleven'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.eleven'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.twelve'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.twelve'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.sixteen'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.sixteen'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.seventeen'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.seventeen'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.thirteen'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(
|
|
t('answers.inji.thirteen-a'),
|
|
getLinkedText(
|
|
injiHelpUrl + '/functional-overview/end-user-guide#deleting-a-vc',
|
|
t('here'),
|
|
),
|
|
)}
|
|
{getTextField(t('answers.inji.thirteen-b'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
|
|
{
|
|
title: t('questions.inji.fourteen'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.fourteen'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.fifteen'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.fifteen'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.inji.fifteen'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.inji.fifteen'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
];
|
|
const KeyManagementFaqMap = [
|
|
{
|
|
title: t('questions.KeyManagement.one'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.KeyManagement.one'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.KeyManagement.two'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.KeyManagement.two'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.KeyManagement.three'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.KeyManagement.three'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.KeyManagement.four'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.KeyManagement.four'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.KeyManagement.five'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.KeyManagement.five'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
{
|
|
title: t('questions.KeyManagement.six'),
|
|
data: (
|
|
<React.Fragment>
|
|
{getTextField(t('answers.KeyManagement.six'))}
|
|
</React.Fragment>
|
|
),
|
|
},
|
|
];
|
|
|
|
return (
|
|
<React.Fragment>
|
|
<Pressable
|
|
disabled={props.isDisabled}
|
|
accessible={false}
|
|
onPress={() => {
|
|
setShowHelpPage(!showHelpPage);
|
|
}}>
|
|
{props.triggerComponent}
|
|
</Pressable>
|
|
<Modal
|
|
testID="helpScreen"
|
|
isVisible={showHelpPage}
|
|
headerTitle={t('header')}
|
|
headerElevation={2}
|
|
onDismiss={() => {
|
|
setShowHelpPage(!showHelpPage);
|
|
}}>
|
|
<BannerNotificationContainer />
|
|
<SafeAreaView style={{flex: 1}}>
|
|
<Column fill padding="10" align="space-between">
|
|
<FlatList
|
|
ref={listingRef}
|
|
keyExtractor={(item, index) => 'FAQ' + index.toString()}
|
|
renderItem={({item}) => (
|
|
<View>
|
|
<Text style={Theme.TextStyles.helpHeader}>{item.title}</Text>
|
|
{item.data}
|
|
</View>
|
|
)}
|
|
data={[...InjiFaqMap, ...BackupFaqMap, ...KeyManagementFaqMap]}
|
|
onScrollToIndexFailed={info => {
|
|
const wait = new Promise(resolve => setTimeout(resolve, 500));
|
|
wait.then(() => {
|
|
listingRef.current?.scrollToIndex({
|
|
index: info.index,
|
|
animated: true,
|
|
});
|
|
});
|
|
}}
|
|
/>
|
|
</Column>
|
|
</SafeAreaView>
|
|
</Modal>
|
|
</React.Fragment>
|
|
);
|
|
};
|
|
|
|
interface HelpScreenProps {
|
|
source: 'Inji' | 'BackUp' | 'keyManagement';
|
|
triggerComponent: React.ReactElement;
|
|
isDisabled?: boolean;
|
|
}
|