123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import React, { useEffect, useState } from 'react';
- import { FlatList, Text, TouchableOpacity, View } from 'react-native';
- import { Image } from 'expo-image';
- import { Header, HorizontalTabView, Loading, PageWrapper } from '../../../../components';
- import { getMastersByType, getUNMastersTypes } from '../../../../database/unMastersService';
- import { API_HOST } from '../../../../constants';
- import { UNMastersListStyles } from './styles';
- import ArrowUpWideIcon from '../../../../../assets/icons/arrow-up-wide-short.svg';
- import type { Master } from '../../../../database/unMastersService';
- const UNMastersScreen = () => {
- const [index, setIndex] = useState(0);
- const [routes, setRoutes] = useState<{ key: string; title: string }[]>([]);
- const [loading, setLoading] = useState(true);
- useEffect(() => {
- const types = getUNMastersTypes();
- const parseRoutes = types?.map((item) => ({
- key: item.type.toString(),
- title: item.name
- }));
- setRoutes(parseRoutes || []);
- setLoading(false);
- }, []);
- if (loading) return <Loading />;
- return (
- <PageWrapper>
- <Header label={'UN Masters'} />
- <HorizontalTabView
- index={index}
- setIndex={setIndex}
- routes={routes}
- renderScene={({ route }: { route: { key: string; title: string } }) => (
- <UNMastersList type={route.key} />
- )}
- />
- </PageWrapper>
- );
- };
- const UNMastersList = React.memo(({ type }: { type: string }) => {
- const [isLoading, setIsLoading] = useState(true);
- const [masters, setMasters] = useState<Master[] | null>([]);
- useEffect(() => {
- const fetchType = async () => {
- const data = getMastersByType(Number(type) || 1);
- setMasters(data);
- };
- fetchType();
- setIsLoading(false);
- }, [type]);
- if (isLoading) return <Loading />;
- const renderItem = ({ item }: { item: Master }) => {
- return (
- <View style={UNMastersListStyles.wrapper}>
- <View style={{ gap: 3, marginLeft: 5 }}>
- <Text style={UNMastersListStyles.firstAndLastName}>{item.full_name}</Text>
- <View style={UNMastersListStyles.wrapper}>
- <Text style={UNMastersListStyles.descriptionText}>
- Born: {item.born} / Age when done: {item.age} /
- </Text>
- <Image
- style={[UNMastersListStyles.countryFlag, { marginLeft: 5 }]}
- source={{ uri: API_HOST + '/img/flags_new/' + item.origin1_flag }}
- />
- {item.origin2_flag && item.origin2_flag !== item.origin1_flag ? (
- <Image
- style={[UNMastersListStyles.countryFlag, { marginLeft: -5 }]}
- source={{ uri: API_HOST + '/img/flags_new/' + item.origin2_flag }}
- />
- ) : null}
- </View>
- <View style={UNMastersListStyles.wrapper}>
- <Text style={UNMastersListStyles.descriptionText}>
- Year / final country: {item.final_year}
- </Text>
- <Image
- style={[UNMastersListStyles.countryFlag, { marginLeft: 5 }]}
- source={{ uri: API_HOST + '/img/flags_new/' + item.final_flag }}
- />
- </View>
- </View>
- </View>
- );
- };
- return (
- <FlatList
- contentContainerStyle={{ gap: 10 }}
- horizontal={false}
- data={masters}
- renderItem={renderItem}
- keyExtractor={(item) => item.id.toString()}
- showsVerticalScrollIndicator={false}
- />
- );
- });
- export default UNMastersScreen;
|