@@ -122,7 +122,7 @@ const CatalogueContentInner = ({ subject }: { subject: string | null }) => {
122122 localStorage . setItem ( "userSubjects" , JSON . stringify ( updated ) ) ;
123123 } ;
124124
125- // Fetch papers and apply filters
125+ // Fetch papers ONLY when subject changes (not when filters change!)
126126 useEffect ( ( ) => {
127127 if ( ! subject || ! isMounted ) return ;
128128
@@ -136,36 +136,6 @@ const CatalogueContentInner = ({ subject }: { subject: string | null }) => {
136136 const papersData = data . papers ;
137137 setFilterOptions ( data ) ;
138138 setPapers ( papersData ) ;
139- const filtered = papersData . filter ( ( paper ) => {
140- const examCondition = selectedExams . length
141- ? selectedExams . includes ( paper . exam )
142- : true ;
143- const slotCondition = selectedSlots . length
144- ? selectedSlots . includes ( paper . slot )
145- : true ;
146- const yearCondition = selectedYears . length
147- ? selectedYears . includes ( paper . year )
148- : true ;
149- const semesterCondition = selectedSemesters . length
150- ? selectedSemesters . includes ( paper . semester )
151- : true ;
152- const campusCondition = selectedCampuses . length
153- ? selectedCampuses . includes ( paper . campus )
154- : true ;
155- const answerkeyCondition = selectedAnswerKeyIncluded
156- ? paper . answer_key_included === true
157- : true ;
158- return (
159- examCondition &&
160- slotCondition &&
161- yearCondition &&
162- semesterCondition &&
163- campusCondition &&
164- answerkeyCondition
165- ) ;
166- } ) ;
167- setFilteredPapers ( filtered ) ;
168- setAppliedFilters ( true ) ;
169139 } catch ( error ) {
170140 setPapers ( [ ] ) ;
171141 const axiosError = error as AxiosError ;
@@ -184,16 +154,61 @@ const CatalogueContentInner = ({ subject }: { subject: string | null }) => {
184154 } , [
185155 subject ,
186156 isMounted ,
157+ setPapers ,
158+ setFilterOptions ,
159+ ] ) ;
160+
161+ useEffect ( ( ) => {
162+ if ( ! papers . length ) return ;
163+
164+ const filtered = papers . filter ( ( paper ) => {
165+ const examCondition = selectedExams . length
166+ ? selectedExams . includes ( paper . exam )
167+ : true ;
168+ const slotCondition = selectedSlots . length
169+ ? selectedSlots . includes ( paper . slot )
170+ : true ;
171+ const yearCondition = selectedYears . length
172+ ? selectedYears . includes ( paper . year )
173+ : true ;
174+ const semesterCondition = selectedSemesters . length
175+ ? selectedSemesters . includes ( paper . semester )
176+ : true ;
177+ const campusCondition = selectedCampuses . length
178+ ? selectedCampuses . includes ( paper . campus )
179+ : true ;
180+ const answerkeyCondition = selectedAnswerKeyIncluded
181+ ? paper . answer_key_included === true
182+ : true ;
183+ return (
184+ examCondition &&
185+ slotCondition &&
186+ yearCondition &&
187+ semesterCondition &&
188+ campusCondition &&
189+ answerkeyCondition
190+ ) ;
191+ } ) ;
192+
193+ setFilteredPapers ( filtered ) ;
194+ setAppliedFilters (
195+ selectedExams . length > 0 ||
196+ selectedSlots . length > 0 ||
197+ selectedYears . length > 0 ||
198+ selectedSemesters . length > 0 ||
199+ selectedCampuses . length > 0 ||
200+ selectedAnswerKeyIncluded
201+ ) ;
202+ } , [
203+ papers ,
187204 selectedExams ,
188205 selectedSlots ,
189206 selectedYears ,
190207 selectedSemesters ,
191208 selectedCampuses ,
192209 selectedAnswerKeyIncluded ,
193- setPapers ,
194- setFilterOptions ,
195- setAppliedFilters ,
196210 setFilteredPapers ,
211+ setAppliedFilters ,
197212 ] ) ;
198213
199214 // Render loading state until mounted to avoid hydration mismatch
0 commit comments