Skip to content

Commit 25bacf2

Browse files
committed
chore: integrate useWorkspaceDuplication into WorkspaceActions
1 parent 4554895 commit 25bacf2

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ import {
1919
ButtonTypesEnum,
2020
actionsByWorkspaceStatus,
2121
} from "./constants";
22-
import SettingsOutlined from "@mui/icons-material/SettingsOutlined";
23-
import HistoryOutlined from "@mui/icons-material/HistoryOutlined";
24-
import DeleteOutlined from "@mui/icons-material/DeleteOutlined";
22+
2523
import IconButton from "@mui/material/IconButton";
24+
import DuplicateIcon from "@mui/icons-material/FileCopyOutlined";
25+
import SettingsIcon from "@mui/icons-material/SettingsOutlined";
26+
import HistoryIcon from "@mui/icons-material/HistoryOutlined";
27+
import DeleteIcon from "@mui/icons-material/DeleteOutlined";
28+
29+
import { useWorkspaceDuplication } from "pages/CreateWorkspacePage/useWorkspaceDuplication";
2630

2731
export interface WorkspaceActionsProps {
2832
workspace: Workspace;
@@ -69,6 +73,8 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
6973
const canBeUpdated = workspace.outdated && canAcceptJobs;
7074
const menuTriggerRef = useRef<HTMLButtonElement>(null);
7175
const [isMenuOpen, setIsMenuOpen] = useState(false);
76+
const { duplicateWorkspace, duplicationReady } =
77+
useWorkspaceDuplication(workspace);
7278

7379
// A mapping of button type to the corresponding React component
7480
const buttonMapping: ButtonMapping = {
@@ -120,12 +126,16 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
120126
(isUpdating
121127
? buttonMapping[ButtonTypesEnum.updating]
122128
: buttonMapping[ButtonTypesEnum.update])}
129+
123130
{isRestarting && buttonMapping[ButtonTypesEnum.restarting]}
131+
124132
{!isRestarting &&
125133
actionsByStatus.map((action) => (
126134
<Fragment key={action}>{buttonMapping[action]}</Fragment>
127135
))}
136+
128137
{canCancel && <CancelButton handleAction={handleCancel} />}
138+
129139
<div>
130140
<IconButton
131141
title="More options"
@@ -139,27 +149,38 @@ export const WorkspaceActions: FC<WorkspaceActionsProps> = ({
139149
>
140150
<MoreVertOutlined />
141151
</IconButton>
152+
142153
<Menu
143154
id="workspace-options"
144155
anchorEl={menuTriggerRef.current}
145156
open={isMenuOpen}
146157
onClose={() => setIsMenuOpen(false)}
147158
>
148159
<MenuItem onClick={onMenuItemClick(handleSettings)}>
149-
<SettingsOutlined />
160+
<SettingsIcon />
150161
Settings
151162
</MenuItem>
163+
152164
{canChangeVersions && (
153165
<MenuItem onClick={onMenuItemClick(handleChangeVersion)}>
154-
<HistoryOutlined />
166+
<HistoryIcon />
155167
Change version&hellip;
156168
</MenuItem>
157169
)}
170+
171+
<MenuItem
172+
onClick={onMenuItemClick(duplicateWorkspace)}
173+
disabled={!duplicationReady}
174+
>
175+
<DuplicateIcon />
176+
Duplicate&hellip;
177+
</MenuItem>
178+
158179
<MenuItem
159180
onClick={onMenuItemClick(handleDelete)}
160181
data-testid="delete-button"
161182
>
162-
<DeleteOutlined />
183+
<DeleteIcon />
163184
Delete&hellip;
164185
</MenuItem>
165186
</Menu>

0 commit comments

Comments
 (0)