esoftplay-event 0.0.0-a → 0.0.0-c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/event/additional.tsx +4 -4
- package/event/additional_input.tsx +15 -15
- package/event/alert.tsx +32 -0
- package/event/artist.tsx +166 -0
- package/event/artist_detail.tsx +521 -0
- package/event/artist_detail_multi.tsx +548 -0
- package/event/badge.tsx +22 -0
- package/event/button.tsx +40 -0
- package/event/config.ts +4 -0
- package/event/countdown.tsx +5 -5
- package/event/countdown_base.tsx +83 -0
- package/event/counter_cashier.tsx +13 -13
- package/event/counter_cashier_report.tsx +6 -6
- package/event/counter_cashier_sell.tsx +7 -7
- package/event/counter_eo.tsx +21 -21
- package/event/counter_history.tsx +4 -4
- package/event/counter_lm.tsx +18 -18
- package/event/counter_report.tsx +4 -4
- package/event/counter_report_breakdown.tsx +2 -2
- package/event/counter_report_detail.tsx +15 -15
- package/event/counter_report_detail_list.tsx +4 -4
- package/event/counter_request.tsx +4 -4
- package/event/counter_request_detail.tsx +6 -6
- package/event/counter_send.tsx +9 -9
- package/event/counter_user_list.tsx +15 -15
- package/event/coupon.tsx +4 -4
- package/event/coupon_claim.tsx +4 -4
- package/event/coupon_claim_detail.tsx +8 -7
- package/event/coupon_claim_history.tsx +9 -9
- package/event/coupon_claim_reimburse.tsx +7 -8
- package/event/coupon_claim_reimburse_history.tsx +4 -4
- package/event/coupon_claim_reimburse_history_detail.tsx +4 -4
- package/event/coupon_claim_staff.tsx +10 -10
- package/event/coupon_detail.tsx +3 -3
- package/event/coupon_event_list.tsx +4 -4
- package/event/coupon_generate.tsx +4 -4
- package/event/coupon_generate_event.tsx +4 -4
- package/event/coupon_generate_list.tsx +2 -2
- package/event/date_picker.tsx +5 -5
- package/event/detail.tsx +12 -15
- package/event/entrance.tsx +17 -17
- package/event/entrance_again.tsx +22 -23
- package/event/entrance_failed.tsx +15 -15
- package/event/entrance_idcard.tsx +23 -23
- package/event/entrance_list.tsx +24 -24
- package/event/entrance_list_item.tsx +6 -6
- package/event/entrance_log.tsx +24 -24
- package/event/entrance_success.tsx +8 -8
- package/event/entrance_warning.tsx +14 -14
- package/event/exchange_reward.tsx +2 -2
- package/event/exchange_reward_result.tsx +7 -8
- package/event/exchange_ticket.tsx +11 -12
- package/event/exchange_ticket_list.tsx +10 -12
- package/event/exchange_ticket_result.tsx +11 -12
- package/event/exit.tsx +9 -9
- package/event/exit_failed.tsx +12 -12
- package/event/exit_list.tsx +15 -15
- package/event/exit_log.tsx +22 -22
- package/event/exit_success.tsx +8 -8
- package/event/exit_temporary.tsx +21 -21
- package/event/expander.tsx +36 -0
- package/event/fab.tsx +24 -0
- package/event/firebase_socket.ts +365 -0
- package/event/hall_in.tsx +13 -13
- package/event/hall_in_failed.tsx +22 -22
- package/event/hall_in_list.tsx +17 -17
- package/event/hall_in_log.tsx +24 -24
- package/event/hall_in_success.tsx +8 -8
- package/event/hall_out.tsx +13 -13
- package/event/hall_out_failed.tsx +11 -11
- package/event/hall_out_list.tsx +17 -17
- package/event/hall_out_log.tsx +24 -24
- package/event/hall_out_success.tsx +8 -8
- package/event/header.tsx +119 -0
- package/event/header_home.tsx +108 -0
- package/event/index.tsx +270 -0
- package/event/input_rectangle.tsx +208 -0
- package/event/item.tsx +40 -0
- package/event/label_input.tsx +23 -0
- package/event/list.tsx +20 -21
- package/event/list_filter.tsx +12 -13
- package/event/list_item.tsx +76 -0
- package/event/list_item2.tsx +78 -0
- package/event/loading_page.tsx +248 -0
- package/event/log.tsx +54 -54
- package/event/message.tsx +32 -0
- package/event/notice.tsx +41 -0
- package/event/order.tsx +323 -0
- package/event/order_detail.tsx +813 -0
- package/event/order_detail_payment.tsx +153 -0
- package/event/order_detail_upgrade.tsx +164 -0
- package/event/order_detail_upgrade_button.tsx +60 -0
- package/event/order_detail_upgrade_payment.tsx +221 -0
- package/event/order_detail_visitor.tsx +196 -0
- package/event/order_detail_waiting.tsx +520 -0
- package/event/order_history.tsx +101 -0
- package/event/order_item.tsx +118 -0
- package/event/order_lottery.tsx +172 -0
- package/event/order_reschedule.tsx +439 -0
- package/event/order_reschedule_list.tsx +85 -0
- package/event/order_share_to.tsx +219 -0
- package/event/order_share_to_detail.tsx +181 -0
- package/event/order_status.tsx +66 -0
- package/event/order_waiting.tsx +143 -0
- package/event/pending_trx.tsx +50 -0
- package/event/qc_idcard.tsx +12 -12
- package/event/qc_idcard_failed.tsx +4 -4
- package/event/qc_idcard_success.tsx +4 -4
- package/event/qr_bg.tsx +22 -0
- package/event/queue_out.tsx +3 -3
- package/event/queue_pricing.tsx +2 -3
- package/event/rating.tsx +49 -0
- package/event/rating_mini.tsx +35 -0
- package/event/refresh_button.tsx +40 -0
- package/event/review.tsx +3 -3
- package/event/review_add.tsx +8 -8
- package/event/review_detail.tsx +4 -4
- package/event/review_item.tsx +4 -4
- package/event/scan_item.tsx +2 -2
- package/event/schedule.tsx +8 -9
- package/event/seat.tsx +16 -18
- package/event/seat_autopick.tsx +4 -4
- package/event/seat_map.tsx +4 -4
- package/event/seat_map_test.tsx +2 -2
- package/event/section.tsx +35 -0
- package/event/section_menu.tsx +40 -0
- package/event/sheet.tsx +73 -0
- package/event/slider.tsx +46 -0
- package/event/step.tsx +29 -0
- package/event/ticket_list.tsx +15 -16
- package/event/ticket_list2.tsx +16 -17
- package/event/tms.tsx +4 -4
- package/event/tms_add.tsx +7 -8
- package/event/tms_add_result.tsx +4 -4
- package/event/tms_check_code.tsx +160 -0
- package/event/tms_check_ticket.tsx +72 -0
- package/event/tms_check_ticket_result.tsx +384 -0
- package/event/tms_dashboard.tsx +7 -7
- package/event/tms_event_list.tsx +46 -43
- package/event/tms_gate.tsx +96 -0
- package/event/tms_home.tsx +639 -0
- package/event/tms_idcard.tsx +203 -0
- package/event/tms_in.tsx +215 -0
- package/event/tms_in_again.tsx +199 -0
- package/event/tms_in_failed.tsx +190 -0
- package/event/tms_in_hall.tsx +148 -0
- package/event/tms_in_hall_failed.tsx +270 -0
- package/event/tms_in_hall_list.tsx +222 -0
- package/event/tms_in_hall_log.tsx +134 -0
- package/event/tms_in_hall_success.tsx +132 -0
- package/event/tms_in_list.tsx +264 -0
- package/event/tms_in_log.tsx +130 -0
- package/event/tms_in_success.tsx +155 -0
- package/event/tms_in_warning.tsx +91 -0
- package/event/tms_list_item.tsx +88 -0
- package/event/tms_log.tsx +435 -0
- package/event/tms_out.tsx +91 -0
- package/event/tms_out_failed.tsx +135 -0
- package/event/tms_out_hall.tsx +143 -0
- package/event/tms_out_hall_failed.tsx +133 -0
- package/event/tms_out_hall_list.tsx +215 -0
- package/event/tms_out_hall_log.tsx +133 -0
- package/event/tms_out_hall_success.tsx +130 -0
- package/event/tms_out_list.tsx +118 -0
- package/event/tms_out_log.tsx +131 -0
- package/event/tms_out_success.tsx +143 -0
- package/event/tms_out_temporary.tsx +226 -0
- package/event/toggle.tsx +30 -0
- package/event/transaction.ts +34 -0
- package/event/turnstile_event_gate.tsx +2 -2
- package/event/turnstile_event_list.tsx +4 -4
- package/event/turnstile_event_ticket.tsx +4 -4
- package/event/turnstile_settings.tsx +11 -11
- package/event/turnstile_settings_otp.tsx +4 -4
- package/event/turnstile_settings_status.tsx +2 -2
- package/event/voucher.tsx +9 -10
- package/event/voucher_multi.tsx +4 -5
- package/id.json +644 -0
- package/package.json +1 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// withHooks
|
|
2
|
+
import { EventScan_item } from 'esoftplay/cache/event/scan_item/import';
|
|
3
|
+
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
4
|
+
import { LibDialog } from 'esoftplay/cache/lib/dialog/import';
|
|
5
|
+
import { LibLoading } from 'esoftplay/cache/lib/loading/import';
|
|
6
|
+
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
|
|
7
|
+
import { LibObject } from 'esoftplay/cache/lib/object/import';
|
|
8
|
+
import { LibProgress } from 'esoftplay/cache/lib/progress/import';
|
|
9
|
+
import { LibStyle } from 'esoftplay/cache/lib/style/import';
|
|
10
|
+
import { LibToastProperty } from 'esoftplay/cache/lib/toast/import';
|
|
11
|
+
|
|
12
|
+
import { applyStyle } from 'esoftplay';
|
|
13
|
+
import { EventButton } from 'esoftplay/cache/event/button/import';
|
|
14
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
15
|
+
import { LibPicture } from 'esoftplay/cache/lib/picture/import';
|
|
16
|
+
import esp from 'esoftplay/esp';
|
|
17
|
+
import useSafeState from 'esoftplay/state';
|
|
18
|
+
import React, { useEffect } from 'react';
|
|
19
|
+
import { ScrollView, Text, View } from 'react-native';
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
export interface EventTms_out_temporaryArgs {
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
export interface EventTms_out_temporaryProps {
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
export default function m(props: EventTms_out_temporaryProps): any {
|
|
29
|
+
const user_qr = LibNavigation.getArgs(props, 'qr_code')
|
|
30
|
+
const { scan_type, event_id, selectGate, typeScanner }: any = LibNavigation.getArgsAll(props)
|
|
31
|
+
const [result, setResult] = useSafeState<any>(undefined)
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
loadData()
|
|
35
|
+
}, [])
|
|
36
|
+
|
|
37
|
+
function loadData() {
|
|
38
|
+
var post = {
|
|
39
|
+
event_id: event_id,
|
|
40
|
+
// event_id: "264",
|
|
41
|
+
user_qr: encodeURIComponent(user_qr),
|
|
42
|
+
gate_id: selectGate.id
|
|
43
|
+
// user_qr: encodeURIComponent("BBO-H6851"),
|
|
44
|
+
}
|
|
45
|
+
new LibCurl('event_tms_out_temporary', post, (res) => {
|
|
46
|
+
let a = res?.list?.length > 0 && res.list.map((item: any, i: number) => {
|
|
47
|
+
return ({
|
|
48
|
+
...item,
|
|
49
|
+
checked: 0
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
let b = res?.staff?.length > 0 && res.staff.map((item: any, i: number) => {
|
|
53
|
+
return ({
|
|
54
|
+
...item,
|
|
55
|
+
checked: 0
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
let c = {
|
|
60
|
+
...res,
|
|
61
|
+
list: res?.list?.length == 0 ? [] : a,
|
|
62
|
+
staff: res?.staff?.length == 0 ? [] : b
|
|
63
|
+
}
|
|
64
|
+
esp.log({ res, c });
|
|
65
|
+
setResult(c)
|
|
66
|
+
|
|
67
|
+
}, (error) => {
|
|
68
|
+
LibDialog.warningConfirm(esp.lang("event/tms_out_temporary", "fault"), error?.message, esp.lang("event/tms_out_temporary", "back"), () => LibNavigation.back(), "", () => { })
|
|
69
|
+
}, 1)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function quitTemporary(): void {
|
|
73
|
+
let list = [...result?.list, ...result.staff]
|
|
74
|
+
let a = list.filter((item: any) => item.checked == 1).map((it: any) => it.id)
|
|
75
|
+
|
|
76
|
+
if (a.length == 0) {
|
|
77
|
+
LibToastProperty.show(esp.lang("event/tms_out_temporary", "select_ticket"))
|
|
78
|
+
return
|
|
79
|
+
}
|
|
80
|
+
var post = {
|
|
81
|
+
event_id: event_id,
|
|
82
|
+
ids: JSON.stringify(a),
|
|
83
|
+
gate_id: selectGate.id
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
LibProgress.show(esp.lang("event/tms_out_temporary", "wait"))
|
|
87
|
+
new LibCurl('event_tms_out_temporary_confirm', post, (result, msg) => {
|
|
88
|
+
LibProgress.hide()
|
|
89
|
+
LibDialog.confirm(esp.lang("event/tms_out_temporary", "info"), msg, esp.lang("event/tms_out_temporary", "ok"), () => {
|
|
90
|
+
LibNavigation.replace('component/scanner', {
|
|
91
|
+
fromPage: 'event/tms_home',
|
|
92
|
+
isTemporaryExit: true,
|
|
93
|
+
event_id: event_id,
|
|
94
|
+
selectGate: selectGate,
|
|
95
|
+
typeScanner: typeScanner,
|
|
96
|
+
scan_type: scan_type
|
|
97
|
+
})
|
|
98
|
+
}, "", () => { })
|
|
99
|
+
}, (error) => {
|
|
100
|
+
LibDialog.warning(esp.lang("event/tms_out_temporary", "oops"), error?.message)
|
|
101
|
+
LibProgress.hide()
|
|
102
|
+
}, 1)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!result) return <LibLoading />
|
|
106
|
+
|
|
107
|
+
let lastStatusScanned = ''
|
|
108
|
+
function renderTicketTemporary(item: any, i: number) {
|
|
109
|
+
const showStatusScanned = lastStatusScanned != item?.status_label
|
|
110
|
+
lastStatusScanned = item?.status_label
|
|
111
|
+
return (
|
|
112
|
+
<View key={i}>
|
|
113
|
+
{
|
|
114
|
+
showStatusScanned &&
|
|
115
|
+
<View style={{ backgroundColor: item?.status == 1 ? '#fff' : "#c5c5c5", padding: 10, borderBottomWidth: 2, borderBottomColor: LibStyle.colorBgGrey }} >
|
|
116
|
+
<Text allowFontScaling={false} style={{ fontFamily: "Arial", fontSize: 16, fontWeight: "bold", fontStyle: "normal", letterSpacing: 1.5, color: item?.status == 1 ? item?.status_background : "#fff" }}>{(item?.status_label).toUpperCase()}</Text>
|
|
117
|
+
</View>
|
|
118
|
+
}
|
|
119
|
+
<EventScan_item
|
|
120
|
+
key={i}
|
|
121
|
+
item={item}
|
|
122
|
+
colorFont={"#fff"}
|
|
123
|
+
style={{ backgroundColor: item?.status == 1 ? "#fff" : "#c5c5c5" }}
|
|
124
|
+
event_image={result?.event_image}
|
|
125
|
+
event_name={result?.event_name}
|
|
126
|
+
event_ondate={result?.event_ondate}
|
|
127
|
+
colorText={item?.status == 1 ? "#000" : LibStyle.colorBgGrey}
|
|
128
|
+
label={
|
|
129
|
+
item.status == 0 ?
|
|
130
|
+
esp.lang("event/tms_out_temporary", "used") :
|
|
131
|
+
item.checked == 0 ?
|
|
132
|
+
esp.lang("event/tms_out_temporary", "use") :
|
|
133
|
+
esp.lang("event/tms_out_temporary", "cancel")
|
|
134
|
+
}
|
|
135
|
+
onPress={() => {
|
|
136
|
+
if (item?.status == 1 && item?.is_limit == 0) {
|
|
137
|
+
let a = LibObject.set(result, item.checked == 1 ? 0 : 1)('list', i, 'checked')
|
|
138
|
+
setResult(a)
|
|
139
|
+
}
|
|
140
|
+
}}
|
|
141
|
+
colorBackground={(item.status == 0 || item.is_limit == 1) ? LibStyle.colorLightGrey : (item.checked == 0) ? LibStyle.colorGreen : LibStyle.colorRed}
|
|
142
|
+
/>
|
|
143
|
+
</View>
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let lastStatusStaff = ''
|
|
148
|
+
function renderStaff(item: any, i: number) {
|
|
149
|
+
const showStatusScanned = lastStatusStaff != item?.status_label
|
|
150
|
+
lastStatusStaff = item?.status_label
|
|
151
|
+
|
|
152
|
+
return (
|
|
153
|
+
<View key={i}>
|
|
154
|
+
{
|
|
155
|
+
showStatusScanned &&
|
|
156
|
+
<View style={{ backgroundColor: item?.status == 1 ? '#fff' : "#c5c5c5", padding: 10, borderBottomWidth: 2, borderBottomColor: LibStyle.colorBgGrey }} >
|
|
157
|
+
<Text allowFontScaling={false} style={{ fontFamily: "Arial", fontSize: 16, fontWeight: "bold", fontStyle: "normal", letterSpacing: 1.5, color: item?.status == 1 ? item?.status_background : "#fff" }}>{(item?.status_label).toUpperCase()}</Text>
|
|
158
|
+
</View>
|
|
159
|
+
}
|
|
160
|
+
<View style={{ padding: 10, overflow: 'hidden', flex: 1, flexDirection: 'row', backgroundColor: '#fff', borderBottomColor: LibStyle.colorGrey, borderBottomWidth: 1.5 }}>
|
|
161
|
+
<LibPicture style={applyStyle({ borderRadius: 5, width: LibStyle.width / 4.5, height: LibStyle.width / 4.5, backgroundColor: LibStyle.colorBgGrey })} source={{ uri: item?.image }} />
|
|
162
|
+
<View style={{ marginLeft: 10, flex: 1 }}>
|
|
163
|
+
<Text allowFontScaling={false} ellipsizeMode={'tail'} numberOfLines={2} style={applyStyle({ color: "#000", marginBottom: 4, fontSize: 18, fontWeight: 'bold' })}>{item.name}</Text>
|
|
164
|
+
<Text allowFontScaling={false} ellipsizeMode={'tail'} numberOfLines={2} style={applyStyle({ color: "#000", marginBottom: 4, fontSize: 14 })}>{item.department_name}</Text>
|
|
165
|
+
<Text allowFontScaling={false} ellipsizeMode={'tail'} numberOfLines={2} style={applyStyle({ color: "#000", marginBottom: 4, fontSize: 16 })}>{item.exhibitor_name}</Text>
|
|
166
|
+
{
|
|
167
|
+
item.status == 1 &&
|
|
168
|
+
<EventButton style={applyStyle({ marginTop: 10, alignSelf: 'flex-end', width: LibStyle.width / 3, backgroundColor: (item.status == 0 || item.is_limit == 1) ? LibStyle.colorLightGrey : (item.checked == 0) ? LibStyle.colorGreen : LibStyle.colorRed })} label={
|
|
169
|
+
item.status == 0 ?
|
|
170
|
+
esp.lang("event/tms_out_temporary", "used") :
|
|
171
|
+
item.hasOwnProperty("checked") && item.checked == 0 ?
|
|
172
|
+
esp.lang("event/tms_out_temporary", "use") :
|
|
173
|
+
esp.lang("event/tms_out_temporary", "cancel")
|
|
174
|
+
} fontColor={"#fff"} onPress={() => {
|
|
175
|
+
let a = LibObject.set(result, item.checked == 1 ? 0 : 1)('staff', i, 'checked')
|
|
176
|
+
setResult(a)
|
|
177
|
+
}} />
|
|
178
|
+
}
|
|
179
|
+
</View>
|
|
180
|
+
<View pointerEvents='none' style={{ position: 'absolute', justifyContent: 'center', transform: [{ rotate: '45deg' }], margin: 1, ...LibStyle.elevation(2), height: 20, width: 170, backgroundColor: LibStyle.colorPrimary, right: -50, top: 25 }} >
|
|
181
|
+
<Text style={{ color: 'white', alignSelf: 'center', fontWeight: 'bold' }} >ID CARD</Text>
|
|
182
|
+
</View>
|
|
183
|
+
</View>
|
|
184
|
+
</View>
|
|
185
|
+
)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const sortedData = result?.list?.length > 0 && result?.list.sort((a: any, b: any) => {
|
|
189
|
+
if (a.is_limit == 0 && b.is_limit != 0) {
|
|
190
|
+
return -1; // a di atas b
|
|
191
|
+
} else if (a.is_limit != 0 && b.is_limit == 0) {
|
|
192
|
+
return 1; // b di atas a
|
|
193
|
+
} else {
|
|
194
|
+
return 0; // urutan relatif tidak berubah
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
return (
|
|
199
|
+
<View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
|
|
200
|
+
<EventHeader title={esp.lang("event/tms_out_temporary", "temp_out")} />
|
|
201
|
+
|
|
202
|
+
<ScrollView>
|
|
203
|
+
<View style={{ margin: 15, marginBottom: 0, borderRadius: 7, overflow: 'hidden' }}>
|
|
204
|
+
{
|
|
205
|
+
result?.staff?.length > 0 && result?.staff?.map(renderStaff)
|
|
206
|
+
}
|
|
207
|
+
</View>
|
|
208
|
+
<View style={{ margin: 15, borderRadius: 7, overflow: 'hidden' }}>
|
|
209
|
+
{
|
|
210
|
+
sortedData?.length > 0 && sortedData?.map(renderTicketTemporary)
|
|
211
|
+
}
|
|
212
|
+
</View>
|
|
213
|
+
</ScrollView>
|
|
214
|
+
<View style={{ padding: 10, backgroundColor: '#fff' }}>
|
|
215
|
+
<EventButton
|
|
216
|
+
label={esp.lang("event/tms_out_temporary", "btn_exit")}
|
|
217
|
+
backgroundColor={LibStyle.colorRed}
|
|
218
|
+
onPress={() => {
|
|
219
|
+
quitTemporary()
|
|
220
|
+
}}
|
|
221
|
+
// style={{ marginTop: 20 }}
|
|
222
|
+
/>
|
|
223
|
+
</View>
|
|
224
|
+
</View>
|
|
225
|
+
)
|
|
226
|
+
}
|
package/event/toggle.tsx
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// withHooks
|
|
2
|
+
|
|
3
|
+
import { LibStyle } from 'esoftplay/cache/lib/style/import';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { TouchableOpacity, View } from 'react-native';
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export interface EventToggleArgs {
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
export interface EventToggleProps {
|
|
12
|
+
value: boolean,
|
|
13
|
+
type: "success" | "danger"
|
|
14
|
+
disabled?: boolean,
|
|
15
|
+
onChangeValue: () => void
|
|
16
|
+
}
|
|
17
|
+
export default function m(props: EventToggleProps): any {
|
|
18
|
+
const { value, type, onChangeValue } = props
|
|
19
|
+
const color = type == 'success' ? "#4CD964" : "#E6212A"
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<TouchableOpacity
|
|
23
|
+
testID='toggle'
|
|
24
|
+
disabled={props.disabled}
|
|
25
|
+
onPress={onChangeValue}
|
|
26
|
+
style={{ opacity: props.disabled ? 0.5 : 1, height: 30, width: 50, borderWidth: 2, borderColor: value ? color : "#f1f2f3", borderRadius: 15, backgroundColor: value ? color : "white", justifyContent: "center", paddingHorizontal: 0.5, alignItems: value ? "flex-end" : "flex-start" }} >
|
|
27
|
+
<View style={{ height: 26, width: 26, borderRadius: 13, backgroundColor: "white", ...LibStyle.elevation(2) }} />
|
|
28
|
+
</TouchableOpacity>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// useLibs
|
|
2
|
+
|
|
3
|
+
import { UserClass } from 'esoftplay/cache/user/class/import';
|
|
4
|
+
import useGlobalState, { useGlobalReturn } from 'esoftplay/global';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export interface EventTransactionArgs {
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
export interface EventTransactionProps {
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
export interface EventTransactionReturn {
|
|
15
|
+
getTrxId: () => string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const stateTrxId = useGlobalState<number>(undefined, { persistKey: 'event/transaction' })
|
|
19
|
+
|
|
20
|
+
export function state(): useGlobalReturn<any> {
|
|
21
|
+
return stateTrxId
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function createTrxId() {
|
|
25
|
+
let user = UserClass.state().get()
|
|
26
|
+
let time = (new Date().getTime() / 1000).toFixed()
|
|
27
|
+
return time + "" + user?.id + "" + (Math.random() * 101).toFixed(0)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default function m(): EventTransactionReturn {
|
|
31
|
+
return {
|
|
32
|
+
getTrxId: createTrxId
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
2
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
3
3
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
4
4
|
import { LibIcon } from 'esoftplay/cache/lib/icon/import';
|
|
5
5
|
import { LibList } from 'esoftplay/cache/lib/list/import';
|
|
@@ -60,7 +60,7 @@ export default function m(props: EventTurnstile_event_gateProps): any {
|
|
|
60
60
|
|
|
61
61
|
return (
|
|
62
62
|
<View style={{ flex: 1, backgroundColor: "#fff" }}>
|
|
63
|
-
<
|
|
63
|
+
<EventHeader title={esp.lang("event/turnstile_event_gate", "header_title")} />
|
|
64
64
|
<LibList
|
|
65
65
|
data={result}
|
|
66
66
|
onRefresh={loadDataGate}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
3
|
+
import { EventMessage } from 'esoftplay/cache/event/message/import';
|
|
4
4
|
import { EventTurnstile_event_item } from 'esoftplay/cache/event/turnstile_event_item/import';
|
|
5
5
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
6
6
|
import { LibList } from 'esoftplay/cache/lib/list/import';
|
|
@@ -50,14 +50,14 @@ export default function m(props: EventTurnstile_event_listProps): any {
|
|
|
50
50
|
|
|
51
51
|
return (
|
|
52
52
|
<View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
|
|
53
|
-
<
|
|
53
|
+
<EventHeader title={esp.lang("event/turnstile_event_list", "header_title")} />
|
|
54
54
|
{
|
|
55
55
|
!result && !error ? <LibLoading /> :
|
|
56
56
|
<LibList
|
|
57
57
|
data={result}
|
|
58
58
|
onRefresh={loadDataEvent}
|
|
59
59
|
ListEmptyComponent={
|
|
60
|
-
<
|
|
60
|
+
<EventMessage message={error?.message} />
|
|
61
61
|
}
|
|
62
62
|
renderItem={renderItem}
|
|
63
63
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// withHooks
|
|
2
2
|
import { applyStyle } from 'esoftplay';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { EventButton } from 'esoftplay/cache/event/button/import';
|
|
4
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
5
5
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
6
6
|
import { LibIcon } from 'esoftplay/cache/lib/icon/import';
|
|
7
7
|
import { LibList } from 'esoftplay/cache/lib/list/import';
|
|
@@ -80,14 +80,14 @@ export default function m(props: EventTurnstile_event_ticketProps): any {
|
|
|
80
80
|
|
|
81
81
|
return (
|
|
82
82
|
<View style={{ flex: 1, backgroundColor: "#fff" }}>
|
|
83
|
-
<
|
|
83
|
+
<EventHeader title={esp.lang("event/turnstile_event_ticket", "header_title")} />
|
|
84
84
|
<LibList
|
|
85
85
|
data={result}
|
|
86
86
|
onRefresh={loadDataGate}
|
|
87
87
|
renderItem={renderItem}
|
|
88
88
|
/>
|
|
89
89
|
|
|
90
|
-
<
|
|
90
|
+
<EventButton label={esp.lang("event/turnstile_event_ticket", "label_next")} onPress={() => {
|
|
91
91
|
sendDataBack()
|
|
92
92
|
}} style={{ margin: 10 }} backgroundColor={LibStyle.colorPrimary} fontColor='#000' />
|
|
93
93
|
</View>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { EventButton } from 'esoftplay/cache/event/button/import';
|
|
3
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
4
|
+
import { EventToggle } from 'esoftplay/cache/event/toggle/import';
|
|
5
5
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
6
6
|
import { LibDialog } from 'esoftplay/cache/lib/dialog/import';
|
|
7
7
|
import { LibIcon } from 'esoftplay/cache/lib/icon/import';
|
|
8
8
|
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
|
|
9
9
|
import { LibProgress } from 'esoftplay/cache/lib/progress/import';
|
|
10
|
+
import { LibSlidingup } from 'esoftplay/cache/lib/slidingup/import';
|
|
10
11
|
import { LibStyle } from 'esoftplay/cache/lib/style/import';
|
|
11
12
|
import { LibToastProperty } from 'esoftplay/cache/lib/toast/import';
|
|
12
|
-
import { MarketToggle } from 'esoftplay/cache/market/toggle/import';
|
|
13
13
|
import esp from 'esoftplay/esp';
|
|
14
14
|
import useSafeState from 'esoftplay/state';
|
|
15
15
|
|
|
@@ -67,7 +67,7 @@ export default function m(props: EventTurnstile_settingsProps): any {
|
|
|
67
67
|
const [selectedTypeGate, setSelectedTypeGate] = useSafeState<any>()
|
|
68
68
|
const [selectedTypeTicket, setSelectedTypeTicket] = useSafeState<any>()
|
|
69
69
|
|
|
70
|
-
const dialogTypeGate = useRef<
|
|
70
|
+
const dialogTypeGate = useRef<LibSlidingup>(null)
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
const typeGate = [
|
|
@@ -224,7 +224,7 @@ export default function m(props: EventTurnstile_settingsProps): any {
|
|
|
224
224
|
|
|
225
225
|
return (
|
|
226
226
|
<View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
|
|
227
|
-
<
|
|
227
|
+
<EventHeader title={esp.lang("event/turnstile_settings", "setting_turnstile")} />
|
|
228
228
|
<ScrollView>
|
|
229
229
|
<View style={{ backgroundColor: '#fff', borderRadius: 10, margin: 10, ...LibStyle.elevation(2) }}>
|
|
230
230
|
<Item isTouchable onPress={() => {
|
|
@@ -260,7 +260,7 @@ export default function m(props: EventTurnstile_settingsProps): any {
|
|
|
260
260
|
<Text allowFontScaling={false} style={{ marginLeft: 8, fontFamily: 'SFProText', flex: 2, fontSize: 12 }}>{esp.lang("event/turnstile_settings", "id_card")}</Text>
|
|
261
261
|
</View>
|
|
262
262
|
<View style={{ marginLeft: 10, marginRight: 5, flex: 1, justifyContent: 'flex-end', flexDirection: 'row', alignContent: 'center', alignItems: 'center', }}>
|
|
263
|
-
<
|
|
263
|
+
<EventToggle value={forExhibitor} onChangeValue={() => {
|
|
264
264
|
setForExhibitor(forExhibitor == true ? false : true)
|
|
265
265
|
if (forExhibitor) {
|
|
266
266
|
setForExhibitor(false)
|
|
@@ -296,21 +296,21 @@ export default function m(props: EventTurnstile_settingsProps): any {
|
|
|
296
296
|
<Text allowFontScaling={false} style={{ marginLeft: 8, fontFamily: 'SFProText', flex: 2, fontSize: 12 }}>{esp.lang("event/turnstile_settings", "Enable_User_Scan")}</Text>
|
|
297
297
|
</View>
|
|
298
298
|
<View style={{ marginLeft: 10, marginRight: 5, flex: 1, justifyContent: 'flex-end', flexDirection: 'row', alignContent: 'center', alignItems: 'center', }}>
|
|
299
|
-
<
|
|
299
|
+
<EventToggle value={userScan} onChangeValue={() => { setUserScan(userScan == true ? false : true) }} type='success' />
|
|
300
300
|
</View>
|
|
301
301
|
</View>
|
|
302
302
|
</View>
|
|
303
303
|
|
|
304
304
|
</ScrollView>
|
|
305
305
|
|
|
306
|
-
<
|
|
306
|
+
<EventButton label={esp.lang("event/turnstile_settings", "submit")} onPress={() => {
|
|
307
307
|
if (checkInput()) {
|
|
308
308
|
settingTurnstile()
|
|
309
309
|
}
|
|
310
310
|
}} style={{ margin: 10 }} backgroundColor={LibStyle.colorPrimary} fontColor='#000' />
|
|
311
311
|
|
|
312
312
|
|
|
313
|
-
<
|
|
313
|
+
<LibSlidingup ref={dialogTypeGate}>
|
|
314
314
|
<View style={{ backgroundColor: '#f6f6f6', borderTopRightRadius: 10, borderTopLeftRadius: 10, paddingBottom: 25, paddingHorizontal: 19, }}>
|
|
315
315
|
<Text allowFontScaling={false} style={{ marginTop: 15, marginBottom: 23, fontFamily: "Arial", fontSize: 14, fontWeight: "bold", fontStyle: "normal", lineHeight: 22, letterSpacing: 0, textAlign: "center", color: "#34495e" }}>{esp.lang("event/turnstile_settings", "please_select_type_gate")}</Text>
|
|
316
316
|
<View style={{ flexDirection: 'row', justifyContent: 'space-around' }}>
|
|
@@ -320,7 +320,7 @@ export default function m(props: EventTurnstile_settingsProps): any {
|
|
|
320
320
|
</View>
|
|
321
321
|
|
|
322
322
|
</View>
|
|
323
|
-
</
|
|
323
|
+
</LibSlidingup>
|
|
324
324
|
</View >
|
|
325
325
|
)
|
|
326
326
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
2
|
+
import { EventCountdown_base } from 'esoftplay/cache/event/countdown_base/import';
|
|
3
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
3
4
|
import { LibAutoreload } from 'esoftplay/cache/lib/autoreload/import';
|
|
4
5
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
5
6
|
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
|
|
6
7
|
import { LibStyle } from 'esoftplay/cache/lib/style/import';
|
|
7
|
-
import { MarketCountdown } from 'esoftplay/cache/market/countdown/import';
|
|
8
8
|
import esp from 'esoftplay/esp';
|
|
9
9
|
import moment from 'esoftplay/moment';
|
|
10
10
|
|
|
@@ -43,14 +43,14 @@ export default function m(props: EventTurnstile_settings_otpProps): any {
|
|
|
43
43
|
|
|
44
44
|
return (
|
|
45
45
|
<View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
|
|
46
|
-
<
|
|
46
|
+
<EventHeader title={esp.lang("event/turnstile_settings_otp", "header")} />
|
|
47
47
|
|
|
48
48
|
<View style={{ backgroundColor: '#fff', borderRadius: 10, margin: 10 }}>
|
|
49
49
|
<Text allowFontScaling={false} style={{ fontFamily: 'SFProText', fontSize: 12, alignSelf: 'center', margin: 10, marginBottom: 0 }}>{esp.lang("event/turnstile_settings", "verification_code")}</Text>
|
|
50
50
|
<Text allowFontScaling={false} style={{ fontFamily: 'DecoNumbers', fontSize: 60, fontWeight: 'bold', alignSelf: 'center', margin: 10, marginTop: 0 }}>{data?.otp_code}</Text>
|
|
51
51
|
<View style={{ borderTopWidth: 1, borderTopColor: LibStyle.colorBgGrey, padding: 10 }}>
|
|
52
52
|
<Text allowFontScaling={false} style={{ fontFamily: 'SFProText', fontSize: 12, color: LibStyle.colorRed }}>{esp.lang("event/turnstile_settings_otp", "insert_code")}</Text>
|
|
53
|
-
<
|
|
53
|
+
<EventCountdown_base expired={moment(data?.otp_expire_time).serverFormat('YYYY-MM-DD HH:mm:ss')} style={{ fontSize: 14, color: LibStyle.colorRed, fontFamily: "ArialBold", fontWeight: "normal", fontStyle: "normal" }} />
|
|
54
54
|
</View>
|
|
55
55
|
</View>
|
|
56
56
|
</View>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
2
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
3
3
|
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
|
|
4
4
|
import { LibStyle } from 'esoftplay/cache/lib/style/import';
|
|
5
5
|
import esp from 'esoftplay/esp';
|
|
@@ -22,7 +22,7 @@ export default function m(props: EventTurnstile_settings_statusProps): any {
|
|
|
22
22
|
|
|
23
23
|
return (
|
|
24
24
|
<View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
|
|
25
|
-
<
|
|
25
|
+
<EventHeader title={esp.lang("event/turnstile_settings", "setting_turnstile")} />
|
|
26
26
|
{
|
|
27
27
|
msg &&
|
|
28
28
|
<>
|
package/event/voucher.tsx
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
3
|
-
import { ComponentLabel_input } from 'esoftplay/cache/component/label_input/import';
|
|
4
|
-
import { ComponentTouchable } from 'esoftplay/cache/component/touchable/import';
|
|
2
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
5
3
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
6
4
|
import { LibInput } from 'esoftplay/cache/lib/input/import';
|
|
7
5
|
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
|
|
8
6
|
import { LibProgress } from 'esoftplay/cache/lib/progress/import';
|
|
9
7
|
import { LibStyle } from 'esoftplay/cache/lib/style/import';
|
|
10
8
|
|
|
9
|
+
import { EventLabel_input } from 'esoftplay/cache/event/label_input/import';
|
|
11
10
|
import { LibDialog } from 'esoftplay/cache/lib/dialog/import';
|
|
12
11
|
import esp from 'esoftplay/esp';
|
|
13
12
|
import useSafeState from 'esoftplay/state';
|
|
14
13
|
import React, { useEffect } from 'react';
|
|
15
|
-
import { ScrollView, Text, View } from 'react-native';
|
|
14
|
+
import { ScrollView, Text, TouchableOpacity, View } from 'react-native';
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
export interface EventVoucherArgs {
|
|
@@ -86,10 +85,10 @@ export default function m(props: EventVoucherProps): any {
|
|
|
86
85
|
|
|
87
86
|
return (
|
|
88
87
|
<View style={{ flex: 1, backgroundColor: '#fff' }}>
|
|
89
|
-
<
|
|
88
|
+
<EventHeader title={esp.lang("event/voucher", "header")} />
|
|
90
89
|
<ScrollView>
|
|
91
90
|
<View style={{ margin: 15, marginTop: 0 }}>
|
|
92
|
-
<
|
|
91
|
+
<EventLabel_input label={esp.lang("event/voucher", "voucher_or_referral_code")} mandatory />
|
|
93
92
|
</View>
|
|
94
93
|
<View testID='input_voucher'>
|
|
95
94
|
<LibInput
|
|
@@ -112,7 +111,7 @@ export default function m(props: EventVoucherProps): any {
|
|
|
112
111
|
showText &&
|
|
113
112
|
<Text allowFontScaling={false} style={{ marginLeft: 15, fontFamily: "Arial", fontSize: 10, fontWeight: "bold", fontStyle: "normal", letterSpacing: 0, color: LibStyle.colorPrimary }} >{esp.lang("bigbang/payment", "text_alert")}</Text>
|
|
114
113
|
}
|
|
115
|
-
<
|
|
114
|
+
<TouchableOpacity testID='use_voucher' onPress={() => {
|
|
116
115
|
if (!showText) {
|
|
117
116
|
if (from == 'pos/pricing_payment') /* untuk register pos, bawa props bundling_id: bundling yg dipilih saat register */ {
|
|
118
117
|
checkVoucherPos()
|
|
@@ -124,12 +123,12 @@ export default function m(props: EventVoucherProps): any {
|
|
|
124
123
|
<View style={{ alignSelf: 'flex-end', marginRight: 15, marginBottom: 10, marginLeft: 10, width: 68, height: 35, borderRadius: 3, backgroundColor: showText ? '#8e8e8e' : LibStyle.colorGreen, alignContent: 'center', alignItems: 'center', justifyContent: 'center' }}>
|
|
125
124
|
<Text allowFontScaling={false} style={{ fontFamily: "Arial", fontSize: 12, fontWeight: "bold", fontStyle: "normal", letterSpacing: 0, textAlign: "center", color: '#fff' }}>{esp.lang("bigbang/payment", "button_use")}</Text>
|
|
126
125
|
</View>
|
|
127
|
-
</
|
|
126
|
+
</TouchableOpacity>
|
|
128
127
|
|
|
129
128
|
</ScrollView>
|
|
130
129
|
{
|
|
131
130
|
result &&
|
|
132
|
-
<
|
|
131
|
+
<TouchableOpacity testID='claim_now' onPress={() => {
|
|
133
132
|
if (result) {
|
|
134
133
|
let data = {
|
|
135
134
|
...result,
|
|
@@ -141,7 +140,7 @@ export default function m(props: EventVoucherProps): any {
|
|
|
141
140
|
<View style={{ marginHorizontal: 15, marginVertical: 10, height: 35, borderRadius: 17.5, backgroundColor: result ? "#00b894" : LibStyle.colorGrey, alignItems: 'center', justifyContent: 'center', flexDirection: 'row' }} >
|
|
142
141
|
<Text allowFontScaling={false} style={{ fontFamily: "Arial", fontSize: 13, fontWeight: "bold", fontStyle: "normal", letterSpacing: 0, textAlign: "center", color: '#fff' }} >{esp.lang("bigbang/payment", "claim")}</Text>
|
|
143
142
|
</View>
|
|
144
|
-
</
|
|
143
|
+
</TouchableOpacity>
|
|
145
144
|
}
|
|
146
145
|
|
|
147
146
|
</View>
|
package/event/voucher_multi.tsx
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// withHooks
|
|
2
|
-
import {
|
|
3
|
-
import { ComponentTouchable } from 'esoftplay/cache/component/touchable/import';
|
|
2
|
+
import { EventHeader } from 'esoftplay/cache/event/header/import';
|
|
4
3
|
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
|
|
5
4
|
import { LibDialog } from 'esoftplay/cache/lib/dialog/import';
|
|
6
5
|
import { LibIcon } from 'esoftplay/cache/lib/icon/import';
|
|
@@ -97,7 +96,7 @@ export default function m(props: EventVoucher_multiProps): any {
|
|
|
97
96
|
|
|
98
97
|
return (
|
|
99
98
|
<View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
|
|
100
|
-
<
|
|
99
|
+
<EventHeader title={esp.lang("event/voucher", "header")} />
|
|
101
100
|
<LibKeyboard_avoid style={{ flex: 1, marginBottom: 15 }}>
|
|
102
101
|
<ScrollView>
|
|
103
102
|
{
|
|
@@ -141,13 +140,13 @@ export default function m(props: EventVoucher_multiProps): any {
|
|
|
141
140
|
}
|
|
142
141
|
</ScrollView>
|
|
143
142
|
</LibKeyboard_avoid>
|
|
144
|
-
<
|
|
143
|
+
<TouchableOpacity testID='claim_now' onPress={() => {
|
|
145
144
|
LibNavigation.sendBackResult(getData())
|
|
146
145
|
}}>
|
|
147
146
|
<View style={{ marginHorizontal: 15, marginVertical: 10, height: 35, borderRadius: 17.5, backgroundColor: "#00b894", alignItems: 'center', justifyContent: 'center', flexDirection: 'row' }} >
|
|
148
147
|
<Text allowFontScaling={false} style={{ fontFamily: "Arial", fontSize: 13, fontWeight: "bold", fontStyle: "normal", letterSpacing: 0, textAlign: "center", color: '#fff' }} >{esp.lang("bigbang/payment", "claim")}</Text>
|
|
149
148
|
</View>
|
|
150
|
-
</
|
|
149
|
+
</TouchableOpacity>
|
|
151
150
|
|
|
152
151
|
<LibSlidingup ref={dialogInput} >
|
|
153
152
|
<View style={[{ maxHeight: LibStyle.height * 0.7, borderTopLeftRadius: 10, borderTopRightRadius: 10, backgroundColor: '#fff' }]}>
|