@@ -18,7 +18,7 @@ import { toast } from '../../../ui/use-toast'
18
18
const Export = ( ) => {
19
19
20
20
const fileInputRef = useRef ( null ) ;
21
- const { setPickedCourses, setCheckboxedCourses } = useContext ( CourseContext ) ;
21
+ const { pickedCourses , setPickedCourses, setCheckboxedCourses } = useContext ( CourseContext ) ;
22
22
const { multipleOptions, setMultipleOptions } = useContext ( MultipleOptionsContext ) ;
23
23
24
24
const handleFileChange = async ( event : React . ChangeEvent < HTMLInputElement > ) => {
@@ -29,11 +29,13 @@ const Export = () => {
29
29
30
30
try {
31
31
const content = csvDecode ( await file . text ( ) ) ;
32
+ console . log ( "input content" , content ) ;
32
33
const courses = await getSelectedCourses ( content ) ;
34
+ console . log ( "selected courses" , courses ) ;
33
35
34
36
setCheckboxedCourses ( courses ) ;
35
37
setPickedCourses ( courses ) ;
36
- setCourseOptions ( content ) ;
38
+ setCourseOptions ( content , courses ) ;
37
39
} catch ( error ) {
38
40
toast ( {
39
41
title : 'Não foi possível importar os horários!' ,
@@ -43,35 +45,41 @@ const Export = () => {
43
45
}
44
46
} ;
45
47
46
- const getSelectedCourses = async ( content : any ) : Promise < CourseInfo [ ] > => {
48
+ const getSelectedCourses = async ( content : string [ ] [ ] ) : Promise < CourseInfo [ ] > => {
47
49
if ( ! Array . isArray ( content ) || content . length === 0 ) return [ ] ;
48
-
49
- const selected_courses = await Promise . all ( content . map ( row => api . getCourseUnit ( row [ 0 ] ) ) ) ;
50
-
51
- const majorsPromises = selected_courses . map ( course => api . getCoursesByMajorId ( course . course ) ) ;
52
- const majorsResults = await Promise . all ( majorsPromises ) ;
53
50
54
- selected_courses . forEach ( ( course , index ) => {
55
- const full_courses = majorsResults [ index ] ;
56
- const matching_course = full_courses . find ( indiv_course => indiv_course . course_unit_id === course . id ) ;
57
- if ( matching_course ) {
58
- course . ects = matching_course . ects ;
59
- }
51
+ const courses : CourseInfo [ ] = [ ] ;
52
+
53
+ const promises = content . map ( async ( row ) => {
54
+ const res = await api . getCoursesByMajorId ( parseInt ( row [ 0 ] ) ) ;
55
+ const matchedCourses = res . filter ( course => course . acronym === row [ 3 ] ) ;
56
+ courses . push ( ... matchedCourses ) ;
60
57
} ) ;
58
+
59
+ await Promise . all ( promises ) ;
61
60
62
- return selected_courses ;
61
+ for ( const course of courses ) {
62
+ if ( typeof ( course . ects ) === "string" )
63
+ course . ects = parseFloat ( course . ects . replace ( "," , "." ) ) ;
64
+ }
65
+
66
+ return courses ;
63
67
} ;
64
68
65
- const setCourseOptions = ( courses : number [ ] [ ] ) => {
66
- const transposedCourses = courses [ 0 ] . map ( ( _ , colIndex ) => courses . map ( row => row [ colIndex ] ) ) ;
67
-
68
- const newOptions = transposedCourses . slice ( 1 , 11 ) . map ( ( column , i ) =>
69
- createOption ( multipleOptions [ i ] , column . map ( ( value , j ) =>
70
- createCourseOption ( transposedCourses [ 0 ] [ j ] , value )
71
- ) )
72
- ) ;
73
-
74
- setMultipleOptions ( newOptions ) ;
69
+ const setCourseOptions = async ( content : string [ ] [ ] , courses : CourseInfo [ ] ) => {
70
+ const updatedOptions = [ ...multipleOptions ] ;
71
+
72
+ for ( let i = 0 ; i < courses . length ; i ++ ) {
73
+ const courseOptions = await api . getCourseClass ( courses [ i ] ) ;
74
+ content [ i ] . slice ( 4 ) . forEach ( ( courseOption , j ) => {
75
+ const matchedClassOption = courseOptions . find ( classOption => classOption . name === courseOption ) ;
76
+ if ( matchedClassOption ) {
77
+ updatedOptions [ j ] . course_options . push ( createCourseOption ( courses [ i ] . id , matchedClassOption . id ) ) ;
78
+ }
79
+ } ) ;
80
+ }
81
+
82
+ setMultipleOptions ( updatedOptions ) ;
75
83
} ;
76
84
77
85
const createCourseOption = ( course_id : number , picked_class_id : number ) : CourseOption => {
@@ -84,15 +92,6 @@ const Export = () => {
84
92
}
85
93
}
86
94
87
- const createOption = ( option : Option , new_course_options : Array < CourseOption > ) => {
88
- return {
89
- id : option . id ,
90
- icon : option . icon ,
91
- name : option . name ,
92
- course_options : new_course_options
93
- }
94
- }
95
-
96
95
const handleClick = ( ) => {
97
96
fileInputRef . current . click ( ) ;
98
97
} ;
0 commit comments