/** * PopularFeatures - Main component for popular movies section * Displays Douban movie recommendations with tag filtering and infinite scroll. * Includes personalized "为你推荐" tag when user has 2+ watched items. */ 'use client'; import { useState } from 'react'; import { TagManager } from './TagManager'; import { MovieGrid } from './MovieGrid'; import { useTagManager } from './hooks/useTagManager'; import { usePopularMovies } from './hooks/usePopularMovies'; import { usePersonalizedRecommendations } from './hooks/usePersonalizedRecommendations'; interface DoubanMovie { id: string; title: string; cover: string; rate: string; url: string; } interface PopularFeaturesProps { onSearch?: (query: string) => void; } export function PopularFeatures({ onSearch }: PopularFeaturesProps) { const { tags, selectedTag, contentType, newTagInput, showTagManager, justAddedTag, setContentType, setSelectedTag, setNewTagInput, setShowTagManager, setJustAddedTag, handleAddTag, handleDeleteTag, handleRestoreDefaults, handleDragEnd, isLoadingTags, } = useTagManager(); const { movies: recommendMovies, loading: recommendLoading, hasMore: recommendHasMore, hasHistory, prefetchRef: recommendPrefetchRef, loadMoreRef: recommendLoadMoreRef, } = usePersonalizedRecommendations(false); const [isRecommendSelected, setIsRecommendSelected] = useState(false); const effectiveRecommendSelected = hasHistory && isRecommendSelected; const isTagManagementMode = showTagManager; const { movies, loading, hasMore, prefetchRef, loadMoreRef, } = usePopularMovies( effectiveRecommendSelected ? '' : selectedTag, tags, contentType ); const handleMovieClick = (movie: DoubanMovie) => { if (onSearch) { onSearch(movie.title); } }; const handleRecommendSelect = () => { setIsRecommendSelected(true); }; const handleRegularTagSelect = (tagId: string) => { if (tagId === 'custom_高级' || tags.find(t => t.id === tagId)?.label === '高级') { window.location.href = '/premium'; return; } setIsRecommendSelected(false); setSelectedTag(tagId); }; return (
{/* Content Type Toggle (Capsule Liquid Glass - Fixed & Centered) */} {!isTagManagementMode && !effectiveRecommendSelected && (
{/* Sliding Indicator */}
)} setShowTagManager(!showTagManager)} onRestoreDefaults={handleRestoreDefaults} onNewTagInputChange={setNewTagInput} onAddTag={handleAddTag} onDragEnd={handleDragEnd} onJustAddedTagHandled={() => setJustAddedTag(false)} isLoadingTags={isLoadingTags} recommendTag={hasHistory ? { label: '为你推荐', isSelected: effectiveRecommendSelected, onSelect: handleRecommendSelect, } : undefined} /> {!isTagManagementMode && ( effectiveRecommendSelected ? ( ) : ( ) )}
); }