"use client"; import { useCallback, useImperativeHandle, useState } from "react"; type ActivityLog = { id: string; timestamp: number; activity: string; }; export interface ActivityLogAPI { updateActivityLog: (activityLog: ActivityLog[]) => void; } interface ActivityLogProps { ref: React.RefObject; } const formatter = new Intl.DateTimeFormat("en-GB", { dateStyle: "short", timeStyle: "medium" }); export default function ActivityLog({ ref }: ActivityLogProps) { const [activityLog, updateActivityLog] = useState([]); const handleActivityLogUpdate = useCallback( (newActivities: ActivityLog[]) => { updateActivityLog([...activityLog, ...newActivities]); const activityLogContainer = document.getElementById("activityLogContainer"); if (activityLogContainer) { activityLogContainer.scrollTo({ top: 0, behavior: "smooth" }); } }, [activityLog], ); useImperativeHandle(ref, () => ({ updateActivityLog: handleActivityLogUpdate, })); return (
{activityLog.map((activity) => (
{formatter.format(activity.timestamp)}: {activity.activity}
))} {!activityLog.length && No activity logged.}
); }