1+ import { eliminarCita , cargarEdicion } from '../funciones.js' ;
2+ import { contenedorCitas , heading } from '../selectores.js' ;
3+
4+ class UI {
5+
6+ constructor ( { citas} ) {
7+ this . textoHeading ( citas ) ;
8+ }
9+
10+ imprimirAlerta ( mensaje , tipo ) {
11+
12+ const alertaPrevia = document . querySelector ( '.alert' ) ;
13+
14+ if ( alertaPrevia ) {
15+ alertaPrevia . remove ( ) ;
16+ }
17+
18+ // Crea el div
19+ const divMensaje = document . createElement ( 'div' ) ;
20+ divMensaje . classList . add ( 'text-center' , 'alert' , 'd-block' , 'col-12' ) ;
21+ divMensaje . dataset . cy = 'alerta' // NUEVO
22+
23+ // Si es de tipo error agrega una clase
24+ if ( tipo === 'error' ) {
25+ divMensaje . classList . add ( 'alert-danger' ) ;
26+ } else {
27+ divMensaje . classList . add ( 'alert-success' ) ;
28+ }
29+
30+ // Mensaje de error
31+ divMensaje . textContent = mensaje ;
32+
33+ // Insertar en el DOM
34+ document . querySelector ( '#contenido' ) . insertBefore ( divMensaje , document . querySelector ( '.agregar-cita' ) ) ;
35+
36+ // Quitar el alert despues de 3 segundos
37+ setTimeout ( ( ) => {
38+ divMensaje . remove ( ) ;
39+ } , 3000 ) ;
40+
41+
42+ }
43+
44+ imprimirCitas ( { citas} ) { // Se puede aplicar destructuring desde la función...
45+
46+ this . limpiarHTML ( ) ;
47+
48+ this . textoHeading ( citas ) ;
49+
50+ citas . forEach ( cita => {
51+ const { mascota, propietario, telefono, fecha, hora, sintomas, id } = cita ;
52+
53+ const divCita = document . createElement ( 'div' ) ;
54+ divCita . classList . add ( 'cita' , 'p-3' ) ;
55+ divCita . dataset . id = id ;
56+
57+ // scRIPTING DE LOS ELEMENTOS...
58+ const mascotaParrafo = document . createElement ( 'h2' ) ;
59+ mascotaParrafo . classList . add ( 'card-title' , 'font-weight-bolder' ) ;
60+ mascotaParrafo . innerHTML = `${ mascota } ` ;
61+
62+ const propietarioParrafo = document . createElement ( 'p' ) ;
63+ propietarioParrafo . innerHTML = `<span class="font-weight-bolder">Propietario: </span> ${ propietario } ` ;
64+
65+ const telefonoParrafo = document . createElement ( 'p' ) ;
66+ telefonoParrafo . innerHTML = `<span class="font-weight-bolder">Teléfono: </span> ${ telefono } ` ;
67+
68+ const fechaParrafo = document . createElement ( 'p' ) ;
69+ fechaParrafo . innerHTML = `<span class="font-weight-bolder">Fecha: </span> ${ fecha } ` ;
70+
71+ const horaParrafo = document . createElement ( 'p' ) ;
72+ horaParrafo . innerHTML = `<span class="font-weight-bolder">Hora: </span> ${ hora } ` ;
73+
74+ const sintomasParrafo = document . createElement ( 'p' ) ;
75+ sintomasParrafo . innerHTML = `<span class="font-weight-bolder">Síntomas: </span> ${ sintomas } ` ;
76+
77+ // Agregar un botón de eliminar...
78+ const btnEliminar = document . createElement ( 'button' ) ;
79+ btnEliminar . onclick = ( ) => eliminarCita ( id ) ; // añade la opción de eliminar
80+
81+ btnEliminar . dataset . cy = 'eliminar' // NUEVO
82+
83+ btnEliminar . classList . add ( 'btn' , 'btn-danger' , 'mr-2' ) ;
84+ btnEliminar . innerHTML = 'Eliminar <svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor"><path d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>'
85+
86+ // Añade un botón de editar...
87+ const btnEditar = document . createElement ( 'button' ) ;
88+ btnEditar . onclick = ( ) => cargarEdicion ( cita ) ;
89+
90+ btnEditar . dataset . cy = 'editar' // NUEVO
91+
92+ btnEditar . classList . add ( 'btn' , 'btn-info' ) ;
93+ btnEditar . innerHTML = 'Editar <svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor"><path d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"></path></svg>'
94+
95+ // Agregar al HTML
96+ divCita . appendChild ( mascotaParrafo ) ;
97+ divCita . appendChild ( propietarioParrafo ) ;
98+ divCita . appendChild ( telefonoParrafo ) ;
99+ divCita . appendChild ( fechaParrafo ) ;
100+ divCita . appendChild ( horaParrafo ) ;
101+ divCita . appendChild ( sintomasParrafo ) ;
102+ divCita . appendChild ( btnEliminar )
103+ divCita . appendChild ( btnEditar )
104+
105+ contenedorCitas . appendChild ( divCita ) ;
106+ } ) ;
107+ }
108+
109+ textoHeading ( citas ) {
110+ if ( citas . length > 0 ) {
111+ heading . textContent = 'Administra tus Citas '
112+ } else {
113+ heading . textContent = 'No hay Citas, comienza creando una'
114+ }
115+ }
116+
117+ limpiarHTML ( ) {
118+ while ( contenedorCitas . firstChild ) {
119+ contenedorCitas . removeChild ( contenedorCitas . firstChild ) ;
120+ }
121+ }
122+ }
123+
124+ export default UI ;
0 commit comments