/** * PopularFeatures - Main component for popular movies section * Displays Douban movie recommendations with tag filtering and infinite scroll */ 'use client'; import { TagManager } from './TagManager'; import { MovieGrid } from './MovieGrid'; import { useTagManager } from './hooks/useTagManager'; import { usePopularMovies } from './hooks/usePopularMovies'; 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, loading, hasMore, prefetchRef, loadMoreRef, } = usePopularMovies(selectedTag, tags, contentType); const handleMovieClick = (movie: any) => { if (onSearch) { onSearch(movie.title); } }; return (
{/* Content Type Toggle (Capsule Liquid Glass - Fixed & Centered) */}
{/* Sliding Indicator */}
{ if (tagId === 'custom_高级' || tags.find(t => t.id === tagId)?.label === '高级') { window.location.href = '/premium'; return; } setSelectedTag(tagId); }} onTagDelete={handleDeleteTag} onToggleManager={() => setShowTagManager(!showTagManager)} onRestoreDefaults={handleRestoreDefaults} onNewTagInputChange={setNewTagInput} onAddTag={handleAddTag} onDragEnd={handleDragEnd} onJustAddedTagHandled={() => setJustAddedTag(false)} isLoadingTags={isLoadingTags} />
); }