@@ -9,11 +9,14 @@ import CheckBox from "../../staff/components/Checkbox.tsx";
99import PropTypes from "prop-types" ;
1010import Input from "../../staff/components/Input" ;
1111
12- const PopUpMenu = ( { setFunction, validYears, clear, add} ) => {
12+ const PopUpMenu = ( { setFunction, validYears, clear, add, reset } ) => {
1313 const checkboxes = [ [ "Semester" , [ "Summer" , "Fall" , "Spring" ] , "semesters" ] ,
1414 [ "Eligible Years" , validYears , "years" ] ,
15- [ "Credits" , [ 1 , 2 , 3 , 4 ] , "credits" ] ]
16-
15+ [ "Credits" , [ "1" , "2" , "3" , "4" ] , "credits" ] ]
16+ const majors = [ [ "ARCH" , "LGHT" , "BMED" , "CHME" , "CIVL" , "ECSE" , "ENGR" , "ENVE" , "ECSI" , "ISYE" ] ,
17+ [ "MANE" , "MTLE" , "ARTS" , "COMM" , "IHSS" , "INQR" , "LANG" , "LITR" , "PHIL" ] ,
18+ [ "STDO" , "WRIT" , "COGS" , "ECON" , "GSAS" , "PSYC" , "ITWS" , "MGMT" , "ASTR" ] ,
19+ [ "BCBP" , "BIOL" , "CHEM" , "CSCI" , "ISCI" , "ERTH" , "MATH" , "MATP" , "PHYS" ] ]
1720 const {
1821 register,
1922 handleSubmit,
@@ -24,18 +27,20 @@ const PopUpMenu = ( {setFunction, validYears, clear, add} ) => {
2427 years : [ ] ,
2528 credits : [ ] ,
2629 hourlyPay : 0 ,
30+ majors : [ ]
2731 } ,
2832 } ) ;
2933
3034 interface FormData {
3135 semesters : string [ ] ,
3236 years : string [ ] ,
3337 credits : string [ ] ,
34- hourlyPay : string
38+ hourlyPay : string ,
39+ majors : string [ ]
3540 }
3641
3742 function submitHandler ( data : FormData ) {
38- const { semesters, years, credits, hourlyPay } = data ;
43+ const { semesters, years, credits, hourlyPay, majors } = data ;
3944 clear ( ) ;
4045 add ( semesters )
4146 add ( years )
@@ -45,7 +50,7 @@ const PopUpMenu = ( {setFunction, validYears, clear, add} ) => {
4550 } else {
4651 add ( [ hourlyPay ] )
4752 }
48-
53+ add ( majors )
4954 setFunction ( )
5055 } ;
5156
@@ -62,44 +67,67 @@ const PopUpMenu = ( {setFunction, validYears, clear, add} ) => {
6267 onSubmit = { handleSubmit ( ( data ) => {
6368 submitHandler ( data ) ;
6469 } ) }
65- className = "form-container" // Form container for vertical layout
66- >
67- < section className = "flex justify-center" >
68- { checkboxes . map ( ( filter ) => (
69- < div className = "w-1/3" key = { filter [ 2 ] } >
70- < CheckBox
71- errors = { errors }
72- errorMessage = { filter [ 2 ] + " checkbox failed" }
73- label = { filter [ 0 ] }
74- options = { filter [ 1 ] }
75- formHook = { { ...register ( filter [ 2 ] , { } ) } }
76- name = { filter [ 2 ] }
77- type = "checkbox"
78- />
79- </ div >
80- ) ) }
81- </ section >
82- < section className = "flex justify-center" >
83- < Input
84- errors = { errors }
85- label = "Minimum Hourly Pay"
86- name = { "hourlyPay" }
87- errorMessage = { "Hourly pay must be at least 0" }
88- formHook = { { ...register ( "hourlyPay" , { } ) } }
89- type = "number"
90- options = { [ ] }
91- placeHolder = "Enter minimum hourly pay"
92- />
70+ className = "form-container"
71+ > < section className = "flex flex-col max-h-96 overflow-y-auto" > { /* Added max-height and overflow-y-auto */ }
72+ < section className = "flex justify-center" >
73+ { checkboxes . map ( ( filter ) => (
74+ < div className = "w-1/3" key = { filter [ 2 ] } >
75+ < CheckBox
76+ errors = { errors }
77+ errorMessage = { filter [ 2 ] + " checkbox failed" }
78+ label = { filter [ 0 ] }
79+ options = { filter [ 1 ] }
80+ formHook = { { ...register ( filter [ 2 ] , { } ) } }
81+ name = { filter [ 2 ] }
82+ type = "checkbox"
83+ />
84+ </ div >
85+ ) ) }
86+ </ section >
87+ < section className = "flex justify-center" >
88+ < Input
89+ errors = { errors }
90+ label = "Minimum Hourly Pay"
91+ name = { "hourlyPay" }
92+ errorMessage = { "Hourly pay must be at least 0" }
93+ formHook = { { ...register ( "hourlyPay" , { } ) } }
94+ type = "number"
95+ options = { [ ] }
96+ placeHolder = "Enter minimum hourly pay"
97+ />
98+ </ section >
99+
100+ < section className = "pt-7 flex flex-col justify-center" >
101+ < h1 className = "font-semibold text-lg text-center" > Majors</ h1 >
102+ < section className = "flex justify-center" >
103+ { majors . map ( ( list , index ) => (
104+ < div className = "w-1/4 pl-7 pr-7" key = { "majors" + index } >
105+ < CheckBox
106+ errors = { errors }
107+ errorMessage = { "majors" + index + " checkbox failed" }
108+ options = { list }
109+ formHook = { { ...register ( "majors" , { } ) } }
110+ name = { "majors" + index }
111+ type = "checkbox"
112+ />
113+ </ div >
114+ ) ) }
115+ </ section >
116+ </ section >
93117 </ section >
94118
95119 < section className = "flex flex-row justify-center" >
96- < div className = "w-1/2 flex justify-center" >
120+ < div className = "w-1/3 flex justify-center" >
97121 < button type = "button" onClick = { setFunction } className = "btn btn-primary border-black text-gray-700 bg-white w-1/2 hover:text-gray-900 hover:bg-gray-200 hover:border-black focus:text-gray-900 focus:bg-gray-100 focus:border-black" > Cancel</ button >
98122 </ div >
99- < div className = "w-1/2 flex justify-center" >
123+ < div className = "w-1/3 flex justify-center" >
124+ < button type = "button" onClick = { ( ) => { reset ( ) ; setFunction ( ) ; } } className = "btn btn-primary border-black text-gray-700 bg-white w-1/2 hover:text-gray-900 hover:bg-gray-200 hover:border-black focus:text-gray-900 focus:bg-gray-100 focus:border-black" > Reset</ button >
125+ </ div >
126+ < div className = "w-1/3 flex justify-center" >
100127 < input type = "submit" value = "Search" className = "btn btn-primary bg-blue-700 text-gray-100 w-1/2 hover:bg-blue-800 focus:bg-blue-800" />
101128 </ div >
102129 </ section >
130+
103131 </ form >
104132 </ section >
105133 </ div >
@@ -115,16 +143,25 @@ PopUpMenu.propTypes = {
115143 validYears : PropTypes . arrayOf ( PropTypes . string ) ,
116144 clear : PropTypes . func . isRequired ,
117145 add : PropTypes . func . isRequired ,
146+ reset : PropTypes . func . isRequired
118147} ;
119148
120149const Posts = ( { years} ) => {
121150 const [ popUpMenu , setPopUpMenu ] = React . useState ( false ) ;
122151
152+ const date = new Date ( ) ;
153+ const month = date . getMonth ( ) ;
154+ const currSem = ( 0 <= month && month <= 5 ) ? "Spring" : ( 5 < month && month <= 8 ) ? "Summer" : "Fall" ;
155+ const currYr = date . getFullYear ( ) ;
156+
123157 const reducer = ( state , action ) => {
124158 switch ( action . type ) {
125159 case "CLEAR_FILTERS" :
126160 state . filters = [ [ ] , [ ] ] ;
127161 return { ...state } ;
162+ case "RESET_FILTERS" :
163+ state . filters = [ [ [ currSem ] , [ currYr ] , [ ] , [ ] , [ ] ] , [ currSem , currYr ] ] ;
164+ return { ...state } ;
128165 case "REMOVE_FILTER" :
129166 if ( action . filter ) {
130167 state . filters [ 1 ] = state . filters [ 1 ] . filter ( ( item ) => item !== action . filter ) ;
@@ -158,7 +195,7 @@ const Posts = ( {years} ) => {
158195 } ;
159196
160197 const [ jobState , dispatch ] = useReducer ( reducer , {
161- filters : [ [ ] , [ ] ] ,
198+ filters : [ [ [ currSem ] , [ currYr ] , [ ] , [ ] , [ ] ] , [ currSem , currYr ] ] ,
162199 activeId : "" ,
163200 jobs : [ ] ,
164201 } ) ;
@@ -167,6 +204,10 @@ const Posts = ( {years} ) => {
167204 dispatch ( { type : "CLEAR_FILTERS" } ) ;
168205 } , [ ] ) ;
169206
207+ const resetFilters = useCallback ( ( ) => {
208+ dispatch ( { type : "RESET_FILTERS" } ) ;
209+ } , [ ] ) ;
210+
170211 const removeFilter = useCallback ( ( name ) => {
171212 dispatch ( { type : "REMOVE_FILTER" , filter : name } ) ;
172213 } , [ ] ) ;
@@ -198,11 +239,11 @@ const Posts = ( {years} ) => {
198239 fetchOpportunities ( ) ;
199240 } , [ ] ) ;
200241
201-
242+ console . log ( )
202243 return (
203244 < section >
204- < FiltersField clearFilters = { clearFilters } deleteFilter = { removeFilter } filters = { jobState . filters } setPopUpMenu = { ( ) => setPopUpMenu ( ! popUpMenu ) } />
205- { popUpMenu && < PopUpMenu setFunction = { ( ) => setPopUpMenu ( ! popUpMenu ) } validYears = { years } clear = { clearFilters } add = { addFilter } /> }
245+ < FiltersField resetFilters = { resetFilters } deleteFilter = { removeFilter } filters = { jobState . filters } setPopUpMenu = { ( ) => setPopUpMenu ( ! popUpMenu ) } />
246+ { popUpMenu && < PopUpMenu setFunction = { ( ) => setPopUpMenu ( ! popUpMenu ) } validYears = { years } clear = { clearFilters } add = { addFilter } reset = { resetFilters } /> }
206247 < PostsField
207248 activeId = { jobState . activeId }
208249 setActive = { setActiveId }
0 commit comments