Fix table responsiveness in admin pages
AdminProducts.tsx: - Wrap table in overflow-x-auto div for horizontal scrolling - Add whitespace-nowrap to TableHead cells - Change form grid from grid-cols-2 to grid-cols-1 md:grid-cols-2 AdminOrders.tsx: - Wrap table in overflow-x-auto div for horizontal scrolling - Add whitespace-nowrap to TableHead cells - Change detail dialog grid from grid-cols-2 to grid-cols-1 sm:grid-cols-2 - Change action buttons from flex to flex-col sm:flex-row for mobile stacking 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -178,16 +178,17 @@ export default function AdminOrders() {
|
|||||||
|
|
||||||
<Card className="border-2 border-border">
|
<Card className="border-2 border-border">
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
|
<div className="overflow-x-auto">
|
||||||
<Table>
|
<Table>
|
||||||
<TableHeader>
|
<TableHeader>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableHead>ID Order</TableHead>
|
<TableHead className="whitespace-nowrap">ID Order</TableHead>
|
||||||
<TableHead>Email</TableHead>
|
<TableHead className="whitespace-nowrap">Email</TableHead>
|
||||||
<TableHead>Total</TableHead>
|
<TableHead className="whitespace-nowrap">Total</TableHead>
|
||||||
<TableHead>Metode</TableHead>
|
<TableHead className="whitespace-nowrap">Metode</TableHead>
|
||||||
<TableHead>Status</TableHead>
|
<TableHead className="whitespace-nowrap">Status</TableHead>
|
||||||
<TableHead>Tanggal</TableHead>
|
<TableHead className="whitespace-nowrap">Tanggal</TableHead>
|
||||||
<TableHead className="text-right">Aksi</TableHead>
|
<TableHead className="text-right whitespace-nowrap">Aksi</TableHead>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
@@ -215,6 +216,7 @@ export default function AdminOrders() {
|
|||||||
)}
|
)}
|
||||||
</TableBody>
|
</TableBody>
|
||||||
</Table>
|
</Table>
|
||||||
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
@@ -225,7 +227,7 @@ export default function AdminOrders() {
|
|||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
{selectedOrder && (
|
{selectedOrder && (
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<div className="grid grid-cols-2 gap-2 text-sm">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm">
|
||||||
<div>
|
<div>
|
||||||
<span className="text-muted-foreground">ID:</span> {selectedOrder.id.slice(0, 8)}
|
<span className="text-muted-foreground">ID:</span> {selectedOrder.id.slice(0, 8)}
|
||||||
</div>
|
</div>
|
||||||
@@ -302,7 +304,7 @@ export default function AdminOrders() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div className="flex gap-2 pt-4">
|
<div className="flex flex-col sm:flex-row gap-2 pt-4">
|
||||||
{selectedOrder.payment_status !== "paid" && (
|
{selectedOrder.payment_status !== "paid" && (
|
||||||
<Button onClick={() => updateOrderStatus(selectedOrder.id, "paid")} className="flex-1">
|
<Button onClick={() => updateOrderStatus(selectedOrder.id, "paid")} className="flex-1">
|
||||||
<CheckCircle className="w-4 h-4 mr-2" />
|
<CheckCircle className="w-4 h-4 mr-2" />
|
||||||
|
|||||||
@@ -164,14 +164,15 @@ export default function AdminProducts() {
|
|||||||
|
|
||||||
<Card className="border-2 border-border">
|
<Card className="border-2 border-border">
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
|
<div className="overflow-x-auto">
|
||||||
<Table>
|
<Table>
|
||||||
<TableHeader>
|
<TableHeader>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableHead>Judul</TableHead>
|
<TableHead className="whitespace-nowrap">Judul</TableHead>
|
||||||
<TableHead>Tipe</TableHead>
|
<TableHead className="whitespace-nowrap">Tipe</TableHead>
|
||||||
<TableHead>Harga</TableHead>
|
<TableHead className="whitespace-nowrap">Harga</TableHead>
|
||||||
<TableHead>Status</TableHead>
|
<TableHead className="whitespace-nowrap">Status</TableHead>
|
||||||
<TableHead className="text-right">Aksi</TableHead>
|
<TableHead className="text-right whitespace-nowrap">Aksi</TableHead>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
@@ -213,6 +214,7 @@ export default function AdminProducts() {
|
|||||||
)}
|
)}
|
||||||
</TableBody>
|
</TableBody>
|
||||||
</Table>
|
</Table>
|
||||||
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
@@ -227,7 +229,7 @@ export default function AdminProducts() {
|
|||||||
{editingProduct && form.type === 'bootcamp' && <TabsTrigger value="curriculum">Kurikulum</TabsTrigger>}
|
{editingProduct && form.type === 'bootcamp' && <TabsTrigger value="curriculum">Kurikulum</TabsTrigger>}
|
||||||
</TabsList>
|
</TabsList>
|
||||||
<TabsContent value="details" className="space-y-4 py-4">
|
<TabsContent value="details" className="space-y-4 py-4">
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label>Judul *</Label>
|
<Label>Judul *</Label>
|
||||||
<Input value={form.title} onChange={(e) => setForm({ ...form, title: e.target.value, slug: generateSlug(e.target.value) })} className="border-2" />
|
<Input value={form.title} onChange={(e) => setForm({ ...form, title: e.target.value, slug: generateSlug(e.target.value) })} className="border-2" />
|
||||||
@@ -255,7 +257,7 @@ export default function AdminProducts() {
|
|||||||
<Label>Konten</Label>
|
<Label>Konten</Label>
|
||||||
<RichTextEditor content={form.content} onChange={(v) => setForm({ ...form, content: v })} />
|
<RichTextEditor content={form.content} onChange={(v) => setForm({ ...form, content: v })} />
|
||||||
</div>
|
</div>
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label>Meeting Link</Label>
|
<Label>Meeting Link</Label>
|
||||||
<Input value={form.meeting_link} onChange={(e) => setForm({ ...form, meeting_link: e.target.value })} placeholder="https://meet.google.com/..." className="border-2" />
|
<Input value={form.meeting_link} onChange={(e) => setForm({ ...form, meeting_link: e.target.value })} placeholder="https://meet.google.com/..." className="border-2" />
|
||||||
|
|||||||
Reference in New Issue
Block a user