index.tsx 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React from 'react';
  2. import { View, Text, TouchableOpacity, ScrollView, Image } from 'react-native';
  3. import { useNavigation } from '@react-navigation/native';
  4. import moment from 'moment';
  5. import { TripsData } from '../../utils/types';
  6. import { API_HOST } from 'src/constants';
  7. import { Colors } from 'src/theme';
  8. import { NAVIGATION_PAGES } from 'src/types';
  9. import { styles } from './styles';
  10. import CalendarIcon from 'assets/icons/travels-screens/calendar.svg';
  11. import EditIcon from 'assets/icons/travels-screens/pen-to-square.svg';
  12. const TripItem = ({ item }: { item: TripsData }) => {
  13. const navigation = useNavigation();
  14. const formatDate = (dateString: string) => {
  15. const date = moment(dateString);
  16. const formattedDate = date.format('MMM DD');
  17. const year = date.format('YYYY');
  18. return (
  19. <Text style={styles.alignCenter}>
  20. <Text style={styles.tripDateText}>{formattedDate}</Text>
  21. {'\n'}
  22. <Text style={styles.tripDateText}>{year}</Text>
  23. </Text>
  24. );
  25. };
  26. return (
  27. <View style={styles.tripItemContainer}>
  28. <View style={styles.tripHeaderContainer}>
  29. <View style={styles.tripDateContainer}>
  30. <CalendarIcon fill={Colors.DARK_BLUE} />
  31. <Text style={[styles.tripDateText, { marginLeft: 8 }]}>{formatDate(item.date_from)}</Text>
  32. <Text style={styles.tripDateText}>-</Text>
  33. <Text style={styles.tripDateText}>{formatDate(item.date_to)}</Text>
  34. </View>
  35. <TouchableOpacity
  36. style={styles.editButton}
  37. onPress={() =>
  38. navigation.navigate(...([NAVIGATION_PAGES.ADD_TRIP, { editTripId: item.id }] as never))
  39. }
  40. >
  41. <EditIcon />
  42. <Text style={styles.editButtonText}>Edit</Text>
  43. </TouchableOpacity>
  44. </View>
  45. <View style={styles.divider} />
  46. {item.description && (
  47. <>
  48. <Text style={styles.descriptionTitle}>Description</Text>
  49. <Text style={styles.descriptionText}>{item.description}</Text>
  50. </>
  51. )}
  52. <Text style={styles.visitedRegionsTitle}>Visited regions</Text>
  53. <ScrollView
  54. style={styles.regionsScrollView}
  55. showsVerticalScrollIndicator={false}
  56. horizontal={false}
  57. nestedScrollEnabled={true}
  58. >
  59. {item.regions.map((region) => {
  60. const [name, ...rest] = region.region_name?.split(/ – | - /);
  61. const subname = rest?.join(' - ');
  62. return (
  63. <View key={region.id} style={styles.regionItem}>
  64. <Image source={{ uri: API_HOST + region.flag1 }} style={styles.flagIcon} />
  65. {region.flag2 && (
  66. <Image
  67. source={{ uri: API_HOST + region.flag2 }}
  68. style={[styles.flagIcon, { marginLeft: -5 }]}
  69. />
  70. )}
  71. <View style={styles.nameContainer}>
  72. <Text style={styles.regionName}>{name}</Text>
  73. <Text style={styles.regionSubname}>{subname}</Text>
  74. </View>
  75. </View>
  76. );
  77. })}
  78. </ScrollView>
  79. </View>
  80. );
  81. };
  82. export default TripItem;