import React, { useEffect, useState, useCallback, useContext, useRef, useMemo } from 'react'; import { Link, router, useLocalSearchParams, useFocusEffect } from 'expo-router'; import { Image as RNImage, StyleSheet, useWindowDimensions, ScrollView, Pressable, RefreshControl, Platform, FlatList, TouchableOpacity } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Icon, MD3Colors, Button, Text, TextInput, TouchableRipple } from 'react-native-paper'; import CircularProgress from 'react-native-circular-progress-indicator'; import { ActivityIndicator } from 'react-native-paper'; import { FlashList } from "@shopify/flash-list"; import uuid from 'react-native-uuid'; import Toast from 'react-native-toast-message'; import { View, AnimatePresence } from 'moti'; import * as Clipboard from 'expo-clipboard'; import * as FileSystem from 'expo-file-system'; import NetInfo from "@react-native-community/netinfo"; import { Marquee } from '@animatereactnative/marquee'; import { Slider } from '@rneui/themed-edge'; import ComicComponent from './components/comic_component'; import BookmarkWidget from './components/widgets/bookmark'; import { __styles } from './stylesheet/styles'; import Storage from '@/constants/module/storages/storage'; import ChapterStorage from '@/constants/module/storages/chapter_storage'; import Image from '@/components/Image'; import {CONTEXT} from '@/constants/module/context'; import {blobToBase64, base64ToBlob, getImageLayout} from "@/constants/module/file_manager"; import Theme from '@/constants/theme'; import ComicStorage from '@/constants/module/storages/comic_storage'; const Index = ({}:any) => { const Dimensions = useWindowDimensions(); const controller = new AbortController(); const signal = controller.signal; const {showMenuContext, setShowMenuContext}:any = useContext(CONTEXT) const {themeTypeContext, setThemeTypeContext}:any = useContext(CONTEXT) const {apiBaseContext, setApiBaseContext}:any = useContext(CONTEXT) const {widgetContext, setWidgetContext}:any = useContext(CONTEXT) const {showCloudflareTurnstileContext, setShowCloudflareTurnstileContext}:any = useContext(CONTEXT) const [styles, setStyles]:any = useState("") const [isLoading, setIsLoading] = useState(true) const [onRefresh, setOnRefresh] = useState(false) const [COMIC_DATA, SET_COMIC_DATA] = useState([]) useFocusEffect(useCallback(() => { (async ()=>{ setIsLoading(true) const stored_recent = await Storage.get("RECENT") || [] stored_recent.sort((a:any,b:any) => b.timestamp - a.timestamp) const stored_comic = [] for (const item of stored_recent) { const comic = await ComicStorage.getByID(item.source,item.comic_id) if (comic) stored_comic.push(comic) } SET_COMIC_DATA(stored_comic) setIsLoading(false) })() },[onRefresh])) const RenderComicComponent = useCallback(({item,index}:any) => { console.log(item,index) return },[]) useFocusEffect(useCallback(() => { setIsLoading(true) setShowMenuContext(true) setStyles(__styles(themeTypeContext,Dimensions)) return () => { controller.abort(); }; },[])) return (<>{styles && ! isLoading ? <> Recent <>{COMIC_DATA.length ? <>{COMIC_DATA.map((item:any,index:number) => ( )) } : <> There no recent read. } : }) } export default Index;