-
Notifications
You must be signed in to change notification settings - Fork 0
/
HomeScreen.js
120 lines (101 loc) · 3.32 KB
/
HomeScreen.js
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
118
119
120
import React from 'react';
import { View, Text, StyleSheet, FlatList, Image, TouchableOpacity, Dimensions, TextInput, Button } from 'react-native';
import data from './data.json';
const DEVICE = Dimensions.get('window')
export default class HomeScreen extends React.Component {
constructor(props) {
super(props)
this.state = {
searchText: '',
totalPrice: 0,
}
}
currencyFormat(num) {
return 'Rp ' + num.toFixed(0).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.')
};
updatePrice(price) {
//? #Soal Bonus (10 poin)
//? Buatlah teks 'Total Harga' yang akan bertambah setiap kali salah satu barang/item di klik/tekan.
//? Di sini, buat fungsi untuk menambahkan nilai dari state.totalPrice dan ditampilkan pada 'Total Harga'.
// Kode di sini
}
render() {
console.log(data)
return (
<View style={styles.container}>
<View style={{ minHeight: 50, width: DEVICE.width * 0.88 + 20, marginVertical: 8 }}>
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
<Text>Hai,{'\n'}
{/* //? #Soal 1 Tambahan, Simpan userName yang dikirim dari halaman Login pada komponen Text di bawah ini */}
<Text style={styles.headerText}>tempat userName</Text>
</Text>
{/* //? #Soal Bonus, simpan Total Harga dan state.totalPrice di komponen Text di bawah ini */}
<Text style={{ textAlign: 'right' }}>Total Harga{'\n'}
<Text style={styles.headerText}>tempat total harga</Text>
</Text>
</View>
<View>
</View>
<TextInput
style={{ backgroundColor: 'white', marginTop: 8 }}
placeholder='Cari barang..'
onChangeText={(searchText => this.setState({ searchText }))}
/>
</View>
{/*
//? #Soal No 2 (15 poin)
//? Buatlah 1 komponen FlatList dengan input berasal dari data.json
//? dan pada prop renderItem menggunakan komponen ListItem -- ada di bawah --
//? dan memiliki 2 kolom, sehingga menampilkan 2 item per baris (horizontal)
// Lanjutkan di bawah ini!
*/}
</View>
)
}
};
class ListItem extends React.Component {
currencyFormat(num) {
return 'Rp ' + num.toFixed(0).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.')
};
//? #Soal No 3 (15 poin)
//? Buatlah styling komponen ListItem, agar dapat tampil dengan baik di device
render() {
const data = this.props.data
return (
<View style={styles.itemContainer}>
<Image source={{ uri: data.gambaruri }} style={styles.itemImage} resizeMode='contain' />
<Text numberOfLines={2} ellipsizeMode='tail' style={styles.itemName} >{data.nama}</Text>
<Text style={styles.itemPrice}>{this.currencyFormat(Number(data.harga))}</Text>
<Text style={styles.itemStock}>Sisa stok: {data.stock}</Text>
<Button title='BELI' color='blue' />
</View>
)
}
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
headerText: {
fontSize: 18,
fontWeight: 'bold'
},
//? Lanjutkan styling di sini
itemContainer: {
width: DEVICE.width * 0.44,
},
itemImage: {
},
itemName: {
},
itemPrice: {
},
itemStock: {
},
itemButton: {
},
buttonText: {
}
})