← Files BranchaARCHIVED FILE

skills/brancha/app/src/ui/hooks/useProjects.ts

682 Bytes · Oct 4, 2026 · 12:29 UTC

↓ Download file

import { useCallback, useEffect, useState } from 'react';
import { api } from '../api';
import type { Project } from '../types';

export function useProjects() {
  const [projects, setProjects] = useState<Project[]>([]);
  const [loading, setLoading] = useState(true);

  const reload = useCallback(() => api.listProjects()
    .then(setProjects)
    .catch(console.error)
    .finally(() => setLoading(false)), []);

  useEffect(() => { void reload(); }, [reload]);

  useEffect(() => {
    const events = new EventSource(api.eventsUrl());
    events.onmessage = () => { void reload(); };
    return () => events.close();
  }, [reload]);

  return { projects, loading, reload };
}

SHA-256: fdce7c0376243ec10cb7d72c532add3579a65ab8fb3b3e35a7fd5c5726aa7273