add a filter option to the addactor popup page
This commit is contained in:
		@@ -2,7 +2,7 @@ import React from 'react';
 | 
				
			|||||||
import style from './Button.module.css';
 | 
					import style from './Button.module.css';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface ButtonProps {
 | 
					interface ButtonProps {
 | 
				
			||||||
    title: string;
 | 
					    title: string | JSX.Element;
 | 
				
			||||||
    onClick?: () => void;
 | 
					    onClick?: () => void;
 | 
				
			||||||
    color?: React.CSSProperties;
 | 
					    color?: React.CSSProperties;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,5 +7,13 @@
 | 
				
			|||||||
    margin-top: 12px;
 | 
					    margin-top: 12px;
 | 
				
			||||||
    padding: 6px;
 | 
					    padding: 6px;
 | 
				
			||||||
    width: 140px;
 | 
					    width: 140px;
 | 
				
			||||||
    width: 140px;
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.searchinput{
 | 
				
			||||||
 | 
					    width: 120px;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.searchbar {
 | 
				
			||||||
 | 
					    margin-bottom: 13px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,9 @@ import {NewActorPopupContent} from '../NewActorPopup/NewActorPopup';
 | 
				
			|||||||
import {callAPI} from '../../../utils/Api';
 | 
					import {callAPI} from '../../../utils/Api';
 | 
				
			||||||
import {ActorType} from '../../../api/VideoTypes';
 | 
					import {ActorType} from '../../../api/VideoTypes';
 | 
				
			||||||
import {GeneralSuccess} from '../../../api/GeneralTypes';
 | 
					import {GeneralSuccess} from '../../../api/GeneralTypes';
 | 
				
			||||||
 | 
					import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
 | 
				
			||||||
 | 
					import {faFilter, faTimes} from '@fortawesome/free-solid-svg-icons';
 | 
				
			||||||
 | 
					import {Button} from '../../GPElements/Button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface props {
 | 
					interface props {
 | 
				
			||||||
    onHide: () => void;
 | 
					    onHide: () => void;
 | 
				
			||||||
@@ -15,6 +18,8 @@ interface props {
 | 
				
			|||||||
interface state {
 | 
					interface state {
 | 
				
			||||||
    contentDefault: boolean;
 | 
					    contentDefault: boolean;
 | 
				
			||||||
    actors: ActorType[];
 | 
					    actors: ActorType[];
 | 
				
			||||||
 | 
					    filter: string;
 | 
				
			||||||
 | 
					    filtervisible: boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -26,10 +31,13 @@ class AddActorPopup extends React.Component<props, state> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        this.state = {
 | 
					        this.state = {
 | 
				
			||||||
            contentDefault: true,
 | 
					            contentDefault: true,
 | 
				
			||||||
            actors: []
 | 
					            actors: [],
 | 
				
			||||||
 | 
					            filter: '',
 | 
				
			||||||
 | 
					            filtervisible: false
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.tileClickHandler = this.tileClickHandler.bind(this);
 | 
					        this.tileClickHandler = this.tileClickHandler.bind(this);
 | 
				
			||||||
 | 
					        this.filterSearch = this.filterSearch.bind(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    render(): JSX.Element {
 | 
					    render(): JSX.Element {
 | 
				
			||||||
@@ -71,14 +79,48 @@ class AddActorPopup extends React.Component<props, state> {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    getContent(): JSX.Element {
 | 
					    getContent(): JSX.Element {
 | 
				
			||||||
        if (this.state.actors.length !== 0) {
 | 
					        if (this.state.actors.length !== 0) {
 | 
				
			||||||
            return (<div>
 | 
					            return (
 | 
				
			||||||
                {this.state.actors.map((el) => (<ActorTile actor={el} onClick={this.tileClickHandler}/>))}
 | 
					                <>
 | 
				
			||||||
            </div>);
 | 
					                    <div className={style.searchbar}>
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            this.state.filtervisible ?
 | 
				
			||||||
 | 
					                                <>
 | 
				
			||||||
 | 
					                                    <input className={'form-control mr-sm-2 ' + style.searchinput}
 | 
				
			||||||
 | 
					                                           type='text' placeholder='Filter' value={this.state.filter}
 | 
				
			||||||
 | 
					                                           onChange={(e): void => {
 | 
				
			||||||
 | 
					                                               this.setState({filter: e.target.value});
 | 
				
			||||||
 | 
					                                           }}/>
 | 
				
			||||||
 | 
					                                    <Button title={<FontAwesomeIcon style={{
 | 
				
			||||||
 | 
					                                        verticalAlign: 'middle',
 | 
				
			||||||
 | 
					                                        lineHeight: '130px'
 | 
				
			||||||
 | 
					                                    }} icon={faTimes} size='1x'/>} color={{backgroundColor: 'red'}} onClick={(): void => {
 | 
				
			||||||
 | 
					                                        this.setState({filter: '', filtervisible: false});
 | 
				
			||||||
 | 
					                                    }}/>
 | 
				
			||||||
 | 
					                                </> :
 | 
				
			||||||
 | 
					                                <Button title={<span>Filter <FontAwesomeIcon style={{
 | 
				
			||||||
 | 
					                                    verticalAlign: 'middle',
 | 
				
			||||||
 | 
					                                    lineHeight: '130px'
 | 
				
			||||||
 | 
					                                }} icon={faFilter} size='1x'/></span>} color={{backgroundColor: 'cornflowerblue', color: 'white'}} onClick={(): void => {
 | 
				
			||||||
 | 
					                                    this.setState({filtervisible: true});
 | 
				
			||||||
 | 
					                                }}/>
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    {this.state.actors.filter(this.filterSearch).map((el) => (<ActorTile actor={el} onClick={this.tileClickHandler}/>))}
 | 
				
			||||||
 | 
					                </>
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            return (<div>somekind of loading</div>);
 | 
					            return (<div>somekind of loading</div>);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * filter the actor array for search matches
 | 
				
			||||||
 | 
					     * @param actor
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private filterSearch(actor: ActorType): boolean {
 | 
				
			||||||
 | 
					        return actor.name.toLowerCase().includes(this.state.filter.toLowerCase());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * event handling for ActorTile Click
 | 
					     * event handling for ActorTile Click
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@@ -93,12 +135,14 @@ class AddActorPopup extends React.Component<props, state> {
 | 
				
			|||||||
                // return back to player page
 | 
					                // return back to player page
 | 
				
			||||||
                this.props.onHide();
 | 
					                this.props.onHide();
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                console.error('an error occured while fetching actors');
 | 
					                console.error('an error occured while fetching actors: ' + result);
 | 
				
			||||||
                console.error(result);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * load the actors from backend and set state
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    loadActors(): void {
 | 
					    loadActors(): void {
 | 
				
			||||||
        callAPI<ActorType[]>('actor.php', {action: 'getAllActors'}, result => {
 | 
					        callAPI<ActorType[]>('actor.php', {action: 'getAllActors'}, result => {
 | 
				
			||||||
            this.setState({actors: result});
 | 
					            this.setState({actors: result});
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user