From e5927cd20592a4f236ec4ef0b91a54772c8d8d70 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 12 Nov 2024 22:30:25 +0000 Subject: [PATCH] feat: display card activity --- bun.lockb | Bin 349791 -> 350127 bytes package.json | 1 + src/components/Avatar.tsx | 47 ++++++ src/server/db/repository/card.repo.ts | 6 +- src/types/router.types.ts | 1 + src/views/card/components/ActivityList.tsx | 185 +++++++++++++++++++++ src/views/card/index.tsx | 131 +++++++++------ 7 files changed, 319 insertions(+), 52 deletions(-) create mode 100644 src/components/Avatar.tsx create mode 100644 src/views/card/components/ActivityList.tsx diff --git a/bun.lockb b/bun.lockb index a5a25084266d9d4dbc00071777337e2d412f1748..f98cd33c536bea0e5a8003965b9a24c845d9839d 100755 GIT binary patch delta 61329 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 KRLzve=l>swTyW+9 delta 60915 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 { + const initials = name + ? getInitialsFromName(name) + : inferInitialsFromEmail(email ?? ""); + + return ( + + {icon ? ( + {icon} + ) : ( + + {initials} + + )} + + ); +}; + +export default Avatar; diff --git a/src/server/db/repository/card.repo.ts b/src/server/db/repository/card.repo.ts index 017d2507..415e1eb7 100644 --- a/src/server/db/repository/card.repo.ts +++ b/src/server/db/repository/card.repo.ts @@ -263,12 +263,14 @@ export const getWithListAndMembersByPublicId = async ( publicId, user!workspace_members_userId_user_id_fk ( id, - name + name, + email ) ), user!card_activity_createdBy_user_id_fk ( id, - name + name, + email ) ) `, diff --git a/src/types/router.types.ts b/src/types/router.types.ts index 9762d694..e6e23bbc 100644 --- a/src/types/router.types.ts +++ b/src/types/router.types.ts @@ -1,6 +1,7 @@ import { type RouterInputs, type RouterOutputs } from "~/utils/api"; export type GetBoardByIdOutput = RouterOutputs["board"]["byId"]; +export type GetCardByIdOutput = RouterOutputs["card"]["byId"]; export type ReorderListInput = RouterInputs["list"]["reorder"]; export type ReorderCardInput = RouterInputs["card"]["reorder"]; export type UpdateBoardInput = RouterInputs["board"]["update"]; diff --git a/src/views/card/components/ActivityList.tsx b/src/views/card/components/ActivityList.tsx new file mode 100644 index 00000000..74341506 --- /dev/null +++ b/src/views/card/components/ActivityList.tsx @@ -0,0 +1,185 @@ +import { formatDistanceToNow } from "date-fns"; +import { + HiOutlinePencil, + HiOutlineTag, + HiOutlineUserPlus, + HiOutlineUserMinus, + HiOutlineArrowRight, + HiOutlinePlus, +} from "react-icons/hi2"; + +import Avatar from "~/components/Avatar"; + +import { type GetCardByIdOutput } from "~/types/router.types"; + +type ActivityType = + NonNullable["activities"][number]["type"]; + +const ACTIVITY_TYPE_MAP = { + "card.created": "created the card", + "card.updated.title": "updated the title", + "card.updated.description": "updated the description", + "card.updated.list": "moved the card to another list", + "card.updated.label.added": "added a label to the card", + "card.updated.label.removed": "removed a label from the card", + "card.updated.member.added": "added a member to the card", + "card.updated.member.removed": "removed a member from the card", +} as const; + +const getActivityText = ({ + type, + toTitle, + fromList, + toList, + memberName, + isSelf, + label, +}: { + type: ActivityType; + toTitle: string | null; + fromList: string | null; + toList: string | null; + memberName: string | null; + isSelf: boolean; + label: string | null; +}) => { + if (!(type in ACTIVITY_TYPE_MAP)) return null; + const baseText = ACTIVITY_TYPE_MAP[type as keyof typeof ACTIVITY_TYPE_MAP]; + + const TextHighlight = ({ children }: { children: React.ReactNode }) => ( + + {children} + + ); + + if (type === "card.updated.title" && toTitle) { + return ( + <> + updated the title to {toTitle} + + ); + } + + if (type === "card.updated.list" && fromList && toList) { + return ( + <> + moved the card from {fromList} to + {toList} + + ); + } + + if (type === "card.updated.member.added" && memberName) { + if (isSelf) return <>self-assigned the card; + + return ( + <> + assigned {memberName} to the card + + ); + } + + if (type === "card.updated.member.removed" && memberName) { + if (isSelf) return <>unassigned themselves from the card; + + return ( + <> + unassigned {memberName} from the card + + ); + } + + if (type === "card.updated.label.added" && label) { + return ( + <> + added label {label} + + ); + } + + if (type === "card.updated.label.removed" && label) { + return ( + <> + removed label {label} + + ); + } + + return baseText; +}; + +const ACTIVITY_ICON_MAP: Partial> = + { + "card.created": , + "card.updated.title": , + "card.updated.description": , + "card.updated.list": , + "card.updated.label.added": , + "card.updated.label.removed": , + "card.updated.member.added": , + "card.updated.member.removed": , + } as const; + +const getActivityIcon = (type: ActivityType): React.ReactNode | null => { + return ACTIVITY_ICON_MAP[type] ?? null; +}; + +const ActivityList = ({ + activities, + isLoading, +}: { + activities: NonNullable["activities"]; + isLoading: boolean; +}) => { + return ( +
+ {activities?.map((activity, index) => { + const activityText = getActivityText({ + type: activity.type, + toTitle: activity.toTitle, + fromList: activity.fromList?.name ?? null, + toList: activity.toList?.name ?? null, + memberName: activity.member?.user?.name ?? null, + isSelf: activity.member?.user?.id === activity.user?.id, + label: activity.label?.name ?? null, + }); + + if (!activityText) return null; + + return ( +
+
+ + {index !== activities.length - 1 && ( +
+ )} +
+

+ {`${activity.user?.name} `} + + {activityText} + + ยท + + {formatDistanceToNow(new Date(activity.createdAt), { + addSuffix: true, + })} + +

+
+ ); + })} +
+ ); +}; + +export default ActivityList; diff --git a/src/views/card/index.tsx b/src/views/card/index.tsx index 3de0495e..e396e3a9 100644 --- a/src/views/card/index.tsx +++ b/src/views/card/index.tsx @@ -4,6 +4,7 @@ import { useForm } from "react-hook-form"; import ContentEditable from "react-contenteditable"; import { IoChevronForwardSharp } from "react-icons/io5"; +import ActivityList from "./components/ActivityList"; import Dropdown from "./components/Dropdown"; import { DeleteCardConfirmation } from "./components/DeleteCardConfirmation"; import { DeleteLabelConfirmation } from "./components/DeleteLabelConfirmation"; @@ -15,6 +16,7 @@ import { NewWorkspaceForm } from "~/components/NewWorkspaceForm"; import Modal from "~/components/modal"; import { useModal } from "~/providers/modal"; +import { usePopup } from "~/providers/popup"; import { api } from "~/utils/api"; @@ -26,7 +28,9 @@ interface FormValues { export default function CardPage() { const params = useParams(); + const utils = api.useUtils(); const { modalContentType, entityId } = useModal(); + const { showPopup } = usePopup(); const cardId = Array.isArray(params?.cardId) ? params.cardId[0] @@ -39,6 +43,7 @@ export default function CardPage() { const board = data?.list?.board; const boardId = board?.publicId; const labels = board?.labels; + const activities = data?.activities; const workspaceMembers = board?.workspace?.members; const selectedLabels = data?.labels; const selectedMembers = data?.members; @@ -75,7 +80,17 @@ export default function CardPage() { }; }) ?? []; - const updateCard = api.card.update.useMutation(); + const updateCard = api.card.update.useMutation({ + onSuccess: async () => { + await utils.card.byId.refetch(); + }, + onError: () => { + showPopup({ + header: "Unable to update card", + message: "Please try again later, or contact customer support.", + }); + }, + }); const { register, handleSubmit, setValue, watch } = useForm({ values: { @@ -97,58 +112,74 @@ export default function CardPage() { return (
-
-
- {isLoading ? ( -
-
-
-
- ) : ( - <> - - {board?.name} - - -
-
- -
-
-
- +
+
+
+ {isLoading ? ( +
+
+
- - )} -
-
-
-
- setValue("description", e.target.value)} - onBlur={handleSubmit(onSubmit)} - className="block w-full border-0 bg-transparent py-1.5 text-light-900 focus-visible:outline-none dark:text-dark-1000 sm:text-sm sm:leading-6" + ) : ( + <> + + {board?.name} + + + +
+ +
+ +
+ +
+ + )} +
+
+
+
+ setValue("description", e.target.value)} + onBlur={handleSubmit(onSubmit)} + className="block w-full border-0 bg-transparent py-1.5 text-light-900 focus-visible:outline-none dark:text-dark-1000 sm:text-sm sm:leading-6" + /> +
+
+
+
+

+ Activity +

+
+
- +