import React, { useState, useCallback, useRef } from "react"; import { StyleSheet, Text, View, RefreshControl, ActivityIndicator, TouchableOpacity, } from "react-native"; import { useFocusEffect } from "@react-navigation/native"; import { useSelector, useDispatch } from "react-redux"; import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; import { Searchbar } from "../../components/Searchbar"; import NovelList from "../../components/NovelList"; import NovelCover from "../../components/NovelCover"; import EmptyView from "../../components/EmptyView"; import { getLibraryAction, searchLibraryAction, } from "../../redux/library/library.actions"; import { updateLibraryAction } from "../../redux/updates/updates.actions"; import { useSettings, useTheme } from "../../hooks/reduxHooks"; import { setNovel } from "../../redux/novel/novel.actions"; import { Portal, TouchableRipple } from "react-native-paper"; import LibraryFilterSheet from "./components/LibraryFilterSheet"; const LibraryScreen = ({ navigation }) => { const theme = useTheme(); const dispatch = useDispatch(); const { showNumberOfNovels, incognitoMode = false } = useSettings(); const libraryFilterSheetRef = useRef(null); const { loading, novels, filters: { sort, filter }, } = useSelector((state) => state.libraryReducer); const [refreshing, setRefreshing] = useState(false); const [searchText, setSearchText] = useState(""); useFocusEffect( useCallback(() => { setSearchText(""); dispatch(getLibraryAction(sort, filter)); }, [getLibraryAction, sort, filter]) ); const onRefresh = () => { setRefreshing(true); dispatch(updateLibraryAction()); setRefreshing(false); }; const clearSearchbar = () => { dispatch(getLibraryAction(sort, filter)); setSearchText(""); }; const onChangeText = (text) => { setSearchText(text); dispatch(searchLibraryAction(text, sort, filter)); }; const renderItem = ({ item }) => ( { navigation.navigate("Novel", item); dispatch(setNovel(item)); }} /> ); const refreshControl = () => ( ); // if (!loading) { // console.log(novels); // } const listEmptyComponent = () => searchText === "" && ( ); return ( <> libraryFilterSheetRef.current.show(), color: filter ? theme.filterColor : theme.textColorSecondary, }, ]} theme={theme} /> {incognitoMode && ( Incognito Mode )} {loading ? ( ) : ( <> {searchText !== "" && ( navigation.navigate("GlobalSearch", { novelName: searchText, }) } borderless rippleColor={theme.colorAccent} style={styles.emptySearch} > {`Search for "${searchText}" globally`} )} )} ); }; export default LibraryScreen; const styles = StyleSheet.create({ container: { flex: 1, }, emptySearch: { alignItems: "center", paddingVertical: 8, borderRadius: 4, }, });