Skip to content

feat: add extra workspace actions in the workspaces table #17775

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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
May 13, 2025
Prev Previous commit
Next Next commit
Run FMT
  • Loading branch information
BrunoQuaresma committed May 12, 2025
commit c79952bc48f68ff0d5a7fc36ca8719cefda133f4
10 changes: 5 additions & 5 deletions site/src/api/queries/workspaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ import type {
WorkspacesResponse,
} from "api/typesGenerated";
import type { Dayjs } from "dayjs";
import {
type WorkspacePermissions,
workspaceChecks,
} from "modules/workspaces/permissions";
import type { ConnectionStatus } from "pages/TerminalPage/types";
import type {
QueryClient,
QueryOptions,
UseMutationOptions,
} from "react-query";
import { checkAuthorization } from "./authCheck";
import { disabledRefetchOptions } from "./util";
import { workspaceBuildsKey } from "./workspaceBuilds";
import {
workspaceChecks,
type WorkspacePermissions,
} from "modules/workspaces/permissions";
import { checkAuthorization } from "./authCheck";

export const workspaceByOwnerAndNameKey = (owner: string, name: string) => [
"workspace",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import type { Meta, StoryObj } from "@storybook/react";
import { templateVersionsQueryKey } from "api/queries/templates";
import {
MockTemplate,
MockTemplateVersion,
MockTemplateVersionWithMarkdownMessage,
MockWorkspace,
} from "testHelpers/entities";
import { ChangeWorkspaceVersionDialog } from "./ChangeWorkspaceVersionDialog";
import { templateVersionsQueryKey } from "api/queries/templates";

const noMessage = {
...MockTemplateVersion,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react";
import { MockFailedWorkspace, MockWorkspace } from "testHelpers/entities";
import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog";
import { daysAgo } from "utils/time";
import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog";

const meta: Meta<typeof WorkspaceDeleteDialog> = {
title: "modules/workspaces/WorkspaceDeleteDialog",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,20 @@ import {
DropdownMenuTrigger,
} from "components/DropdownMenu/DropdownMenu";
import {
CopyIcon,
DownloadIcon,
EllipsisVertical,
SettingsIcon,
HistoryIcon,
SettingsIcon,
TrashIcon,
CopyIcon,
DownloadIcon,
} from "lucide-react";
import { UpdateBuildParametersDialog } from "./UpdateBuildParametersDialog";
import { DownloadLogsDialog } from "./DownloadLogsDialog";
import { useState, type FC } from "react";
import { type FC, useState } from "react";
import { useMutation, useQuery, useQueryClient } from "react-query";
import { Link as RouterLink } from "react-router-dom";
import { ChangeWorkspaceVersionDialog } from "./ChangeWorkspaceVersionDialog";
import { DownloadLogsDialog } from "./DownloadLogsDialog";
import { UpdateBuildParametersDialog } from "./UpdateBuildParametersDialog";
import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog";
import type { WorkspacePermissions } from "../permissions";
import { useWorkspaceDuplication } from "./useWorkspaceDuplication";

type WorkspaceMoreActionsProps = {
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/WorkspacePage/Workspace.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import type { ProvisionerJobLog } from "api/typesGenerated";
import { ProxyContext, getPreferredProxy } from "contexts/ProxyContext";
import * as Mocks from "testHelpers/entities";
import { withAuthProvider, withDashboardProvider } from "testHelpers/storybook";
import { Workspace } from "./Workspace";
import type { WorkspacePermissions } from "../../modules/workspaces/permissions";
import { Workspace } from "./Workspace";

// Helper function to create timestamps easily - Copied from AppStatuses.stories.tsx
const createTimestamp = (
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/WorkspacePage/Workspace.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { AgentRow } from "modules/resources/AgentRow";
import { WorkspaceTimings } from "modules/workspaces/WorkspaceTiming/WorkspaceTimings";
import { type FC, useMemo } from "react";
import { useNavigate } from "react-router-dom";
import type { WorkspacePermissions } from "../../modules/workspaces/permissions";
import { AppStatuses } from "./AppStatuses";
import { HistorySidebar } from "./HistorySidebar";
import { ResourceMetadata } from "./ResourceMetadata";
Expand All @@ -24,7 +25,6 @@ import {
} from "./WorkspaceBuildProgress";
import { WorkspaceDeletedBanner } from "./WorkspaceDeletedBanner";
import { WorkspaceTopbar } from "./WorkspaceTopbar";
import type { WorkspacePermissions } from "../../modules/workspaces/permissions";
import { resourceOptionValue, useResourcesNav } from "./useResourcesNav";

export interface WorkspaceProps {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import { deploymentConfig } from "api/queries/deployment";
import type { Workspace, WorkspaceBuildParameter } from "api/typesGenerated";
import { useAuthenticated } from "hooks/useAuthenticated";
import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions";
import {
type ActionType,
abilitiesByWorkspaceStatus,
} from "modules/workspaces/actions";
import type { WorkspacePermissions } from "modules/workspaces/permissions";
import { type FC, Fragment, type ReactNode } from "react";
import { useQuery } from "react-query";
import { mustUpdateWorkspace } from "utils/workspace";
import {
ActivateButton,
Expand All @@ -20,10 +24,6 @@ import {
} from "./Buttons";
import { DebugButton } from "./DebugButton";
import { RetryButton } from "./RetryButton";
import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions";
import type { WorkspacePermissions } from "modules/workspaces/permissions";
import { useQuery } from "react-query";
import { deploymentConfig } from "api/queries/deployment";

export interface WorkspaceActionsProps {
workspace: Workspace;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react";
import { expect, userEvent, waitFor, within } from "@storybook/test";
import { getWorkspaceResolveAutostartQueryKey } from "api/queries/workspaceQuota";
import type { WorkspacePermissions } from "modules/workspaces/permissions";
import {
MockOutdatedWorkspace,
MockTemplate,
Expand All @@ -10,7 +11,6 @@ import {
} from "testHelpers/entities";
import { withDashboardProvider } from "testHelpers/storybook";
import { WorkspaceNotifications } from "./WorkspaceNotifications";
import type { WorkspacePermissions } from "modules/workspaces/permissions";

const defaultPermissions: WorkspacePermissions = {
readWorkspace: true,
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/WorkspacePage/WorkspacePage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
DashboardContext,
type DashboardProvider,
} from "modules/dashboard/DashboardProvider";
import type { WorkspacePermissions } from "modules/workspaces/permissions";
import { http, HttpResponse } from "msw";
import type { FC } from "react";
import { type Location, useLocation } from "react-router-dom";
Expand All @@ -33,7 +34,6 @@ import {
} from "testHelpers/renderHelpers";
import { server } from "testHelpers/server";
import WorkspacePage from "./WorkspacePage";
import type { WorkspacePermissions } from "modules/workspaces/permissions";

const { API, MissingBuildParameters } = apiModule;

Expand Down
1 change: 0 additions & 1 deletion site/src/pages/WorkspacePage/WorkspacePage.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { watchWorkspace } from "api/api";
import { checkAuthorization } from "api/queries/authCheck";
import { template as templateQueryOptions } from "api/queries/templates";
import { workspaceBuildsKey } from "api/queries/workspaceBuilds";
import {
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ import {
WorkspaceUpdateDialogs,
useWorkspaceUpdate,
} from "modules/workspaces/WorkspaceUpdateDialogs";
import type { WorkspacePermissions } from "modules/workspaces/permissions";
import { type FC, useEffect, useState } from "react";
import { Helmet } from "react-helmet-async";
import { useMutation, useQuery, useQueryClient } from "react-query";
import { pageTitle } from "utils/page";
import { Workspace } from "./Workspace";
import type { WorkspacePermissions } from "modules/workspaces/permissions";

interface WorkspaceReadyPageProps {
template: TypesGen.Template;
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/WorkspacePage/WorkspaceTopbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ import type { FC } from "react";
import { useQuery } from "react-query";
import { Link as RouterLink } from "react-router-dom";
import { displayDormantDeletion } from "utils/dormant";
import type { WorkspacePermissions } from "../../modules/workspaces/permissions";
import { WorkspaceActions } from "./WorkspaceActions/WorkspaceActions";
import { WorkspaceNotifications } from "./WorkspaceNotifications/WorkspaceNotifications";
import { WorkspaceScheduleControls } from "./WorkspaceScheduleControls";
import type { WorkspacePermissions } from "../../modules/workspaces/permissions";

export type WorkspaceError =
| "getBuildsError"
Expand Down
4 changes: 2 additions & 2 deletions site/src/pages/WorkspacesPage/WorkspacesTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
import { useAuthenticated } from "hooks";
import { useClickableTableRow } from "hooks/useClickableTableRow";
import { ChevronRightIcon, EllipsisVertical } from "lucide-react";
import { EllipsisVertical } from "lucide-react";
import {
BanIcon,
PlayIcon,
Expand All @@ -68,6 +68,7 @@ import { useAppLink } from "modules/apps/useAppLink";
import { useDashboard } from "modules/dashboard/useDashboard";
import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus";
import { WorkspaceDormantBadge } from "modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge";
import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions";
import { WorkspaceOutdatedTooltip } from "modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip";
import {
WorkspaceUpdateDialogs,
Expand All @@ -91,7 +92,6 @@ import {
lastUsedMessage,
} from "utils/workspace";
import { WorkspacesEmpty } from "./WorkspacesEmpty";
import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions";

dayjs.extend(relativeTime);

Expand Down
Loading