From 0bb4c712adb326c02ddae7c5014a22e4faaf8559 Mon Sep 17 00:00:00 2001 From: Dotta Date: Fri, 15 May 2026 11:35:57 -0500 Subject: [PATCH] Make project workspace changes tab load stale diff plugin --- .../plugin-workspace-diff/src/ui/index.tsx | 12 ++++---- ui/src/pages/ProjectWorkspaceDetail.test.tsx | 29 ++++++++++-------- ui/src/pages/ProjectWorkspaceDetail.tsx | 30 ++++++++++++++++--- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/packages/plugins/plugin-workspace-diff/src/ui/index.tsx b/packages/plugins/plugin-workspace-diff/src/ui/index.tsx index 6241bdb4c1e..c4231b9e31c 100644 --- a/packages/plugins/plugin-workspace-diff/src/ui/index.tsx +++ b/packages/plugins/plugin-workspace-diff/src/ui/index.tsx @@ -215,10 +215,10 @@ function FileDiffPanel({ return (
- {file.patches.map((patch) => { + {file.patches.map((patch, index) => { const patchWarning = patchWarningText(patch); return ( -
+
{file.patches.length > 1 ? (
{patchKindLabel(patch.kind)} @@ -453,9 +453,9 @@ export function ChangesTab({ context }: PluginDetailTabProps) { Files
- {files.map((file) => ( + {files.map((file, index) => ( {files - .map((file) => ( + .map((file, index) => (
diff --git a/ui/src/pages/ProjectWorkspaceDetail.test.tsx b/ui/src/pages/ProjectWorkspaceDetail.test.tsx index 9ee2d5e22ed..e33871fe0a2 100644 --- a/ui/src/pages/ProjectWorkspaceDetail.test.tsx +++ b/ui/src/pages/ProjectWorkspaceDetail.test.tsx @@ -55,20 +55,23 @@ vi.mock("@/plugins/slots", () => ({ }, usePluginSlots: (filters: unknown) => { mockUsePluginSlots(filters); + const entityType = (filters as { entityType?: string }).entityType; return { - slots: [ - { - id: "workspace-changes-tab", - type: "detailTab", - displayName: "Changes", - exportName: "WorkspaceChangesTab", - entityTypes: ["project_workspace"], - pluginId: "plugin-1", - pluginKey: "paperclip.workspace-diff", - pluginDisplayName: "Workspace Diff", - pluginVersion: "0.1.0", - }, - ], + slots: entityType === "execution_workspace" + ? [ + { + id: "workspace-changes-tab", + type: "detailTab", + displayName: "Changes", + exportName: "WorkspaceChangesTab", + entityTypes: ["execution_workspace"], + pluginId: "plugin-1", + pluginKey: "paperclip.workspace-diff", + pluginDisplayName: "Workspace Diff", + pluginVersion: "0.1.0", + }, + ] + : [], isLoading: false, errorMessage: null, }; diff --git a/ui/src/pages/ProjectWorkspaceDetail.tsx b/ui/src/pages/ProjectWorkspaceDetail.tsx index ac0d1c84f6e..7d1030ea025 100644 --- a/ui/src/pages/ProjectWorkspaceDetail.tsx +++ b/ui/src/pages/ProjectWorkspaceDetail.tsx @@ -278,6 +278,16 @@ export function ProjectWorkspaceDetail() { companyId: project?.companyId ?? null, enabled: Boolean(project?.companyId), }); + const { + slots: legacyWorkspacePluginDetailSlots, + isLoading: legacyWorkspacePluginDetailSlotsLoading, + errorMessage: legacyWorkspacePluginDetailSlotsError, + } = usePluginSlots({ + slotTypes: ["detailTab"], + entityType: "execution_workspace", + companyId: project?.companyId ?? null, + enabled: Boolean(project?.companyId), + }); const pluginTabItems = useMemo( () => pluginDetailSlots.map((slot) => ({ value: `plugin:${slot.pluginKey}:${slot.id}`, @@ -286,7 +296,19 @@ export function ProjectWorkspaceDetail() { })), [pluginDetailSlots], ); - const changesPluginTab = pluginTabItems.find((item) => item.value === WORKSPACE_CHANGES_PLUGIN_TAB) ?? null; + const legacyWorkspacePluginTabItems = useMemo( + () => legacyWorkspacePluginDetailSlots.map((slot) => ({ + value: `plugin:${slot.pluginKey}:${slot.id}`, + label: slot.displayName, + slot, + })), + [legacyWorkspacePluginDetailSlots], + ); + const changesPluginTab = pluginTabItems.find((item) => item.value === WORKSPACE_CHANGES_PLUGIN_TAB) + ?? legacyWorkspacePluginTabItems.find((item) => item.value === WORKSPACE_CHANGES_PLUGIN_TAB) + ?? null; + const changesPluginTabLoading = pluginDetailSlotsLoading || legacyWorkspacePluginDetailSlotsLoading; + const changesPluginTabError = pluginDetailSlotsError ?? legacyWorkspacePluginDetailSlotsError; useEffect(() => { if (!project?.companyId || project.companyId === selectedCompanyId) return; @@ -726,9 +748,9 @@ export function ProjectWorkspaceDetail() { /> ) : (
- {pluginDetailSlotsError - ? `Workspace changes failed to load: ${pluginDetailSlotsError}` - : pluginDetailSlotsLoading + {changesPluginTabError + ? `Workspace changes failed to load: ${changesPluginTabError}` + : changesPluginTabLoading ? "Loading workspace changes..." : "Workspace changes are not available."}