main
|
Last change
on this file was 700e2f9, checked in by 186079 <matej.milevski@…>, 5 days ago |
|
Init
|
-
Property mode
set to
100644
|
|
File size:
1.2 KB
|
| Rev | Line | |
|---|
| [700e2f9] | 1 | import { type Component, For, Show } from "solid-js";
|
|---|
| 2 | import BlogCard from "@/components/BlogCard";
|
|---|
| 3 | import type { BlogPost } from "@/api/blog";
|
|---|
| 4 |
|
|---|
| 5 | interface BlogListProps {
|
|---|
| 6 | blogs: BlogPost[];
|
|---|
| 7 | loading: boolean;
|
|---|
| 8 | openBlog: (blog: BlogPost) => void;
|
|---|
| 9 | onLike: (blogId: number) => void;
|
|---|
| 10 | onEdit: (blog: BlogPost) => void;
|
|---|
| 11 | onDelete: (blogId: number) => void;
|
|---|
| 12 | }
|
|---|
| 13 |
|
|---|
| 14 | const BlogList: Component<BlogListProps> = (props) => (
|
|---|
| 15 | <>
|
|---|
| 16 | <Show when={props.loading}>
|
|---|
| 17 | <div class="text-center py-12">
|
|---|
| 18 | <div class="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" />
|
|---|
| 19 | <p class="mt-2 text-gray-600">Loading blogs...</p>
|
|---|
| 20 | </div>
|
|---|
| 21 | </Show>
|
|---|
| 22 |
|
|---|
| 23 | <Show when={!props.loading && props.blogs.length === 0}>
|
|---|
| 24 | <div class="text-center py-12 bg-white rounded-lg shadow-md">
|
|---|
| 25 | <p class="text-gray-600">No blogs yet. Be the first to post!</p>
|
|---|
| 26 | </div>
|
|---|
| 27 | </Show>
|
|---|
| 28 |
|
|---|
| 29 | <div class="space-y-4">
|
|---|
| 30 | <For each={props.blogs}>
|
|---|
| 31 | {(blog) => (
|
|---|
| 32 | <BlogCard
|
|---|
| 33 | blog={blog}
|
|---|
| 34 | openBlog={props.openBlog}
|
|---|
| 35 | onLike={props.onLike}
|
|---|
| 36 | onEdit={props.onEdit}
|
|---|
| 37 | onDelete={props.onDelete}
|
|---|
| 38 | />
|
|---|
| 39 | )}
|
|---|
| 40 | </For>
|
|---|
| 41 | </div>
|
|---|
| 42 | </>
|
|---|
| 43 | );
|
|---|
| 44 |
|
|---|
| 45 | export default BlogList;
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.