diff --git a/moon/apps/web/components/ClView/ApproveItem.tsx b/moon/apps/web/components/ClView/ApproveItem.tsx
new file mode 100644
index 000000000..c1ce2bdb8
--- /dev/null
+++ b/moon/apps/web/components/ClView/ApproveItem.tsx
@@ -0,0 +1,47 @@
+import { ConversationItem } from '@gitmono/types/generated'
+import { ConditionalWrap } from '@gitmono/ui'
+
+import { useGetOrganizationMember } from '@/hooks/useGetOrganizationMember'
+
+import { MemberHovercard } from '../InlinePost/MemberHovercard'
+import { MemberAvatar } from '../MemberAvatar'
+import HandleTime from './components/HandleTime'
+import { UserLinkByName } from './components/UserLinkByName'
+
+interface ApproveItemProps {
+ conv: ConversationItem
+}
+
+const ApproveItem = ({ conv }: ApproveItemProps) => {
+ const { data: member } = useGetOrganizationMember({ username: conv.username })
+
+ return (
+ <>
+
+
+ (
+
+
+ {c}
+
+
+ )}
+ >
+ {member ? : 'Avatar not found'}
+
+
+
+ {conv.username}
+ approved this change list
+
+
+
+
+
+ >
+ )
+}
+
+export default ApproveItem
diff --git a/moon/apps/web/components/ClView/TimelineItems.tsx b/moon/apps/web/components/ClView/TimelineItems.tsx
index 0ce2bc653..4b5e99284 100644
--- a/moon/apps/web/components/ClView/TimelineItems.tsx
+++ b/moon/apps/web/components/ClView/TimelineItems.tsx
@@ -23,6 +23,7 @@ import ReviewComment from '@/components/ClView/ReviewComment'
import { CommonDetailData } from '@/utils/types'
import { SimpleNoteContentRef } from '../SimpleNoteEditor/SimpleNoteContent'
+import ApproveItem from './ApproveItem'
import AssigneeItem from './AssigneeItem'
import CloseItem from './CloseItem'
import EditItem from './EditItem'
@@ -109,6 +110,10 @@ const TimelineItems = React.memo<{
children =
}
break
+ case 'Approve':
+ icon =
+ children =
+ break
case 'Merged':
icon =
children =