import React from "react"; import { useRouter } from "next/router"; import Link from "next/link"; // icons import { ArrowTopRightOnSquareIcon, ChatBubbleLeftEllipsisIcon, Squares2X2Icon, } from "@heroicons/react/24/outline"; import { BlockedIcon, BlockerIcon } from "components/icons"; import { Icon } from "components/ui"; // helpers import { renderShortDateWithYearFormat, timeAgo } from "helpers/date-time.helper"; import { addSpaceIfCamelCase } from "helpers/string.helper"; // types import RemirrorRichTextEditor from "components/rich-text-editor"; const activityDetails: { [key: string]: { message?: string; icon: JSX.Element; }; } = { assignee: { message: "removed the assignee", icon: , }, assignees: { message: "added a new assignee", icon: , }, blocks: { message: "marked this issue being blocked by", icon: , }, blocking: { message: "marked this issue is blocking", icon: , }, cycles: { message: "set the cycle to", icon: , }, labels: { icon: , }, modules: { message: "set the module to", icon: , }, state: { message: "set the state to", icon: , }, priority: { message: "set the priority to", icon: , }, name: { message: "set the name to", icon: , }, description: { message: "updated the description.", icon: , }, estimate_point: { message: "set the estimate point to", icon: , }, target_date: { message: "set the due date to", icon: , }, parent: { message: "set the parent to", icon: , }, issue: { message: "deleted the issue.", icon: , }, estimate: { message: "updated the estimate", icon: , }, link: { message: "updated the link", icon: , }, attachment: { message: "updated the attachment", icon: , }, archived_at: { message: "archived", icon: , }, }; export const Feeds: React.FC = ({ activities }) => { const router = useRouter(); const { workspaceSlug } = router.query; return ( {activities.map((activity: any, activityIdx: number) => { // determines what type of action is performed let action = activityDetails[activity.field as keyof typeof activityDetails]?.message; if (activity.field === "labels") { action = activity.new_value !== "" ? "added a new label" : "removed the label"; } else if (activity.field === "blocking") { action = activity.new_value !== "" ? "marked this issue is blocking" : "removed the issue from blocking"; } else if (activity.field === "blocks") { action = activity.new_value !== "" ? "marked this issue being blocked by" : "removed blocker"; } else if (activity.field === "target_date") { action = activity.new_value && activity.new_value !== "" ? "set the due date to" : "removed the due date"; } else if (activity.field === "parent") { action = activity.new_value && activity.new_value !== "" ? "set the parent to" : "removed the parent"; } else if (activity.field === "priority") { action = activity.new_value && activity.new_value !== "" ? "set the priority to" : "removed the priority"; } else if (activity.field === "description") { action = "updated the"; } else if (activity.field === "attachment") { action = `${activity.verb} the`; } else if (activity.field === "link") { action = `${activity.verb} the`; } else if (activity.field === "archived_at") { action = activity.new_value && activity.new_value === "restore" ? "restored the issue" : "archived the issue"; } // for values that are after the action clause let value: any = activity.new_value ? activity.new_value : activity.old_value; if ( activity.verb === "created" && activity.field !== "cycles" && activity.field !== "modules" && activity.field !== "attachment" && activity.field !== "link" && activity.field !== "estimate" ) { const { project, issue } = activity; value = ( created{" "} this issue. ); } else if (activity.field === "state") { value = activity.new_value ? addSpaceIfCamelCase(activity.new_value) : "None"; } else if (activity.field === "labels") { let name; let id = "#000000"; if (activity.new_value !== "") { name = activity.new_value; id = activity.new_identifier ? activity.new_identifier : id; } else { name = activity.old_value; id = activity.old_identifier ? activity.old_identifier : id; } value = name; } else if (activity.field === "assignees") { value = activity.new_value; } else if (activity.field === "target_date") { const date = activity.new_value && activity.new_value !== "" ? activity.new_value : activity.old_value; value = renderShortDateWithYearFormat(date as string); } else if (activity.field === "description") { value = "description"; } else if (activity.field === "attachment") { value = "attachment"; } else if (activity.field === "link") { value = "link"; } else if (activity.field === "estimate_point") { value = activity.new_value ? activity.new_value + ` Point${parseInt(activity.new_value ?? "", 10) > 1 ? "s" : ""}` : "None"; } if (activity.field === "comment") { return ( {activity.field ? ( activity.new_value === "restore" ? ( ) : ( activityDetails[activity.field as keyof typeof activityDetails]?.icon ) ) : activity.actor_detail.avatar && activity.actor_detail.avatar !== "" ? ( ) : ( {activity.actor_detail.first_name.charAt(0)} )} {activity.actor_detail.first_name} {activity.actor_detail.is_bot ? "Bot" : " " + activity.actor_detail.last_name} Commented {timeAgo(activity.created_at)} ); } if ("field" in activity && activity.field !== "updated_by") { return ( {activities.length > 1 && activityIdx !== activities.length - 1 ? ( ) : null} <> {activity.field ? ( activityDetails[activity.field as keyof typeof activityDetails] ?.icon ) : activity.actor_detail.avatar && activity.actor_detail.avatar !== "" ? ( ) : ( {activity.actor_detail.first_name.charAt(0)} )} {activity.field === "archived_at" && activity.new_value !== "restore" ? ( Plane ) : ( {activity.actor_detail.first_name} {activity.actor_detail.is_bot ? " Bot" : " " + activity.actor_detail.last_name} )} {action} {activity.field !== "archived_at" && ( {" "} {value}{" "} )} {timeAgo(activity.created_at)} > ); } })} ); };
Commented {timeAgo(activity.created_at)}