diff --git a/.replit b/.replit
index b6bf8b4..0556bf9 100644
--- a/.replit
+++ b/.replit
@@ -15,13 +15,9 @@ localPort = 5000
externalPort = 80
[[ports]]
-localPort = 5555
+localPort = 35981
externalPort = 3002
-[[ports]]
-localPort = 40011
-externalPort = 3003
-
[[ports]]
localPort = 40537
externalPort = 3000
diff --git a/client/src/pages/pages.tsx b/client/src/pages/pages.tsx
index 308d5c7..0f5c2b8 100644
--- a/client/src/pages/pages.tsx
+++ b/client/src/pages/pages.tsx
@@ -1,6 +1,6 @@
import { useState } from "react";
import { useQuery, useMutation } from "@tanstack/react-query";
-import { Plus, Facebook, Instagram, Trash2, RefreshCw } from "lucide-react";
+import { Plus, Facebook, Instagram, Trash2, RefreshCw, Edit } from "lucide-react";
import Sidebar from "@/components/sidebar";
import TopBar from "@/components/topbar";
import { Button } from "@/components/ui/button";
@@ -16,6 +16,7 @@ import type { SocialPage } from "@shared/schema";
export default function PagesManagement() {
const [sidebarOpen, setSidebarOpen] = useState(false);
const [dialogOpen, setDialogOpen] = useState(false);
+ const [editingPage, setEditingPage] = useState(null);
const { toast } = useToast();
const { data: pages = [], isLoading } = useQuery({
@@ -69,6 +70,7 @@ export default function PagesManagement() {
+ !open && setEditingPage(null)} />
{isLoading ? (
@@ -125,15 +127,25 @@ export default function PagesManagement() {
ID: {page.pageId}
-
+
+
+
+
@@ -293,3 +305,102 @@ function AddPageDialog({ open, onOpenChange }: { open: boolean; onOpenChange: (o
);
}
+
+function EditPageDialog({ page, onOpenChange }: { page: SocialPage | null; onOpenChange: (open: boolean) => void }) {
+ const [accessToken, setAccessToken] = useState('');
+ const { toast } = useToast();
+
+ const editMutation = useMutation({
+ mutationFn: (data: any) =>
+ apiRequest('PUT', `/api/pages/${page?.id}`, data),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: ['/api/pages'] });
+ toast({
+ title: "Page modifiée",
+ description: "Le jeton d'accès a été mis à jour avec succès",
+ });
+ onOpenChange(false);
+ setAccessToken('');
+ },
+ onError: () => {
+ toast({
+ title: "Erreur",
+ description: "Impossible de modifier la page",
+ variant: "destructive",
+ });
+ },
+ });
+
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ if (!page) return;
+ editMutation.mutate({
+ accessToken,
+ });
+ };
+
+ if (!page) return null;
+
+ return (
+
+ );
+}
diff --git a/server/routes.ts b/server/routes.ts
index 969dec8..22afc99 100644
--- a/server/routes.ts
+++ b/server/routes.ts
@@ -541,6 +541,45 @@ export async function registerRoutes(app: Express): Promise {
}
});
+ app.put("/api/pages/:id", requireAuth, async (req, res) => {
+ try {
+ const user = req.user as User;
+ const userId = user.id;
+ const pageId = req.params.id;
+
+ const existingPage = await storage.getSocialPage(pageId);
+ if (!existingPage || existingPage.userId !== userId) {
+ return res.status(404).json({ error: "Page non trouvée" });
+ }
+
+ const pageData = insertSocialPageSchema.partial().parse(req.body);
+ const updatedPage = await storage.updateSocialPage(pageId, pageData);
+ res.json(updatedPage);
+ } catch (error) {
+ console.error("Error updating page:", error);
+ res.status(500).json({ error: "Failed to update page" });
+ }
+ });
+
+ app.delete("/api/pages/:id", requireAuth, async (req, res) => {
+ try {
+ const user = req.user as User;
+ const userId = user.id;
+ const pageId = req.params.id;
+
+ const existingPage = await storage.getSocialPage(pageId);
+ if (!existingPage || existingPage.userId !== userId) {
+ return res.status(404).json({ error: "Page non trouvée" });
+ }
+
+ await storage.deleteSocialPage(pageId);
+ res.json({ success: true });
+ } catch (error) {
+ console.error("Error deleting page:", error);
+ res.status(500).json({ error: "Failed to delete page" });
+ }
+ });
+
// AI Generations
app.get("/api/ai/generations", requireAuth, async (req, res) => {
try {