Z ZPI 文档 v0.3.8
介绍页

源码

packages/desktop/src/renderer/use-workspace.ts

typescript26 行查看原文
import { useEffect, useState } from "react";
import type { WorkspaceInfo } from "../shared/bridge.ts";
import { report, useStore } from "./store.ts";
import { unwrap } from "./unwrap.ts";

export function useWorkspace(sessionId: string | undefined) {
  const cwd = useStore((state) => (sessionId ? state.sessions.get(sessionId)?.cwd : undefined));
  const [workspace, setWorkspace] = useState<{ id: string; info: WorkspaceInfo }>();
  useEffect(() => {
    if (!sessionId) return;
    let active = true;
    void window.zpi
      .getWorkspaceInfo(sessionId)
      .then((result) => {
        if (active) setWorkspace({ id: sessionId, info: unwrap(result) });
      })
      .catch((error) => {
        if (active) report(error);
      });
    return () => {
      active = false;
    };
  }, [sessionId, cwd]);
  return workspace && workspace.id === sessionId ? workspace.info : undefined;
}