Skip to content

Commit 0d44002

Browse files
committed
feat: search page functionality
1 parent 590de2c commit 0d44002

File tree

5 files changed

+123
-12
lines changed

5 files changed

+123
-12
lines changed
Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,36 @@
1-
import React from 'react'
1+
/**
2+
* Single Course - Search Result Component
3+
*/
24

3-
const CourseResult = () => {
5+
// Dependencies
6+
import React from 'react';
7+
import { useNavigate } from 'react-router-dom';
8+
9+
import { Paper, styled, Typography, Grid } from '@mui/material';
10+
import LaunchIcon from '@mui/icons-material/Launch';
11+
12+
const CourseResult = ({ name, subjectCode, belongsTo }) => {
13+
const navigate = useNavigate();
14+
15+
const handleNavigate = () => {
16+
navigate(`/notes/${belongsTo}`);
17+
}
418
return (
5-
<div>CourseResult</div>
19+
<Grid item xs={12} onClick={handleNavigate}>
20+
<Main>
21+
<Typography variant='h6' noWrap>{name} - {subjectCode}</Typography>
22+
<LaunchIcon />
23+
</Main>
24+
</Grid>
625
)
726
}
827

28+
const Main = styled(Paper)({
29+
cursor: 'pointer',
30+
display: 'flex',
31+
alignItems: 'center',
32+
justifyContent: 'space-between',
33+
padding: '0.25em 0.75em',
34+
})
35+
936
export default CourseResult
Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
1-
import React from 'react'
1+
/**
2+
* Extra - Search Result Component
3+
*/
4+
5+
// Dependencies
6+
import React from 'react';
7+
import { useNavigate } from 'react-router-dom';
8+
9+
import { Paper, styled, Typography, Grid, Box } from '@mui/material';
10+
import LaunchIcon from '@mui/icons-material/Launch';
11+
12+
const ExtraNotesResult = ({ title, name }) => {
13+
14+
const navigate = useNavigate();
15+
16+
const handleNavigate = () => {
17+
navigate('/extra');
18+
}
219

3-
const ExtraNotesResult = () => {
420
return (
5-
<div>ExtraNotesResult</div>
21+
<Grid item xs={12} onClick={handleNavigate}>
22+
<Main>
23+
<Box>
24+
<Typography variant='h6' noWrap>{title}</Typography>
25+
<Typography variant='caption'>by {name}</Typography>
26+
</Box>
27+
<LaunchIcon />
28+
</Main>
29+
</Grid>
630
)
731
}
832

33+
const Main = styled(Paper)({
34+
cursor: 'pointer',
35+
display: 'flex',
36+
alignItems: 'center',
37+
justifyContent: 'space-between',
38+
padding: '0.25em 0.75em',
39+
})
40+
941
export default ExtraNotesResult

src/components/search/SemResult.jsx

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,39 @@
1-
import React from 'react'
1+
/**
2+
* All Semesters - Search Result Component
3+
*/
4+
5+
// Dependencies
6+
import React from 'react';
7+
import { useNavigate } from 'react-router-dom';
8+
9+
import { Paper, styled, Typography, Grid } from '@mui/material';
10+
import LaunchIcon from '@mui/icons-material/Launch';
11+
12+
const SemResult = ({ name }) => {
13+
const navigate = useNavigate();
14+
15+
const handleNavigate = () => {
16+
const semUrl = name.toLowerCase().replace(' ', '-');
17+
const navUrl = `/notes/${semUrl}`;
18+
navigate(navUrl);
19+
}
220

3-
const SemResult = () => {
421
return (
5-
<div>SemResult</div>
22+
<Grid item xs={12}>
23+
<Main elevation={3} onClick={handleNavigate}>
24+
<Typography variant='h6' noWrap>{name}</Typography>
25+
<LaunchIcon />
26+
</Main>
27+
</Grid>
628
)
729
}
830

9-
export default SemResult
31+
const Main = styled(Paper)({
32+
cursor: 'pointer',
33+
display: 'flex',
34+
alignItems: 'center',
35+
justifyContent: 'space-between',
36+
padding: '0.25em 0.75em',
37+
})
38+
39+
export default SemResult;

src/pages/Search.jsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@ import { useSearchParams, } from 'react-router-dom';
88
import Data from '../utils/data';
99

1010
// MUI
11-
import { Box, styled, Typography, Divider, TextField, Checkbox, Container, FormControlLabel, InputAdornment } from '@mui/material';
11+
import { Box, styled, Typography, Divider, TextField, Checkbox, Container, FormControlLabel, InputAdornment, Grid } from '@mui/material';
1212
import SearchIcon from '@mui/icons-material/Search';
1313

14+
import SemResult from '../components/search/SemResult';
15+
import ExtraNotesResult from '../components/search/ExtraNotesResult';
16+
import CourseResult from '../components/search/CourseResult';
17+
1418
const Search = () => {
1519
const [searchParams, setSearchParams] = useSearchParams();
1620
const [searchText, setSearchText] = useState(searchParams.get('q') || '');
@@ -51,6 +55,8 @@ const Search = () => {
5155
if (searchText.length !== 0) handleSearchResources();
5256
}, [searchText, filter]);
5357

58+
console.log(results)
59+
5460
const handleSearchInput = (e) => {
5561
setSearchText(e.target.value);
5662
}
@@ -93,6 +99,18 @@ const Search = () => {
9399
<FormControlLabel control={<Checkbox onChange={handleFilter('extraNotes')} />} label='Extra Notes' />
94100
{searchText.length > 0 && <Typography variant='caption' onClick={handleClearSearch} sx={{ color: 'red', textDecoration: 'underline', cursor: 'pointer' }}>Clear Search</Typography>}
95101
</Box>
102+
103+
<Grid container spacing={1} gap={1}>
104+
{results.length > 0 ? results.map((result, index) => {
105+
if (result.for === 'allSemesters') {
106+
return <SemResult {...result} key={index} />
107+
} else if (result.for === 'extraNotes') {
108+
return <ExtraNotesResult {...result} key={index} />
109+
} else if (result.for === 'course') {
110+
return <CourseResult {...result} key={index} />
111+
} else return null;
112+
}) : null}
113+
</Grid>
96114
</Container>
97115
</Main>
98116
)

src/utils/data.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,11 @@ class Data {
169169
searchRegEx.test(note.name) || searchRegEx.test(note.subjectCode)
170170
)
171171
});
172-
temp.forEach((note) => note.for = 'extraNotes')
172+
const belongsTo = 'semester-' + key.split('semester').pop();
173+
temp.forEach((note) => {
174+
note.for = 'course';
175+
note.belongsTo = belongsTo;
176+
})
173177
results.push(...temp);
174178
}
175179
})

0 commit comments

Comments
 (0)