From 4fb25356a371b26996866fcd32042d6cab7529f9 Mon Sep 17 00:00:00 2001 From: dmolinari Date: Fri, 17 Apr 2026 11:46:09 -0300 Subject: [PATCH] =?UTF-8?q?feat(web):=20banner=20y=20disabled=20de=20secci?= =?UTF-8?q?ones=20de=20medio=20inactivo=20=E2=80=94=20issue=20#16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/DeactivateSeccionModal.tsx | 5 +++-- .../components/MedioInactivoBanner.tsx | 19 +++++++++++++++++++ .../secciones/components/SeccionesTable.tsx | 7 +++++-- .../secciones/pages/SeccionDetailPage.tsx | 10 ++++++++++ .../secciones/pages/SeccionesListPage.tsx | 18 ++++++++++++++++-- 5 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 src/web/src/features/secciones/components/MedioInactivoBanner.tsx diff --git a/src/web/src/features/secciones/components/DeactivateSeccionModal.tsx b/src/web/src/features/secciones/components/DeactivateSeccionModal.tsx index 07d70cb..c0e0c77 100644 --- a/src/web/src/features/secciones/components/DeactivateSeccionModal.tsx +++ b/src/web/src/features/secciones/components/DeactivateSeccionModal.tsx @@ -18,9 +18,10 @@ interface DeactivateSeccionModalProps { seccionId: number seccionNombre: string activo: boolean + disabled?: boolean } -export function DeactivateSeccionModal({ seccionId, seccionNombre, activo }: DeactivateSeccionModalProps) { +export function DeactivateSeccionModal({ seccionId, seccionNombre, activo, disabled = false }: DeactivateSeccionModalProps) { const [open, setOpen] = useState(false) const { mutate: deactivate, isPending: deactivating } = useDeactivateSeccion() const { mutate: reactivate, isPending: reactivating } = useReactivateSeccion() @@ -38,7 +39,7 @@ export function DeactivateSeccionModal({ seccionId, seccionNombre, activo }: Dea return ( - diff --git a/src/web/src/features/secciones/components/MedioInactivoBanner.tsx b/src/web/src/features/secciones/components/MedioInactivoBanner.tsx new file mode 100644 index 0000000..4c06b84 --- /dev/null +++ b/src/web/src/features/secciones/components/MedioInactivoBanner.tsx @@ -0,0 +1,19 @@ +import { AlertTriangle } from 'lucide-react' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' + +interface MedioInactivoBannerProps { + medioNombre: string +} + +export function MedioInactivoBanner({ medioNombre }: MedioInactivoBannerProps) { + return ( + + + Medio desactivado + + El medio "{medioNombre}" está desactivado. Las operaciones de edición, activación y + desactivación de sus secciones están bloqueadas hasta que se reactive el medio. + + + ) +} diff --git a/src/web/src/features/secciones/components/SeccionesTable.tsx b/src/web/src/features/secciones/components/SeccionesTable.tsx index 7a6f455..555d5b4 100644 --- a/src/web/src/features/secciones/components/SeccionesTable.tsx +++ b/src/web/src/features/secciones/components/SeccionesTable.tsx @@ -11,9 +11,10 @@ import { DeactivateSeccionModal } from './DeactivateSeccionModal' interface SeccionesTableProps { rows: SeccionListItem[] + medioInactivo?: boolean } -export function SeccionesTable({ rows }: SeccionesTableProps) { +export function SeccionesTable({ rows, medioInactivo = false }: SeccionesTableProps) { const navigate = useNavigate() const columns = useMemo[]>( @@ -73,6 +74,7 @@ export function SeccionesTable({ rows }: SeccionesTableProps) { + {medioInactivo && filteredMedio && ( + + )} + ) : ( - + )} {/* Pagination */}