diff --git a/artifacts/tx-os/src/pages/admin.tsx b/artifacts/tx-os/src/pages/admin.tsx index d738ec0c..7ea915a9 100644 --- a/artifacts/tx-os/src/pages/admin.tsx +++ b/artifacts/tx-os/src/pages/admin.tsx @@ -138,7 +138,7 @@ import { useQueryClient, useQuery } from "@tanstack/react-query"; import { useAuth } from "@/contexts/AuthContext"; import { useUpload, type UploadResponse } from "@workspace/object-storage-web"; import { resolveServiceImageUrl } from "@/lib/image-url"; -import { ArrowRight, ArrowLeft, Settings, Plus, Pencil, Trash2, Shield, Upload, Loader2, LayoutDashboard, Grid2X2, Coffee, Users as UsersIcon, Menu as MenuIcon, TrendingUp, TrendingDown, UserPlus, Activity, KeyRound, Copy, ChevronDown, ScrollText, Download } from "lucide-react"; +import { ArrowRight, ArrowLeft, Settings, Plus, Pencil, Trash2, Shield, Upload, Loader2, LayoutDashboard, Grid2X2, Coffee, Users as UsersIcon, Menu as MenuIcon, TrendingUp, TrendingDown, UserPlus, Activity, KeyRound, Copy, ChevronDown, ScrollText, Download, X, ImageIcon, Power } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; @@ -1256,60 +1256,141 @@ export default function AdminPage() { {/* Edit Service Modal */} {editingService && ( -
-
-

- {editingService.id ? t("admin.editService") : t("admin.addService")} -

- {( - [ - { field: "nameAr", label: t("admin.serviceNameAr") }, - { field: "nameEn", label: t("admin.serviceNameEn") }, - ] as { field: keyof ServiceForm; label: string }[] - ).map(({ field, label }) => ( -
- - setEditingService({ ...editingService, form: { ...editingService.form, [field]: e.target.value } })} - className="bg-white/70 border-slate-200" +
{ if (e.target === e.currentTarget) setEditingService(null); }} + > +
+ {/* Header */} +
+
+
+ +
+
+

+ {editingService.id ? t("admin.editService") : t("admin.addService")} +

+

+ {editingService.id + ? (lang === "ar" ? "حدّث تفاصيل الخدمة وصورتها" : "Update the service details and image") + : (lang === "ar" ? "أضف خدمة جديدة إلى القائمة" : "Add a new service to the list")} +

+
+
+ +
+ + {/* Body */} +
+ {/* Name fields — side by side on sm+ */} +
+
+ + setEditingService({ ...editingService, form: { ...editingService.form, nameAr: e.target.value } })} + className="bg-slate-50/70 border-slate-200 rounded-lg h-10 text-sm focus-visible:ring-2 focus-visible:ring-indigo-500/30 focus-visible:border-indigo-400" + dir="rtl" + placeholder="شاي" + /> +
+
+ + setEditingService({ ...editingService, form: { ...editingService.form, nameEn: e.target.value } })} + className="bg-slate-50/70 border-slate-200 rounded-lg h-10 text-sm focus-visible:ring-2 focus-visible:ring-indigo-500/30 focus-visible:border-indigo-400" + dir="ltr" + placeholder="Tea" + /> +
+
+ + {/* Image */} +
+ + + setEditingService({ + ...editingService, + form: { ...editingService.form, imageUrl: url }, + }) + } />
- ))} -
- - - setEditingService({ - ...editingService, - form: { ...editingService.form, imageUrl: url }, - }) - } - /> + {/* Availability — card row */} +
+
+ +
+
+
{t("admin.serviceAvailable")}
+
+ {editingService.form.isAvailable + ? (lang === "ar" ? "الخدمة معروضة للمستخدمين الآن" : "Visible to users right now") + : (lang === "ar" ? "الخدمة مخفية عن المستخدمين" : "Hidden from users")} +
+
+ setEditingService({ ...editingService, form: { ...editingService.form, isAvailable: v } })} + /> +
+ + {editingService.id !== undefined && ( +
+ + openAuditLogForTarget("service", editingService.id!) + } + /> +
+ )}
-
- - setEditingService({ ...editingService, form: { ...editingService.form, isAvailable: v } })} - /> -
- {editingService.id !== undefined && ( - - openAuditLogForTarget("service", editingService.id!) - } - /> - )} -
- - + + {/* Footer */} +
+ +
diff --git a/attached_assets/image_1778577898945.png b/attached_assets/image_1778577898945.png new file mode 100644 index 00000000..bec50758 Binary files /dev/null and b/attached_assets/image_1778577898945.png differ