Skip to content

Commit e72fc7b

Browse files
committed
modified: src/opportunities/components/FiltersField.tsx
modified: src/opportunities/components/Posts.tsx modified: src/opportunities/pages/Jobs.tsx
1 parent 419b566 commit e72fc7b

File tree

3 files changed

+89
-47
lines changed

3 files changed

+89
-47
lines changed

src/opportunities/components/FiltersField.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { PiSlidersHorizontal } from "react-icons/pi";
77
import { MdCancel } from "react-icons/md";
88
import PropTypes from "prop-types";
99

10-
const FiltersField = ({ clearFilters, deleteFilter, filters, setPopUpMenu }) => {
10+
const FiltersField = ({ resetFilters, deleteFilter, filters, setPopUpMenu }) => {
1111

1212
return (
1313
<div>
@@ -17,9 +17,9 @@ const FiltersField = ({ clearFilters, deleteFilter, filters, setPopUpMenu }) =>
1717
<SearchBar />
1818

1919
<SmallTextButton className="" onClick={setPopUpMenu} special={true}>
20-
<PiSlidersHorizontal />
21-
All Filters
22-
<PiSlidersHorizontal />
20+
<PiSlidersHorizontal className="pr-1"/>
21+
Change Filters
22+
<PiSlidersHorizontal className="pl-1"/>
2323
</SmallTextButton>
2424

2525
{/* Fix rendering with new filters = [ [],[],[] ]*/}
@@ -39,8 +39,8 @@ const FiltersField = ({ clearFilters, deleteFilter, filters, setPopUpMenu }) =>
3939
</GroupedComponents>
4040
</div>
4141

42-
<SmallTextButton className="flex flex-right" onClick={clearFilters} special={true}>
43-
Clear
42+
<SmallTextButton className="flex flex-right" onClick={resetFilters} special={true}>
43+
Reset
4444
</SmallTextButton>
4545
</div>
4646
<hr />
@@ -49,7 +49,7 @@ const FiltersField = ({ clearFilters, deleteFilter, filters, setPopUpMenu }) =>
4949
};
5050

5151
FiltersField.propTypes = {
52-
clearFilters: PropTypes.func.isRequired,
52+
resetFilters: PropTypes.func.isRequired,
5353
deleteFilter: PropTypes.func.isRequired,
5454
filters: PropTypes.arrayOf(PropTypes.array),
5555
setPopUpMenu: PropTypes.func.isRequired,

src/opportunities/components/Posts.tsx

Lines changed: 81 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ import CheckBox from "../../staff/components/Checkbox.tsx";
99
import PropTypes from "prop-types";
1010
import 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

120149
const 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}

src/opportunities/pages/Jobs.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const Jobs = () => {
1919
}
2020
}
2121
fetchYears()
22+
2223
const [pages, switchPage] = usePageNavigation(["Search", "Saved"], "Search");
2324

2425
return loading === false && years != null ? (

0 commit comments

Comments
 (0)