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',
sort: 'created_at',
};
componentDidMount() {
const t = this;
const container = document.getElementById('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,
sort,
} = this.state;
const isExpired = (listing) =>
listing.bumped_at && !listing.published
? (Date.now() - new Date(listing.bumped_at.toString()).getTime()) /
(1000 * 60 * 60 * 24) >
30
: false;
const isDraft = (listing) =>
listing.bumped_at ? !isExpired(listing) && !listing.published : true;
const filterListings = (listingsToFilter, selectedFilter) => {
if (selectedFilter === 'Draft') {
return listingsToFilter.filter((listing) => isDraft(listing));
}
if (selectedFilter === 'Expired') {
return listingsToFilter.filter((listing) => isExpired(listing));
}
if (selectedFilter === 'Active') {
return listingsToFilter.filter((listing) => listing.published === true);
}
return listingsToFilter;
};
const customSort = (a, b) => {
if (a[sort] === null) {
return 1;
}
if (b[sort] === null) {
return -1;
}
if (a[sort] > b[sort]) {
return -1;
}
return 1;
};
const showListings = (
selected,
userListings,
organizationListings,
selectedFilter,
) => {
let displayedListings;
if (selected === 'user') {
displayedListings = filterListings(userListings, selectedFilter).sort(
customSort,
);
return displayedListings.map((listing) => (