- {/* Title */}
- {title &&
{title}
}
-
- {/* Activity List */}
-
- {isLoading ? (
- // Loading state
- Array.from({ length: 3 }).map((_, index) => (
-
- ))
- ) : displayActivities.length === 0 ? (
- // Empty state
-
{emptyMessage}
- ) : (
- // Grouped activities
- sortedDateKeys.map(dateKey => (
-
-
- {formatDateGroup(dateKey)}
-
-
- {groupedActivities[dateKey].map(activity => (
- -
- {/* Timeline connector */}
-
-
- {/* Activity dot */}
-
-
- {/* Activity content */}
-
- {/* Activity icon or user avatar */}
- {activity.user ? (
-
-
-
- {activity.user.name.split(' ').map(n => n[0]).join('')}
-
-
- ) : activity.icon ? (
-
- ) : null}
-
- {/* Activity details */}
-
-
- {activity.user && (
- {activity.user.name}
- )}{' '}
- {activity.description}
-
-
- {/* Time */}
-
-
- {formatTime(activity.timestamp)}
-
-
-
-
- ))}
-
-
- ))
- )}
-
-
- {/* Show more link */}
- {maxItems && activities.length > maxItems && (
-
-
{
- e.preventDefault();
- // Handle showing more activities or navigation
- }}
- >
- View all activities
-
+ {/* Filter controls */}
+ {!hideFilters && availableTypes.length > 0 && (
+
+ {availableTypes.map(type => (
+ toggleFilter(type)}
+ >
+
+ {getActivityIcon(type)}
+ {type}
+
+
+ ))}
+
+ {activeFilters.length > 0 && (
+
+ )}
)}
+
+ {/* Activity list */}
+
+ {groupedActivities.length === 0 || filteredActivities.length === 0 ? (
+
+ No activities to display
+
+ ) : (
+
+ {groupedActivities.map((group) => (
+
+ {/* Date header (if grouping by date) */}
+ {groupByDate && (
+
+
+ {formatGroupDate(group.date)}
+
+
+
+ )}
+
+ {/* Activities list */}
+
+ {group.activities.map((activity) => {
+ const timestamp = new Date(activity.timestamp);
+ const isExpanded = expanded[activity.id.toString()];
+
+ return (
+
+
+
+
+ {activity.user.name.charAt(0)}
+
+
{activity.user.name}
+
+
+
+ {formatDistance(timestamp, new Date(), { addSuffix: true })}
+
+
+
+ }
+ description={
+
+
+
+ {getActivityIcon(activity.type)}
+
+
{getActivityMessage(activity)}
+
+
+ {activity.entity && (
+
+
toggleExpanded(activity.id)}
+ >
+
+
{activity.entity.name}
+
+
+
+ {isExpanded && activity.meta && (
+
+ {activity.meta.excerpt && (
+
"{activity.meta.excerpt}"
+ )}
+ {activity.meta.details && (
+
{activity.meta.details}
+ )}
+
+ )}
+
+
+ )}
+
+ }
+ icon={activity.meta?.important ? AlertCircle : undefined}
+ active={activity.meta?.active}
+ variant={activity.meta?.highlighted ? "highlight" : undefined}
+ />
+ );
+ })}
+
+
+ ))}
+
+ )}
+
+ {/* Load more button */}
+ {hasMore && (
+
+
+
+ )}
+
);
}
-// Skeleton loader for activity items
-function ActivityItemSkeleton() {
- return (
-