-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathSignInScreen.tsx
106 lines (100 loc) · 3.63 KB
/
SignInScreen.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import React, {useEffect, useState} from 'react';
import {ScrollView, TextInput, Text, useColorScheme, View} from 'react-native';
import styles, {backgroundStyle} from '../common/ui/Styles';
import testProps from '../common/util/TestProps';
import Button from '../common/ui/view/Button.tsx';
import {KlarnaSignIn} from 'react-native-klarna-inapp-sdk';
import {KlarnaEnvironment} from '../../../src/types/common/KlarnaEnvironment.ts';
import {KlarnaRegion} from '../../../src/types/common/KlarnaRegion.ts';
export default function SignInScreen() {
const isDarkMode = useColorScheme() === 'dark';
const [clientId, setClientId] = useState('');
const [scope, setScope] = useState('');
const [market, setMarket] = useState('');
const [locale, setLocale] = useState('');
const [tokenizationId, setTokenizationId] = useState('');
const [event, setEvent] = useState<string>();
const [klarnaSignIn, setKlarnaSignIn] = useState<KlarnaSignIn | null>(null);
useEffect(() => {
KlarnaSignIn.createInstance({
environment: KlarnaEnvironment.Staging,
region: KlarnaRegion.EU,
returnUrl: 'in-app-test://siwk',
})
.then(instance => {
console.log('KlarnaSignIn instance created: ', instance);
setKlarnaSignIn(instance);
setEvent(
_ => 'KlarnaSignIn instance created: ' + JSON.stringify(instance),
);
})
.catch(e => {
console.error('KlarnaSignIn instance creation failed: ', e);
setEvent(
_ => 'KlarnaSignIn instance creation failed: ' + JSON.stringify(e),
);
});
}, []);
const onEvent = (...params: Array<string | boolean | null>) => {
console.log('onEvent', params);
setEvent(prevState =>
prevState
? `${prevState} ${params.join('\n ----- \n')}`
: params.join('\n ----- \n'),
);
};
const renderTextField = (
label: string,
value: string,
setValue: (text: string) => void,
) => {
return (
<View style={{marginBottom: 20, width: '80%'}}>
<Text style={styles.title}>{label}</Text>
<TextInput
autoCapitalize="none"
style={styles.tokenInput}
value={value}
placeholder={`Enter ${label}`}
onChangeText={setValue}
{...testProps(`${label}Input`)}
/>
</View>
);
};
return (
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={backgroundStyle(styles.scrollView, isDarkMode)}>
<View style={styles.container}>
{renderTextField('Client ID', clientId, setClientId)}
{renderTextField('Scope', scope, setScope)}
{renderTextField('Market', market, setMarket)}
{renderTextField('Locale', locale, setLocale)}
{renderTextField('Tokenization ID', tokenizationId, setTokenizationId)}
</View>
<View style={styles.buttonsContainer}>
<Button
title="Sign In"
onPress={() => {
console.log(
'Klarna sign in with KlarnaMobileSDK should start now on the native side',
);
klarnaSignIn
?.signIn(clientId, scope, market, locale, tokenizationId)
.then(r => {
console.log('Sign in success with result: ', r);
onEvent('Sign in success with result: ', JSON.stringify(r));
})
.catch(e => {
console.error('Sign in failed with error: ', e);
onEvent('Sign in failed with error: ', JSON.stringify(e));
});
}}
/>
</View>
<Text style={styles.title}>"Events Log"</Text>
<Text style={styles.title}>{event}</Text>
</ScrollView>
);
}