-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.tsx
117 lines (105 loc) · 3.69 KB
/
App.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
107
108
109
110
111
112
113
114
115
116
117
import { useState, useCallback, useEffect } from 'react'
import { SafeAreaView, Text, View, StatusBar } from 'react-native'
import mobileAds, {
AppOpenAd,
InterstitialAd,
RewardedAd,
BannerAd,
BannerAdSize
} from 'react-native-google-mobile-ads'
import { ClickButton, Row } from './src/components'
import calculator, { initialState, State } from './src/util/calculator'
const BANNER_AD_UNIT_ID = ''
const App = () => {
const [state, setState] = useState<State>(initialState)
useEffect(() => {
const initializeAds = async () => {
await mobileAds().initialize()
AppOpenAd.createForAdRequest(BANNER_AD_UNIT_ID)
InterstitialAd.createForAdRequest(BANNER_AD_UNIT_ID)
RewardedAd.createForAdRequest(BANNER_AD_UNIT_ID)
}
initializeAds()
}, [])
const handleTap = useCallback((type: string, value: string | number) => {
const valueString = typeof value === 'number' ? String(value) : value
setState((prevState) => calculator(type, valueString, prevState))
}, [])
return (
<View className='flex-1'>
<StatusBar animated={false} hidden />
<BannerAd unitId={BANNER_AD_UNIT_ID} size={BannerAdSize.BANNER} />
<View className='flex-1 justify-end bg-[#202020] px-2'>
<SafeAreaView>
<View className='items-end pr-4 pb-4'>
<Text className='text-white text-6xl font-bold'>
{parseFloat(state.currentValue).toLocaleString()}
</Text>
</View>
<Row>
<ClickButton
text='C'
theme='secondary'
onPress={() => handleTap('clear', '')}
/>
<ClickButton
text='+/-'
theme='secondary'
onPress={() => handleTap('toggleSign', '')}
/>
<ClickButton
text='%'
theme='secondary'
onPress={() => handleTap('percentage', '')}
/>
<ClickButton
text='/'
theme='accent'
onPress={() => handleTap('operator', '/')}
/>
</Row>
<Row>
<ClickButton text='7' onPress={() => handleTap('number', '7')} />
<ClickButton text='8' onPress={() => handleTap('number', '8')} />
<ClickButton text='9' onPress={() => handleTap('number', '9')} />
<ClickButton
text='X'
theme='accent'
onPress={() => handleTap('operator', '*')}
/>
</Row>
<Row>
<ClickButton text='5' onPress={() => handleTap('number', '5')} />
<ClickButton text='6' onPress={() => handleTap('number', '6')} />
<ClickButton text='7' onPress={() => handleTap('number', '7')} />
<ClickButton
text='-'
theme='accent'
onPress={() => handleTap('operator', '-')}
/>
</Row>
<Row>
<ClickButton text='1' onPress={() => handleTap('number', '1')} />
<ClickButton text='2' onPress={() => handleTap('number', '2')} />
<ClickButton text='3' onPress={() => handleTap('number', '3')} />
<ClickButton
text='+'
theme='accent'
onPress={() => handleTap('operator', '+')}
/>
</Row>
<Row>
<ClickButton text='0' onPress={() => handleTap('number', '0')} />
<ClickButton text='.' onPress={() => handleTap('number', '.')} />
<ClickButton
text='='
theme='primary'
onPress={() => handleTap('equal', '=')}
/>
</Row>
</SafeAreaView>
</View>
</View>
)
}
export default App