Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat: add workspace status on tasks#20037

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
BrunoQuaresma merged 6 commits intomainfrombq/display-ws-status-on-tasks
Oct 1, 2025
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
import { MockDormantWorkspace, MockWorkspace } from "testHelpers/entities";
import type { Meta, StoryObj } from "@storybook/react-vite";
import { WorkspaceStatus } from "./WorkspaceStatus";

const meta: Meta<typeof WorkspaceStatus> = {
title: "modules/workspaces/WorkspaceStatus",
component: WorkspaceStatus,
args: {
workspace: MockWorkspace,
},
};

export default meta;
type Story = StoryObj<typeof WorkspaceStatus>;

export const Running: Story = {};

export const Dormant: Story = {
args: {
workspace: MockDormantWorkspace,
},
};
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
import type { Workspace } from "api/typesGenerated";
import type { FC } from "react";
import { lastUsedMessage } from "utils/workspace";
import { WorkspaceDormantBadge } from "../WorkspaceDormantBadge/WorkspaceDormantBadge";
import { WorkspaceStatusIndicator } from "../WorkspaceStatusIndicator/WorkspaceStatusIndicator";

type WorkspaceStatusProps = {
workspace: Workspace;
};

export const WorkspaceStatus: FC<WorkspaceStatusProps> = ({ workspace }) => {
return (
<div className="flex flex-col">
<WorkspaceStatusIndicator workspace={workspace}>
{workspace.dormant_at && (
<WorkspaceDormantBadge workspace={workspace} />
)}
</WorkspaceStatusIndicator>
<time
dateTime={workspace.last_used_at}
className="text-xs font-medium text-content-secondary ml-6 whitespace-nowrap"
>
{lastUsedMessage(workspace.last_used_at)}
</time>
</div>
);
};
10 changes: 9 additions & 1 deletionsite/src/pages/TasksPage/TasksTable.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@ import { RotateCcwIcon, TrashIcon } from "lucide-react";
import { TaskDeleteDialog } from "modules/tasks/TaskDeleteDialog/TaskDeleteDialog";
import type { Task } from "modules/tasks/tasks";
import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus";
import { WorkspaceStatus } from "modules/workspaces/WorkspaceStatus/WorkspaceStatus";
import { type FC, type ReactNode, useState } from "react";
import { Link as RouterLink } from "react-router";
import { relativeTime } from "utils/time";
Expand DownExpand Up@@ -54,7 +55,8 @@ export const TasksTable: FC<TasksTableProps> = ({ tasks, error, onRetry }) => {
<TableHeader>
<TableRow>
<TableHead>Task</TableHead>
<TableHead>Status</TableHead>
<TableHead>Agent status</TableHead>
<TableHead>Workspace status</TableHead>
<TableHead>Created by</TableHead>
<TableHead />
</TableRow>
Expand DownExpand Up@@ -153,6 +155,9 @@ const TaskRow: FC<TaskRowProps> = ({ task }) => {
status={task.workspace.latest_app_status}
/>
</TableCell>
<TableCell>
<WorkspaceStatus workspace={task.workspace} />
</TableCell>
<TableCell>
<AvatarData
title={task.workspace.owner_name}
Expand DownExpand Up@@ -205,6 +210,9 @@ const TasksSkeleton: FC = () => {
<TableCell>
<Skeleton className="w-[100px] h-6" />
</TableCell>
<TableCell>
<Skeleton className="w-[100px] h-6" />
</TableCell>
<TableCell>
<AvatarDataSkeleton />
</TableCell>
Expand Down
33 changes: 5 additions & 28 deletionssite/src/pages/WorkspacesPage/WorkspacesTable.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,10 +65,9 @@ import { useAppLink } from "modules/apps/useAppLink";
import { useDashboard } from "modules/dashboard/useDashboard";
import { abilitiesByWorkspaceStatus } from "modules/workspaces/actions";
import { WorkspaceBuildCancelDialog } from "modules/workspaces/WorkspaceBuildCancelDialog/WorkspaceBuildCancelDialog";
import { WorkspaceDormantBadge } from "modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge";
import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions";
import { WorkspaceOutdatedTooltip } from "modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip";
import {WorkspaceStatusIndicator } from "modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator";
import {WorkspaceStatus } from "modules/workspaces/WorkspaceStatus/WorkspaceStatus";
import {
useWorkspaceUpdate,
WorkspaceUpdateDialogs,
Expand All@@ -83,10 +82,7 @@ import {
import { useMutation, useQuery, useQueryClient } from "react-query";
import { useNavigate } from "react-router";
import { cn } from "utils/cn";
import {
getDisplayWorkspaceTemplateName,
lastUsedMessage,
} from "utils/workspace";
import { getDisplayWorkspaceTemplateName } from "utils/workspace";
import { WorkspacesEmpty } from "./WorkspacesEmpty";

interface WorkspacesTableProps {
Expand DownExpand Up@@ -256,7 +252,9 @@ export const WorkspacesTable: FC<WorkspacesTableProps> = ({
/>
</TableCell>

<WorkspaceStatusCell workspace={workspace} />
<TableCell>
<WorkspaceStatus workspace={workspace} />
</TableCell>

<WorkspaceActionsCell
workspace={workspace}
Expand DownExpand Up@@ -354,27 +352,6 @@ const cantBeChecked = (workspace: Workspace) => {
return ["deleting", "pending"].includes(workspace.latest_build.status);
};

type WorkspaceStatusCellProps = {
workspace: Workspace;
};

const WorkspaceStatusCell: FC<WorkspaceStatusCellProps> = ({ workspace }) => {
return (
<TableCell>
<div className="flex flex-col">
<WorkspaceStatusIndicator workspace={workspace}>
{workspace.dormant_at && (
<WorkspaceDormantBadge workspace={workspace} />
)}
</WorkspaceStatusIndicator>
<span className="text-xs font-medium text-content-secondary ml-6 whitespace-nowrap">
{lastUsedMessage(workspace.last_used_at)}
</span>
</div>
</TableCell>
);
};

type WorkspaceActionsCellProps = {
workspace: Workspace;
onActionSuccess: () => Promise<void>;
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp