import { For, Show } from "solid-js"; import Card, { Post } from "./Card"; export interface Tag { id: number; value: string; post_id: number; } export interface PostSortingProps { posts: Post[]; tags: Tag[]; privilegeLevel: "anonymous" | "admin" | "user"; type: "blog" | "project"; filters?: string; sort?: string; } export default function PostSorting(props: PostSortingProps) { const postsToFilter = () => { const filterSet = new Set(); props.tags.forEach((tag) => { if (props.filters?.split("|").includes(tag.value.slice(1))) { filterSet.add(tag.post_id); } }); return filterSet; }; const filteredPosts = () => { return props.posts.filter((post) => { return !postsToFilter().has(post.id); }); }; const sortedPosts = () => { const posts = filteredPosts(); switch (props.sort) { case "newest": return [...posts].reverse(); case "oldest": return [...posts]; case "most liked": return [...posts].sort((a, b) => b.total_likes - a.total_likes); case "most read": return [...posts].sort((a, b) => b.reads - a.reads); case "most comments": return [...posts].sort((a, b) => b.total_comments - a.total_comments); default: return [...posts].reverse(); } }; return ( 0 && filteredPosts().length === 0)} fallback={
All posts filtered out!
} > {(post) => (
)}
); }