Refactor & Fix issue

This commit is contained in:
zimplexing
2025-07-06 16:43:25 +08:00
parent a2428120c4
commit b2b667ae91
13 changed files with 426 additions and 453 deletions

View File

@@ -1,4 +1,4 @@
import React, { useState, useRef, useEffect } from "react";
import React, { useState, useRef, useEffect } from 'react';
import {
View,
TextInput,
@@ -9,15 +9,15 @@ import {
Text,
Keyboard,
useColorScheme,
} from "react-native";
import { ThemedView } from "@/components/ThemedView";
import { ThemedText } from "@/components/ThemedText";
import VideoCard from "@/components/VideoCard.tv";
import { moonTVApi, SearchResult } from "@/services/api";
import { Search } from "lucide-react-native";
} from 'react-native';
import { ThemedView } from '@/components/ThemedView';
import { ThemedText } from '@/components/ThemedText';
import VideoCard from '@/components/VideoCard.tv';
import { api, SearchResult } from '@/services/api';
import { Search } from 'lucide-react-native';
export default function SearchScreen() {
const [keyword, setKeyword] = useState("");
const [keyword, setKeyword] = useState('');
const [results, setResults] = useState<SearchResult[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
@@ -42,15 +42,15 @@ export default function SearchScreen() {
setLoading(true);
setError(null);
try {
const response = await moonTVApi.searchVideos(keyword);
const response = await api.searchVideos(keyword);
if (response.results.length > 0) {
setResults(response.results);
} else {
setError("没有找到相关内容");
setError('没有找到相关内容');
}
} catch (err) {
setError("搜索失败,请稍后重试。");
console.error("Search failed:", err);
setError('搜索失败,请稍后重试。');
console.error('Search failed:', err);
} finally {
setLoading(false);
}
@@ -64,7 +64,7 @@ export default function SearchScreen() {
poster={item.poster}
year={item.year}
sourceName={item.source_name}
api={moonTVApi}
api={api}
/>
);
@@ -76,13 +76,13 @@ export default function SearchScreen() {
style={[
styles.input,
{
backgroundColor: colorScheme === "dark" ? "#2c2c2e" : "#f0f0f0",
color: colorScheme === "dark" ? "white" : "black",
borderColor: isInputFocused ? "#007bff" : "transparent",
backgroundColor: colorScheme === 'dark' ? '#2c2c2e' : '#f0f0f0',
color: colorScheme === 'dark' ? 'white' : 'black',
borderColor: isInputFocused ? '#007bff' : 'transparent',
},
]}
placeholder="搜索电影、剧集..."
placeholderTextColor={colorScheme === "dark" ? "#888" : "#555"}
placeholderTextColor={colorScheme === 'dark' ? '#888' : '#555'}
value={keyword}
onChangeText={setKeyword}
onFocus={() => setIsInputFocused(true)}
@@ -94,16 +94,13 @@ export default function SearchScreen() {
style={({ focused }) => [
styles.searchButton,
{
backgroundColor: colorScheme === "dark" ? "#3a3a3c" : "#e0e0e0",
backgroundColor: colorScheme === 'dark' ? '#3a3a3c' : '#e0e0e0',
},
focused && styles.focusedButton,
]}
onPress={handleSearch}
>
<Search
size={24}
color={colorScheme === "dark" ? "white" : "black"}
/>
<Search size={24} color={colorScheme === 'dark' ? 'white' : 'black'} />
</Pressable>
</View>
@@ -139,22 +136,22 @@ const styles = StyleSheet.create({
paddingTop: 50,
},
searchContainer: {
flexDirection: "row",
flexDirection: 'row',
paddingHorizontal: 20,
marginBottom: 20,
alignItems: "center",
alignItems: 'center',
},
input: {
flex: 1,
height: 50,
backgroundColor: "#2c2c2e", // Default for dark mode, overridden inline
backgroundColor: '#2c2c2e', // Default for dark mode, overridden inline
borderRadius: 8,
paddingHorizontal: 15,
color: "white", // Default for dark mode, overridden inline
color: 'white', // Default for dark mode, overridden inline
fontSize: 18,
marginRight: 10,
borderWidth: 2,
borderColor: "transparent", // Default, overridden for focus
borderColor: 'transparent', // Default, overridden for focus
},
searchButton: {
padding: 12,
@@ -162,16 +159,16 @@ const styles = StyleSheet.create({
borderRadius: 8,
},
focusedButton: {
backgroundColor: "#007bff",
backgroundColor: '#007bff',
transform: [{ scale: 1.1 }],
},
centerContainer: {
flex: 1,
justifyContent: "center",
alignItems: "center",
justifyContent: 'center',
alignItems: 'center',
},
errorText: {
color: "red",
color: 'red',
},
listContent: {
paddingHorizontal: 10,