@@ -14,9 +14,10 @@ import {
1414 SelectValue ,
1515} from "@/components/ui/select" ;
1616import { Toggle } from "@/components/ui/toggle" ;
17- import { Code } from "lucide-react" ;
17+ import { Code , Clock } from "lucide-react" ;
1818import ManualDialog from "./manual-dialog" ;
1919import AdvancedFilterBuilder , { getCachedFilterRule } from "./filter-sphere" ;
20+ import { Button } from "@/components/ui/button" ;
2021
2122export interface Props {
2223 query : string ;
@@ -33,6 +34,8 @@ export enum Sort {
3334 IdAsc = "id:asc" ,
3435}
3536
37+ const PRE_2023_DATE_FILTER = "date < sec(2023-01-01)" ;
38+
3639export default function Search ( props : Props ) {
3740 const [ useAdvancedSearch , setUseAdvancedSearch ] = React . useState (
3841 props . initAdvancedSearch
@@ -45,12 +48,57 @@ export default function Search(props: Props) {
4548 props . onSortChange ( sort ) ;
4649 } , [ sort ] ) ;
4750
51+ const handlePre2023Search = ( ) => {
52+ const currentQuery = props . query . trim ( ) ;
53+ const dateFilter = `(${ PRE_2023_DATE_FILTER } )` ;
54+
55+ // Check if the query already contains the pre-2023 date filter
56+ if ( currentQuery . includes ( PRE_2023_DATE_FILTER ) ) {
57+ // Already has the filter, no need to add again
58+ return ;
59+ }
60+
61+ // Check if current query already has a filter (ends with parenthesis)
62+ if ( currentQuery . endsWith ( ")" ) ) {
63+ // Extract simple query and existing filter
64+ const firstParen = currentQuery . indexOf ( "(" ) ;
65+ if ( firstParen !== - 1 ) {
66+ const simpleQuery = currentQuery . substring ( 0 , firstParen ) . trim ( ) ;
67+ const existingFilter = currentQuery . substring ( firstParen ) ;
68+ // Combine filters with AND
69+ const combinedFilter = `(${ existingFilter . slice ( 1 , - 1 ) } AND ${ PRE_2023_DATE_FILTER } )` ;
70+ const newQuery = simpleQuery ? `${ simpleQuery } ${ combinedFilter } ` : combinedFilter ;
71+ props . onChange ( newQuery ) ;
72+ } else {
73+ // Should not happen, but fallback
74+ props . onChange ( `${ currentQuery } ${ dateFilter } ` ) ;
75+ }
76+ } else {
77+ // Simple query or empty, append filter
78+ const newQuery = currentQuery ? `${ currentQuery } ${ dateFilter } ` : dateFilter ;
79+ props . onChange ( newQuery ) ;
80+ }
81+
82+ setUseAdvancedSearch ( true ) ;
83+ setIsQueryMode ( true ) ;
84+ } ;
85+
4886 return (
4987 < div className = "w-full font-semibold" >
5088 < div className = "flex flex-row items-center justify-end mb-2" >
5189 < div className = "mr-auto hidden md:block" >
5290 < ManualDialog />
5391 </ div >
92+ < Button
93+ variant = "reverse"
94+ size = "sm"
95+ onClick = { handlePre2023Search }
96+ className = "mr-2"
97+ title = "搜索 2023 年以前的内容(人类时代)"
98+ >
99+ < Clock className = "h-4 w-4" />
100+ 人类时代
101+ </ Button >
54102 { useAdvancedSearch && (
55103 < >
56104 < Toggle
0 commit comments