diff --git a/apps/web/src/views/board/components/Card.tsx b/apps/web/src/views/board/components/Card.tsx index cba90c68..f09886d8 100644 --- a/apps/web/src/views/board/components/Card.tsx +++ b/apps/web/src/views/board/components/Card.tsx @@ -1,3 +1,5 @@ +import { HiBars3BottomLeft, HiChatBubbleLeft } from "react-icons/hi2"; + import Avatar from "~/components/Avatar"; import Badge from "~/components/Badge"; import CircularProgress from "~/components/CircularProgress"; @@ -9,6 +11,8 @@ const Card = ({ labels, members, checklists, + description, + comments, }: { title: string; labels: { name: string; colourCode: string | null }[]; @@ -27,6 +31,8 @@ const Card = ({ index: number; }[]; }[]; + description: string | null; + comments: { publicId: string }[]; }) => { const completedItems = checklists.reduce((acc, checklist) => { return acc + checklist.items.filter((item) => item.completed).length; @@ -39,10 +45,17 @@ const Card = ({ const progress = totalItems > 0 ? Math.round((completedItems / totalItems) * 100) : 0; + const hasDescription = + description && description.replace(/<[^>]*>/g, "").trim().length > 0; + return (
{title} - {labels.length || members.length || checklists.length > 0 ? ( + {labels.length || + members.length || + checklists.length > 0 || + hasDescription || + comments.length > 0 ? (
{labels.map((label) => ( @@ -52,37 +65,51 @@ const Card = ({ /> ))}
-
- {checklists.length > 0 && ( -
- - - {completedItems}/{totalItems} - -
- )} - {members.length > 0 && ( -
- {members.map(({ user, email }) => { - const avatarUrl = user?.image - ? getAvatarUrl(user.image) - : undefined; +
+
+ {hasDescription && ( +
+ +
+ )} + {comments.length > 0 && ( +
+ +
+ )} +
+
+ {checklists.length > 0 && ( +
+ + + {completedItems}/{totalItems} + +
+ )} + {members.length > 0 && ( +
+ {members.map(({ user, email }) => { + const avatarUrl = user?.image + ? getAvatarUrl(user.image) + : undefined; - return ( - - ); - })} -
- )} + return ( + + ); + })} +
+ )} +
) : null} diff --git a/apps/web/src/views/board/index.tsx b/apps/web/src/views/board/index.tsx index 20a9d1f2..66462b6b 100644 --- a/apps/web/src/views/board/index.tsx +++ b/apps/web/src/views/board/index.tsx @@ -546,6 +546,8 @@ export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) { labels={card.labels} members={card.members} checklists={card.checklists ?? []} + description={card.description ?? null} + comments={card.comments ?? []} /> )} diff --git a/apps/web/src/views/public/board/index.tsx b/apps/web/src/views/public/board/index.tsx index 62853bac..cd33acfa 100644 --- a/apps/web/src/views/public/board/index.tsx +++ b/apps/web/src/views/public/board/index.tsx @@ -45,7 +45,10 @@ export default function PublicBoardView() { members: formatToArray(router.query.members), labels: formatToArray(router.query.labels), }, - { enabled: router.isReady && !!boardSlug, placeholderData: keepPreviousData }, + { + enabled: router.isReady && !!boardSlug, + placeholderData: keepPreviousData, + }, ); const CopyBoardLink = () => { @@ -156,7 +159,7 @@ export default function PublicBoardView() { ) : (
- {data.lists.map((list) => ( + {data?.lists.map((list) => (
))} diff --git a/packages/db/src/repository/board.repo.ts b/packages/db/src/repository/board.repo.ts index 3bacee2f..4feb78e0 100644 --- a/packages/db/src/repository/board.repo.ts +++ b/packages/db/src/repository/board.repo.ts @@ -10,6 +10,7 @@ import { cardToWorkspaceMembers, checklistItems, checklists, + comments, labels, lists, workspaceMembers, @@ -215,6 +216,13 @@ export const getByPublicId = async ( }, }, }, + comments: { + columns: { + publicId: true, + }, + where: isNull(comments.deletedAt), + limit: 1, + }, }, where: and( cardIds.length > 0 ? inArray(cards.publicId, cardIds) : undefined, @@ -335,6 +343,13 @@ export const getBySlug = async ( }, }, }, + comments: { + columns: { + publicId: true, + }, + where: isNull(comments.deletedAt), + limit: 1, + }, checklists: { columns: { publicId: true,