You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Palantir Foundry Workshop中实现弹出表格与模块加载统计弹窗?

一、实现弹出式表格

在Palantir Foundry Workshop中,可通过结合Blueprint UI组件与Foundry表格API实现弹出式表格,具体步骤如下:

  • 引入依赖:在自定义Workshop组件中导入@blueprintjs/core的Dialog、Button组件,以及@foundry/table-api的FoundryTable和@foundry/ontology-api的相关API用于获取数据
  • 构建触发逻辑:创建按钮作为弹出触发点,通过状态变量控制Dialog的显示/隐藏状态
  • 嵌入表格组件:在Dialog内部渲染FoundryTable,绑定从ontology获取的数据集

示例代码:

import { useState } from "react";
import { Dialog, Button } from "@blueprintjs/core";
import { FoundryTable, TableDataSource } from "@foundry/table-api";
import { Objects } from "@foundry/ontology-api";

export default function PopupTableComponent() {
  const [isOpen, setIsOpen] = useState(false);
  const [dataSource, setDataSource] = useState<TableDataSource | undefined>();

  // 从ontology加载目标数据
  const loadData = async () => {
    const objects = await Objects.search().fromType("YourTargetOntologyType").all();
    setDataSource(TableDataSource.fromObjects(objects));
    setIsOpen(true);
  };

  return (
    <>
      <Button onClick={loadData} intent="primary">打开弹出表格</Button>
      <Dialog isOpen={isOpen} onClose={() => setIsOpen(false)} title="弹出式表格" width={800}>
        {dataSource && <FoundryTable dataSource={dataSource} />}
      </Dialog>
    </>
  );
}
二、实现弹出窗口展示模块加载统计数据

可通过浏览器performance API或Foundry加载生命周期钩子收集模块加载数据,再通过弹出窗口展示,具体步骤如下:

  • 收集统计数据:在组件初始化时,监听资源加载事件,记录每个模块的加载耗时、成功/失败状态等信息
  • 构建弹出窗口:使用Blueprint的Dialog组件,内部用表格布局展示统计数据
  • 设置触发时机:可选择页面加载完成后自动弹出,或通过按钮手动触发

示例代码:

import { useState, useEffect } from "react";
import { Dialog, Button, HTMLTable } from "@blueprintjs/core";

export default function LoadStatsPopup() {
  const [isOpen, setIsOpen] = useState(false);
  const [loadStats, setLoadStats] = useState<Array<{name: string, duration: number, status: string}>>([]);

  // 收集模块加载统计信息
  useEffect(() => {
    const resourceEntries = performance.getEntriesByType("resource");
    const moduleStats = resourceEntries
      .filter(entry => entry.name.includes("/module/"))
      .map(entry => ({
        name: entry.name.split("/").pop() || "未知模块",
        duration: Math.round(entry.duration),
        status: entry.transferSize > 0 ? "加载成功" : "加载失败"
      }));
    setLoadStats(moduleStats);
    // 可选:页面加载完成后自动弹出统计窗口
    // setIsOpen(true);
  }, []);

  return (
    <>
      <Button onClick={() => setIsOpen(true)} intent="info">查看模块加载统计</Button>
      <Dialog isOpen={isOpen} onClose={() => setIsOpen(false)} title="模块加载统计" width={700}>
        <HTMLTable bordered condensed>
          <thead>
            <tr>
              <th>模块名称</th>
              <th>加载耗时(ms)</th>
              <th>状态</th>
            </tr>
          </thead>
          <tbody>
            {loadStats.map((stat, index) => (
              <tr key={index}>
                <td>{stat.name}</td>
                <td>{stat.duration}</td>
                <td>{stat.status}</td>
              </tr>
            ))}
          </tbody>
        </HTMLTable>
      </Dialog>
    </>
  );
}

内容的提问来源于stack exchange,提问作者Monsta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:05:29