import {RouteComponentProps} from 'react-router'; import React from 'react'; import VideoContainer from '../../elements/VideoContainer/VideoContainer'; import {APINode, callAPI} from '../../utils/Api'; import {withRouter} from 'react-router-dom'; import {VideoTypes} from '../../types/ApiTypes'; import PageTitle, {Line} from '../../elements/PageTitle/PageTitle'; import SideBar, {SideBarTitle} from '../../elements/SideBar/SideBar'; import Tag from '../../elements/Tag/Tag'; import {DefaultTags, GeneralSuccess} from '../../types/GeneralTypes'; import {Button} from '../../elements/GPElements/Button'; import SubmitPopup from '../../elements/Popups/SubmitPopup/SubmitPopup'; interface CategoryViewProps extends RouteComponentProps<{id: string}> {} interface CategoryViewState { loaded: boolean; submitForceDelete: boolean; } /** * plain class (for unit testing only) */ export class CategoryView extends React.Component { private videodata: VideoTypes.VideoUnloadedType[] = []; constructor(props: CategoryViewProps) { super(props); this.state = { loaded: false, submitForceDelete: false }; } componentDidMount(): void { this.fetchVideoData(parseInt(this.props.match.params.id, 10)); } componentDidUpdate(prevProps: Readonly): void { // trigger video refresh if id changed if (prevProps.match.params.id !== this.props.match.params.id) { this.reloadVideoData(); } } reloadVideoData(): void { this.setState({loaded: false}); this.fetchVideoData(parseInt(this.props.match.params.id, 10)); } render(): JSX.Element { return ( <> Default Tags: {this.handlePopups()} ); } private handlePopups(): JSX.Element { if (this.state.submitForceDelete) { return ( this.setState({submitForceDelete: false})} submit={(): void => { this.deleteTag(true); }} /> ); } else { return <>; } } /** * fetch data for a specific tag from backend * @param id tagid */ private fetchVideoData(id: number): void { callAPI(APINode.Video, {action: 'getMovies', Tag: id}, (result) => { this.videodata = result; this.setState({loaded: true}); }); } /** * delete the current tag */ private deleteTag(force: boolean): void { callAPI( APINode.Tags, { action: 'deleteTag', TagId: parseInt(this.props.match.params.id, 10), Force: force }, (result) => { console.log(result.result); if (result.result === 'success') { this.props.history.push('/categories'); } else if (result.result === 'not empty tag') { // show submisison tag to ask if really delete this.setState({submitForceDelete: true}); } } ); } } /** * export with react Router wrapped (default use) */ export const CategoryViewWR = withRouter(CategoryView);