feat(resource-list): paginate app, dataset, and skill lists - #7622
feat(resource-list): paginate app, dataset, and skill lists#7622FinleyGe wants to merge 34 commits into
Conversation
|
✅ Admin Preview Image Ready! 🕒 Time: 2026-09-04 17:29:26 (UTC+8) |
|
✅ Build and publish successful - Preview fastgpt Image: 🕒 Time: 2026-09-04 16:59:11 (UTC+8) |
c52e47d to
460c4c4
Compare
Coverage Report
File CoverageNo changed files found. |
8c83dd7 to
8bef898
Compare
c121914yu
left a comment
There was a problem hiding this comment.
整体方向正确:V2 在 ACL 过滤后分页、保留 V1 数组协议,CI 也已全部通过。但当前还有几处建议合并前处理的问题:
-
Tool、Skill、Dataset Dashboard 的滚动容器与分页监听不一致。
useScrollPagination监听内层ScrollData,但dashboard/tool/index.tsx:95、dashboard/skill/index.tsx:86、dataset/list/index.tsx:106仍由外层容器滚动,List 的 flex 父项也没有minH={0}。实际滚动可能不会触发下一页,只能停留在首批数据。建议统一采用 Agent 页已有的overflowY="hidden" + minH={0}布局。 -
App 配置的 Dataset 选择器仍然全量加载和全量渲染。
components/core/app/DatasetSelectModal.tsx:69-95每次目录或搜索变化都调用getAllDatasets,并在:308直接 map 全部数据。这与设计文档中普通展示使用 V2、仅全选操作读取完整候选集的方案不一致,也是本 PR 要解决的大数据量场景。建议列表展示继续走useDatasetSelect,只在全选/取消全选动作中请求完整候选。 -
标注 Dataset 选择器取消了不可用向量模型保护。
SelectMarkCollection.tsx:71-87现在所有非文件夹 Dataset 都可以点击,即使vectorModel?.isActive !== true。旧实现会禁用并阻止选择,当前可能把用户带入无效 Dataset 的 Collection 请求,需要恢复该判断。 -
App 列表读取了完整 workflow modules。
api/core/app/list.ts:132-138和listV2.ts:103-110将原来的modules.flowNodeType投影扩大成了完整modules,但最终响应只是计算hasInteractiveNode后丢弃 modules。尤其 V1 仍是全量接口,这会让 MongoDB 向服务端传输整套工作流节点和 inputs,和本 PR 的性能目标相冲突。建议恢复窄投影,或用 aggregation 直接计算标记。 -
resourcePermissionRepo.ts:202-245的rolePerMap入参被同名局部变量遮蔽,调用方传入值实际无效;新增测试因为 app 类型被硬编码到AppRolePerMap而无法发现这一点。建议使用入参,或删除入参并明确按资源类型内部推导。 -
api/core/dataset/list.ts:145删除了GetDatasetListResponseSchema.parse。旧数据中的 nullish 字段会以违反 OpenAPI 类型的形式从 V1 返回。若目的是兼容旧数据,建议先像 V2 一样归一化,再保留响应契约校验。
现有测试尚未覆盖真实滚动容器、Dataset 跨页选择、不可用模型选择,以及 V2 非 owner 的成员/用户组/组织 ACL 与 total 一致性。建议补充这些关键路径后再合并。
Co-locate scroll list typing and constrain the agent app list container to preserve pagination scrolling.
eb3b607 to
8a49ea8
Compare
变更说明
/core/app/listV2、/core/dataset/listV2、/core/ai/skill/listV2分页接口。SelectOneResource、MoveModal和 ChatHeader 保持旧数组树协议。兼容策略
V1 保持数组响应协议,
getAllApps、getAllDatasets、getAllSkillList继续使用 V1。V2 返回{ list, total },只用于分页场景。验证
pnpm --dir projects/app typecheckgit diff --check完整四包并发测试中出现非稳定失败;失败的 App copy 用例已单独复跑通过。
设计文档:
.agents/design/core/resource-list-pagination-frontend.md