From a80520b85f9d9cf2aa187d5eff08d3e39eb2493f Mon Sep 17 00:00:00 2001 From: kimjaehyeon0101 <47347352-kimjaehyeon0101@users.noreply.replit.com> Date: Mon, 29 Sep 2025 20:12:12 +0000 Subject: [PATCH] Add search functionality to find articles and media outlets Implements a search feature by adding a search modal, API endpoint, and storage logic for querying articles and media outlets. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 069d4324-6c40-4355-955e-c714a50de1ea Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3df548ff-50ae-432f-9be4-25d34eccc983/069d4324-6c40-4355-955e-c714a50de1ea/gVirbWH --- .replit | 4 + ...ᅳ린샷 2025-09-30 오전 4.48.55_1759175355993.png | Bin 0 -> 78327 bytes client/src/components/SearchModal.tsx | 220 ++++++++++++++++++ client/src/pages/Home.tsx | 26 ++- server/routes.ts | 17 ++ server/storage.ts | 44 ++++ 6 files changed, 308 insertions(+), 3 deletions(-) create mode 100644 attached_assets/스크린샷 2025-09-30 오전 4.48.55_1759175355993.png create mode 100644 client/src/components/SearchModal.tsx diff --git a/.replit b/.replit index b0526f5..989f615 100644 --- a/.replit +++ b/.replit @@ -22,6 +22,10 @@ externalPort = 3002 localPort = 37531 externalPort = 3001 +[[ports]] +localPort = 42459 +externalPort = 3003 + [[ports]] localPort = 43349 externalPort = 3000 diff --git a/attached_assets/스크린샷 2025-09-30 오전 4.48.55_1759175355993.png b/attached_assets/스크린샷 2025-09-30 오전 4.48.55_1759175355993.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5544afd48b7afcd09ec7aca756836eea62b3dc GIT binary patch literal 78327 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 a8JUThV}$^}_&fsePfS=!DCgPh_x}U>{=&@w literal 0 HcmV?d00001 diff --git a/client/src/components/SearchModal.tsx b/client/src/components/SearchModal.tsx new file mode 100644 index 0000000..f37ab59 --- /dev/null +++ b/client/src/components/SearchModal.tsx @@ -0,0 +1,220 @@ +import { useState, useEffect } from "react"; +import { useQuery } from "@tanstack/react-query"; +import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; +import { Badge } from "@/components/ui/badge"; +import { Search, X } from "lucide-react"; +import { Link } from "wouter"; +import type { MediaOutlet, Article } from "@shared/schema"; + +interface SearchModalProps { + isOpen: boolean; + onClose: () => void; +} + +interface SearchResults { + outlets: MediaOutlet[]; + articles: Article[]; +} + +export default function SearchModal({ isOpen, onClose }: SearchModalProps) { + const [searchQuery, setSearchQuery] = useState(""); + const [debouncedQuery, setDebouncedQuery] = useState(""); + + console.log("SearchModal rendered with isOpen:", isOpen); + + // Debounce search query + useEffect(() => { + const timer = setTimeout(() => { + setDebouncedQuery(searchQuery); + }, 300); + + return () => clearTimeout(timer); + }, [searchQuery]); + + const { data: searchResults, isLoading } = useQuery({ + queryKey: ["/api/search", debouncedQuery], + queryFn: async () => { + if (!debouncedQuery.trim()) { + return { outlets: [], articles: [] }; + } + const res = await fetch(`/api/search?q=${encodeURIComponent(debouncedQuery)}`); + if (!res.ok) { + throw new Error(`${res.status}: ${res.statusText}`); + } + return res.json(); + }, + enabled: !!debouncedQuery.trim(), + }); + + const totalResults = (searchResults?.outlets.length || 0) + (searchResults?.articles.length || 0); + + const handleClose = () => { + setSearchQuery(""); + setDebouncedQuery(""); + onClose(); + }; + + const handleLinkClick = () => { + handleClose(); + }; + + return ( + + + Search Articles and Media Outlets + {/* Search Header */} +
+
+ + setSearchQuery(e.target.value)} + className="pl-10 pr-4 border-2 border-blue-200 focus:border-blue-400" + data-testid="search-modal-input" + autoFocus + /> +
+ +
+ + {/* Search Results */} +
+ {!debouncedQuery.trim() ? ( + /* Empty State */ +
+

Start typing to search articles and outlets

+
+ ) : isLoading ? ( + /* Loading State */ +
+ {Array.from({ length: 5 }).map((_, i) => ( +
+
+
+
+ ))} +
+ ) : totalResults === 0 ? ( + /* No Results */ +
+

No results found for "{debouncedQuery}"

+

Try a different search term

+
+ ) : ( + /* Search Results */ + <> +
+ {totalResults} results found +
+ + {/* Outlets Section */} + {searchResults && searchResults.outlets.length > 0 && ( +
+

+ Outlets ({searchResults.outlets.length}) +

+
+ {searchResults.outlets.map((outlet) => ( + +
+
+ {outlet.imageUrl ? ( + {outlet.name} + ) : ( + + {outlet.name.charAt(0)} + + )} +
+
+
+

+ {outlet.name} +

+ + {outlet.category} + +
+

+ {outlet.description || "Media Outlet"} +

+
+
+ + ))} +
+
+ )} + + {/* Articles Section */} + {searchResults && searchResults.articles.length > 0 && ( +
+

+ Articles ({searchResults.articles.length}) +

+
+ {searchResults.articles.map((article) => ( + +
+ {article.imageUrl && ( +
+ {article.title} +
+ )} +
+

+ {article.title} +

+

+ {article.excerpt || ""} +

+ {article.publishedAt && ( +

+ {new Date(article.publishedAt).toLocaleDateString('en-US', { + month: 'short', + day: 'numeric', + year: 'numeric' + })} +

+ )} +
+
+ + ))} +
+
+ )} + + )} +
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/pages/Home.tsx b/client/src/pages/Home.tsx index 47e7ea8..1022a83 100644 --- a/client/src/pages/Home.tsx +++ b/client/src/pages/Home.tsx @@ -5,12 +5,14 @@ import { Search, Settings, User, LogOut } from "lucide-react"; import { useState } from "react"; import MainContent from "@/components/MainContent"; import LoginModal from "@/components/LoginModal"; +import SearchModal from "@/components/SearchModal"; import { useToast } from "@/hooks/use-toast"; import { queryClient } from "@/lib/queryClient"; export default function Home() { const { user, isAuthenticated } = useAuth(); const [isLoginModalOpen, setIsLoginModalOpen] = useState(false); + const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); const { toast } = useToast(); const handleLogout = async () => { @@ -58,13 +60,25 @@ export default function Home() {
-
- +
{ + console.log("Search div clicked, opening modal..."); + setIsSearchModalOpen(true); + }} + data-testid="search-container" + > + { + console.log("Search input clicked, opening modal..."); + setIsSearchModalOpen(true); + }} />
@@ -126,6 +140,12 @@ export default function Home() { isOpen={isLoginModalOpen} onClose={() => setIsLoginModalOpen(false)} /> + + {/* Search Modal */} + setIsSearchModalOpen(false)} + />
); } \ No newline at end of file diff --git a/server/routes.ts b/server/routes.ts index 60aa740..fa76b4c 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -354,6 +354,23 @@ export async function registerRoutes(app: Express): Promise { } }); + // Search routes + app.get('/api/search', async (req, res) => { + try { + const { q } = req.query; + + if (!q || typeof q !== 'string' || q.trim().length === 0) { + return res.json({ outlets: [], articles: [] }); + } + + const results = await storage.search(q.trim()); + res.json(results); + } catch (error) { + console.error("Error performing search:", error); + res.status(500).json({ message: "Failed to perform search" }); + } + }); + const httpServer = createServer(app); return httpServer; } diff --git a/server/storage.ts b/server/storage.ts index d81e4a3..2af5991 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -82,6 +82,12 @@ export interface IStorage { liveAuctions: number; totalRevenue: number; }>; + + // Search operations + search(query: string): Promise<{ + outlets: MediaOutlet[]; + articles: Article[]; + }>; } export class DatabaseStorage implements IStorage { @@ -381,6 +387,44 @@ export class DatabaseStorage implements IStorage { totalRevenue: revenueSum.sum }; } + + // Search operations + async search(query: string): Promise<{ + outlets: MediaOutlet[]; + articles: Article[]; + }> { + const searchTerm = query.toLowerCase(); + + // Search media outlets + const foundOutlets = await db + .select() + .from(mediaOutlets) + .where(eq(mediaOutlets.isActive, true)) + .limit(50); + + const filteredOutlets = foundOutlets.filter(outlet => + outlet.name.toLowerCase().includes(searchTerm) || + (outlet.description && outlet.description.toLowerCase().includes(searchTerm)) + ).slice(0, 10); + + // Search articles + const foundArticles = await db + .select() + .from(articles) + .orderBy(desc(articles.publishedAt)) + .limit(100); + + const filteredArticles = foundArticles.filter(article => + article.title.toLowerCase().includes(searchTerm) || + (article.content && article.content.toLowerCase().includes(searchTerm)) || + (article.excerpt && article.excerpt.toLowerCase().includes(searchTerm)) + ).slice(0, 20); + + return { + outlets: filteredOutlets, + articles: filteredArticles + }; + } } export const storage = new DatabaseStorage();