import { h, Component } from 'preact'; import { ListingRow } from './dashboard/listingRow'; export class ListingDashboard extends Component { state = { listings: [], orgListings: [], orgs: [], userCredits: 0, selectedListings: 'user', filter: 'All', }; componentDidMount() { const t = this; const container = document.getElementById('classifieds-listings-dashboard'); let listings = []; let orgs = []; let orgListings = []; listings = JSON.parse(container.dataset.listings).sort((a,b) => (a.created_at > b.created_at) ? -1 : 1); orgs = JSON.parse(container.dataset.orgs); orgListings = JSON.parse(container.dataset.orglistings); const userCredits = container.dataset.usercredits; t.setState({ listings, orgListings, orgs, userCredits }); } render() { const { listings, orgListings, userCredits, orgs, selectedListings, filter, } = this.state; const filterListings = (listingsToFilter, selectedFilter) => { if (selectedFilter === "Expired") { return listingsToFilter.filter(listing => listing.published === false) } if (selectedFilter === "Active") { return listingsToFilter.filter(listing => listing.published === true) } return listingsToFilter } const showListings = (selected, userListings, organizationListings, selectedFilter) => { let displayedListings; if (selected === 'user') { displayedListings = filterListings(userListings, selectedFilter) return displayedListings.map(listing => ) } displayedListings = filterListings(organizationListings, selectedFilter) return displayedListings.map(listing => listing.organization_id === selected ? ( ) : ( '' ), ); }; const sortListings = (event) => { const sortedListings = listings.sort((a,b) => (a[event.target.value] > b[event.target.value]) ? -1 : 1) this.setState({listings: sortedListings}); } const filters = ["All", "Active", "Expired"]; const filterButtons = filters.map(f => ( {this.setState( {filter:event.target.textContent} )}} className={`rounded-btn ${filter === f ? 'active' : ''}`} role="button" tabIndex="0"> {f} )) const sortingDropdown = (
{filterButtons}
); const orgButtons = orgs.map(org => ( this.setState({ selectedListings: org.id })} className={`rounded-btn ${selectedListings === org.id ? 'active' : ''}`} role="button" tabIndex="0" > {org.name} )); const listingLength = (selected, userListings, organizationListings) => { return selected === 'user' ? (

Listings Made: {userListings.length}

) : (

Listings Made:{' '} { organizationListings.filter( listing => listing.organization_id === selected, ).length }

); }; const creditCount = (selected, userCreds, organizations) => { return selected === 'user' ? (

Credits Available: {userCredits}

) : (

Credits Available:{' '} {organizations.find(org => org.id === selected).unspent_credits_count}

); }; return (
this.setState({ selectedListings: 'user' })} className={`rounded-btn ${ selectedListings === 'user' ? 'active' : '' }`} role="button" tabIndex="0" > Personal {orgButtons}

Listings

{listingLength(selectedListings, listings, orgListings)} Create a Listing

Credits

{creditCount(selectedListings, userCredits, orgs)} Buy Credits
{sortingDropdown}
{showListings(selectedListings, listings, orgListings, filter)}
); } }