diff --git a/src/app/blog/BlogClientComponent.tsx b/src/app/blog/BlogClientComponent.tsx index d3b7ee6..39c2949 100644 --- a/src/app/blog/BlogClientComponent.tsx +++ b/src/app/blog/BlogClientComponent.tsx @@ -35,6 +35,7 @@ export default function BlogList() { const [isTagsExpanded, setIsTagsExpanded] = useState(false); const [isLoading, setIsLoading] = useState(true); const [sortOption, setSortOption] = useState("date"); + const [sortOrder, setSortOrder] = useState<"asc" | "desc">("asc"); const handleSearchParamsChange = useCallback(() => { const tag = searchParams.get("tag"); @@ -63,17 +64,21 @@ export default function BlogList() { (!selectedTag || post.tags.includes(selectedTag)) ); - // 根据选择的排序选项进行排序 + // 根据选择的排序选项和顺序进行排序 posts.sort((a, b) => { + const dateComparison = + new Date(b.date).getTime() - new Date(a.date).getTime(); + const titleComparison = a.title.localeCompare(b.title); + if (sortOption === "date") { - return new Date(b.date).getTime() - new Date(a.date).getTime(); + return sortOrder === "asc" ? -dateComparison : dateComparison; // 根据排序顺序调整比较结果 } else { - return a.title.localeCompare(b.title); + return sortOrder === "asc" ? titleComparison : -titleComparison; // 根据排序顺序调整比较结果 } }); return posts; - }, [searchTerm, selectedTag, filteredPosts, sortOption]); + }, [searchTerm, selectedTag, filteredPosts, sortOption, sortOrder]); // 添加 sortOrder 作为依赖项 const currentPosts = useMemo(() => { const indexOfLastPost = currentPage * POSTS_PER_PAGE; @@ -124,9 +129,12 @@ export default function BlogList() { searchTerm={searchTerm} onSearchChange={handleSearch} sortOption={sortOption} - onSortChange={(value: SortOption) => setSortOption(value)} + sortOrder={sortOrder} // 添加排序顺序 + onSortChange={(option: SortOption, order: "asc" | "desc") => { + setSortOption(option); + setSortOrder(order); // 更新排序顺序 + }} /> - ) => void; sortOption: SortOption; - onSortChange: (value: SortOption) => void; + sortOrder: "asc" | "desc"; // 保留排序顺序 + onSortChange: (option: SortOption, order: "asc" | "desc") => void; // 修改为同时处理排序类型和顺序 } -export function BlogSearch({ searchTerm, onSearchChange, sortOption, onSortChange }: BlogSearchProps) { +export function BlogSearch({ + searchTerm, + onSearchChange, + sortOption, + sortOrder, + onSortChange, +}: BlogSearchProps) { return (
@@ -28,16 +43,28 @@ export function BlogSearch({ searchTerm, onSearchChange, sortOption, onSortChang - { + const [option, order] = value.split("-"); // 解析选项和顺序 + onSortChange(option as SortOption, order as "asc" | "desc"); + }} + defaultValue={`${sortOption}-${sortOrder}`} + > - 按日期排序 - 按标题排序 + 按日期升序{" "} + {/* 合并选项 */} + 按日期降序{" "} + {/* 合并选项 */} + 按标题升序{" "} + {/* 合并选项 */} + 按标题降序{" "} + {/* 合并选项 */}
); -} \ No newline at end of file +} diff --git a/src/app/blog/[id]/MdxComponents.tsx b/src/app/blog/[id]/MdxComponents.tsx index 5a5dd7f..aad0803 100644 --- a/src/app/blog/[id]/MdxComponents.tsx +++ b/src/app/blog/[id]/MdxComponents.tsx @@ -36,19 +36,22 @@ const Tr: React.FC> = (props) => ( export const mdxComponents: MDXComponents = { h1: (props: any) => (

), h2: (props: any) => (

), h3: (props: any) => (

), diff --git a/src/components/page/LatestPosts.tsx b/src/components/page/LatestPosts.tsx index 526dd6c..5275917 100644 --- a/src/components/page/LatestPosts.tsx +++ b/src/components/page/LatestPosts.tsx @@ -25,7 +25,7 @@ const TechStack: React.FC = () => { {technologies.map((tech) => (