From ec6d3d17d1214f944a25b9d4c6fdb009b2b89ed6 Mon Sep 17 00:00:00 2001 From: zhuba-Ahhh <3477826311@qq.com> Date: Thu, 19 Sep 2024 00:49:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20:sparkles:=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=92=8C=E6=96=87=E7=AB=A0=E6=A0=87=E9=A2=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/blog/BlogClientComponent.tsx | 20 +++++++++---- src/app/blog/BlogSearch.tsx | 43 ++++++++++++++++++++++------ src/app/blog/[id]/MdxComponents.tsx | 9 ++++-- src/components/page/LatestPosts.tsx | 2 +- src/data/blogPosts.ts | 10 +++++++ src/data/ts/16.ts | 33 +++++++++++++++++++++ src/data/ts/17.ts | 1 + src/data/ts/index.ts | 3 +- 8 files changed, 102 insertions(+), 19 deletions(-) create mode 100644 src/data/ts/16.ts create mode 100644 src/data/ts/17.ts 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) => (