import React from 'react'; import requestElement from './styles/requestElementStyle.jsx' import { getCookie } from './Cookie.jsx'; class DropdownList extends React.Component { constructor(props) { super(props); this.state = { filter: ['all', 'requested', 'downloading', 'downloaded'], sort: ['requested_date', 'name', 'status', 'requested_by', 'ip', 'user_agent'], status: ['requested', 'downloading', 'downloaded'], } } render() { const {elementType, elementId, elementStatus, elementCallback, props} = this.props; console.log(elementCallback('downloaded')) switch (elementType) { case 'status': return (
HERE
) } return (
); } } class RequestElement extends React.Component { constructor(props) { super(props); this.state = { dropDownState: undefined, } } filterRequestList(requestList, filter) { if (filter === 'all') return requestList if (filter === 'movie' || filter === 'show') return requestList.filter(item => item.type === filter) return requestList.filter(item => item.status === filter) } sortRequestList(requestList, sort_type, reversed) { requestList.sort(function(a,b) { if(a[sort_type] < b[sort_type]) return -1; if(a[sort_type] > b[sort_type]) return 1; return 0; }); if (reversed) requestList.reverse(); } userAgent(agent) { if (agent) { try { return agent.split(" ")[1].replace(/[\(\;]/g, ''); } catch(e) { return agent; } } return ''; } updateDropDownState(status) { if (status !== this.dropDownState) { this.dropDownState = status; } } ItemsStatusDropdown(id, type, status) { return (
) } updateRequestedItem(id, type) { console.log(id, type, this.dropDownState); Promise.resolve() fetch('https://apollo.kevinmidboe.com/api/v1/plex/request/' + id, { method: 'PUT', headers: { 'Content-type': 'application/json', 'authorization': getCookie('token') }, body: JSON.stringify({ type: type, status: this.dropDownState, }) }) .then(response => { if (response.status !== 200) { console.log('error'); } response.json() .then(data => { if (data.success === true) { console.log('UPDATED :', id, ' with ', this.dropDownState) } }) }) .catch(error => { new Error(error); }) } createHTMLElement(data, index) { var posterPath = 'https://image.tmdb.org/t/p/w300' + data.image_path; return (
Name: {data.name}

Year: {data.year}

Type: {data.type}

Status: {data.status}

Address: {data.ip}

Requested Data: {data.requested_date}

Requested By: {data.requested_by}

Agent: { this.userAgent(data.user_agent) }

{ this.ItemsStatusDropdown(data.id, data.type, data.status) }
) } render() { const {requestedElementsList, requestedElementsFilter, requestedElementsSort, props} = this.props; var filteredRequestedList = this.filterRequestList(requestedElementsList, requestedElementsFilter) this.sortRequestList(filteredRequestedList, requestedElementsSort.value, requestedElementsSort.reversed) return (
{filteredRequestedList.map((requestItem, index) => this.createHTMLElement(requestItem, index))}
); } } class FetchRequested extends React.Component { constructor(props){ super(props) this.state = { requested_objects: [], filter: 'all', sort: { value: 'requested_date', reversed: false }, } } componentDidMount(){ Promise.resolve() fetch('https://apollo.kevinmidboe.com/api/v1/plex/requests/all', { method: 'GET', headers: { 'Content-type': 'application/json', 'authorization': getCookie('token') } }) .then(response => { if (response.status !== 200) { console.log('error'); } response.json() .then(data => { if (data.success === true) { this.setState({ requested_objects: data.requestedItems }) } }) }) .catch(error => { new Error(error); }) } changeFilter(filter) { this.setState({ filter: filter }) } updateSort(sort=null, reverse=false) { if (sort) { this.setState({ sort: { value: sort, reversed: reverse } }) } else { this.setState({ sort: { value: this.state.sort.value, reversed: reverse } }) } } render(){ return(
) } } export default FetchRequested;