40 lines
1 KiB
TypeScript
40 lines
1 KiB
TypeScript
|
import { createSignal } from "solid-js";
|
||
|
import { getPosts } from "./api";
|
||
|
import { Post } from "./api";
|
||
|
|
||
|
export function Posts() {
|
||
|
const [posts, setPosts] = createSignal([] as Post[]);
|
||
|
const [loading, setLoading] = createSignal(true);
|
||
|
|
||
|
getPosts().then((posts) => {
|
||
|
setPosts(posts as any);
|
||
|
setLoading(false);
|
||
|
});
|
||
|
|
||
|
return (
|
||
|
<div class="flex flex-col space-y-2 w-full md:w-96">
|
||
|
{loading() ? (
|
||
|
<span class="loading loading-spinner loading-lg self-center"></span>
|
||
|
) : (
|
||
|
<></>
|
||
|
)}
|
||
|
{posts().map((post) => {
|
||
|
if (post.content == "") return; // Filtering out empty posts, remove this later
|
||
|
return <PostSegment post={post}></PostSegment>;
|
||
|
})}
|
||
|
</div>
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// This is the card container for a post
|
||
|
export function PostSegment({ post }: { post: Post; }) {
|
||
|
return (
|
||
|
<div class="card bg-base-200 shadow-lg compact text-base-content w-full">
|
||
|
<div class="card-body">
|
||
|
<p class="text-base-content break-words">{post.content}</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
);
|
||
|
}
|
||
|
|