Files
thoughts/thoughts-frontend/components/thought-thread.tsx
Gabriel Kaszewski f1e891413a feat: enhance user interface with improved styling and responsiveness
- Updated UserAvatar component to accept additional className for better customization.
- Refined ProfilePage layout with responsive avatar styling.
- Enhanced Header component with improved background and text styles.
- Improved PopularTags and TopFriends components with better spacing and text shadows.
- Updated ThoughtCard and ThoughtThread components for better visual hierarchy and responsiveness.
- Enhanced UI components (Button, Badge, Card, DropdownMenu, Input, Popover, Separator, Skeleton, Textarea) with new styles and effects.
- Added a new background image for visual enhancement.
2025-09-07 00:16:51 +02:00

53 lines
1.3 KiB
TypeScript

import { Me, Thought } from "@/lib/api";
import { ThoughtCard } from "./thought-card";
interface ThoughtThreadProps {
thought: Thought;
repliesByParentId: Map<string, Thought[]>;
authorDetails: Map<string, { avatarUrl?: string | null }>;
currentUser: Me | null;
isReply?: boolean;
}
export function ThoughtThread({
thought,
repliesByParentId,
authorDetails,
currentUser,
isReply = false,
}: ThoughtThreadProps) {
const author = {
username: thought.authorUsername,
avatarUrl: null,
...authorDetails.get(thought.authorUsername),
};
const directReplies = repliesByParentId.get(thought.id) || [];
return (
<div className="flex flex-col gap-0">
<ThoughtCard
thought={thought}
author={author}
currentUser={currentUser}
isReply={isReply}
/>
{directReplies.length > 0 && (
<div className="pl-6 border-l-2 border-primary/30 border-dashed ml-6 flex flex-col gap-4 pt-4">
{directReplies.map((reply) => (
<ThoughtThread // RECURSIVE CALL
key={reply.id}
thought={reply}
repliesByParentId={repliesByParentId} // Pass the full map down
authorDetails={authorDetails}
currentUser={currentUser}
isReply={true}
/>
))}
</div>
)}
</div>
);
}