import React from 'react'; import SideBar, {SideBarItem, SideBarTitle} from '../../elements/SideBar/SideBar'; import Tag from '../../elements/Tag/Tag'; import VideoContainer from '../../elements/VideoContainer/VideoContainer'; import style from './HomePage.module.css'; import PageTitle, {Line} from '../../elements/PageTitle/PageTitle'; /** * The home page component showing on the initial pageload */ class HomePage extends React.Component { /** keyword variable needed temporary store search keyword */ keyword = ''; constructor(props, context) { super(props, context); this.state = { sideinfo: { videonr: null, fullhdvideonr: null, hdvideonr: null, sdvideonr: null, tagnr: null }, subtitle: 'All Videos', data: [], selectionnr: 0 }; } componentDidMount() { // initial get of all videos this.fetchVideoData('All'); this.fetchStartData(); } /** * fetch available videos for specified tag * this function clears all preview elements an reloads gravity with tag * * @param tag tag to fetch videos */ fetchVideoData(tag) { const updateRequest = new FormData(); updateRequest.append('action', 'getMovies'); updateRequest.append('tag', tag); console.log('fetching data from' + tag); // fetch all videos available fetch('/api/video.php', {method: 'POST', body: updateRequest}) .then((response) => response.json() .then((result) => { this.setState({ data: [] }); this.setState({ data: result, selectionnr: result.length, tag: tag + ' Videos' }); })) .catch(() => { console.log('no connection to backend'); }); } /** * fetch the necessary data for left info box */ fetchStartData() { const updateRequest = new FormData(); updateRequest.append('action', 'getStartData'); // fetch all videos available fetch('/api/video.php', {method: 'POST', body: updateRequest}) .then((response) => response.json() .then((result) => { this.setState({ sideinfo: { videonr: result['total'], fullhdvideonr: result['fullhd'], hdvideonr: result['hd'], sdvideonr: result['sd'], tagnr: result['tags'] } }); })) .catch(() => { console.log('no connection to backend'); }); } /** * search for a keyword in db and update previews * * @param keyword The keyword to search for */ searchVideos(keyword) { console.log('search called'); const updateRequest = new FormData(); updateRequest.append('action', 'getSearchKeyWord'); updateRequest.append('keyword', keyword); // fetch all videos available fetch('/api/video.php', {method: 'POST', body: updateRequest}) .then((response) => response.json() .then((result) => { this.setState({ data: [] }); this.setState({ data: result, selectionnr: result.length, tag: 'Search result: ' + keyword }); })) .catch(() => { console.log('no connection to backend'); }); } render() { return ( <>
{ e.preventDefault(); this.searchVideos(this.keyword); }}> { this.keyword = e.target.value; }}/>
Infos: {this.state.sideinfo.videonr} Videos Total! {this.state.sideinfo.fullhdvideonr} FULL-HD Videos! {this.state.sideinfo.hdvideonr} HD Videos! {this.state.sideinfo.sdvideonr} SD Videos! {this.state.sideinfo.tagnr} different Tags! Default Tags: this.fetchVideoData('All')}>All this.fetchVideoData('FullHd')}>FullHd this.fetchVideoData('LowQuality')}>LowQuality this.fetchVideoData('HD')}>HD {this.state.data.length !== 0 ? :
No Data found!
}
); } } export default HomePage;