From c53e847e28050ed591a34c3cc4e2bc74195ae2cd Mon Sep 17 00:00:00 2001 From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com> Date: Sun, 10 Jul 2022 16:02:45 -0500 Subject: [PATCH] modifying search function --- src/components/Navbar.jsx | 69 +++++++++++++------------ src/pages/AboutMe.jsx | 11 ++-- src/pages/Links.jsx | 4 +- src/pages/Projects.jsx | 99 +++++++++++++++++++++--------------- src/pages/Welcome.jsx | 4 +- src/sass/App.scss | 58 ++++++++++++++++----- src/sass/Navbar.scss | 93 +++++++++++++++++---------------- src/sass/pages/AboutMe.scss | 15 ++++++ src/sass/pages/Projects.scss | 7 --- src/styles/Style.js | 81 +++++------------------------ 10 files changed, 225 insertions(+), 216 deletions(-) diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx index 5031166..28fad2b 100644 --- a/src/components/Navbar.jsx +++ b/src/components/Navbar.jsx @@ -3,7 +3,20 @@ import { useEffect, useState } from "react" import { useNavigate } from "react-router-dom"; import MenuIcon from '@mui/icons-material/Menu'; +import { SidebarStyle } from "../styles/Style"; import '../sass/Navbar.scss'; +import { v4 } from "uuid"; + +const { background, list, listItem } = SidebarStyle; + +const navOptions = [ + "Home", + "About Me", + "My Projects", + "My Technologies", + "Links", + "Creative Work" +] export default function Navbar() { const [open, setOpen] = useState(false); @@ -12,6 +25,7 @@ export default function Navbar() { const navigate = useNavigate(); useEffect(() => { + setOpen(false); switch (selected) { case 0: navigate('/'); @@ -50,44 +64,29 @@ export default function Navbar() { - setOpen(false)}> - + setOpen(false)} + open={open} + > - setSelected(0)}> - Home - + - setSelected(1)}> - About me - + { + navOptions.map(each => { + let idx = navOptions.indexOf(each); + return ( + setSelected(idx)}> + {each} + + ) + }) + } - setSelected(2)}> - My Projects - - - setSelected(3)}> - My Technologies - - - setSelected(4)}> - Links - - - setSelected(5)}> - My Creative Work - diff --git a/src/pages/AboutMe.jsx b/src/pages/AboutMe.jsx index 3f2eeeb..3af48b8 100644 --- a/src/pages/AboutMe.jsx +++ b/src/pages/AboutMe.jsx @@ -4,14 +4,14 @@ import '../sass/pages/AboutMe.scss'; import Card from '@mui/material/Card'; const { htmlTheme } = DocumentStyle; -const { projectCards, cardDimensions, aboutGallery } = AboutMePage; +const { projectCards, cardDimensions } = AboutMePage; export default function AboutMe() { return (
-

What I Do:

+

What I Do

-
+

Create full stack web applications

I have experience building web applications with and without back-end integrations.

@@ -29,9 +29,8 @@ export default function AboutMe() {

Database Operations and Management

My projects have featured both relational and non-relational databases, in particular - PostgreSQL and MongoDB.

-

I also have experience with various technologies for connecting these to front-end applications, - including Prisma and Supabase.

+ PostgreSQL and MongoDB. I also have experience with various methods of connecting these + to front-end applications.

diff --git a/src/pages/Links.jsx b/src/pages/Links.jsx index 31edbf4..9588c75 100644 --- a/src/pages/Links.jsx +++ b/src/pages/Links.jsx @@ -2,14 +2,14 @@ import Card from '@mui/material/Card'; import { DocumentStyle } from '../styles/Style'; -const { htmlTheme, stockGallery } = DocumentStyle; +const { htmlTheme } = DocumentStyle; export default function Links() { return (

Find more about my work at the links below!

-
+
{/* An image here for a Github logo? */} My Github diff --git a/src/pages/Projects.jsx b/src/pages/Projects.jsx index 73f28ad..7d24dc0 100644 --- a/src/pages/Projects.jsx +++ b/src/pages/Projects.jsx @@ -15,32 +15,73 @@ const defaultFilter = { export default function Projects() { const [results, setResults] = useState(); const [filter, setFilter] = useState(defaultFilter); - const [panelStyle, setPanelStyle] = useState(''); + const [text, setText] = useState(); const searchInput = useRef(); const languageFilter = useRef(); - const projectPage = useRef(); useEffect(() => { - if (!filter) setResults(projectsArray.map(each => each.jsx)); + let result = []; - if (filter) { - let result = projectsArray; - if (filter.searchTerm) { - let termLower = filter.searchTerm.toLowerCase(); - result = result.filter(obj => obj.name.toLowerCase().includes(termLower)); - } - if (filter.language) { - let adjustedLang = ((filter.language === 'PostgreSQL' || filter.language === "Express") ? "PERN" : filter.language); - result = result.filter(obj => obj.languages.includes(adjustedLang)); - } - - if (filter.inProgress) result = result.filter(obj => !obj.inProgress); - - setResults(result.map(each => each.jsx)); + if (filter === defaultFilter) { + setResults(projectsArray.map(each => each.jsx)); + return; } + + if (filter.searchTerm) { + let termLower = filter.searchTerm.toLowerCase(); + + let i = 0; + while (i < text.length) { + for (let field of text[i].text) { + if (field.includes(termLower)) { + result.push(projectsArray[i]); + break; + } else { + continue; + } + } + i++; + } + } else if (filter.inProgress) { + result = result.filter(obj => !obj.inProgress); + } + + setResults(result.map(each => each.jsx)); }, [filter]); + useEffect(() => { + let projectText = []; + let i = 0; + while (i < projectsArray.length) { + let project = { + projectID: i, + text: [] + } + + for (let each of projectsArray[i].jsx.props.children) { + if (Array.isArray(each.props.children)) { + for (let nested of each.props.children) { + if (typeof nested === 'string') { + const newText = nested.toLowerCase(); + project.text.push(newText); + } else { + const newText = nested.props.children.toLowerCase(); + project.text.push(newText); + } + } + } else { + const newText = each.props.children.toLowerCase(); + project.text.push(newText); + } + } + + projectText.push(project); + i++; + } + setText(projectText); + }, []) + const handleChange = (e) => { e.preventDefault(); setFilter({ @@ -55,33 +96,11 @@ export default function Projects() { languageFilter.current.value = ''; } - useEffect(() => { - const handleScroll = (e) => { - let position = window.scrollY; - - if (position > 150) { - setPanelStyle("filter-anim-one"); - } else { - setPanelStyle(""); - } - } - - window.addEventListener('scroll', handleScroll); - - return () => { - window.removeEventListener('scroll', handleScroll); - } - }, []); - - useEffect(() => { - console.log(panelStyle); - }, [panelStyle]); - return (

Check out these projects from my portfolio!

-
+

Filter by: