Source: hooks/useLogsStream.js

import React, { useRef, useCallback } from "react";
import { getLogsStream } from "../helpers/dockerService/serviceComponents/containerLogs";
import { safeCall } from "../helpers/safeCall";

/**
 * Hook that manages opening and closing a logs stream for a container.
 *
 * @returns {Object} { openLogs, closeLogs }
 */
export function useLogsStream() {
  const logsStreamRef = useRef(null);

  const openLogs = useCallback((containerId, setLogs) => {
    setLogs([]);
    logsStreamRef.current = getLogsStream(
      containerId,
      (data) => setLogs((prev) => ([...prev, ...data.split("\n").filter(Boolean)])),
      () => {},
      (err) => setLogs((prev) => ([...prev, `Error: ${err.message}`]))
    );
  }, []);

  const closeLogs = useCallback(() => {
    if (logsStreamRef.current) {
      safeCall(logsStreamRef.current.destroy?.bind(logsStreamRef.current));
      logsStreamRef.current = null;
    }
  }, []);

  return { openLogs, closeLogs };
}