Untitled
unknown
javascript
a year ago
5.8 kB
7
Indexable
import { StatusBar } from 'expo-status-bar'; import React, { useEffect, useState, useCallback, useRef } from 'react' import { StyleSheet, Text, View, TouchableOpacity } from 'react-native'; import { Octicons } from '@expo/vector-icons'; import { Image } from 'expo-image'; import colors from '../../colors.json' import { LinearGradient } from 'expo-linear-gradient'; import * as FileSystem from 'expo-file-system'; import { useTranslation } from 'react-i18next'; import i18next from '../../localization/i18n.js' import axios from 'axios' import { TouchableOpacity as RNGHTouchableOpacity, ScrollView, FlatList } from 'react-native-gesture-handler'; import AutoScrollingScrollView from '../helpers/imageSlider'; export default function Shop({ navigation }) { const { t } = useTranslation() let cachedLanguage = i18next.language; const [shop, setShop] = useState([]) const loadShop = useCallback(({ item, index }) => { return ( <View style={{ marginBottom: 15 }}> <FlatList horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{ paddingLeft: 20 }} data={item.tiles} onEndReachedThreshold={0.1} removeClippedSubviews={true} maxToRenderPerBatch={10} updateCellsBatchingPeriod={5000} initialNumToRender={25} windowSize={2} keyExtractor={(item, index) => `${index}`} // Change the key to something unique for each item renderItem={({ item: ratio }) => ( <View style={{ flexDirection: ratio.tileSize === "Size_1_x_1" ? 'row' : 'column' }}> {ratio.tileSize === "Size_1_x_1" ? ( [...Array(Math.ceil(ratio.list.length / 2))].map((_, colIndex) => ( <View key={colIndex} style={{ flexDirection: 'column' }}> {ratio.list.slice(colIndex * 2, colIndex * 2 + 2).map((offer, rowIndex) => ( <RNGHTouchableOpacity onPress={() => navigation.navigate("DetailsScreen", { data: offer.granted[0] })} key={`${colIndex}-${rowIndex}`} style={{ marginRight: 5, marginBottom: rowIndex === 0 ? 5 : 0, width: 72, height: 72, overflow: 'hidden', backgroundColor: '#191919', position: "relative" }}> <AutoScrollingScrollView width={72} height={72} images={offer.displayAssets.map(e => e.background + "?width=100")} /> </RNGHTouchableOpacity> ))} </View> )) ) : ( <View style={{ flexDirection: "row" }}> { ratio.list.map((offer, rowIndex) => ( <RNGHTouchableOpacity key={rowIndex} onPress={() => navigation.navigate("DetailsScreen", { data: offer.granted[0] })} style={{ marginRight: 5, width: offer.tileSize === "Size_3_x_2" || offer.tileSize === "TripleWide" ? 170 : offer.tileSize === "Size_2_x_2" ? 150 : offer.tileSize === "Size_1_x_2" ? 82 : 150, height: offer.tileSize === "Size_3_x_2" || offer.tileSize === "TripleWide" ? 150 : offer.tileSize === "Size_2_x_2" ? 150 : offer.tileSize === "Size_1_x_2" ? 150 : 150, overflow: 'hidden', backgroundColor: '#191919', position: "relative" }}> <AutoScrollingScrollView width={offer.tileSize === "Size_3_x_2" || offer.tileSize === "TripleWide" ? 170 : offer.tileSize === "Size_2_x_2" ? 150 : offer.tileSize === "Size_1_x_2" ? 82 : 150} height={offer.tileSize === "Size_3_x_2" || offer.tileSize === "TripleWide" ? 150 : offer.tileSize === "Size_2_x_2" ? 150 : offer.tileSize === "Size_1_x_2" ? 150 : 150} images={offer.displayAssets.map(e => e.background + "?width=265")} /> </RNGHTouchableOpacity> )) } </View> )} </View> )} /> </View> ); }, []) return ( <LinearGradient colors={[colors.app.background, "#000"]} style={styles.container}> <View style={{ alignItems: 'center', justifyContent: 'center', }}> <FlatList onEndReachedThreshold={0.1} removeClippedSubviews={true} maxToRenderPerBatch={20} updateCellsBatchingPeriod={5000} initialNumToRender={50} windowSize={15} data={shop} renderItem={loadShop} /> </View> </LinearGradient> ); } const styles = StyleSheet.create({ container: { flex: 1, }, });
Editor is loading...
Leave a Comment