diff --git a/public/assets/image.png b/public/assets/image.png
new file mode 100644
index 0000000..fa6b429
Binary files /dev/null and b/public/assets/image.png differ
diff --git a/src/app/(admins)/administrador/eventos/crear/page.tsx b/src/app/(admins)/administrador/eventos/crear/page.tsx
index 3bc334f..45ba8fd 100644
--- a/src/app/(admins)/administrador/eventos/crear/page.tsx
+++ b/src/app/(admins)/administrador/eventos/crear/page.tsx
@@ -3,6 +3,7 @@
import React, { useState } from 'react';
import { CreateEventoType } from '@/types/create-evento';
import CreateEvento from '@/containers/create-evento';
+import EventoCardPreview from '@/components/evento/evento-card-preview';
import axiosInstance from '@/utils/api-config';
import toast from 'react-hot-toast';
import { useRouter } from 'next/navigation';
@@ -71,20 +72,54 @@ export default function Page() {
};
return (
-
-
-
- {/* Botón de guardar en la parte inferior */}
-
+
+ {/* Header */}
+
-
-
+
+
Creación del Evento
+
+ Completa la siguiente información para describir los detalles
+ generales del evento. Presiona siguiente para continuar con la
+ creación del formulario.
+
+
+
+
+
+
+ {/* Columna Izquierda - Formulario */}
+
+
+
+
+ {/* Botón de guardar */}
+
+
+
+
+
+
+ {/* Columna Derecha - Preview */}
+
+
+
+
Preview del Evento
+
+
Preview del Evento
+
+
+
+ Nota: Esta preview es la que veras en tu ruta
+ de eventos y en la ruta publica de eventos
+
+
diff --git a/src/app/(admins)/administrador/eventos/page.tsx b/src/app/(admins)/administrador/eventos/page.tsx
index 699ce1e..3715f07 100644
--- a/src/app/(admins)/administrador/eventos/page.tsx
+++ b/src/app/(admins)/administrador/eventos/page.tsx
@@ -1,17 +1,19 @@
'use client';
-import Button from '@/components/button';
-import CuestionarioCard from '@/components/cuestionario-card';
import EventoCardAdmin from '@/components/evento/evento-card-admin';
+import FormularioCardAdmin from '@/components/formulario/formulario-card-admin';
import { useGetApi } from '@/hooks/use-get-api';
import { GetEventoWithCuestionariosWithCupos } from '@/types/evento';
-import Link from 'next/link';
import React from 'react';
export default function Page() {
- const { loading, data, error } = useGetApi<
- GetEventoWithCuestionariosWithCupos[]
- >('/evento/activos/cuestionarios');
+ const {
+ loading,
+ data: activos,
+ error,
+ } = useGetApi(
+ '/evento/activos/cuestionarios'
+ );
const { data: recientes } = useGetApi(
'/evento/recientes/cuestionarios'
);
@@ -20,25 +22,19 @@ export default function Page() {
if (error) return
row.id_participante}
+ />
+
+ >
+ )}
+
+ );
+}
diff --git a/src/app/(admins)/user/evento/[id_evento]/formularios/crear/page.tsx b/src/app/(admins)/user/evento/[id_evento]/formularios/crear/page.tsx
new file mode 100644
index 0000000..36aeb2b
--- /dev/null
+++ b/src/app/(admins)/user/evento/[id_evento]/formularios/crear/page.tsx
@@ -0,0 +1,189 @@
+'use client';
+import { plantillasDisponibles } from '@/data/plantillas';
+import { FormularioCreacion } from '@/types/create-formulario';
+import Image from 'next/image';
+import React, { useState } from 'react';
+import CreateFormulario from '@/containers/create-formulario';
+import Button from '@/components/button';
+import Breadcrumb from '@/components/breadcrumb';
+import { useEvento } from '@/context/evento';
+import { useParams, useRouter } from 'next/navigation';
+import axiosInstance from '@/utils/api-config';
+import { getAxiosError } from '@/utils/errors-utils';
+import toast from 'react-hot-toast';
+
+type Params = {
+ id_evento: string;
+};
+
+export default function Page() {
+ const params = useParams();
+ const router = useRouter();
+ const { evento, refetch } = useEvento();
+ const [datosFormulario, setDatosFormulario] =
+ useState(null);
+
+ const handleSeleccionarPlantilla = (plantillaId: string) => {
+ const seleccionada = plantillasDisponibles.find(
+ (p) => p.id === plantillaId
+ );
+ if (seleccionada) {
+ setDatosFormulario(seleccionada.datos);
+ console.log('Plantilla seleccionada:', seleccionada);
+ }
+ };
+
+ const breadcrumbItems = [
+ { label: 'Inicio', href: '/administrador/eventos' },
+ {
+ label: evento?.nombre_evento || 'Evento',
+ href: `/administrador/evento/${params.id_evento}`,
+ },
+ { label: 'Crear formulario' },
+ ];
+
+ const handleCrearEvento = async () => {
+ if (!datosFormulario || !evento) {
+ toast.error('Faltan datos para crear el formulario');
+ return;
+ }
+
+ // Validar fechas del formulario respecto al evento
+ const fechaInicioFormulario = new Date(datosFormulario.fecha_inicio);
+ const fechaFinFormulario = new Date(datosFormulario.fecha_fin);
+ const fechaInicioEvento = new Date(evento.fecha_inicio);
+ const fechaFinEvento = new Date(evento.fecha_fin);
+
+ // Convertir a solo fecha (sin hora) para comparación
+ const fechaInicioFormularioSoloFecha = new Date(
+ fechaInicioFormulario.getFullYear(),
+ fechaInicioFormulario.getMonth(),
+ fechaInicioFormulario.getDate()
+ );
+ const fechaFinFormularioSoloFecha = new Date(
+ fechaFinFormulario.getFullYear(),
+ fechaFinFormulario.getMonth(),
+ fechaFinFormulario.getDate()
+ );
+ const fechaInicioEventoSoloFecha = new Date(
+ fechaInicioEvento.getFullYear(),
+ fechaInicioEvento.getMonth(),
+ fechaInicioEvento.getDate()
+ );
+ const fechaFinEventoSoloFecha = new Date(
+ fechaFinEvento.getFullYear(),
+ fechaFinEvento.getMonth(),
+ fechaFinEvento.getDate()
+ );
+
+ console.log('Fechas del formulario:', {
+ inicio: fechaInicioFormulario,
+ fin: fechaFinFormulario,
+ });
+ console.log('Fechas del evento:', {
+ inicio: fechaInicioEvento,
+ fin: fechaFinEvento,
+ });
+
+ if (fechaInicioFormularioSoloFecha < fechaInicioEventoSoloFecha) {
+ toast.error(
+ 'La fecha de inicio del formulario debe ser posterior o igual a la fecha de inicio del evento'
+ );
+ return;
+ }
+
+ if (fechaFinFormularioSoloFecha > fechaFinEventoSoloFecha) {
+ toast.error(
+ 'La fecha de fin del formulario debe ser anterior o igual a la fecha de fin del evento'
+ );
+ return;
+ }
+
+ if (fechaInicioFormulario > fechaFinFormulario) {
+ toast.error(
+ 'La fecha de inicio del formulario debe ser anterior a la fecha de fin'
+ );
+ return;
+ }
+
+ try {
+ const res = await axiosInstance.post(`/cuestionario`, {
+ id_evento: evento?.id_evento || params.id_evento,
+ ...datosFormulario,
+ });
+ console.log('Formulario creado:', res.data);
+ refetch();
+ toast.success('Formulario creado exitosamente');
+ router.push(`/administrador/evento/${params.id_evento}`);
+ } catch (error) {
+ const msg = getAxiosError(error);
+ toast.error(msg.message || 'Error al crear el formulario');
+ }
+ };
+
+ return (
+
+
+
+
+
Creación de formulario
+
+ Esta sección te permite crear y configurar sub-eventos en forma de
+ formularios asociados al evento. Selecciona una plantilla compatible,
+ ajusta los campos necesarios y publícalo para habilitar el registro,
+ encuestas o confirmaciones dentro de este evento.
+
+
+ {!datosFormulario && (
+
+
+ Selecciona una plantilla para el formulario:
+
+
+ Elige una de las plantillas disponibles para crear tu formulario de
+ registro.
+
+ Estas plantillas están diseñadas para garantizar la correcta
+ integración con el sistema, permitiendo que los datos se obtengan y
+ se prellenan automáticamente de forma precisa.
+
+
+ Para asegurar el funcionamiento óptimo del prellenado, modifica la
+ estructura solo si es necesario.
+
+
+ Completa la siguiente información para describir los detalles
+ generales del evento. Presiona siguiente para continuar con la
+ creación del formulario.
+
+
+
+
+
+
+ {/* Columna Izquierda - Formulario */}
+
+
+
+
+ {/* Botón de guardar */}
+
+
+
+
+
+
+ {/* Columna Derecha - Preview */}
+
+
+
+
Preview del Evento
+
+
Preview del Evento
+
+
+
+ Nota: Esta preview es la que veras en tu ruta
+ de eventos y en la ruta publica de eventos
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/(admins)/user/eventos/page.tsx b/src/app/(admins)/user/eventos/page.tsx
new file mode 100644
index 0000000..3715f07
--- /dev/null
+++ b/src/app/(admins)/user/eventos/page.tsx
@@ -0,0 +1,67 @@
+'use client';
+
+import EventoCardAdmin from '@/components/evento/evento-card-admin';
+import FormularioCardAdmin from '@/components/formulario/formulario-card-admin';
+import { useGetApi } from '@/hooks/use-get-api';
+import { GetEventoWithCuestionariosWithCupos } from '@/types/evento';
+import React from 'react';
+
+export default function Page() {
+ const {
+ loading,
+ data: activos,
+ error,
+ } = useGetApi(
+ '/evento/activos/cuestionarios'
+ );
+ const { data: recientes } = useGetApi(
+ '/evento/recientes/cuestionarios'
+ );
+
+ if (loading) return