-
- Delete target
-
- Are you sure you wish to delete this target? This action is irreversible!
-
-
-
-
-
-
- );
-};
diff --git a/packages/web/app/src/components/v2/modals/index.ts b/packages/web/app/src/components/v2/modals/index.ts
index 90509d734..ba1f6e62c 100644
--- a/packages/web/app/src/components/v2/modals/index.ts
+++ b/packages/web/app/src/components/v2/modals/index.ts
@@ -2,5 +2,4 @@ export { ChangePermissionsModal } from './change-permissions';
export { ConnectSchemaModal } from './connect-schema';
export { DeleteOrganizationModal } from './delete-organization';
export { DeleteProjectModal } from './delete-project';
-export { DeleteTargetModal } from './delete-target';
export { TransferOrganizationOwnershipModal } from './transfer-organization-ownership';
diff --git a/packages/web/app/src/lib/urql-cache.ts b/packages/web/app/src/lib/urql-cache.ts
index 04f40f81c..48c41f844 100644
--- a/packages/web/app/src/lib/urql-cache.ts
+++ b/packages/web/app/src/lib/urql-cache.ts
@@ -13,11 +13,14 @@ import type { DeleteOperationMutationType } from '@/components/target/laboratory
import type { CreateAccessToken_CreateTokenMutation } from '@/components/target/settings/registry-access-token';
import type { DeleteOrganizationDocument } from '@/components/v2/modals/delete-organization';
import { type DeleteProjectMutation } from '@/components/v2/modals/delete-project';
-import { type DeleteTargetMutation } from '@/components/v2/modals/delete-target';
import { graphql } from '@/gql';
import type { CreateOrganizationMutation } from '@/pages/organization-new';
import { CollectionsQuery } from '@/pages/target-laboratory';
-import { TokensDocument, type DeleteTokensDocument } from '@/pages/target-settings';
+import {
+ TokensDocument,
+ type DeleteTargetMutation,
+ type DeleteTokensDocument,
+} from '@/pages/target-settings';
import { ResultOf, VariablesOf } from '@graphql-typed-document-node/core';
import { Cache, QueryInput, UpdateResolver } from '@urql/exchange-graphcache';
diff --git a/packages/web/app/src/pages/target-settings.tsx b/packages/web/app/src/pages/target-settings.tsx
index c6443c37a..8a92ad336 100644
--- a/packages/web/app/src/pages/target-settings.tsx
+++ b/packages/web/app/src/pages/target-settings.tsx
@@ -12,6 +12,14 @@ import { SchemaContracts } from '@/components/target/settings/schema-contracts';
import { Button } from '@/components/ui/button';
import { CardDescription } from '@/components/ui/card';
import { Checkbox } from '@/components/ui/checkbox';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from '@/components/ui/dialog';
import { DocsLink } from '@/components/ui/docs-note';
import { Meta } from '@/components/ui/meta';
import {
@@ -27,7 +35,6 @@ import { TimeAgo } from '@/components/ui/time-ago';
import { useToast } from '@/components/ui/use-toast';
import { Combobox } from '@/components/v2/combobox';
import { Input } from '@/components/v2/input';
-import { DeleteTargetModal } from '@/components/v2/modals';
import { Switch } from '@/components/v2/switch';
import { Table, TBody, Td, Tr } from '@/components/v2/table';
import { Tag } from '@/components/v2/tag';
@@ -1270,3 +1277,101 @@ export function TargetSettingsPage(props: {
>
);
}
+
+export const DeleteTargetMutation = graphql(`
+ mutation deleteTarget($selector: TargetSelectorInput!) {
+ deleteTarget(selector: $selector) {
+ selector {
+ organization
+ project
+ target
+ }
+ deletedTarget {
+ __typename
+ id
+ }
+ }
+ }
+`);
+
+export function DeleteTargetModal(props: {
+ isOpen: boolean;
+ toggleModalOpen: () => void;
+ organizationId: string;
+ projectId: string;
+ targetId: string;
+}) {
+ const { organizationId, projectId, targetId } = props;
+ const [, mutate] = useMutation(DeleteTargetMutation);
+ const { toast } = useToast();
+ const router = useRouter();
+
+ const handleDelete = async () => {
+ const { error } = await mutate({
+ selector: {
+ organization: organizationId,
+ project: projectId,
+ target: targetId,
+ },
+ });
+ if (error) {
+ toast({
+ variant: 'destructive',
+ title: 'Failed to delete target',
+ description: error.message,
+ });
+ } else {
+ toast({
+ title: 'Target deleted',
+ description: 'The target has been successfully deleted.',
+ });
+ props.toggleModalOpen();
+ void router.navigate({
+ to: '/$organizationId/$projectId',
+ params: {
+ organizationId,
+ projectId,
+ },
+ });
+ }
+ };
+
+ return (
+