From 3f97048599f24650d261540d0a24f324541358cc Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Tue, 16 Dec 2025 17:06:53 -0700 Subject: [PATCH] feat: Add "Search in article" filter checkbox to results page Co-authored-by: aider (gemini/gemini-2.5-pro) --- webclient/src/Results.js | 24 +++++++++++++++++++++++- webclient/src/Search.js | 8 ++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/webclient/src/Results.js b/webclient/src/Results.js index ef9f1a0..b0703d9 100644 --- a/webclient/src/Results.js +++ b/webclient/src/Results.js @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react'; -import { Link, useLocation } from 'react-router-dom'; +import { Link, useLocation, useHistory } from 'react-router-dom'; import { Helmet } from 'react-helmet'; +import queryString from 'query-string'; import { sourceLink, infoLine, logos } from './utils.js'; import AbortController from 'abort-controller'; @@ -8,6 +9,19 @@ function Results() { const [stories, setStories] = useState(false); const [error, setError] = useState(false); const location = useLocation(); + const history = useHistory(); + + const handleFilterChange = e => { + const isChecked = e.target.checked; + + const currentQuery = queryString.parse(location.search); + if (isChecked) { + currentQuery.article = 'true'; + } else { + delete currentQuery.article; + } + history.push('/search?' + queryString.stringify(currentQuery)); + }; useEffect(() => { const controller = new AbortController(); @@ -32,11 +46,19 @@ function Results() { }; }, [location.search]); + const searchInArticle = queryString.parse(location.search).article === 'true'; + return (
Search Results | QotNews + +
+ + +
+ {error &&

Connection error?

} {stories ? <> diff --git a/webclient/src/Search.js b/webclient/src/Search.js index 5e36cc4..c20aee8 100644 --- a/webclient/src/Search.js +++ b/webclient/src/Search.js @@ -15,7 +15,9 @@ function Search() { const newSearch = event.target.value; setSearch(newSearch); if (newSearch.length >= 3) { - const searchQuery = queryString.stringify({ 'q': newSearch }); + const currentQuery = queryString.parse(location.search); + currentQuery.q = newSearch; + const searchQuery = queryString.stringify(currentQuery); history.replace('/search?' + searchQuery); } else { history.replace('/'); @@ -24,7 +26,9 @@ function Search() { const searchAgain = (event) => { event.preventDefault(); - const searchString = queryString.stringify({ 'q': event.target[0].value }); + const currentQuery = queryString.parse(location.search); + currentQuery.q = event.target[0].value; + const searchString = queryString.stringify(currentQuery); history.push('/search?' + searchString); inputRef.current.blur(); }