Untitled
unknown
plain_text
2 years ago
7.0 kB
9
Indexable
import React, { memo, useEffect, useState } from 'react'; import { Dimensions, StyleSheet, PermissionsAndroid, Platform } from 'react-native'; import { Text, View } from 'react-native-ui-lib'; import { useTranslation } from 'react-i18next'; import { useColors } from '../../hooks/useColors'; import { Icon } from '../ui'; import { formattedByLanguage } from '../../utils/formatCurrency'; import { TouchableOpacity } from 'react-native-gesture-handler'; import ModalController from '../Modal/ModalController'; import { useEtrader } from '../../context'; import * as AddCalendarEvent from 'react-native-add-calendar-event'; import RNCalendarEvents from 'react-native-calendar-events'; const EconomicCalendarItem = memo( ({ text, icon, info, cardWidth, valAct, valCons, valPrev, indPri, valTStr, hasBorderRadius, valDStr }: any) => { const { colors }: any = useColors(); const { t, i18n } = useTranslation(); const { width, height } = Dimensions.get('window'); const dimensionsWidth = cardWidth ? width * 0.7 : width; const [importance, setImportance] = useState<string>(''); const { store: { theme }, } = useEtrader(); useEffect(() => { if (indPri) { if (indPri === 1) { setImportance('lowImportance'); } else if (indPri === 2) { setImportance('midImportance'); } else { setImportance('highImportance'); } } }, [indPri]); const [hour, minute, second] = valTStr?.split(':'); const [day, month, year] = valDStr?.split('.'); const newDate = new Date(`${year}-${month}-${day}T${hour}:${minute}:${second}.000Z`); const isoString = newDate.toISOString(); const addEventToCalendarIos = async () => { const addEvent = async () => { try { await RNCalendarEvents.saveEvent(text, { startDate: isoString, endDate: isoString, notes: text, }); ModalController.showModal({ type: 'success', externalHeight: height - 300, props: { title: t('addEventCalendar', { type: t('Buy'), }), }, }); } catch (error) { ModalController.showModal({ type: 'errorEvent', externalHeight: height - 250, props: {}, }); } }; try { const result = await RNCalendarEvents.requestPermissions({ readOnly: false }); if (result === 'authorized') { await addEvent(); } else { throw new Error('Calendar permission not authorized'); } } catch (error) { ModalController.showModal({ type: 'errorEvent', externalHeight: height - 250, props: {}, }); } }; const addEventToCalendarAndroid = async () => { try { const permission = PermissionsAndroid.PERMISSIONS.WRITE_CALENDAR; const granted = await PermissionsAndroid.request(permission, { title: 'Calendar Permission', message: 'This app needs calendar access to add events', buttonNegative: 'Cancel', buttonPositive: 'OK', }); if (granted === PermissionsAndroid.RESULTS.GRANTED) { try { await RNCalendarEvents.saveEvent(text, { startDate: isoString, endDate: isoString, notes: text, }); ModalController.showModal({ type: 'success', externalHeight: height - 300, props: { title: t('addEventCalendar', { type: t('Buy'), }), }, }); } catch (error) { ModalController.showModal({ type: 'errorEvent', externalHeight: height - 250, props: {}, }); } } else { ModalController.showModal({ type: 'errorEvent', externalHeight: height - 250, props: {}, }); } } catch (error) { ModalController.showModal({ type: 'errorEvent', externalHeight: height - 250, props: {}, }); } }; const handleFirstTouchableOpacityPress = () => { if (Platform.OS === 'ios') { addEventToCalendarIos(); } else { addEventToCalendarAndroid(); } }; return ( <View centerV spread padding-16 backgroundColor={theme === 'light' ? colors.cardFirstGr : colors.blockBg4DarkCl} style={[styles(colors, dimensionsWidth).container, hasBorderRadius ? styles(colors).roundedContainer : null]}> <View style={styles(colors).infoContainer}> <View row> <Text> <Icon name="flag" width={14} height={14} /> </Text> <Text marginL-10 secondaryText body3> {info} • {valTStr?.slice(0, 5)} • {t(importance)} </Text> <View style={styles(colors).icon}> <TouchableOpacity onPress={handleFirstTouchableOpacityPress}> <Icon name="calendar" width={14} height={14} /> </TouchableOpacity> </View> </View> <Text primaryText marginT-10 marginB-10 body2 style={styles(colors).textHeight}> {text} </Text> </View> <View row> <View flex-1 center> <Text secondaryText body2> {t('announced')} </Text> <Text color={valAct ? colors.primaryText : colors.secondaryText} body2> {valAct ? formattedByLanguage(i18n, valAct, 1, true) : '-'} </Text> </View> <View flex-1 center> <Text secondaryText body2> {t('expectations')} </Text> <Text color={valCons ? colors.primaryText : colors.secondaryText} body2> {valCons ? formattedByLanguage(i18n, valCons, 1, true) : '-'} </Text> </View> <View flex-1 center> <Text secondaryText body2> {t('previous')} </Text> <Text color={valPrev ? colors.primaryText : colors.secondaryText} body2> {valPrev ? formattedByLanguage(i18n, valPrev, 1, true) : '-'} </Text> </View> </View> </View> ); }, ); export { EconomicCalendarItem }; const styles = (colors?: any, dimensionsWidth?: number) => StyleSheet.create({ container: { width: dimensionsWidth, }, infoContainer: { borderBottomWidth: 0.5, borderColor: colors.white20, marginVertical: 8, }, icon: { flex: 1, alignItems: 'flex-end', }, textHeight: { height: 30, }, roundedContainer: { borderRadius: 8, }, });
Editor is loading...
Leave a Comment