Skip to content

Commit 16dffc9

Browse files
feat: manual stack registration (#643)
1 parent 17c4041 commit 16dffc9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1220
-521
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"@dagrejs/dagre": "^1.1.2",
2727
"@fontsource/inter": "^5.0.18",
2828
"@hookform/resolvers": "^3.5.0",
29+
"@radix-ui/react-tabs": "^1.1.0",
2930
"@tanstack/react-query": "^5.40.1",
3031
"@tanstack/react-table": "^8.17.3",
3132
"@tisoap/react-flow-smart-edge": "^3.0.0",

pnpm-lock.yaml

Lines changed: 88 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/stacks/ActionsDropdown.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import {
88
DropdownMenuTrigger
99
} from "@zenml-io/react-component-library";
1010
import { useRef, useState } from "react";
11-
import { DeleteStackDialog, UpdateStackDialog } from "./DialogItems";
11+
import { UpdateStackDialog } from "./DialogItems";
12+
import { AlertDialogItem } from "../../components/AlertDialogDropdownItem";
13+
import { DeleteStackDialog } from "./DeleteStackModal";
1214

13-
type Props = { name: string };
14-
export function StackActionsMenu({ name }: Props) {
15+
type Props = { name: string; id: string };
16+
export function StackActionsMenu({ name, id }: Props) {
1517
const [hasOpenDialog, setHasOpenDialog] = useState(false);
1618
const [dropdownOpen, setDropdownOpen] = useState(false);
1719

@@ -60,18 +62,19 @@ export function StackActionsMenu({ name }: Props) {
6062
closeModal={() => handleDialogItemOpenChange(false)}
6163
/>
6264
</DialogItem>
63-
<DialogItem
65+
<AlertDialogItem
6466
onSelect={handleDialogItemSelect}
6567
onOpenChange={handleDialogItemOpenChange}
6668
icon={<Trash className="h-3 w-3 !fill-neutral-400" />}
6769
triggerChildren="Delete"
6870
>
6971
<DeleteStackDialog
72+
stackId={id}
7073
name={name}
7174
className="lg:min-w-[600px]"
7275
closeModal={() => handleDialogItemOpenChange(false)}
7376
/>
74-
</DialogItem>
77+
</AlertDialogItem>
7578
</DropdownMenuContent>
7679
</DropdownMenu>
7780
</DropdownMenu>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {
2+
AlertDialogCancel,
3+
AlertDialogContent,
4+
AlertDialogDescription,
5+
AlertDialogTitle
6+
} from "@zenml-io/react-component-library";
7+
import { Button } from "@zenml-io/react-component-library/components/server";
8+
import { ComponentPropsWithoutRef, ElementRef, forwardRef } from "react";
9+
import { useDeleteStack } from "./useDeleteStack";
10+
11+
type DeleteDialogProps = {
12+
closeModal?: () => void;
13+
name: string;
14+
stackId: string;
15+
};
16+
17+
export const DeleteStackDialog = forwardRef<
18+
ElementRef<typeof AlertDialogContent>,
19+
ComponentPropsWithoutRef<typeof AlertDialogContent> & DeleteDialogProps
20+
>(({ closeModal, name, stackId, ...rest }, ref) => {
21+
const { handleDelete, deleteStack } = useDeleteStack(stackId);
22+
23+
return (
24+
<AlertDialogContent {...rest} className="p-0" ref={ref}>
25+
<AlertDialogTitle className="m-0 py-2 pl-5 pr-3 text-text-lg font-semibold">
26+
Delete {name}
27+
</AlertDialogTitle>
28+
<div className="border-y border-theme-border-moderate px-5 py-5">
29+
<AlertDialogDescription>
30+
Are you sure you want to delete this stack? <br />
31+
This action cannot be undone.
32+
</AlertDialogDescription>
33+
</div>
34+
<div className="flex justify-end gap-3 px-5 py-3">
35+
<AlertDialogCancel onClick={() => closeModal?.()} asChild>
36+
<Button intent="secondary">Cancel</Button>
37+
</AlertDialogCancel>
38+
<Button
39+
disabled={deleteStack.isPending}
40+
type="button"
41+
onClick={() => handleDelete()}
42+
intent="danger"
43+
>
44+
{deleteStack.isPending && (
45+
<div
46+
role="alert"
47+
aria-busy="true"
48+
className="full h-[20px] w-[20px] animate-spin rounded-rounded border-2 border-theme-text-negative border-b-theme-text-error"
49+
></div>
50+
)}
51+
Delete
52+
</Button>
53+
</div>
54+
</AlertDialogContent>
55+
);
56+
});
57+
58+
DeleteStackDialog.displayName = "DeleteStackDialog";

src/app/stacks/DialogItems.tsx

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,28 +34,6 @@ export const UpdateStackDialog = forwardRef<
3434

3535
UpdateStackDialog.displayName = "UpdateStackDialog";
3636

37-
export const DeleteStackDialog = forwardRef<
38-
ElementRef<typeof DialogContent>,
39-
ComponentPropsWithoutRef<typeof DialogContent> & Props
40-
>(({ closeModal, name, ...rest }, ref) => {
41-
return (
42-
<DialogContent {...rest} ref={ref}>
43-
<DialogHeader>
44-
<DialogTitle>Delete Stack</DialogTitle>
45-
</DialogHeader>
46-
<div className="space-y-5 p-7">
47-
<Infobox action="delete" />
48-
<div className="space-y-1">
49-
<p className="text-text-sm text-theme-text-secondary">Delete a stack</p>
50-
<Codesnippet codeClasses="whitespace-pre-wrap" wrap code={`zenml stack delete ${name}`} />
51-
</div>
52-
</div>
53-
</DialogContent>
54-
);
55-
});
56-
57-
DeleteStackDialog.displayName = "DeleteStackDialog";
58-
5937
type InfoProps = {
6038
action: "delete" | "update" | "describe";
6139
};

src/app/stacks/Fallback/Fragments.tsx

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)