From 87338ac22040c8643620c5d97ea96797844a2293 Mon Sep 17 00:00:00 2001 From: kimjaehyeon0101 <47347352-kimjaehyeon0101@users.noreply.replit.com> Date: Tue, 30 Sep 2025 02:21:42 +0000 Subject: [PATCH] Allow administrators to edit media outlet descriptions Adds functionality for admins to update media outlet descriptions via an API endpoint and UI modal, including an option to use a predefined alternative description. 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/UXwUwik --- ...ᅳ린샷 2025-09-30 오전 11.18.50_1759198810776.png | Bin 0 -> 22367 bytes client/src/pages/MediaOutlet.tsx | 113 +++++++++++++++++- server/routes.ts | 24 ++++ 3 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 attached_assets/스크린샷 2025-09-30 오전 11.18.50_1759198810776.png diff --git a/attached_assets/스크린샷 2025-09-30 오전 11.18.50_1759198810776.png b/attached_assets/스크린샷 2025-09-30 오전 11.18.50_1759198810776.png new file mode 100644 index 0000000000000000000000000000000000000000..fdfce142233a5522c55a6ac31c3372f46759a040 GIT binary patch literal 22367 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 literal 0 HcmV?d00001 diff --git a/client/src/pages/MediaOutlet.tsx b/client/src/pages/MediaOutlet.tsx index db83509..fe8a9e6 100644 --- a/client/src/pages/MediaOutlet.tsx +++ b/client/src/pages/MediaOutlet.tsx @@ -1,14 +1,16 @@ import { useState } from "react"; -import { useQuery } from "@tanstack/react-query"; +import { useQuery, useMutation } from "@tanstack/react-query"; import { useRoute, useLocation } from "wouter"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; -import { Gavel, Clock, TrendingUp, Search, Settings, User, LogOut, Grid, List } from "lucide-react"; +import { Textarea } from "@/components/ui/textarea"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"; +import { Gavel, Clock, TrendingUp, Search, Settings, User, LogOut, Grid, List, Edit } from "lucide-react"; import { useAuth } from "@/hooks/useAuth"; import { useToast } from "@/hooks/use-toast"; -import { queryClient } from "@/lib/queryClient"; +import { queryClient, apiRequest } from "@/lib/queryClient"; import ArticleCard from "@/components/ArticleCard"; import Footer from "@/components/Footer"; import LoginModal from "@/components/LoginModal"; @@ -21,6 +23,9 @@ export default function MediaOutlet() { const [viewMode, setViewMode] = useState<"grid" | "list">("grid"); const [isLoginModalOpen, setIsLoginModalOpen] = useState(false); const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); + const [isEditDescModalOpen, setIsEditDescModalOpen] = useState(false); + const [newDescription, setNewDescription] = useState(""); + const [alternativeDescription, setAlternativeDescription] = useState("Partner at Type3 Capital and Non-Executive Director at TrueFi DAO with a strong background in fund management, venture capital, and digital assets"); const { user, isAuthenticated } = useAuth(); const { toast } = useToast(); @@ -67,6 +72,37 @@ export default function MediaOutlet() { setLocation("/admin"); }; + const updateDescriptionMutation = useMutation({ + mutationFn: async (description: string) => { + await apiRequest("PATCH", `/api/media-outlets/${params?.slug}`, { description }); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["/api/media-outlets", params?.slug] }); + toast({ + title: "Success", + description: "Description updated successfully", + }); + setIsEditDescModalOpen(false); + }, + onError: () => { + toast({ + title: "Error", + description: "Failed to update description", + variant: "destructive", + }); + }, + }); + + const handleEditDescription = () => { + setNewDescription(outlet?.description || ""); + setIsEditDescModalOpen(true); + }; + + const handleSaveDescription = (useAlternative: boolean = false) => { + const descToSave = useAlternative ? alternativeDescription : newDescription; + updateDescriptionMutation.mutate(descToSave); + }; + const formatCurrency = (amount: string | null) => { if (!amount) return "$0"; return new Intl.NumberFormat('en-US', { @@ -327,7 +363,19 @@ export default function MediaOutlet() { {outlet.category} -

{outlet.description}

+
+

{outlet.description}

+ {user && (user.role === 'admin' || user.role === 'superadmin') && ( + + )} +
{outlet.tags && outlet.tags.length > 0 && (
{outlet.tags.map((tag) => ( @@ -477,6 +525,63 @@ export default function MediaOutlet() { isOpen={isSearchModalOpen} onClose={() => setIsSearchModalOpen(false)} /> + + {/* Edit Description Modal */} + + + + Edit Description + + Update the description for {outlet?.name} + + +
+
+ +