@@ -17,13 +17,13 @@ import { Toggle } from "@/components/ui/toggle";
1717import { Code , Clock } from "lucide-react" ;
1818import ManualDialog from "./manual-dialog" ;
1919import AdvancedFilterBuilder , { getCachedFilterRule } from "./filter-sphere" ;
20- import { Button } from "@/components/ui/button" ;
2120
2221export interface Props {
2322 query : string ;
2423 initAdvancedSearch : boolean ;
2524 onChange : ( s : string ) => void ;
2625 onSortChange : ( sort : Sort ) => void ;
26+ onHumanEraChange ?: ( enabled : boolean ) => void ;
2727}
2828
2929export enum Sort {
@@ -34,7 +34,7 @@ export enum Sort {
3434 IdAsc = "id:asc" ,
3535}
3636
37- const PRE_2023_DATE_FILTER = "date < sec(2023-01-01)" ;
37+ export const PRE_2023_DATE_FILTER = "date < sec(2023-01-01)" ;
3838
3939export default function Search ( props : Props ) {
4040 const [ useAdvancedSearch , setUseAdvancedSearch ] = React . useState (
@@ -44,61 +44,37 @@ export default function Search(props: Props) {
4444 props . initAdvancedSearch && ! getCachedFilterRule ( props . query )
4545 ) ;
4646 const [ sort , setSort ] = React . useState < Sort > ( Sort . Relevance ) ;
47+ const [ humanEraEnabled , setHumanEraEnabled ] = React . useState ( false ) ;
48+
4749 useEffect ( ( ) => {
4850 props . onSortChange ( sort ) ;
4951 } , [ sort ] ) ;
5052
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 ) ;
53+ useEffect ( ( ) => {
54+ if ( props . onHumanEraChange ) {
55+ props . onHumanEraChange ( humanEraEnabled ) ;
8056 }
81-
82- setUseAdvancedSearch ( true ) ;
83- setIsQueryMode ( true ) ;
84- } ;
57+ } , [ humanEraEnabled ] ) ;
58+
59+
8560
8661 return (
8762 < div className = "w-full font-semibold" >
8863 < div className = "flex flex-row items-center justify-end mb-2" >
8964 < div className = "mr-auto hidden md:block" >
9065 < ManualDialog />
9166 </ div >
92- < Button
93- variant = "reverse"
94- size = "sm"
95- onClick = { handlePre2023Search }
96- className = "mr-2"
97- title = "搜索 2023 年以前的内容(人类时代)"
98- >
67+ < label className = "mr-2 flex items-center gap-2" htmlFor = "human-era" >
9968 < Clock className = "h-4 w-4" />
100- 人类时代
101- </ Button >
69+ < span className = "text-sm" > 人类时代</ span >
70+ </ label >
71+ < Switch
72+ className = "inline-block mr-2"
73+ id = "human-era"
74+ checked = { humanEraEnabled }
75+ onCheckedChange = { setHumanEraEnabled }
76+ title = "搜索 2023 年以前的内容(人类时代)"
77+ />
10278 { useAdvancedSearch && (
10379 < >
10480 < Toggle
0 commit comments