Revert "feat(ui): make dashboard responsive for iPhone and mobile devices"
This reverts commit d3b326e.
The deployment caused reports of blank screens and 400 errors. Reverting to restore stable state while investigating root cause.
This commit is contained in:
@@ -173,7 +173,7 @@ export default function AdminUsuariosPage() {
|
||||
onChange={(e) => setSearchTerm(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
<div className="w-full sm:w-[250px]">
|
||||
<div className="w-[250px]">
|
||||
<Select value={filterTenant} onValueChange={setFilterTenant}>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Filtrar por empresa" />
|
||||
@@ -337,7 +337,7 @@ export default function AdminUsuariosPage() {
|
||||
value={editingUser.role}
|
||||
onValueChange={(v) => setEditingUser({ ...editingUser, role: v as any })}
|
||||
>
|
||||
<SelectTrigger className="h-8 w-full sm:w-[140px]">
|
||||
<SelectTrigger className="h-8 w-[140px]">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
|
||||
@@ -240,7 +240,7 @@ export default function DiscrepanciaRegimenPage() {
|
||||
type="date"
|
||||
value={fechaDesde}
|
||||
onChange={e => setFechaDesde(e.target.value)}
|
||||
className="h-8 w-full sm:w-[150px] text-sm"
|
||||
className="h-8 w-[150px] text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
@@ -249,7 +249,7 @@ export default function DiscrepanciaRegimenPage() {
|
||||
type="date"
|
||||
value={fechaHasta}
|
||||
onChange={e => setFechaHasta(e.target.value)}
|
||||
className="h-8 w-full sm:w-[150px] text-sm"
|
||||
className="h-8 w-[150px] text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
|
||||
@@ -222,7 +222,7 @@ export default function TipoRelacionSospechosaPage() {
|
||||
type="date"
|
||||
value={fechaDesde}
|
||||
onChange={e => setFechaDesde(e.target.value)}
|
||||
className="h-8 w-full sm:w-[150px] text-sm"
|
||||
className="h-8 w-[150px] text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
@@ -231,7 +231,7 @@ export default function TipoRelacionSospechosaPage() {
|
||||
type="date"
|
||||
value={fechaHasta}
|
||||
onChange={e => setFechaHasta(e.target.value)}
|
||||
className="h-8 w-full sm:w-[150px] text-sm"
|
||||
className="h-8 w-[150px] text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
|
||||
@@ -302,9 +302,8 @@ export default function CalendarioPage() {
|
||||
</div>
|
||||
<div className="grid grid-cols-7 gap-1">
|
||||
{['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'].map(d => (
|
||||
<div key={d} className="text-center text-xs md:text-sm font-medium text-muted-foreground py-1 md:py-2">
|
||||
<span className="md:hidden">{d.charAt(0)}</span>
|
||||
<span className="hidden md:inline">{d}</span>
|
||||
<div key={d} className="text-center text-sm font-medium text-muted-foreground py-2">
|
||||
{d}
|
||||
</div>
|
||||
))}
|
||||
{days.map((day, i) => {
|
||||
@@ -314,14 +313,14 @@ export default function CalendarioPage() {
|
||||
<div
|
||||
key={i}
|
||||
className={cn(
|
||||
'min-h-[60px] md:min-h-[80px] p-0.5 md:p-1 border rounded-md',
|
||||
'min-h-[80px] p-1 border rounded-md',
|
||||
day ? 'bg-background' : 'bg-muted/30',
|
||||
isToday && 'ring-2 ring-primary'
|
||||
)}
|
||||
>
|
||||
{day && (
|
||||
<>
|
||||
<div className={cn('text-xs md:text-sm font-medium', isToday && 'text-primary')}>{day}</div>
|
||||
<div className={cn('text-sm font-medium', isToday && 'text-primary')}>{day}</div>
|
||||
<div className="space-y-1 mt-1">
|
||||
{dayEventos.slice(0, 2).map((e, idx) => {
|
||||
const Icon = tipoIcons[e.tipo] || Calendar;
|
||||
|
||||
@@ -967,7 +967,7 @@ export default function CfdiPage() {
|
||||
<Card>
|
||||
<CardContent className="p-4">
|
||||
<div className="flex flex-wrap gap-4">
|
||||
<div className="flex gap-2 w-full sm:w-[300px]">
|
||||
<div className="flex gap-2 w-[300px]">
|
||||
<Input
|
||||
placeholder="Buscar por UUID, RFC o nombre..."
|
||||
value={searchTerm}
|
||||
@@ -1012,7 +1012,7 @@ export default function CfdiPage() {
|
||||
})
|
||||
}
|
||||
>
|
||||
<SelectTrigger className="w-full sm:w-[200px]">
|
||||
<SelectTrigger className="w-[200px]">
|
||||
<SelectValue placeholder="Tipo de Comprobante" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
|
||||
@@ -205,9 +205,9 @@ export default function ClientesPage() {
|
||||
<Calendar className="h-5 w-5 text-muted-foreground" />
|
||||
<div className="flex items-center gap-2 text-sm">
|
||||
<span className="text-muted-foreground">Periodo:</span>
|
||||
<Input type="date" value={from} onChange={(e) => setFrom(e.target.value)} className="w-full sm:w-[150px]" />
|
||||
<Input type="date" value={from} onChange={(e) => setFrom(e.target.value)} className="w-[150px]" />
|
||||
<span className="text-muted-foreground">a</span>
|
||||
<Input type="date" value={to} onChange={(e) => setTo(e.target.value)} className="w-full sm:w-[150px]" />
|
||||
<Input type="date" value={to} onChange={(e) => setTo(e.target.value)} className="w-[150px]" />
|
||||
</div>
|
||||
</div>
|
||||
<Button onClick={() => setShowForm(true)}>
|
||||
@@ -369,7 +369,7 @@ export default function ClientesPage() {
|
||||
onClick={() => setUsuariosTenantId(null)}
|
||||
>
|
||||
<div
|
||||
className="bg-background rounded-lg max-w-[95vw] md:max-w-2xl w-full max-h-[80vh] overflow-y-auto"
|
||||
className="bg-background rounded-lg max-w-2xl w-full max-h-[80vh] overflow-y-auto"
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
<div className="p-6 border-b flex items-center justify-between">
|
||||
|
||||
@@ -67,7 +67,7 @@ export function AddonsDialog({
|
||||
|
||||
return (
|
||||
<Dialog open={!!target} onOpenChange={(o) => !o && onClose()}>
|
||||
<DialogContent className="max-w-[95vw] md:max-w-2xl">
|
||||
<DialogContent className="max-w-2xl">
|
||||
<DialogHeader>
|
||||
<DialogTitle className="flex items-center gap-2"><Sparkles className="h-5 w-5 text-amber-500" /> Add-ons — {target?.nombre}</DialogTitle>
|
||||
</DialogHeader>
|
||||
|
||||
@@ -379,11 +379,11 @@ function DeclaracionesTab() {
|
||||
<div className="flex flex-wrap items-end gap-3 mb-4 pb-3 border-b">
|
||||
<div className="flex items-center gap-2">
|
||||
<label className="text-xs text-muted-foreground">Desde</label>
|
||||
<Input type="date" value={fechaDesde} onChange={(e) => setFechaDesde(e.target.value)} className="h-8 w-full sm:w-[150px] text-sm" />
|
||||
<Input type="date" value={fechaDesde} onChange={(e) => setFechaDesde(e.target.value)} className="h-8 w-[150px] text-sm" />
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<label className="text-xs text-muted-foreground">Hasta</label>
|
||||
<Input type="date" value={fechaHasta} onChange={(e) => setFechaHasta(e.target.value)} className="h-8 w-full sm:w-[150px] text-sm" />
|
||||
<Input type="date" value={fechaHasta} onChange={(e) => setFechaHasta(e.target.value)} className="h-8 w-[150px] text-sm" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -552,7 +552,7 @@ function UploadDialog({ onClose }: { onClose: () => void }) {
|
||||
|
||||
return (
|
||||
<Dialog open onOpenChange={(o) => { if (!o) onClose(); }}>
|
||||
<DialogContent className="max-w-[95vw] md:max-w-2xl max-h-[90vh] overflow-y-auto">
|
||||
<DialogContent className="max-w-2xl max-h-[90vh] overflow-y-auto">
|
||||
<DialogHeader>
|
||||
<DialogTitle>Subir declaración</DialogTitle>
|
||||
<DialogDescription>
|
||||
|
||||
@@ -812,7 +812,7 @@ export default function FacturacionPage() {
|
||||
{/* Modal de búsqueda de conceptos previos */}
|
||||
{showConceptoSearch && (
|
||||
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50">
|
||||
<div className="bg-white dark:bg-zinc-900 rounded-xl shadow-2xl w-full max-w-[95vw] md:max-w-3xl max-h-[80vh] flex flex-col m-4">
|
||||
<div className="bg-white dark:bg-zinc-900 rounded-xl shadow-2xl w-full max-w-3xl max-h-[80vh] flex flex-col m-4">
|
||||
<div className="flex items-center justify-between p-4 border-b">
|
||||
<h3 className="text-lg font-semibold">Buscar Concepto en Facturas</h3>
|
||||
<Button variant="ghost" size="icon" onClick={() => setShowConceptoSearch(false)}>
|
||||
|
||||
@@ -9,7 +9,6 @@ import { Sidebar } from '@/components/layouts/sidebar';
|
||||
import { TopNav } from '@/components/layouts/topnav';
|
||||
import { SidebarCompact } from '@/components/layouts/sidebar-compact';
|
||||
import { SidebarFloating } from '@/components/layouts/sidebar-floating';
|
||||
import { MobileNav } from '@/components/layouts/mobile-nav';
|
||||
import { SubscriptionBanner } from '@/components/subscription-banner';
|
||||
import { cn } from '@horux/shared-ui';
|
||||
|
||||
@@ -46,7 +45,7 @@ export default function DashboardLayout({
|
||||
}
|
||||
|
||||
// Render layout based on theme
|
||||
const renderDesktopNavigation = () => {
|
||||
const renderNavigation = () => {
|
||||
switch (layout) {
|
||||
case 'topnav':
|
||||
return <TopNav />;
|
||||
@@ -63,14 +62,14 @@ export default function DashboardLayout({
|
||||
const getContentClasses = () => {
|
||||
switch (layout) {
|
||||
case 'topnav':
|
||||
return 'pt-16 px-4 md:px-6'; // Top padding for fixed top nav
|
||||
return 'pt-16'; // Top padding for fixed top nav
|
||||
case 'sidebar-compact':
|
||||
return 'md:pl-16 px-4 md:px-0'; // Small left padding for compact sidebar on desktop
|
||||
return 'pl-16'; // Small left padding for compact sidebar
|
||||
case 'sidebar-floating':
|
||||
return 'px-4 py-4 md:pl-72 md:pr-4 md:py-4'; // Padding for floating sidebar on desktop
|
||||
return 'pl-72 pr-4 py-4'; // Padding for floating sidebar
|
||||
case 'sidebar-standard':
|
||||
default:
|
||||
return 'px-4 md:pl-64 md:px-0'; // Standard sidebar width on desktop
|
||||
return 'pl-64'; // Standard sidebar width
|
||||
}
|
||||
};
|
||||
|
||||
@@ -79,20 +78,8 @@ export default function DashboardLayout({
|
||||
'min-h-screen bg-background',
|
||||
layout === 'sidebar-floating' && 'bg-gradient-to-br from-background via-background to-muted/20'
|
||||
)}>
|
||||
{/* Mobile header with hamburger menu */}
|
||||
<header className="md:hidden fixed top-0 left-0 right-0 z-40 h-14 border-b bg-card px-4 flex items-center justify-between">
|
||||
<MobileNav />
|
||||
<span className="font-bold text-lg">Horux</span>
|
||||
<div className="w-10" />
|
||||
</header>
|
||||
|
||||
{/* Desktop navigation - hidden on mobile */}
|
||||
<div className="hidden md:block">
|
||||
{renderDesktopNavigation()}
|
||||
</div>
|
||||
|
||||
{/* Main content */}
|
||||
<div className={cn('pt-14 md:pt-0', getContentClasses())}>
|
||||
{renderNavigation()}
|
||||
<div className={getContentClasses()}>
|
||||
<SubscriptionBanner />
|
||||
{children}
|
||||
</div>
|
||||
|
||||
@@ -103,7 +103,7 @@ export function EstadoResultadosDrillDownModal({
|
||||
|
||||
return (
|
||||
<Dialog open onOpenChange={(open) => !open && onClose()}>
|
||||
<DialogContent className="max-w-[95vw] md:max-w-4xl max-h-[90vh] overflow-y-auto">
|
||||
<DialogContent className="max-w-4xl max-h-[90vh] overflow-y-auto">
|
||||
<DialogHeader>
|
||||
<div className="flex items-center gap-2">
|
||||
{selectedRfc && (
|
||||
|
||||
Reference in New Issue
Block a user