diff --git a/src/routes/post/[idpost]/+page.svelte b/src/routes/post/[idpost]/+page.svelte index 922ed6c..bf01622 100644 --- a/src/routes/post/[idpost]/+page.svelte +++ b/src/routes/post/[idpost]/+page.svelte @@ -2,21 +2,31 @@ import Card from '@/components/ui/card/card.svelte'; import { Content } from '@/components/ui/card'; import Spinner from '@/components/ui/spinner/spinner.svelte'; - import type { Post, PostResponseDto } from '../../../types'; + import type { Post } from '../../../types'; import PostCard from '@/components/PostCard.svelte'; import ModalEditar from '../../[perfil]/modalEditar.svelte'; - import { fade } from 'svelte/transition'; + import { fade, slide } from 'svelte/transition'; import { updatePost } from '@/hooks/updatePost'; - import { invalidate } from '$app/navigation'; + import { goto, invalidate } from '$app/navigation'; import Separator from '@/components/ui/separator/separator.svelte'; import CrearPost from '@/components/crear-post.svelte'; + import Button from '@/components/ui/button/button.svelte'; + import { resolve } from '$app/paths'; + import MessageCircleMore from '@lucide/svelte/icons/message-circle-more'; + import { sesionStore } from '@/stores/usuario'; + import { likePost } from '@/hooks/likePost'; + import ThumbsUp from '@lucide/svelte/icons/thumbs-up'; + import { TamañoPantalla } from './TamañoPantalla.svelte'; interface Prop { data: { post: Post; + respuestas: Post[]; }; } + let tamaño = new TamañoPantalla(); + let { data }: Prop = $props(); // $inspect(data); let postAModificar: Post | null = $state(null); @@ -27,6 +37,24 @@ await updatePost(postAModificar, (postnuevo: Post) => invalidate('post:post'), ''); postAModificar = null; } + + async function likeHandler(post) { + //para que se vea el spinner + let [{ message, ok }] = await Promise.all([ + likePost(post), + new Promise((resolve) => setTimeout(resolve, 300)) + ]); + if (ok) { + if (post.isLiked) { + post.likesCount--; + } else { + post.likesCount++; + } + post.isLiked = !post.isLiked; + } else { + } + invalidate('post:respuestas'); + } @@ -64,8 +92,13 @@
- {#each data.respuestas as respuesta} - invalidate('post:post')} /> + {#each data.respuestas as respuesta (respuesta.id)} + + + {@render Respuesta(respuesta)} + + + {/each}
@@ -76,4 +109,52 @@ {/if} -{#snippet Respuesta()}{/snippet} +{#snippet Respuesta(post: Post)} +
+
+ {#if post.authorImageUrl} + {post.authorDisplayName} + {:else} +
+ {post.authorName?.charAt(0).toUpperCase()} +
+ {/if} + @{post.authorName} + {new Date(post.createdAt).toLocaleDateString()} +
+

+ {post.content} +

+ {#if post.imageUrl} + Imagen de respuesta + {/if} +
+ + +
+
+ +{/snippet} diff --git a/src/routes/post/[idpost]/TamañoPantalla.svelte.ts b/src/routes/post/[idpost]/TamañoPantalla.svelte.ts new file mode 100644 index 0000000..d56e0c0 --- /dev/null +++ b/src/routes/post/[idpost]/TamañoPantalla.svelte.ts @@ -0,0 +1,5 @@ +import { innerWidth } from 'svelte/reactivity/window'; +export class TamañoPantalla { + width = $derived(() => innerWidth.current || 1080); + isMobile = $derived(this.width() < 768); +}