'use client'; import { CuestionarioWithCupo, GetEvento } from '@/types/evento'; import Image from 'next/image'; import Link from 'next/link'; import React, { useState } from 'react'; import MarkdownRenderer from '../markdown-render'; import { toParam } from '@/utils/slugify'; import { formatearFechaCard, formatearHorario } from '@/utils/date-utils'; import Button from '../button'; export default function FormularioCardUser({ evento, formulario, }: { evento: GetEvento; formulario: CuestionarioWithCupo; }) { const [verMas, setVerMas] = useState(false); const descripcion = formulario.descripcion ?? ''; const limite = 100; // Determinar si hay cupos disponibles const sinCupos = formulario.cupo_maximo !== null && formulario.cupos_disponibles <= 0; // Verificar si el evento es el mismo día const fechaInicio = new Date(formulario.fecha_inicio); const fechaFin = new Date(formulario.fecha_fin); const esElMismoDia = fechaInicio.toDateString() === fechaFin.toDateString(); // Obtener información de fecha formateada usando las utilidades const { mesTexto, diaTexto } = formatearFechaCard( formulario.fecha_inicio, formulario.fecha_fin ); // Obtener horario formateado si es el mismo día const horarioFormateado = esElMismoDia ? formatearHorario(formulario.fecha_inicio, formulario.fecha_fin) : null; const descripcionRecortada = descripcion.length > limite && !verMas ? `${descripcion.slice(0, limite)}...` : descripcion; const imgSrc = formulario.banner ? `${process.env.NEXT_PUBLIC_API_URL}/banners/${formulario.banner}` : evento.banner ? `${process.env.NEXT_PUBLIC_API_URL}/banners/${evento.banner}` : `/default-banner.png`; return (
{sinCupos ? (
Banner formulario
Sin cupos disponibles
) : ( Banner formulario )} {/* Badge de cupos en la esquina superior derecha */}
{formulario.tipoCuestionario.tipo_cuestionario}{' '}
{/* Fecha del evento */}
{mesTexto}
{diaTexto}
{evento.nombre_evento}
{formulario.nombre_form}
{formulario.tipoEvento && (
{formulario.tipoEvento.tipo_evento}
)}
{/* Descripción */}
{descripcion.length > limite && ( )}
{/* Información de cupos y estadísticas */}
{/* Columna de horario - solo visible si es el mismo día */} {esElMismoDia && (
Horario {horarioFormateado}
)} {/* Columna de cupos - siempre visible */}
Cupos {formulario.cupo_maximo !== null ? `${formulario.cupos_usados} / ${formulario.cupo_maximo}` : 'Sin límite'} {sinCupos && (
Cupos agotados
)}
{/* Botón de registro */} {sinCupos ? ( ) : ( Registro )}
); }