11'use client' ;
22
3+ import { api } from '@/api/api' ;
4+ import type { IClassroom } from '@/types/IClassroomCard' ;
35import {
46 Button ,
57 FormControl ,
@@ -12,26 +14,38 @@ import {
1214 ModalFooter ,
1315 ModalHeader ,
1416 ModalOverlay ,
17+ Select ,
1518 Textarea ,
1619 VStack ,
1720 useToast
1821} from '@chakra-ui/react' ;
19- import { useState } from 'react' ;
22+ import { useEffect , useState } from 'react' ;
2023
2124interface CreateClassModalProps {
2225 isOpen : boolean ;
2326 onClose : ( ) => void ;
27+ onClassroomCreated ?: ( classrooms : IClassroom [ ] ) => void ;
2428}
2529
26- export default function CreateClassModal ( { isOpen, onClose } : Readonly < CreateClassModalProps > ) {
30+ export default function CreateClassModal ( { isOpen, onClose, onClassroomCreated } : Readonly < CreateClassModalProps > ) {
2731 const [ isLoading , setIsLoading ] = useState ( false ) ;
2832 const [ formData , setFormData ] = useState ( {
2933 name : '' ,
3034 description : '' ,
31- image : ''
35+ thumbnailId : 1
3236 } ) ;
3337 const toast = useToast ( ) ;
3438
39+ useEffect ( ( ) => {
40+ if ( isOpen ) {
41+ setFormData ( {
42+ name : '' ,
43+ description : '' ,
44+ thumbnailId : 1
45+ } ) ;
46+ }
47+ } , [ isOpen ] ) ;
48+
3549 const handleSubmit = async ( ) => {
3650 if ( ! formData . name . trim ( ) || ! formData . description . trim ( ) ) {
3751 toast ( {
@@ -47,7 +61,17 @@ export default function CreateClassModal({ isOpen, onClose }: Readonly<CreateCla
4761
4862 setIsLoading ( true ) ;
4963 try {
50- await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
64+ const { id } = await api . classroom . create ( formData ) ;
65+
66+ const newClassroom : IClassroom = {
67+ id,
68+ ...formData ,
69+ code : id . slice ( 0 , 6 ) . toUpperCase ( ) ,
70+ owner : 'Ángel'
71+ } ;
72+
73+ onClassroomCreated ?.( [ newClassroom ] ) ;
74+
5175 toast ( {
5276 title : 'Clase creada' ,
5377 description : 'La clase se ha creado exitosamente' ,
@@ -61,8 +85,8 @@ export default function CreateClassModal({ isOpen, onClose }: Readonly<CreateCla
6185 toast ( {
6286 title : 'Error' ,
6387 description : 'Ocurrió un error al crear la clase' ,
64- position : 'top-right' ,
6588 status : 'error' ,
89+ position : 'top-right' ,
6690 duration : 3000 ,
6791 isClosable : true
6892 } ) ;
@@ -72,17 +96,17 @@ export default function CreateClassModal({ isOpen, onClose }: Readonly<CreateCla
7296 } ;
7397
7498 return (
75- < Modal isOpen = { isOpen } onClose = { onClose } size = 'xl' >
99+ < Modal isOpen = { isOpen } onClose = { onClose } >
76100 < ModalOverlay backdropFilter = 'blur(4px)' />
77101 < ModalContent bg = 'brand.dark.900' border = '1px solid' borderColor = 'brand.dark.800' >
78102 < ModalHeader > Crear Nueva Clase</ ModalHeader >
79103 < ModalCloseButton />
80104 < ModalBody >
81105 < VStack spacing = { 4 } >
82106 < FormControl isRequired >
83- < FormLabel > Nombre de la Clase </ FormLabel >
107+ < FormLabel > Nombre</ FormLabel >
84108 < Input
85- placeholder = 'Ej: Matemáticas Avanzadas '
109+ placeholder = 'Ej: Programación Web '
86110 value = { formData . name }
87111 onChange = { ( e ) => setFormData ( { ...formData , name : e . target . value } ) }
88112 bg = 'brand.dark.800'
@@ -113,6 +137,28 @@ export default function CreateClassModal({ isOpen, onClose }: Readonly<CreateCla
113137 rows = { 4 }
114138 />
115139 </ FormControl >
140+
141+ < FormControl >
142+ < FormLabel > Imagen de portada</ FormLabel >
143+ < Select
144+ value = { formData . thumbnailId }
145+ onChange = { ( e ) => setFormData ( { ...formData , thumbnailId : Number ( e . target . value ) } ) }
146+ bg = 'brand.dark.800'
147+ border = '1px solid'
148+ borderColor = 'brand.dark.700'
149+ _hover = { { borderColor : 'brand.primary.500' } }
150+ _focus = { {
151+ borderColor : 'brand.primary.500' ,
152+ boxShadow : '0 0 0 1px var(--chakra-colors-brand-primary-500)'
153+ } }
154+ >
155+ { Array . from ( { length : 9 } , ( _ , i ) => (
156+ < option key = { i + 1 } value = { i + 1 } >
157+ Imagen { i + 1 }
158+ </ option >
159+ ) ) }
160+ </ Select >
161+ </ FormControl >
116162 </ VStack >
117163 </ ModalBody >
118164
0 commit comments