From 9c5de41286157171fdcbc925a5323bee53fd73ce Mon Sep 17 00:00:00 2001 From: kimjaehyeon0101 <47347352-kimjaehyeon0101@users.noreply.replit.com> Date: Mon, 29 Sep 2025 18:33:30 +0000 Subject: [PATCH] Add ability to search and manage individual media outlets Implement admin dashboard with media outlet search, selection, and a dedicated management page for each outlet. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 069d4324-6c40-4355-955e-c714a50de1ea Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3df548ff-50ae-432f-9be4-25d34eccc983/069d4324-6c40-4355-955e-c714a50de1ea/jvFIdY3 --- .replit | 4 + .../Lautaro Martínez_1759170040559.jpeg | Bin 0 -> 9900 bytes .../Nicolò Barella_1759170031318.jpeg | Bin 0 -> 6878 bytes ...ndez (Rodrigo Hernández)_1759170035155.jpeg | Bin 0 -> 8199 bytes attached_assets/altcoin_1759170052209.jpeg | Bin 0 -> 12009 bytes .../src/components/MediaOutletManagement.tsx | 293 +++++++++++++++ client/src/pages/AdminDashboard.tsx | 353 ++++++++++-------- 7 files changed, 497 insertions(+), 153 deletions(-) create mode 100644 attached_assets/Lautaro Martínez_1759170040559.jpeg create mode 100644 attached_assets/Nicolò Barella_1759170031318.jpeg create mode 100644 attached_assets/Rodri Hernández (Rodrigo Hernández)_1759170035155.jpeg create mode 100644 attached_assets/altcoin_1759170052209.jpeg create mode 100644 client/src/components/MediaOutletManagement.tsx diff --git a/.replit b/.replit index a45f89c..ba89ca5 100644 --- a/.replit +++ b/.replit @@ -22,6 +22,10 @@ externalPort = 3001 localPort = 43349 externalPort = 3000 +[[ports]] +localPort = 44197 +externalPort = 3002 + [env] PORT = "5000" diff --git a/attached_assets/Lautaro Martínez_1759170040559.jpeg b/attached_assets/Lautaro Martínez_1759170040559.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ce09dd463566ee86231bd96d205b9863d82b3d77 GIT binary patch literal 9900 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 literal 0 HcmV?d00001 diff --git a/attached_assets/altcoin_1759170052209.jpeg b/attached_assets/altcoin_1759170052209.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8fad727ef4b69d2782a5530cb835617aede27320 GIT binary patch literal 12009 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 literal 0 HcmV?d00001 diff --git a/client/src/components/MediaOutletManagement.tsx b/client/src/components/MediaOutletManagement.tsx new file mode 100644 index 0000000..4ce0cd2 --- /dev/null +++ b/client/src/components/MediaOutletManagement.tsx @@ -0,0 +1,293 @@ +import { useState } from "react"; +import { useQuery } from "@tanstack/react-query"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { ArrowLeft, Edit, Plus, BarChart3, Gavel, MessageSquare } from "lucide-react"; +import type { MediaOutlet } from "@shared/schema"; + +interface MediaOutletManagementProps { + outlet: MediaOutlet; + onBack: () => void; +} + +export default function MediaOutletManagement({ outlet, onBack }: MediaOutletManagementProps) { + const [activeTab, setActiveTab] = useState("overview"); + + // TODO: Add queries for articles, predictions, auctions, comments related to this outlet + const { data: articles = [] } = useQuery({ + queryKey: ["/api/articles", outlet.id], + enabled: false, // Disabled for now as articles API is not implemented + }); + + return ( +
+ {/* Header */} +
+
+
+
+ + +
+ {outlet.imageUrl ? ( + {outlet.name} + ) : ( +
+ + {outlet.name.charAt(0)} + +
+ )} +
+

{outlet.name}

+

{outlet.description || "Media Outlet"}

+
+
+
+ +
+ + {outlet.category} + + +
+
+
+
+ + {/* Main Content */} +
+ + + 개요 + 기사 관리 + 예측시장 + 경매 + 댓글 + + + +
+ + +
+
+

총 기사 수

+

0

+
+
+ +
+
+
+
+ + + +
+
+

활성 예측시장

+

0

+
+
+ +
+
+
+
+ + + +
+
+

진행중인 경매

+

0

+
+
+ +
+
+
+
+ + + +
+
+

총 댓글 수

+

0

+
+
+ +
+
+
+
+
+ +
+ + + 언론매체 정보 + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + + 빠른 작업 + + + + + + + + +
+
+ + + + +
+ 기사 관리 + +
+
+ +
+
아직 기사가 없습니다
+
첫 번째 기사를 작성해보세요
+
+
+
+
+ + + + +
+ 예측시장 관리 + +
+
+ +
+
활성 예측시장이 없습니다
+
새로운 예측시장을 생성해보세요
+
+
+
+
+ + + + +
+ 경매 관리 + +
+
+ +
+
진행중인 경매가 없습니다
+
새로운 경매를 시작해보세요
+
+
+
+
+ + + + + 댓글 관리 + + +
+
관리할 댓글이 없습니다
+
댓글이 등록되면 여기서 관리할 수 있습니다
+
+
+
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/client/src/pages/AdminDashboard.tsx b/client/src/pages/AdminDashboard.tsx index 3014098..e69cd78 100644 --- a/client/src/pages/AdminDashboard.tsx +++ b/client/src/pages/AdminDashboard.tsx @@ -1,14 +1,21 @@ import { useQuery } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; import { Card, CardContent } from "@/components/ui/card"; import { useAuth } from "@/hooks/useAuth"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useToast } from "@/hooks/use-toast"; import { isUnauthorizedError } from "@/lib/authUtils"; +import { Search, Settings } from "lucide-react"; +import type { MediaOutlet } from "@shared/schema"; +import MediaOutletManagement from "@/components/MediaOutletManagement"; export default function AdminDashboard() { const { user, isLoading } = useAuth(); const { toast } = useToast(); + const [searchTerm, setSearchTerm] = useState(""); + const [selectedOutlet, setSelectedOutlet] = useState(null); + const [managingOutlet, setManagingOutlet] = useState(null); // Redirect if not authenticated or not admin/superadmin useEffect(() => { @@ -24,24 +31,24 @@ export default function AdminDashboard() { } }, [isLoading, user, toast]); - const { data: analytics, isLoading: analyticsLoading, error: analyticsError } = useQuery({ - queryKey: ["/api/analytics"], - retry: false, + const { data: mediaOutlets = [], isLoading: outletsLoading } = useQuery({ + queryKey: ["/api/media-outlets"], + queryFn: async () => { + const res = await fetch("/api/media-outlets", { + credentials: "include", + }); + if (!res.ok) { + throw new Error(`${res.status}: ${res.statusText}`); + } + return res.json(); + }, }); - // Handle analytics errors - useEffect(() => { - if (analyticsError && isUnauthorizedError(analyticsError as Error)) { - toast({ - title: "Unauthorized", - description: "You are logged out. Logging in again...", - variant: "destructive", - }); - setTimeout(() => { - window.location.href = "/api/login"; - }, 500); - } - }, [analyticsError, toast]); + // Filter outlets based on search term + const filteredOutlets = mediaOutlets.filter(outlet => + outlet.name.toLowerCase().includes(searchTerm.toLowerCase()) || + (outlet.description && outlet.description.toLowerCase().includes(searchTerm.toLowerCase())) + ); const handleLogout = () => { window.location.href = "/api/logout"; @@ -55,25 +62,67 @@ export default function AdminDashboard() { ); } + // If managing an outlet, show MediaOutletManagement + if (managingOutlet) { + return ( + setManagingOutlet(null)} + /> + ); + } + return ( -
+
{/* Header */} -
+
-
-
- S -
- SAPIENS - • Admin Dashboard +
+ SAPIENS
- - + +
@@ -81,137 +130,135 @@ export default function AdminDashboard() {
-
-
-
-

Admin Dashboard

-

Manage media outlets and content

+
+
+

관리자 대시보드

+

관리할 언론매체를 검색하고 선택하세요

+
+ + {outletsLoading ? ( +
+ {Array.from({ length: 12 }).map((_, i) => ( + + +
+
+
+
+
+
+
+
+
+ ))}
-
- - {/* Analytics Cards */} -
- {analyticsLoading ? ( - Array.from({ length: 4 }).map((_, i) => ( - - -
-
-
- )) - ) : ( - <> - - -
-
-

Total Articles

-

{(analytics as any)?.totalArticles || 0}

-
- -
-
-
- - - -
-
-

Active Predictions

-

{(analytics as any)?.activePredictions || 0}

-
- -
-
-
- - - -
-
-

Live Auctions

-

{(analytics as any)?.liveAuctions || 0}

-
- -
-
-
- - - -
-
-

Revenue

-

${((analytics as any)?.totalRevenue || 0).toLocaleString()}

-
- -
-
-
- - )} -
- - {/* Admin Actions */} -
- - -

Content Management

-
- - - + +
+
+ {outlet.imageUrl ? ( + {outlet.name} + ) : ( +
+ + {outlet.name.charAt(0)} + +
+ )} +
+
+

+ {outlet.name} +

+

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

+
+ + {outlet.category} + +
+
+
+
+ + ))} +
+ + {filteredOutlets.length === 0 && searchTerm && ( +
+
검색 결과가 없습니다
+
다른 검색어를 시도해보세요
-
-
- - - -

Quick Actions

-
-
-
-

Featured Article Priority

-

Manage article visibility

+ )} + + )} + + {/* Selected Outlet Modal/Preview */} + {selectedOutlet && ( +
+
+
+ {selectedOutlet.imageUrl ? ( + {selectedOutlet.name} + ) : ( +
+ + {selectedOutlet.name.charAt(0)} +
- -
-
-
-

Auction Controls

-

Monitor active auctions

-
- + )} +
+

{selectedOutlet.name}

+

{selectedOutlet.description}

+ + {selectedOutlet.category} +
- - -
+
+ + +
+
+
+ )}
);