import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { SearchIcon, XIcon } from '@primer/octicons-react'; import { icons, categorizedSkills } from '../constants/skills'; const Skills = (props) => { const { skills, handleSkillsChange } = props; const [search, setSearch] = useState(''); const [debounce, setDebounce] = useState(undefined); const inputRef = React.createRef(); const createSkill = (skill) => (
); const onSearchChange = (value) => { const callback = () => { setSearch(value); }; clearTimeout(debounce); setDebounce(setTimeout(callback, 50)); }; return (
Skills
onSearchChange(e.target.value)} className="leading:none text-xs my-0 py-1 px-2 pr-8 sm:text-xl border-2 border-gray-900 focus:border-blue-700 placeholder-gray-700" placeholder="Search Skills" ref={inputRef} /> {search !== '' ? ( ) : ( )}
{Object.keys(categorizedSkills) .filter((key) => { const filtered = categorizedSkills[key].skills.filter((skill) => skill.includes(search.toLowerCase())); return filtered.length !== 0; }) .map((key) => (
{categorizedSkills[key].title}
{categorizedSkills[key].skills.filter((skill) => skill.includes(search.toLowerCase())).map((skill) => createSkill(skill))}
))} {Object.keys(categorizedSkills).filter((key) => { const filtered = categorizedSkills[key].skills.filter((skill) => skill.includes(search.toLowerCase())); return filtered.length !== 0; }).length === 0 ? 'No Results Found' : ''}
); }; export default Skills; Skills.propTypes = { skills: PropTypes.array.isRequired, handleSkillsChange: PropTypes.func.isRequired, };