diff --git a/src/lib/components/crear-post.svelte b/src/lib/components/crear-post.svelte index eb674e6..a0df5c2 100644 --- a/src/lib/components/crear-post.svelte +++ b/src/lib/components/crear-post.svelte @@ -1,4 +1,4 @@ - - - - - -
- -

229}> - {mensaje.length} -

- / 255 -
- -

Publicar

- -
-
-
-
+
handlePost(e)}> + + + + +
+ +

239}> + {mensaje.length} +

+ / 280 +
+ +

Publicar

+ +
+
+
+
+
diff --git a/src/lib/stores/posts.ts b/src/lib/stores/posts.ts new file mode 100644 index 0000000..bf1611f --- /dev/null +++ b/src/lib/stores/posts.ts @@ -0,0 +1,22 @@ +import { writable } from 'svelte/store'; +import type { Post } from '../../types'; + +export const posts = writable([]); + +export const setPosts = (newPosts: Post[]) => { + posts.set(newPosts); +}; + +export const addPost = (post: Post) => { + posts.update((currentPosts) => [post, ...currentPosts]); +}; + +export const updatePost = (postId: string, updatedData: Partial) => { + posts.update((currentPosts) => + currentPosts.map((post) => (post._id === postId ? { ...post, ...updatedData } : post)) + ); +}; + +export const removePost = (postId: string) => { + posts.update((currentPosts) => currentPosts.filter((post) => post._id !== postId)); +}; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index f7f8c0e..a20b420 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -5,13 +5,15 @@ import { apiBase } from '@/stores/url'; import { sesionStore } from '@/stores/usuario'; import CrearPost from '@/components/crear-post.svelte'; + import CardHeader from '@/components/ui/card/card-header.svelte'; + import CardFooter from '@/components/ui/card/card-footer.svelte'; + import { posts, setPosts } from '@/stores/posts'; + + $effect(async () => { + setPosts(await getPosts()); - $effect(() => { - getPosts(); }); - let posts: Post[] = $state([]); - async function getPosts() { const { subscribe } = apiBase; let baseUrl: string = ''; @@ -20,9 +22,9 @@ baseUrl = value; })(); - const req = await fetch(`${baseUrl}/api/posts/timeline?pageSize=3`); + const req = await fetch(`${baseUrl}/timeline?pageSize=20`); if (req.ok) { - posts = await req.json(); + return await req.json(); } } @@ -35,36 +37,40 @@ {/if}
- {#if posts.length <= 0} + {#if $posts.length <= 0}

No hay Posts que mostrar

{:else} - {#each posts as post} + {#each $posts as post} - +
{post.authorId} {post.createdAt.toLocaleDateString()}{post.createdAt.replace("T", " ").split(".")[0]}
-

{post.content}

- {#if post.imageUrl} - Post - {/if} -
- {post.likesCount} likes - {post.repliesCount} replies - {#if post.isEdited} - Editado - {/if} -
+
+ +

{post.content}

+ {#if post.imageUrl} + Post + {/if}
+ +
+ {post.likesCount} likes + {post.repliesCount} replies + {#if post.isEdited} + Editado + {/if} +
+
{/each} {/if} diff --git a/src/types.d.ts b/src/types.d.ts index 8f6cff6..300ce71 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -6,12 +6,13 @@ export interface Post { parentPostId?: string; likesCount: number; repliesCount: number; - createdAt: Date; + createdAt: string; updatedAt?: Date; isEdited: boolean; visibility: string; hashtags?: string[]; } + export interface User { _id: string; displayName: string; @@ -34,13 +35,19 @@ export interface Sesion { } export interface LoginDto { - username: string?; - password: string?; + username: string?; + password: string?; } export interface RegisterDto { - username: string?; - email: string?; - password: string?; - displayName: string?; + username: string?; + email: string?; + password: string?; + displayName: string?; +} + +export interface CreatePostDto { + content: string; + imageUrl: string?; + parentPostId: string?; }