index.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import React from 'react';
  2. import { View, Text, Image, TouchableOpacity } from 'react-native';
  3. import { qualityOptions } from '../../utils/constants';
  4. import { RegionAddData } from '../../utils/types';
  5. import { Colors } from 'src/theme';
  6. import { API_HOST } from 'src/constants';
  7. import { styles } from './styles';
  8. import TrashSvg from 'assets/icons/travels-screens/trash-solid.svg';
  9. import ChevronIcon from 'assets/icons/travels-screens/down-arrow.svg';
  10. import CheckSvg from 'assets/icons/travels-screens/check.svg';
  11. import SquareSvg from 'assets/icons/travels-screens/square.svg';
  12. const RegionItem = ({
  13. region,
  14. onDelete,
  15. onToggleStatus,
  16. onQualityChange,
  17. onHiddenChange,
  18. startDate
  19. }: {
  20. region: RegionAddData;
  21. onDelete: () => void;
  22. onToggleStatus: () => void;
  23. onQualityChange: () => void;
  24. onHiddenChange: () => void;
  25. startDate: string | null;
  26. }) => {
  27. const name = region.region_name.split(/ – | - /);
  28. const qualityName = region.quality
  29. ? qualityOptions.find((q) => q.id === region.quality)?.name
  30. : 'Good Visit';
  31. const disabled = !startDate || startDate > new Date().toISOString().split('T')[0];
  32. return (
  33. <View key={region.id} style={styles.regionItem}>
  34. <View style={styles.regionItemTop}>
  35. <View style={styles.regionHeader}>
  36. <Image
  37. source={{ uri: `${API_HOST}/img/flags_new/${region.flag1}` }}
  38. style={styles.flagStyle}
  39. />
  40. {region.flag2 && (
  41. <Image
  42. source={{ uri: `${API_HOST}/img/flags_new/${region.flag2}` }}
  43. style={[styles.flagStyle, { marginLeft: -17 }]}
  44. />
  45. )}
  46. <View style={styles.nameContainer}>
  47. <Text style={styles.regionName}>{name[0]}</Text>
  48. <Text style={styles.regionSubname}>{name[1]}</Text>
  49. </View>
  50. </View>
  51. <TouchableOpacity style={styles.trashBtn} onPress={onDelete}>
  52. <TrashSvg fill={Colors.WHITE} />
  53. </TouchableOpacity>
  54. </View>
  55. <View style={styles.divider}></View>
  56. <Text style={styles.qualityOfVisit}>Quality of visit</Text>
  57. <View style={styles.regionItemBottom}>
  58. <TouchableOpacity style={styles.qualitySelector} onPress={onQualityChange}>
  59. <Text style={styles.qualityButtonText}>{qualityName}</Text>
  60. <ChevronIcon width={18} height={18} />
  61. </TouchableOpacity>
  62. <TouchableOpacity
  63. style={[
  64. styles.markCompletedButton,
  65. disabled && {
  66. backgroundColor: Colors.LIGHT_GRAY,
  67. borderColor: Colors.LIGHT_GRAY
  68. }
  69. ]}
  70. onPress={onToggleStatus}
  71. disabled={disabled}
  72. >
  73. <View style={styles.completedContainer}>
  74. <View style={{ position: 'relative' }}>
  75. <SquareSvg />
  76. </View>
  77. {region.status === 1 && !disabled && (
  78. <View style={{ position: 'absolute', left: 2, top: 1 }}>
  79. <CheckSvg width={14} height={14} />
  80. </View>
  81. )}
  82. <Text style={styles.markCompletedButtonText}>Completed</Text>
  83. </View>
  84. </TouchableOpacity>
  85. </View>
  86. {region.can_be_hidden && (
  87. <View style={{ marginTop: 12, marginHorizontal: '25%' }}>
  88. <TouchableOpacity
  89. style={[
  90. styles.markCompletedButton,
  91. disabled && {
  92. backgroundColor: Colors.LIGHT_GRAY,
  93. borderColor: Colors.LIGHT_GRAY
  94. }
  95. ]}
  96. onPress={onHiddenChange}
  97. disabled={disabled}
  98. >
  99. <View style={styles.completedContainer}>
  100. <View style={{ position: 'relative' }}>
  101. <SquareSvg />
  102. </View>
  103. {region.hidden && (
  104. <View style={{ position: 'absolute', left: 2, top: 1 }}>
  105. <CheckSvg width={14} height={14} />
  106. </View>
  107. )}
  108. <Text style={styles.markCompletedButtonText}>Hidden</Text>
  109. </View>
  110. </TouchableOpacity>
  111. </View>
  112. )}
  113. </View>
  114. );
  115. };
  116. export default RegionItem;