From ac87c6168d20f7e08c937762bc615d0953d19638 Mon Sep 17 00:00:00 2001 From: Ezhil Shanmugham Date: Fri, 12 Apr 2024 13:59:48 +0530 Subject: [PATCH] feat: confirmation on workspace removal (#380) Signed-off-by: Ezhil Shanmugham --- pkg/cmd/workspace/delete.go | 64 ++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/pkg/cmd/workspace/delete.go b/pkg/cmd/workspace/delete.go index a48ee2f6ca..934e1e3d0e 100644 --- a/pkg/cmd/workspace/delete.go +++ b/pkg/cmd/workspace/delete.go @@ -62,16 +62,6 @@ var DeleteCmd = &cobra.Command{ return } - c, err := config.GetConfig() - if err != nil { - log.Fatal(err) - } - - activeProfile, err := c.GetActiveProfile() - if err != nil { - log.Fatal(err) - } - ctx := context.Background() var workspace *serverapiclient.WorkspaceDTO @@ -97,17 +87,30 @@ var DeleteCmd = &cobra.Command{ return } - res, err := apiClient.WorkspaceAPI.RemoveWorkspace(ctx, *workspace.Id).Execute() - if err != nil { - log.Fatal(apiclient.HandleErrorResponse(res, err)) + if !yesFlag { + form := huh.NewForm( + huh.NewGroup( + huh.NewConfirm(). + Title(fmt.Sprintf("Delete workspace %s?", *workspace.Name)). + Description(fmt.Sprintf("Are you sure you want to delete workspace %s?", *workspace.Name)). + Value(&yesFlag), + ), + ).WithTheme(views.GetCustomTheme()) + + err := form.Run() + if err != nil { + log.Fatal(err) + } } - err = config.RemoveWorkspaceSshEntries(activeProfile.Id, *workspace.Id) - if err != nil { - log.Fatal(err) + if yesFlag { + err := removeWorkspace(ctx, apiClient, workspace) + if err != nil { + log.Fatal(err) + } + } else { + fmt.Println("Operation canceled.") } - - util.RenderInfoMessage(fmt.Sprintf("Workspace %s successfully deleted", *workspace.Name)) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { if len(args) > 0 { @@ -145,3 +148,28 @@ func DeleteAllWorkspaces() error { } return nil } + +func removeWorkspace(ctx context.Context, apiClient *serverapiclient.APIClient, workspace *serverapiclient.WorkspaceDTO) error { + res, err := apiClient.WorkspaceAPI.RemoveWorkspace(ctx, *workspace.Id).Execute() + if err != nil { + log.Fatal(apiclient.HandleErrorResponse(res, err)) + } + + c, err := config.GetConfig() + if err != nil { + log.Fatal(err) + } + + activeProfile, err := c.GetActiveProfile() + if err != nil { + log.Fatal(err) + } + + err = config.RemoveWorkspaceSshEntries(activeProfile.Id, *workspace.Id) + if err != nil { + log.Fatal(err) + } + + util.RenderInfoMessage(fmt.Sprintf("Workspace %s successfully deleted", *workspace.Name)) + return nil +}