mirror of
https://github.com/mosip/inji-wallet.git
synced 2026-01-07 20:53:54 -05:00
* [INJIMOB-3622]: add the new branding changes Signed-off-by: jaswanthkumarpolisetty <jaswanthkumar.p@thoughtworks.com> * [INJIMOB-3651]: update the new branding changes Signed-off-by: jaswanthkumarpolisetty <jaswanthkumar.p@thoughtworks.com> * [INJIMOB-3651]: update the new snapshots Signed-off-by: jaswanthkumarpolisetty <jaswanthkumar.p@thoughtworks.com> * [INJIMOB-3651]: update the changes mentioned deskcheck Signed-off-by: jaswanthkumarpolisetty <jaswanthkumar.p@thoughtworks.com> --------- Signed-off-by: jaswanthkumarpolisetty <jaswanthkumar.p@thoughtworks.com> Signed-off-by: jaswanthkumartw <jaswanthkumar.p@thoughtworks.com>
199 lines
6.0 KiB
TypeScript
199 lines
6.0 KiB
TypeScript
import React, {useRef} from 'react';
|
|
import AppIntroSlider from 'react-native-app-intro-slider';
|
|
import {
|
|
Dimensions,
|
|
ImageBackground,
|
|
StatusBar,
|
|
View,
|
|
ScrollView,
|
|
} from 'react-native';
|
|
import {Centered, Column, Row, Text, Button} from '../../components/ui';
|
|
import {Theme} from '../../components/ui/styleUtils';
|
|
import {useTranslation} from 'react-i18next';
|
|
import {RootRouteProps} from '../../routes';
|
|
import {useWelcomeScreen} from '../WelcomeScreenController';
|
|
import LinearGradient from 'react-native-linear-gradient';
|
|
import {SvgImage} from '../../components/ui/svg';
|
|
import testIDProps from '../../shared/commonUtil';
|
|
import {INTRO_SLIDER_LOGO_MARGIN} from '../../shared/constants';
|
|
import {StaticAuthScreen} from '../IntroSliders/biometricIntro';
|
|
import {StaticScanScreen} from '../IntroSliders/quickAccessIntro';
|
|
import StaticBackupAndRestoreScreen from '../IntroSliders/backupRestoreIntro';
|
|
import {StaticHomeScreen} from '../IntroSliders/trustedDigitalWalletIntro';
|
|
import {StaticSendVcScreen} from '../IntroSliders/secureShareIntro';
|
|
|
|
export const IntroSlidersScreen: React.FC<RootRouteProps> = props => {
|
|
const slider = useRef<AppIntroSlider>();
|
|
|
|
const {t} = useTranslation('OnboardingOverlay');
|
|
const controller = useWelcomeScreen(props);
|
|
|
|
// Define slides with React components
|
|
const slides = [
|
|
{
|
|
key: 'one',
|
|
title: t('stepOneTitle'),
|
|
text: t('stepOneText'),
|
|
component: <StaticAuthScreen />,
|
|
},
|
|
{
|
|
key: 'two',
|
|
title: t('stepTwoTitle'),
|
|
text: t('stepTwoText'),
|
|
component: <StaticSendVcScreen />,
|
|
},
|
|
{
|
|
key: 'three',
|
|
title: t('stepThreeTitle'),
|
|
text: t('stepThreeText'),
|
|
component: <StaticHomeScreen />,
|
|
},
|
|
{
|
|
key: 'four',
|
|
title: t('stepFourTitle'),
|
|
text: t('stepFourText'),
|
|
component: <StaticScanScreen />,
|
|
},
|
|
{
|
|
key: 'five',
|
|
title: t('stepFiveTitle'),
|
|
text: t('stepFiveText'),
|
|
component: <StaticBackupAndRestoreScreen />,
|
|
},
|
|
];
|
|
|
|
const isPasscodeSet = controller.isPasscodeSet();
|
|
|
|
const renderItem = ({item}) => {
|
|
return (
|
|
<ImageBackground source={require('./IntroBg.png')}>
|
|
<Centered>
|
|
<Row align="space-between" style={Theme.Styles.introSliderHeader}>
|
|
<Column style={{marginLeft: INTRO_SLIDER_LOGO_MARGIN}}>
|
|
{SvgImage.InjiSmallLogo()}
|
|
</Column>
|
|
|
|
{item.key !== 'five' && (
|
|
<Button
|
|
testID={
|
|
isPasscodeSet
|
|
? `backButton-${item.key}`
|
|
: `skipButton-${item.key}`
|
|
}
|
|
type="plain"
|
|
title={isPasscodeSet ? t('back') : t('skip')}
|
|
onPress={isPasscodeSet ? controller.BACK : controller.NEXT}
|
|
styles={{height: 40, maxWidth: 115}}
|
|
/>
|
|
)}
|
|
</Row>
|
|
<View style={{width: 300, height: 600}}>
|
|
<Centered fill>{item.component}</Centered>
|
|
</View>
|
|
<Column
|
|
testID={`introSlide-${item.key}`}
|
|
style={Theme.OnboardingOverlayStyles.bottomContainer}
|
|
crossAlign="center"
|
|
backgroundColor={Theme.Colors.whiteText}
|
|
width={Dimensions.get('screen').width}>
|
|
<Text
|
|
testID={`introTitle-${item.key}`}
|
|
style={{paddingTop: 3}}
|
|
size={'large'}
|
|
weight="semibold"
|
|
margin="0 0 18 0">
|
|
{item.title}
|
|
</Text>
|
|
<ScrollView
|
|
style={{
|
|
maxHeight: 60,
|
|
width: '100%',
|
|
paddingHorizontal: 10,
|
|
marginBottom: 400,
|
|
}}
|
|
showsVerticalScrollIndicator={true}
|
|
persistentScrollbar={true}>
|
|
<Text
|
|
testID={`introText-${item.key}`}
|
|
style={{paddingTop: 7}}
|
|
size="large"
|
|
color={Theme.Colors.GrayText}>
|
|
{item.text}
|
|
</Text>
|
|
</ScrollView>
|
|
</Column>
|
|
</Centered>
|
|
</ImageBackground>
|
|
);
|
|
};
|
|
|
|
const renderNextButton = () => {
|
|
return (
|
|
<View {...testIDProps('nextButton')}>
|
|
<LinearGradient
|
|
colors={Theme.Colors.gradientBtn}
|
|
start={Theme.LinearGradientDirection.start}
|
|
end={Theme.LinearGradientDirection.end}
|
|
style={Theme.Styles.introSliderButton}>
|
|
<Text
|
|
testID="next"
|
|
style={{paddingTop: 3}}
|
|
weight="semibold"
|
|
align="center"
|
|
color="#FFFFFF"
|
|
margin="15 0 0 0">
|
|
{t('next')}
|
|
</Text>
|
|
</LinearGradient>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
const renderDoneButton = () => {
|
|
const isPasscodeSet = controller.isPasscodeSet();
|
|
const testId = isPasscodeSet ? 'goBack' : 'getStarted';
|
|
const buttonText = isPasscodeSet ? t('goBack') : t('getStarted');
|
|
return (
|
|
<View {...testIDProps(testId)}>
|
|
<LinearGradient
|
|
colors={Theme.Colors.gradientBtn}
|
|
style={Theme.Styles.introSliderButton}
|
|
start={{x: 0, y: 0}}
|
|
end={{x: 1, y: 1}}>
|
|
<Text
|
|
style={{paddingTop: 3}}
|
|
weight="semibold"
|
|
align="center"
|
|
color="#FFFFFF"
|
|
margin="15 0 0 0">
|
|
{buttonText}
|
|
</Text>
|
|
</LinearGradient>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
return (
|
|
<Column style={{flex: 1}}>
|
|
<StatusBar translucent={true} backgroundColor="transparent" />
|
|
<AppIntroSlider
|
|
data={slides}
|
|
renderDoneButton={renderDoneButton}
|
|
renderNextButton={renderNextButton}
|
|
bottomButton
|
|
ref={slider}
|
|
activeDotStyle={{
|
|
backgroundColor: Theme.Colors.Icon,
|
|
width: 30,
|
|
marginBottom: 10,
|
|
}}
|
|
dotStyle={{backgroundColor: Theme.Colors.dotColor, marginBottom: 10}}
|
|
renderItem={renderItem}
|
|
onDone={() =>
|
|
controller.isPasscodeSet() ? controller.BACK() : controller.NEXT()
|
|
}
|
|
/>
|
|
</Column>
|
|
);
|
|
};
|