Add Chromebook compatibility fixes and optimizations
Implemented comprehensive Chromebook-specific fixes including viewport adjustments, enhanced touch and keyboard detection, improved scrolling and keyboard navigation hooks, and extensive CSS optimizations for better usability. Updated chat and dashboard interfaces for larger touch targets, better focus management, and responsive layouts. Added documentation in docs/CHROMEBOOK-FIXES.md and new hooks for Chromebook scroll and keyboard handling.
This commit is contained in:
@@ -372,8 +372,8 @@ export default function OrderTable() {
|
||||
<div className="border border-zinc-800 rounded-md bg-black/40 overflow-hidden">
|
||||
{/* Filters header */}
|
||||
<div className="p-4 border-b border-zinc-800 bg-black/60">
|
||||
<div className="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
|
||||
<div className="flex flex-col sm:flex-row gap-2 sm:items-center">
|
||||
<div className="flex flex-col lg:flex-row justify-between items-start lg:items-center gap-4">
|
||||
<div className="flex flex-col sm:flex-row gap-2 sm:items-center w-full lg:w-auto">
|
||||
<StatusFilter
|
||||
currentStatus={statusFilter}
|
||||
onChange={setStatusFilter}
|
||||
@@ -386,7 +386,7 @@ export default function OrderTable() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-2 self-end sm:self-auto">
|
||||
<div className="flex items-center gap-2 self-end lg:self-auto">
|
||||
<AlertDialog>
|
||||
<AlertDialogTrigger asChild>
|
||||
<Button disabled={selectedOrders.size === 0 || isShipping}>
|
||||
@@ -441,17 +441,17 @@ export default function OrderTable() {
|
||||
<TableHead className="cursor-pointer" onClick={() => handleSort("totalPrice")}>
|
||||
Total <ArrowUpDown className="ml-2 inline h-4 w-4" />
|
||||
</TableHead>
|
||||
<TableHead>Promotion</TableHead>
|
||||
<TableHead className="hidden lg:table-cell">Promotion</TableHead>
|
||||
<TableHead className="cursor-pointer" onClick={() => handleSort("status")}>
|
||||
Status <ArrowUpDown className="ml-2 inline h-4 w-4" />
|
||||
</TableHead>
|
||||
<TableHead className="cursor-pointer" onClick={() => handleSort("orderDate")}>
|
||||
<TableHead className="hidden md:table-cell cursor-pointer" onClick={() => handleSort("orderDate")}>
|
||||
Order Date <ArrowUpDown className="ml-2 inline h-4 w-4" />
|
||||
</TableHead>
|
||||
<TableHead className="cursor-pointer" onClick={() => handleSort("paidAt")}>
|
||||
<TableHead className="hidden xl:table-cell cursor-pointer" onClick={() => handleSort("paidAt")}>
|
||||
Paid At <ArrowUpDown className="ml-2 inline h-4 w-4" />
|
||||
</TableHead>
|
||||
<TableHead>Buyer</TableHead>
|
||||
<TableHead className="hidden lg:table-cell">Buyer</TableHead>
|
||||
<TableHead className="w-24 text-center">Actions</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
@@ -480,7 +480,7 @@ export default function OrderTable() {
|
||||
)}
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<TableCell className="hidden lg:table-cell">
|
||||
{order.promotionCode ? (
|
||||
<div className="flex flex-col gap-1">
|
||||
<div className="flex items-center gap-1">
|
||||
@@ -521,7 +521,7 @@ export default function OrderTable() {
|
||||
)}
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<TableCell className="hidden md:table-cell">
|
||||
{new Date(order.orderDate).toLocaleDateString("en-GB", {
|
||||
day: '2-digit',
|
||||
month: 'short',
|
||||
@@ -531,7 +531,7 @@ export default function OrderTable() {
|
||||
hour12: false
|
||||
})}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<TableCell className="hidden xl:table-cell">
|
||||
{order.paidAt ? new Date(order.paidAt).toLocaleDateString("en-GB", {
|
||||
day: '2-digit',
|
||||
month: 'short',
|
||||
@@ -541,7 +541,7 @@ export default function OrderTable() {
|
||||
hour12: false
|
||||
}) : "-"}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<TableCell className="hidden lg:table-cell">
|
||||
{order.telegramUsername ? `@${order.telegramUsername}` : "-"}
|
||||
</TableCell>
|
||||
<TableCell className="text-center">
|
||||
|
||||
@@ -49,10 +49,10 @@ const ProductTable = ({
|
||||
<TableHeader className="bg-gray-50 dark:bg-zinc-800/50">
|
||||
<TableRow className="hover:bg-transparent">
|
||||
<TableHead className="w-[200px]">Product</TableHead>
|
||||
<TableHead className="text-center">Category</TableHead>
|
||||
<TableHead className="text-center">Unit</TableHead>
|
||||
<TableHead className="hidden sm:table-cell text-center">Category</TableHead>
|
||||
<TableHead className="hidden md:table-cell text-center">Unit</TableHead>
|
||||
<TableHead className="text-center">Stock</TableHead>
|
||||
<TableHead className="text-center">Enabled</TableHead>
|
||||
<TableHead className="hidden lg:table-cell text-center">Enabled</TableHead>
|
||||
<TableHead className="text-right">Actions</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
@@ -73,9 +73,12 @@ const ProductTable = ({
|
||||
<TableRow key={product._id} className="transition-colors hover:bg-gray-50 dark:hover:bg-zinc-800/70">
|
||||
<TableCell>
|
||||
<div className="font-medium truncate max-w-[180px]">{product.name}</div>
|
||||
<div className="hidden sm:block text-sm text-muted-foreground mt-1">
|
||||
{getCategoryNameById(product.category)}
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell className="text-center">{getCategoryNameById(product.category)}</TableCell>
|
||||
<TableCell className="text-center">{product.unitType}</TableCell>
|
||||
<TableCell className="hidden sm:table-cell text-center">{getCategoryNameById(product.category)}</TableCell>
|
||||
<TableCell className="hidden md:table-cell text-center">{product.unitType}</TableCell>
|
||||
<TableCell className="text-center">
|
||||
{product.stockTracking ? (
|
||||
<div className="flex items-center justify-center gap-1">
|
||||
@@ -88,7 +91,7 @@ const ProductTable = ({
|
||||
<Badge variant="outline" className="text-xs">Not Tracked</Badge>
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell className="text-center">
|
||||
<TableCell className="hidden lg:table-cell text-center">
|
||||
<Switch
|
||||
checked={product.enabled !== false}
|
||||
onCheckedChange={(checked) => onToggleEnabled(product._id as string, checked)}
|
||||
|
||||
Reference in New Issue
Block a user