import React from 'react'; import axios from 'axios'; import { Link } from 'react-router-dom'; import { Col, Media } from 'react-bootstrap'; class Search extends React.Component { state = { query: '', isLoaded: false, error: null, res: null } // static getDerivedStateFromProps(nextProps, prevState) { // } componentDidMount() { if (new RegExp("[0-9A-Za-z_-]{10}[048AEIMQUYcgkosw]").test(this.props.match.params.query.toString())) axios.get('https://www.googleapis.com/youtube/v3/videos', { params: { 'part': 'id', 'id': this.props.match.params.query, 'key': 'AIzaSyA21Odw9UdfiOJnxvA_eDfOW0OxuUfHKig', 'field': 'pageInfo/resultsPerPage' } }).then( res => { res.data.pageInfo.resultsPerPage ? this.props.history.push('/video/' + this.props.match.params.query) : this.youtubeSearch() }, error => { console.error(error) } ) else this.youtubeSearch(); } // shouldComponentUpdate(nextProps, nextState) { // } componentDidUpdate(prevProps, prevState) { if (prevProps.match.params.query !== this.props.match.params.query) { this.setState({ isLoaded: false }) if (new RegExp("[0-9A-Za-z_-]{10}[048AEIMQUYcgkosw]").test(this.props.match.params.query.toString())) axios.get('https://www.googleapis.com/youtube/v3/videos', { params: { 'part': 'id', 'id': this.props.match.params.query, 'key': 'AIzaSyA21Odw9UdfiOJnxvA_eDfOW0OxuUfHKig', 'field': 'pageInfo/resultsPerPage' } }).then( res => { res.data.pageInfo.resultsPerPage ? this.props.history.push('/video/' + this.props.match.params.query) : this.youtubeSearch() }, error => { console.error(error) this.setState({ error }) } ) else this.youtubeSearch(); } } // componentWillUnmount() { // } youtubeSearch() { return axios.get('https://www.googleapis.com/youtube/v3/search', { params: { 'part': 'snippet', 'q': this.props.match.params.query, 'videoEmbeddable': 'true', 'type': 'video', 'maxResults': 30, 'topicId': '/m/04rlf, /m/02jjt', 'key': 'AIzaSyA21Odw9UdfiOJnxvA_eDfOW0OxuUfHKig' } }).then( res => this.setState({ res: res.data, isLoaded: true }) , error => this.setState({ error }) ) } render() { if (this.state.error) { return {this.state.error.message} -- {this.state.error.response.data.error.errors[0].reason} ; } else if (!this.state.isLoaded) { return
; } else { return ( ); } } } export default Search;