diff --git a/components/browseArchives/index.js b/components/browseArchives/index.js index 48d0f44..99594a6 100644 --- a/components/browseArchives/index.js +++ b/components/browseArchives/index.js @@ -1,4 +1,5 @@ import React from 'react'; +import _ from 'lodash'; import RelatedInterviewsList from '../interviews/relatedInterviewsList'; import InterviewsList from '../interviews/interviewsList'; import SingleInterview from '../interviews/singleInterview'; @@ -6,7 +7,7 @@ import TopicsList from '../topicsList'; import ProjectsList from '../projectsList'; import SearchBar from '../searchBar'; import SearchResults from '../searchResults'; -import Data from '../../data/archives/interviews'; +import InterviewsData from '../../data/archives/interviews'; import './style.scss'; class BrowseArchives extends React.Component { @@ -15,18 +16,24 @@ class BrowseArchives extends React.Component { this.state = { term: '', + searchResults: [], isSingleInterviewModalOpen: false, isInterviewsListModalOpen: false, activeSingleInterviewId: 1, isSearchActive: false, }; - this.onInputChange = this.onInputChange.bind(this); + this.onSearchInputChange = this.onSearchInputChange.bind(this); this.toggleSingleInterview = this.toggleSingleInterview.bind(this); this.toggleInterviewsListModal = this.toggleInterviewsListModal.bind(this); + this.setSearchTerm = this.setSearchTerm.bind(this); + this.clearSearchInput = this.clearSearchInput.bind(this); } - onInputChange(event) { + onSearchInputChange = (event) => { + const { term } = this.state; + const getSearchResults = _.debounce(() => { this.getSearchResults(term); }, 500); + this.setState({ term: event.target.value, isSearchActive: true, @@ -35,15 +42,42 @@ class BrowseArchives extends React.Component { if (event.target.value.length === 0) { this.setState({ isSearchActive: false }); } + + // Throttle search result frequency with debounce + getSearchResults(term); } - getSelectedInterview() { + getSearchResults = (term) => { + // Edit function to do actual search based on term and update searchResults with dynamic data + // eslint-disable-next-line + console.log(`Get search results array based on searching for: ${term}`); + + this.setState({ + searchResults: InterviewsData, + }); + } + + getSelectedInterview = () => { const { activeSingleInterviewId } = this.state; - const selectedInterview = Data.find(item => item.id === activeSingleInterviewId); + const selectedInterview = InterviewsData.find(item => item.id === activeSingleInterviewId); return selectedInterview; } - toggleInterviewsListModal() { + setSearchTerm = (event) => { + this.setState({ + term: event.target.innerText, + isSearchActive: true, + }); + } + + clearSearchInput = () => { + this.setState({ + isSearchActive: false, + term: '', + }); + } + + toggleInterviewsListModal = () => { const { isInterviewsListModalOpen } = this.state; this.setState({ @@ -52,13 +86,19 @@ class BrowseArchives extends React.Component { }); } - toggleSingleInterview(event) { + toggleSingleInterview = (event) => { const { isSingleInterviewModalOpen, isInterviewsListModalOpen } = this.state; + let clickedInterview = event.target; + while (clickedInterview.id === '') { + clickedInterview = clickedInterview.parentNode; + } + const clickedSingleInterviewId = clickedInterview.id; + this.setState({ isInterviewsListModalOpen: !isInterviewsListModalOpen, isSingleInterviewModalOpen: !isSingleInterviewModalOpen, - activeSingleInterviewId: Number(event.target.id), + activeSingleInterviewId: Number(clickedSingleInterviewId), }); } @@ -69,32 +109,42 @@ class BrowseArchives extends React.Component { isSearchActive, activeSingleInterviewId, term, + searchResults, } = this.state; return (
Search results go here
-+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce hendrerit dolor quis + ante mollis fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing + elit. +
+