@@ -131,34 +131,40 @@ const SpecialPromptContainer = styled.div`
131131 padding: 40px 0;
132132` ;
133133
134- const SemesterBanner = styled . div `
134+ const InfoBanner = styled . div `
135135 display: flex;
136136 align-items: center;
137137 gap: 8px;
138138 width: 100%;
139139 padding: 10px 14px;
140140 border-radius: 8px;
141- background: # EBF5FF;
142- border: 1px solid # B3D7F5;
143- color: # 1A6FAF;
141+ background: ${ props => props . $isError ? '#ffebeb' : '# EBF5FF' } ;
142+ border: 1px solid ${ props => props . $isError ? '#f5b3b3' : '# B3D7F5' } ;
143+ color: ${ props => props . $isError ? '#ff6b6e' : '# 1A6FAF' } ;
144144 font-size: 14px;
145145 font-weight: 400;
146146` ;
147147
148148const numFiltersChanged = ( filters ) => {
149149 let count = 0 ;
150+ let onlySemesterChanged = true ;
150151 for ( const [ key , value ] of Object . entries ( filters ) ) {
151152 if ( Array . isArray ( value ) ) {
152153 const isDifferentArray = value . length !== DEFAULT_FILTERS [ key ] . length || ! value . every ( v => DEFAULT_FILTERS [ key ] . includes ( v ) ) ;
153154 if ( isDifferentArray ) {
154155 count ++ ;
156+ onlySemesterChanged = false ;
155157 }
156158 } else {
157159 if ( value !== DEFAULT_FILTERS [ key ] ) {
158160 count ++ ;
161+ if ( key !== 'semester' ) onlySemesterChanged = false ;
159162 }
160163 }
161164 }
165+ if ( onlySemesterChanged ) {
166+ return 0 ;
167+ }
162168 return count ;
163169}
164170
@@ -204,8 +210,8 @@ const formatFiltersForAPI = (filters) => {
204210 return formatted ;
205211}
206212
207- const CourseResults = ( { filters, setFilters } ) => {
208- const [ subjectSlice , setSubjectSlice ] = useState ( { start : 0 , end : 100 } ) ;
213+ const CourseResults = ( { filters, setFilters, autocompleteData } ) => {
214+ const [ subjectSlice , setSubjectSlice ] = useState ( { start : 0 , end : 101 } ) ;
209215
210216 const [ departments , setDepartments ] = useState ( [ ] ) ;
211217 const [ filteredResults , setFilteredResults ] = useState ( numFiltersChanged ( filters ) > 0 ? { } : null ) ;
@@ -223,14 +229,12 @@ const CourseResults = ({ filters, setFilters }) => {
223229 const isAuth = useContext ( AuthContext ) ;
224230
225231 useEffect ( ( ) => {
226- apiAutocomplete ( )
227- . then ( data => {
228- setDepartments ( data . departments ) ;
229- } )
230- . catch ( error => {
231- console . error ( "Error fetching autocomplete data:" , error ) ;
232- } ) ;
233- } , [ ] ) ;
232+ if ( autocompleteData ) {
233+ console . log ( "Setting departments from autocomplete data:" , autocompleteData . departments ) ;
234+ setDepartments ( autocompleteData . departments ) ;
235+ return ;
236+ }
237+ } , [ autocompleteData ] ) ;
234238
235239 const fetchCourses = useCallback ( ( filters , page , append = false ) => {
236240 if ( isLoadingRef . current ) return ;
@@ -243,6 +247,7 @@ const CourseResults = ({ filters, setFilters }) => {
243247 const ff = formatFiltersForAPI ( filters ) ;
244248 apiCourseSearch ( ff . semester , ff . attributes , ff . difficulty , ff . course_quality , ff . instructor_quality , ff . days , ff . time , ff . departments , page )
245249 . then ( data => {
250+ console . log ( data . results )
246251 const newResults = ( data . results || [ ] ) . reduce ( ( acc , course ) => {
247252 acc [ course . id ] = course ;
248253 return acc ;
@@ -334,12 +339,12 @@ const CourseResults = ({ filters, setFilters }) => {
334339 />
335340 </ SearchResultsHeader >
336341 { getActiveSemesterFilters ( filters ) . length > 0 && (
337- < SemesterBanner >
342+ < InfoBanner $isError = { false } >
338343 < i className = "fa fa-info-circle" />
339344 < span >
340345 Filtering by { getActiveSemesterFilters ( filters ) . map ( k => SEMESTER_FILTER_LABELS [ k ] ) . join ( ', ' ) } — results limited to current semester offerings.
341346 </ span >
342- </ SemesterBanner >
347+ </ InfoBanner >
343348 ) }
344349 < div style = { { width : '100%' , height : '100%' } } >
345350 < CourseResultsTable
@@ -351,7 +356,17 @@ const CourseResults = ({ filters, setFilters }) => {
351356 </ div >
352357 </ >
353358 ) : (
354- < p > No results found.</ p >
359+ < div style = { { display : 'flex' , flexDirection : 'column' , alignItems : 'center' , padding : '20px' , justifyContent : 'center' , width : '100%' } } >
360+ < InfoBanner $isError = { true } style = { { justifyContent : 'center' } } >
361+ < i className = "fa fa-info-circle" />
362+ < span >
363+ No results found! Try adjusting your filters.
364+ </ span >
365+ { filters . semester == "Next Available" && (
366+ < i > Matching results may exist for previous semesters (Try "All")</ i >
367+ ) }
368+ </ InfoBanner >
369+ </ div >
355370 )
356371 ) }
357372 </ >
@@ -372,23 +387,27 @@ const CourseResults = ({ filters, setFilters }) => {
372387 < BrowsingTitle > Browsing { departments . length } Subjects</ BrowsingTitle >
373388 < SubjectDisplayWrapper >
374389 { departments . slice ( subjectSlice . start , subjectSlice . end ) . map ( ( dept , index ) => (
375- < SubjectCard key = { index } >
376- < div style = { { width : '60px' , flexShrink : 0 } } >
377- < LinkText onClick = { ( ) => {
378- setFilters ( { ...filters , departments : [ ...filters . departments , dept . title ] } ) ;
379- } } > { dept . title } </ LinkText >
380- </ div >
381- < DescText > { dept . desc } </ DescText >
382- </ SubjectCard >
390+ < React . Fragment key = { index } >
391+ { dept . desc != null && dept . desc != "" ? (
392+ < SubjectCard key = { index } >
393+ < div style = { { width : '60px' , flexShrink : 0 } } >
394+ < LinkText onClick = { ( ) => {
395+ setFilters ( { ...filters , departments : [ ...filters . departments , dept . title ] } ) ;
396+ } } > { dept . title } </ LinkText >
397+ </ div >
398+ < DescText > { dept . desc } </ DescText >
399+ </ SubjectCard >
400+ ) : null }
401+ </ React . Fragment >
383402 ) ) }
384403 </ SubjectDisplayWrapper >
385404 < PaginationContainer >
386405 < ResponsivePagination
387- current = { Math . floor ( subjectSlice . start / 100 ) + 1 }
388- total = { Math . ceil ( departments . length / 100 ) }
406+ current = { Math . floor ( subjectSlice . start / 101 ) + 1 }
407+ total = { Math . ceil ( departments . length / 101 ) }
389408 onPageChange = { ( page ) => {
390- const start = ( page - 1 ) * 100 ;
391- const end = start + 100 ;
409+ const start = ( page - 1 ) * 101 ;
410+ const end = start + 101 ;
392411 setSubjectSlice ( { start, end } ) ;
393412 } }
394413 />
0 commit comments