{"version":3,"sources":["assets/logo.png","utils/savetoMongo.js","utils/resultHandler.js","utils/SearchBar.js","Home.js","utils/ResultCard.js","utils/NewsCard.js","utils/VideoCard.js","utils/ImageCard.js","Search.js","index.js"],"names":["saveToMongo","searchText","data","fetch","method","mode","body","JSON","stringify","headers","then","res","console","log","catch","err","storeData","result","type","page","query","localStorage","setItem","SearchBar","props","state","getItem","collapse","searchButton","activeSuggestion","filteredSuggestions","showSuggestions","handleKeyPress","e","key","webSearch","handleTextChange","setState","target","value","fetchSuggestions","a","searchString","encodeURIComponent","apiURL","json","webResults","webPages","window","location","bind","response","suggestions","suggestionGroups","searchSuggestions","map","item","push","displayText","length","this","display","style","fontSize","fontWeight","color","cursor","onClick","setInput","marginRight","position","backgroundColor","width","overflowY","boxShadow","borderBottomLeftRadius","borderBottomRightRadius","paddingTop","zIndex","Grid","lg","className","FormControl","fullWidth","onSubmit","search","Input","placeholder","id","onKeyPress","onChange","autoComplete","onFocus","endAdornment","InputAdornment","IconButton","Component","Home","removeItem","Container","Row","Col","marginTop","href","src","require","default","alt","outline","border","background","ResultCard","dataFromParent","url","name","replace","rel","displayUrl","snippet","NewsCard","description","VideoCard","class","thumbnailUrl","hostPageUrl","ImageCard","textAlign","verticalAlign","padding","textDecoration","Search","newsSearch","newsResults","imageSearch","imageResults","videoSearch","parse","parseInt","minPage","paginationArray","i","details","xs","margin","sm","marginBottom","flexDirection","paginationSearch","number","ReactDOM","render","exact","path","document","getElementById"],"mappings":"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","file":"static/js/main.811a7313.chunk.js","sourcesContent":["export default \"data:image/png;base64,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\"","const saveToMongo = (searchText) => {\n\n    const data = { \"searchString\": searchText };\n    fetch(\"https://dufodufo.com:4443\", {\n        method: \"POST\",\n        mode: \"cors\",\n        body: JSON.stringify(data),\n        headers: {\n        \"content-type\": \"application/json\",\n        },\n\n    })\n    .then((res) => {\n        console.log(res);\n    })\n    .catch((err) => {\n        console.log(err);\n    });\n}\n\nexport default saveToMongo","const storeData = (result, type, page, query) => {\n    localStorage.setItem('searchResults', JSON.stringify(result))\n    localStorage.setItem(\"searchResultsType\", type)\n    localStorage.setItem(\"searchedPage\", page)\n    localStorage.setItem(\"searchText\", query)\n}\n\nconst getData = () => {\n    return [\n        JSON.parse(localStorage.getItem('searchResults')),\n        localStorage.getItem(\"searchResultsType\"),\n        parseInt(localStorage.getItem(\"searchedPage\")),\n        localStorage.getItem(\"searchText\")\n    ]\n}\n\nconst clearData = () => {\n    localStorage.removeItem('searchResults')\n    localStorage.removeItem(\"searchResultsType\")\n    localStorage.removeItem(\"searchedPage\")\n    localStorage.removeItem(\"searchText\")\n}\n\nexport {\n    storeData,\n    getData,\n    clearData\n}","import React, { Component } from \"react\";\nimport \"../assets/main.css\";\nimport {\n  Grid,\n  Input,\n  FormControl,\n//   TextField\n} from \"@material-ui/core\";\nimport saveToMongo from \"./savetoMongo\";\nimport { storeData } from './resultHandler'\nimport SearchIcon from '@material-ui/icons/SearchOutlined';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\n\n// import { Container } from \"react-bootstrap\";\n// import { browserHistory } from \"react-router\";\n// import { dataService } from \"./dataService\";\n// import { apiKey } from \"../assets/apiKey\";\n\n// function saveToMongo(searchText) {\n//   const data = { \"searchString\": searchText };\n//   fetch(\"https://dufodufo.com:4443\", {\n//     method: \"POST\",\n//     mode: \"cors\",\n//     body: JSON.stringify(data),\n//     headers: {\n//       \"content-type\": \"application/json\",\n//     },\n    \n//   })\n//     .then((res) => {\n//       console.log(res);\n//     })\n//     .catch((err) => {\n//       console.log(err);\n//     });\n// }\n\nclass SearchBar extends Component {\n  state = {\n    searchText: localStorage.getItem('searchText') ? localStorage.getItem('searchText'): \"\",\n    collapse: false,\n    searchButton: true,\n    activeSuggestion: 0,\n    filteredSuggestions: [],\n    showSuggestions: false,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.fetchSuggestions = this.fetchSuggestions.bind(this)\n    // this.search = this.search.bind(this);\n    // let params = new URLSearchParams(\n    //   browserHistory.getCurrentLocation().search\n    // ).get(\"searchText\");\n    // console.log(\"Params at searchBar => \", params)\n    // this.searchText = params ? params.split(\"=\")[0].split(\"?\")[0] : null;\n    // this.state.searchText = this.searchText;\n    // this.setInput = this.setInput.bind(this)\n  }\n\n  handleKeyPress = (e) => {\n    console.log(\"Key pressed => \", e.key)\n    if (e.key === \"Enter\") {\n      this.webSearch(1);\n    }\n  };\n\n  fetchSuggestions(query) {\n    fetch('https://api.bing.microsoft.com/v7.0/suggestions?q='+ encodeURIComponent(query), {\n        headers: {\n            'Ocp-Apim-Subscription-Key': 'ab553acd4424436096d4ef3b183b46ec'\n        }, \n        method: 'GET'\n    })\n    .then(res => res.json())\n    .then(response => {\n        // console.log(\"Suggestions are ===> \", JSON.stringify(response.suggestionGroups[0].searchSuggestions))\n        let suggestions = response.suggestionGroups[0].searchSuggestions\n        let filteredSuggestions = []\n        suggestions.map(item => {\n            filteredSuggestions.push({\"displayText\": item.displayText, query: item.query})\n        })\n        if(filteredSuggestions.length === 0) {\n            this.setState({\n                showSuggestions: false\n            })\n        }\n        else {\n            this.setState({\n                filteredSuggestions: filteredSuggestions,\n                showSuggestions: true\n            })\n        }\n    })\n  }\n\n  handleTextChange = (e) => {\n    this.setState({ searchText: e.target.value });\n      this.fetchSuggestions(e.target.value)\n  };\n\n  webSearch = async (page) => {\n    console.log(\"Web search ===> \", this.state.searchText);\n    let apiURL = \"https://api.bing.microsoft.com/\";\n    let headers = { \"Ocp-Apim-Subscription-Key\": 'ab553acd4424436096d4ef3b183b46ec' };\n    let searchString = encodeURIComponent(this.state.searchText);\n    if (this.state.searchText) {\n      saveToMongo(this.state.searchText);\n      fetch(apiURL + \"v7.0/search?responseFilter=webpages&q=\" + searchString+\"&offset=\"+((page - 1) * 10), {\n        headers,\n      }).then((res) => {\n        res.json().then((json) => {\n            // console.log(\"Web results => \", JSON.stringify(json.webPages.value))\n            // store type of results, result, current page\n\n            let webResults = json.webPages.value\n            let resultType = \"web\"\n            let currentpage = page\n\n            // storeData()\n            storeData(webResults, resultType, currentpage, this.state.searchText)\n\n            // redirect to the new page to display the results\n            window.location = '/search'\n        });\n      });\n    }\n  };\n\n//   imagesearch = () => {\n//     console.log(\"image clicked\");\n//     let imageApiURL = \"https://bing-image-search1.p.rapidapi.com/images/search\";\n//     let headers = {\n//       'x-rapidapi-key': '3fe9872e94mshf148b0071798372p1b8684jsndae02e4e3799',\n//       'x-rapidapi-host': 'bing-image-search1.p.rapidapi.com'\n//     }\n//     let searchString = encodeURIComponent(this.state.searchText);\n//     if (this.state.searchText) {\n//       saveToMongo(this.state.searchText);\n//       fetch(imageApiURL+\"?q=\"+searchString, {\n//         headers,\n//         method: 'GET'\n//       })\n//       .then(res => res.json())\n//       .then(jsonResponse => {\n//         // console.log(jsonResponse)\n//         let resultsId = Math.random();\n//         let resultsKey = \"results\" + resultsId;\n//         let resultType = \"image\"\n//         if(this.state.searchText) {\n//           let dataObject = {\n//             searchText: this.state.searchText,\n//             currPage: 1,\n//             resultsKey: resultsKey,\n//             resultsId: resultsId,\n//             resultsType: resultType\n//           };\n//           console.log(\"Image stored in ===> \", resultsId)\n//           dataObject[resultsKey] = jsonResponse.value ? jsonResponse.value : null;\n//           dataService.setData(dataObject);\n//         }\n//         let redirectObj = {\n//           pathname: \"/search\",\n//           search:\n//             \"?searchText=\" +\n//             encodeURIComponent(this.state.searchText) +\n//             \"?resultsId=\" +\n//             encodeURIComponent(resultsId) +\n//             \"?currPage=\" +\n//             encodeURIComponent(1),\n//         };\n//         browserHistory.push(redirectObj);\n//         window.location.reload(false);\n//       })\n//     }\n//   }\n\n//   newssearch = () => {\n//     console.log(\"news clicked\");\n//     let newsApiURL = \"https://bing-news-search1.p.rapidapi.com/news/search\";\n//     let headers = {\n//       'x-bingapis-sdk': 'true',\n//       'x-rapidapi-key': '3fe9872e94mshf148b0071798372p1b8684jsndae02e4e3799',\n//       'x-rapidapi-host': 'bing-news-search1.p.rapidapi.com'\n//     }\n//     let searchString = encodeURIComponent(this.state.searchText);\n//     if (this.state.searchText) {\n//       saveToMongo(this.state.searchText);\n//       fetch(newsApiURL+\"?q=\"+searchString+\"&safeSearch=Off&textFormat=Raw&freshness=Day\", {\n//         headers,\n//         method: 'GET'\n//       })\n//       .then(res => res.json())\n//       .then(jsonResponse => {\n//         // console.log(jsonResponse)\n//         let resultsId = Math.random();\n//         let resultsKey = \"results\" + resultsId;\n//         let resultType = \"news\"\n//         if(this.state.searchText) {\n//           let dataObject = {\n//             searchText: this.state.searchText,\n//             currPage: 1,\n//             resultsKey: resultsKey,\n//             resultsId: resultsId,\n//             resultsType: resultType\n//           };\n//           console.log(\"News stored in ===> \", resultsId)\n//           dataObject[resultsKey] = jsonResponse.value ? jsonResponse.value : null;\n//           dataService.setData(dataObject);\n//         }\n//         let redirectObj = {\n//           pathname: \"/search\",\n//           search:\n//             \"?searchText=\" +\n//             encodeURIComponent(this.state.searchText) +\n//             \"?resultsId=\" +\n//             encodeURIComponent(resultsId) +\n//             \"?currPage=\" +\n//             encodeURIComponent(1),\n//         };\n//         browserHistory.push(redirectObj);\n//         window.location.reload(false);\n//       })\n//     }\n//   }\n\n  setInput(data){\n    this.setState({\n      searchText: data,\n    //   showSuggestions: false\n    }, () => {\n        this.webSearch(1)\n    })\n  }\n\n  render() {\n    let suggestions = \"\", display = \"\"\n    // console.log(\"Searching for  ===> \", this.state.searchText)\n    if(this.state.showSuggestions) {\n        suggestions = this.state.filteredSuggestions.map(item => {\n            return <ul style={{fontSize: 16, fontWeight: 'bold', color: '#33333d', cursor: 'pointer'}} onClick={() => {this.setInput(item.query)}}><SearchIcon style={{marginRight: 12}}/>{item.displayText}</ul>\n        })\n        \n        display = <div style={{position: 'absolute', backgroundColor: '#fff', width: '100%', overflowY: 'none', boxShadow: \"5px 10px 18px #888888\", borderBottomLeftRadius: '20px', borderBottomRightRadius: '20px', paddingTop: 20, zIndex: 11111}}>{suggestions}</div>\n    }\n\n    // // console.log(\"Suggestions are => \", this.state.filteredSuggestions)\n    // let button;\n    // if (browserHistory.getCurrentLocation().pathname === \"/\") {\n    //   button = (\n    //     <div>\n    //     <button type=\"button\" className=\"s-button\" onClick={this.search}>\n    //       Web Search\n    //     </button>\n    //     <button type=\"button\" className=\"s-button\" onClick={this.imagesearch}>\n    //     Image Search\n    //   </button>\n    //   <button type=\"button\" className=\"s-button\" onClick={this.newssearch}>\n    //     News Search\n    //   </button>\n    //   </div>\n    //   );\n    // } else {\n    //   button = null;\n    // }\n    return (\n        <Grid item lg={6} className=\"search-bar\">\n          <FormControl type=\"search\" fullWidth={true} onSubmit={this.search} >\n            <Input\n              placeholder=\"Type anything here\"\n              value={this.state.searchText ? this.state.searchText : \"\"}\n              type=\"search\"\n              id=\"searchBar\"\n              onKeyPress={this.handleKeyPress}\n              onChange={this.handleTextChange}\n              autoComplete={'off'}\n              onFocus={() => this.fetchSuggestions(this.state.searchText)}\n              endAdornment={\n                <InputAdornment position=\"end\">\n                  <IconButton\n                    aria-label=\"toggle password visibility\"\n                    onClick={() => this.webSearch(1)}\n                  >\n                    <SearchIcon />\n                  </IconButton>\n                </InputAdornment>\n              }\n            />\n            <div>\n            {display}\n            </div>\n          </FormControl>\n        </Grid>\n    );\n  }\n}\n\nexport default SearchBar;\n","import React, { Component } from \"react\";\nimport \"./assets/main.css\";\nimport SearchBar from \"./utils/SearchBar\";\nimport {Container, Col, Row} from 'react-bootstrap'\nimport {storeData, clearData} from './utils/resultHandler'\nimport SearchIcon from '@material-ui/icons/SearchOutlined';\nimport saveToMongo from \"./utils/savetoMongo\";\n\nclass Home extends Component {\n\n    constructor(props) {\n        super(props)\n        clearData()\n\n        this.state = {\n            searchText: \"\"\n        }\n    }\n\n    webSearch = async (page) => {\n        console.log(\"Web search ===> \", this.state.searchText);\n        let apiURL = \"https://api.bing.microsoft.com/\";\n        let headers = { \"Ocp-Apim-Subscription-Key\": 'ab553acd4424436096d4ef3b183b46ec' };\n        let searchString = encodeURIComponent(this.state.searchText);\n        if (this.state.searchText) {\n          saveToMongo(this.state.searchText);\n          fetch(apiURL + \"v7.0/search?responseFilter=webpages&q=\" + searchString+\"&offset=\"+((page - 1) * 10), {\n            headers,\n          }).then((res) => {\n            res.json().then((json) => {\n                // console.log(\"Web results => \", JSON.stringify(json.webPages.value))\n                // store type of results, result, current page\n    \n                let webResults = json.webPages.value\n                let resultType = \"web\"\n                let currentpage = page\n    \n                // storeData()\n                storeData(webResults, resultType, currentpage, this.state.searchText)\n    \n                // redirect to the new page to display the results\n                window.location = '/search'\n            });\n          });\n        }\n      };\n\n    render() {\n        return(\n            <Container>\n                <Row>\n                    <Col style={{marginTop: '10%'}}>\n                        <div className=\"logo\">\n                            <a href=\"/\">\n                                <img src={require('./assets/logo.png').default} alt=\"logo\" />\n                            </a>\n                        </div>\n                        <div className=\"search-container\">\n                            <SearchBar />\n                        </div>\n                        <a onClick={() => {\n                                    // this.type = \"news\"\n                                    this.webSearch(1)\n                                }}><div className={\"main-s-button\"}>\n                                <SearchIcon />\n                                <button type=\"button\"  style={{outline: 'none', border: 'none', background: 'transparent'}}>\n                                    Search\n                                </button>\n                            </div></a>\n                    </Col>\n                </Row>\n            </Container>\n            // <div className=\"body-container\">\n            //     <div className=\"row logo-home-container\">\n            //         <div className=\"col-md-12\">\n            //             <div className=\"logo\">\n            //                 <a href=\"/\">\n            //                     <img src={require('./assets/logo.png').default} alt=\"logo\" />\n            //                 </a>\n            //             </div>\n            //         </div>\n            //     </div>\n            //     <div className=\"search-container\">\n            //         <SearchBar />\n            //     </div>\n            // </div>\n        )\n    }\n}\n\nexport default Home\n","import React, { Component } from \"react\";\nimport \"../assets/main.css\";\n\nclass ResultCard extends Component {\n    state = {};\n    constructor(props) {\n        super(props);\n        this.data = this.props.dataFromParent;\n    }\n\n    render() {\n        return (\n            <div className=\"result-card\">\n                <div>\n                    <a className=\"link-text\" href={this.data.url}>{this.data.name.replace(/<[^>]*>?/gm, '')}</a>\n                </div>\n                <div>\n                    <a target=\"_blank\" rel=\"noopener noreferrer\" className=\"result-title\" href={this.data.url}>{this.data.displayUrl.replace(/<[^>]*>?/gm, '')}</a>\n                </div>\n                <div>\n                    <span className=\"result-description\">{this.data.snippet.replace(/<[^>]*>?/gm, '')}</span>\n                </div>\n            </div>\n        );\n    }\n}\nexport default ResultCard;\n","import React, { Component } from \"react\";\nimport \"../assets/main.css\";\n\nclass NewsCard extends Component {\n    state = {};\n    constructor(props) {\n        super(props);\n        this.data = this.props.dataFromParent;\n    }\n\n    render() {\n        return (\n            <div className=\"result-card\">\n                <div>\n                    <a className=\"link-text\" href={this.data.url}>{this.data.name.replace(/<[^>]*>?/gm, '')}</a>\n                </div>\n                <div>\n                    <a target=\"_blank\" rel=\"noopener noreferrer\" className=\"result-title\" href={this.data.url}>{this.data.url.replace(/<[^>]*>?/gm, '')}</a>\n                </div>\n                <div>\n                    <span className=\"result-description\">{this.data.description.replace(/<[^>]*>?/gm, '')}</span>\n                </div>\n            </div>\n        );\n    }\n}\nexport default NewsCard;\n","import React, { Component } from \"react\";\nimport \"../assets/main.css\";\n\nclass VideoCard extends Component {\n    state = {};\n    constructor(props) {\n        super(props);\n        this.data = this.props.dataFromParent;\n        // console.log(\"Video data => \", this.data.motionThumbnailUrl)\n    }\n\n    render() {\n        return (\n            // <div className=\"result-card\">\n            //     <div>\n            //         <a className=\"link-text\" href={this.data.url}>{this.data.name.replace(/<[^>]*>?/gm, '')}</a>\n            //     </div>\n            //     <div>\n            //         <a target=\"_blank\" rel=\"noopener noreferrer\" className=\"result-title\" href={this.data.url}>{this.data.displayUrl.replace(/<[^>]*>?/gm, '')}</a>\n            //     </div>\n            //     <div>\n            //         <span className=\"result-description\">{this.data.snippet.replace(/<[^>]*>?/gm, '')}</span>\n            //     </div>\n            // </div>\n            <div class=\"flex-container\">\n                <div class=\"video-image\">\n                    <img src={this.data.thumbnailUrl} alt={this.data.name} />\n                </div>\n                <div>\n                    <div>\n                        <a className=\"link-text-video\" href={this.data.hostPageUrl}>{this.data.name.replace(/<[^>]*>?/gm, '')}</a>\n                    </div>\n                    <div>\n                        <a target=\"_blank\" rel=\"noopener noreferrer\" className=\"result-title\" href={this.data.hostPageUrl}>{this.data.hostPageUrl.replace(/<[^>]*>?/gm, '')}</a>\n                    </div>\n                    <div>\n                        {/* <span className=\"result-description\">{this.data.description.replace(/<[^>]*>?/gm, '')}</span> */}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\nexport default VideoCard;\n","import React, { Component } from \"react\";\nimport \"../assets/main.css\";\n\nclass ImageCard extends Component {\n    state = {};\n    constructor(props) {\n        super(props);\n        this.data = this.props.dataFromParent\n    }\n\n    render() {\n        return (\n            <a href={this.data.hostPageUrl} className=\"img-container\">\n                <img src={this.data.thumbnailUrl} alt={this.data.name}/>\n                <div className=\"img-description\">\n                    <span style={{color: '#fff', textAlign: 'center', display: 'inline-block', verticalAlign: 'middle', padding: 5, fontSize: 10}}>{this.data.name}{'\\n'}</span>\n                    <a href={this.data.hostPageUrl} style={{color: '#fff',display: 'inline-block', verticalAlign: 'middle', padding: 5, textDecoration: 'none', fontSize: 6}}>{this.data.hostPageUrl}</a>\n                </div>\n            </a>\n        );\n    }\n}\nexport default ImageCard;\n","import React, { Component } from \"react\";\nimport SearchBar from \"./utils/SearchBar\";\nimport \"./assets/main.css\";\nimport {Container, Col, Row} from 'react-bootstrap'\nimport {storeData, getData} from './utils/resultHandler'\nimport ResultCard from \"./utils/ResultCard\";\nimport NewsCard from \"./utils/NewsCard\";\nimport saveToMongo from \"./utils/savetoMongo\";\nimport ImageList from '@material-ui/core/ImageList';\nimport ImageListItem from '@material-ui/core/ImageListItem';\nimport ImageListItemBar from '@material-ui/core/ImageListItemBar';\nimport SearchIcon from '@material-ui/icons/SearchOutlined';\nimport ImageIcon from '@material-ui/icons/ImageOutlined'\nimport NewsIcon from '@material-ui/icons/AnnouncementOutlined'\nimport VideoIcon from '@material-ui/icons/Videocam'\nimport VideoCard from './utils/VideoCard'\nimport ImageCard from './utils/ImageCard'\n\nclass Search extends Component {\n\n    constructor(props) {\n        super(props)\n\n        let [ result, type, page, query ] = getData()\n        this.result = result\n        this.type = type\n        this.page = page\n        this.searchText = query\n        // console.log(\"type => \", this.searchText)\n\n\n        let minPage = (this.page - 2 > 0) ? this.page - 2 : 1;\n        // console.log(\"minPage ===> \", minPage, typeof(minPage))\n        this.paginationArray = [];\n        for (let i = 0; i < 5; i++) {\n            this.paginationArray.push(minPage + i);\n        }\n\n        this.state = {\n            searchText: this.searchText\n        }\n    }\n\n    paginationSearch(page) {\n        if(this.type === \"web\") {\n            this.webSearch(page)\n        } else if(this.type === \"image\") {\n            this.imageSearch(page)\n        } else if(this.type === \"news\") {\n            this.newsSearch(page)\n        } else if(this.type === \"video\") {\n            this.videoSearch(page)\n        }\n    }\n\n    webSearch = async (page) => {\n        console.log(\"Web search ===> \", this.state.searchText);\n        let apiURL = \"https://api.bing.microsoft.com/\";\n        let headers = { \"Ocp-Apim-Subscription-Key\": 'ab553acd4424436096d4ef3b183b46ec' };\n        let searchString = encodeURIComponent(this.state.searchText);\n        if (this.state.searchText) {\n          saveToMongo(this.state.searchText);\n          fetch(apiURL + \"v7.0/search?responseFilter=webpages&q=\" + searchString+\"&offset=\"+((page - 1) * 10), {\n            headers,\n          }).then((res) => {\n            res.json().then((json) => {\n                // console.log(\"Web results => \", JSON.stringify(json.webPages.value))\n                // store type of results, result, current page\n    \n                let webResults = json.webPages.value\n                let resultType = \"web\"\n                let currentpage = page\n    \n                // storeData()\n                storeData(webResults, resultType, currentpage, this.state.searchText)\n    \n                // redirect to the new page to display the results\n                window.location = '/search'\n            });\n          });\n        }\n      };\n\n    newsSearch = async (page) => {\n        console.log(\"News search ===> \", this.state.searchText) \n        let apiURL = \"https://bing-news-search1.p.rapidapi.com/news/search\"+\"?q=\"+encodeURIComponent(this.state.searchText)+\"&safeSearch=Off&textFormat=Raw&freshness=Day&offset=\" + ((page - 1) * 10);\n        let headers = {\n            'x-bingapis-sdk': 'true',\n            'x-rapidapi-key': '3fe9872e94mshf148b0071798372p1b8684jsndae02e4e3799',\n            'x-rapidapi-host': 'bing-news-search1.p.rapidapi.com'\n        }\n        // let searchString = encodeURIComponent(this.state.searchText);\n        if (this.state.searchText) {\n            saveToMongo(this.state.searchText);\n            fetch(apiURL, { headers})\n            .then((res) => {\n                res.json().then((json) => {\n                // console.log(\"News results => \", JSON.stringify(json.value))\n                  // store type of results, result, current page\n      \n                  let newsResults = json.value\n                  let resultType = \"news\"\n                  let currentpage = page\n      \n                  // storeData()\n                  storeData(newsResults, resultType, currentpage, this.state.searchText)\n      \n                  // redirect to the new page to display the results\n                  window.location = '/search'\n              });\n            });\n        }\n    }\n\n    imageSearch = async (page) => {\n        console.log(\"Image search ===> \", this.state.searchText);\n        let apiURL = \"https://bing-image-search1.p.rapidapi.com/images/search\" + '?q='+ encodeURIComponent(this.state.searchText) +'&offset=' + ((page - 1) * 10);\n        let headers = {\n        'x-rapidapi-key': '3fe9872e94mshf148b0071798372p1b8684jsndae02e4e3799',\n        'x-rapidapi-host': 'bing-image-search1.p.rapidapi.com'\n      }\n    //     let searchString = encodeURIComponent(this.state.searchText);\n        if (this.state.searchText) {\n          saveToMongo(this.state.searchText);\n          fetch(apiURL, {\n            headers,\n          }).then((res) => {\n            res.json().then((json) => {\n                // console.log(\"Web results => \", JSON.stringify(json.value))\n                // store type of results, result, current page\n    \n                let imageResults = json.value\n                let resultType = \"image\"\n                let currentpage = page\n    \n                // storeData()\n                storeData(imageResults, resultType, currentpage, this.state.searchText)\n    \n                // redirect to the new page to display the results\n                window.location = '/search'\n            });\n          });\n        }\n      };\n\n    videoSearch = async (page) => {\n        console.log(\"Video Search ===> \", this.state.searchText)\n        let apiURL = \"https://bing-video-search1.p.rapidapi.com/videos/search?q=\"+ encodeURIComponent(this.state.searchText) +'&offset=' + ((page - 1) * 10);\n\n        let headers = {\n            'x-rapidapi-key': '3fe9872e94mshf148b0071798372p1b8684jsndae02e4e3799',\n            'x-rapidapi-host': 'bing-video-search1.p.rapidapi.com'\n        }\n\n        if (this.state.searchText) {\n            saveToMongo(this.state.searchText);\n            fetch(apiURL, {\n              headers,\n            }).then((res) => {\n              res.json().then((json) => {\n                  // console.log(\"Web results => \", JSON.stringify(json.value))\n                  // store type of results, result, current page\n      \n                  let imageResults = json.value\n                  let resultType = \"video\"\n                  let currentpage = page\n      \n                  // storeData()\n                  storeData(imageResults, resultType, currentpage, this.state.searchText)\n      \n                  // redirect to the new page to display the results\n                  window.location = '/search'\n              });\n            });\n        }\n    }\n\n    render() {\n        // console.log(\"Search text => \", this.state.searchText)\n        // console.log(\"This page is => \", this.page, typeof(this.page))\n        let details = \"\"\n        if(this.type === \"web\") {\n            details = this.result.map(result => (\n                <ResultCard dataFromParent={result}/>\n            ))\n        } else if(this.type === \"news\") {\n            details = this.result.map(result => (\n                <NewsCard dataFromParent={result} />\n            ))\n        } else if(this.type === \"image\") {\n        //     details = <ImageList rowHeight={200} className=\"imageList\" cols={4} gap={24}>\n        //     {this.result.map((item) => (\n        //       <ImageListItem key={item.imageInsightsToken} className=\"image-item\">\n        //         <img src={item.contentUrl} alt={item.name} />\n        //         <ImageListItemBar\n        //           title={item.name}\n        //           subtitle={<a target=\"_blank\" rel=\"noopener noreferrer\" href={item.hostPageUrl} style={{color: 'inherit'}}>{item.hostPageDisplayUrl}</a>}\n        //         //   actionIcon={\n        //         //     <IconButton aria-label={`info about ${item.title}`}>\n        //         //       <InfoIcon />\n        //         //     </IconButton>\n        //         //   }\n        //         />\n        //       </ImageListItem>\n        //     ))}\n        //   </ImageList>\n            details = this.result.map(result => (\n                <ImageCard dataFromParent={result} />\n            ))\n        } else if(this.type === \"video\") {\n            details = this.result.map(result => (\n                <VideoCard dataFromParent={result} />\n            ))\n        }\n        return(\n            <Container>\n                <Row>\n                    <Col xs={12} lg={2}>\n                        <div className=\"logo\" style={{ margin: '3vh auto 0 auto' }}>\n                            <a href=\"/\"><img src={require('./assets/logo.png').default} alt=\"logo\" /></a>\n                        </div>\n                    </Col>\n                    <Col xs={12} lg={7} sm={12}>\n                        <div className=\"search-page-bar-container\">\n                            <SearchBar />\n                        </div>\n                        <div style={{marginBottom: '3vh', display: 'flex', flexDirection:'row'}}>\n                            {/* <Col> */}\n                            <a onClick={() => {\n                                    // this.type = \"web\"\n                                    this.webSearch(1)\n                                }}><div className={this.type === \"web\" ? \"s-button-active\" : \"s-button\"} >\n                                <SearchIcon />\n                                <button type=\"button\"  style={{outline: 'none', border: 'none', background: 'transparent'}}>\n                                    Web\n                                </button>\n                            </div></a>\n                            {/* </Col> */}\n                            {/* <Col> */}\n                            <a onClick={() => {\n                                    // this.type = \"image\"\n                                    this.imageSearch(1)\n                                }}><div className={this.type === \"image\" ? \"s-button-active\" : \"s-button\"}>\n                                <ImageIcon />\n                                <button type=\"button\"  style={{outline: 'none', border: 'none', background: 'transparent'}}>\n                                    Image\n                                </button>\n                            </div></a>\n                            {/* </Col> */}\n                            {/* <Col> */}\n                            <a onClick={() => {\n                                    // this.type = \"news\"\n                                    this.newsSearch(1)\n                                }}><div className={this.type === \"news\" ? \"s-button-active\" : \"s-button\"}>\n                                <NewsIcon />\n                                <button type=\"button\"  style={{outline: 'none', border: 'none', background: 'transparent'}}>\n                                    News\n                                </button>\n                            </div></a>\n                            {/* </Col> */}\n                            <a onClick={() => {\n                                    // this.type = \"news\"\n                                    this.videoSearch(1)\n                                }}><div className={this.type === \"video\" ? \"s-button-active\" : \"s-button\"}>\n                                <VideoIcon />\n                                <button type=\"button\"  style={{outline: 'none', border: 'none', background: 'transparent'}}>\n                                    Videos\n                                </button>\n                            </div></a>\n                        </div>\n                        <Row>\n                            {\n                                details\n                            }\n                        </Row>\n                    </Col>\n                </Row>\n                <div className=\"row\">\n                    <div className=\"col-md-3\"></div>\n                    <div className=\"col-md-6\">\n                        <div className=\"results-footer\">\n                        <div className=\"pagination-container\">\n                            {\n                            this.page > 3 ?\n                                <span onClick={() => this.paginationSearch(this.paginationArray[0] - 1)}>{\"<<\"}</span> : null\n                            }\n                            {\n                            this.paginationArray.map(number => (\n                                <span onClick={() => this.paginationSearch(number)} className={this.page === number ? \"currentPage\" : \"\"}>{number}</span>\n                            ))\n                            }\n                            <span onClick={() => this.paginationSearch(this.paginationArray[4] + 1)}>{\">>\"}</span>\n                        </div>\n                        </div>\n                    </div>\n                </div>\n                <div className=\"row\">\n          <div className=\"col-md-3\"></div>\n          <div className=\"col-md-6\">\n            <div className=\"logo-footer\">\n              <a href=\"/\"><img src={require('./assets/logo.png').default} alt=\"logo\" /></a>\n            </div>\n          </div>\n        </div>\n            </Container>\n        )\n    }\n}\n\nexport default Search","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Home from './Home';\nimport { BrowserRouter as Router, Switch, Route} from 'react-router-dom'\nimport Search from './Search'\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nReactDOM.render(\n\t<Router>\n\t\t<Switch>\n\t\t\t<Route exact path='/'>\n\t\t\t\t<Home />\n\t\t\t</Route>\n\t\t\t<Route exact path='/search'>\n\t\t\t\t<Search />\n\t\t\t</Route>\n    \t</Switch>\n  </Router>,\n  document.getElementById('root')\n);"],"sourceRoot":""}