mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
refactor: remove activity column from workspaces table (#19555)
Fixes https://github.com/coder/coder/issues/19504
This commit is contained in:
@@ -2,12 +2,10 @@ import {
|
||||
MockBuildInfo,
|
||||
MockOrganization,
|
||||
MockPendingProvisionerJob,
|
||||
MockStoppedWorkspace,
|
||||
MockTemplate,
|
||||
MockUserOwner,
|
||||
MockWorkspace,
|
||||
MockWorkspaceAgent,
|
||||
MockWorkspaceAppStatus,
|
||||
mockApiError,
|
||||
} from "testHelpers/entities";
|
||||
import {
|
||||
@@ -383,68 +381,3 @@ export const ShowOrganizations: Story = {
|
||||
expect(accessibleTableCell).toBeDefined();
|
||||
},
|
||||
};
|
||||
|
||||
export const WithLatestAppStatus: Story = {
|
||||
args: {
|
||||
workspaces: [
|
||||
{
|
||||
...MockWorkspace,
|
||||
name: "long-app-status",
|
||||
latest_app_status: {
|
||||
...MockWorkspaceAppStatus,
|
||||
message:
|
||||
"This is a long message that will wrap around the component. It should wrap many times because this is very very very very very long.",
|
||||
},
|
||||
},
|
||||
{
|
||||
...MockWorkspace,
|
||||
name: "no-app-status",
|
||||
latest_app_status: null,
|
||||
},
|
||||
{
|
||||
...MockWorkspace,
|
||||
name: "app-status-working",
|
||||
latest_app_status: {
|
||||
...MockWorkspaceAppStatus,
|
||||
state: "working",
|
||||
message: "Fixing the competitors page...",
|
||||
},
|
||||
},
|
||||
{
|
||||
...MockWorkspace,
|
||||
name: "app-status-failure",
|
||||
latest_app_status: {
|
||||
...MockWorkspaceAppStatus,
|
||||
state: "failure",
|
||||
message: "I couldn't figure it out...",
|
||||
},
|
||||
},
|
||||
{
|
||||
...{
|
||||
...MockStoppedWorkspace,
|
||||
latest_build: {
|
||||
...MockStoppedWorkspace.latest_build,
|
||||
resources: [],
|
||||
},
|
||||
},
|
||||
name: "stopped-app-status-failure",
|
||||
latest_app_status: {
|
||||
...MockWorkspaceAppStatus,
|
||||
state: "failure",
|
||||
message: "I couldn't figure it out...",
|
||||
uri: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
...MockWorkspace,
|
||||
name: "app-status-working-with-uri",
|
||||
latest_app_status: {
|
||||
...MockWorkspaceAppStatus,
|
||||
state: "working",
|
||||
message: "Updating the README...",
|
||||
uri: "file:///home/coder/projects/coder/coder/README.md",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -64,7 +64,6 @@ import {
|
||||
import { useAppLink } from "modules/apps/useAppLink";
|
||||
import { useDashboard } from "modules/dashboard/useDashboard";
|
||||
import { abilitiesByWorkspaceStatus } from "modules/workspaces/actions";
|
||||
import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus";
|
||||
import { WorkspaceBuildCancelDialog } from "modules/workspaces/WorkspaceBuildCancelDialog/WorkspaceBuildCancelDialog";
|
||||
import { WorkspaceDormantBadge } from "modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge";
|
||||
import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions";
|
||||
@@ -79,7 +78,6 @@ import {
|
||||
type FC,
|
||||
type PropsWithChildren,
|
||||
type ReactNode,
|
||||
useMemo,
|
||||
useState,
|
||||
} from "react";
|
||||
import { useMutation, useQuery, useQueryClient } from "react-query";
|
||||
@@ -116,51 +114,12 @@ export const WorkspacesTable: FC<WorkspacesTableProps> = ({
|
||||
onActionError,
|
||||
}) => {
|
||||
const dashboard = useDashboard();
|
||||
const workspaceIDToAppByStatus = useMemo(() => {
|
||||
return (
|
||||
workspaces?.reduce(
|
||||
(acc, workspace) => {
|
||||
if (!workspace.latest_app_status) {
|
||||
return acc;
|
||||
}
|
||||
for (const resource of workspace.latest_build.resources) {
|
||||
for (const agent of resource.agents ?? []) {
|
||||
for (const app of agent.apps ?? []) {
|
||||
if (app.id === workspace.latest_app_status.app_id) {
|
||||
acc[workspace.id] = { app, agent };
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return acc;
|
||||
},
|
||||
{} as Record<
|
||||
string,
|
||||
{
|
||||
app: WorkspaceApp;
|
||||
agent: WorkspaceAgent;
|
||||
}
|
||||
>,
|
||||
) || {}
|
||||
);
|
||||
}, [workspaces]);
|
||||
const hasActivity = useMemo(
|
||||
() => Object.keys(workspaceIDToAppByStatus).length > 0,
|
||||
[workspaceIDToAppByStatus],
|
||||
);
|
||||
const tableColumnSize = {
|
||||
name: "w-2/6",
|
||||
template: hasActivity ? "w-1/6" : "w-2/6",
|
||||
status: hasActivity ? "w-1/6" : "w-2/6",
|
||||
activity: "w-2/6",
|
||||
};
|
||||
|
||||
return (
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
<TableHead className={tableColumnSize.name}>
|
||||
<TableHead className="w-1/3">
|
||||
<div className="flex items-center gap-2">
|
||||
{canCheckWorkspaces && (
|
||||
<Checkbox
|
||||
@@ -184,11 +143,8 @@ export const WorkspacesTable: FC<WorkspacesTableProps> = ({
|
||||
Name
|
||||
</div>
|
||||
</TableHead>
|
||||
<TableHead className={tableColumnSize.template}>Template</TableHead>
|
||||
<TableHead className={tableColumnSize.status}>Status</TableHead>
|
||||
{hasActivity && (
|
||||
<TableHead className={tableColumnSize.activity}>Activity</TableHead>
|
||||
)}
|
||||
<TableHead className="w-1/3">Template</TableHead>
|
||||
<TableHead className="w-1/3">Status</TableHead>
|
||||
<TableHead className="w-0">
|
||||
<span className="sr-only">Actions</span>
|
||||
</TableHead>
|
||||
@@ -302,15 +258,6 @@ export const WorkspacesTable: FC<WorkspacesTableProps> = ({
|
||||
|
||||
<WorkspaceStatusCell workspace={workspace} />
|
||||
|
||||
{hasActivity && (
|
||||
<TableCell>
|
||||
<WorkspaceAppStatus
|
||||
status={workspace.latest_app_status}
|
||||
disabled={workspace.latest_build.status !== "running"}
|
||||
/>
|
||||
</TableCell>
|
||||
)}
|
||||
|
||||
<WorkspaceActionsCell
|
||||
workspace={workspace}
|
||||
onActionSuccess={onActionSuccess}
|
||||
|
||||
Reference in New Issue
Block a user