Skip to content

Commit 67cbbc9

Browse files
committed
Add delet s3 bucket tui
1 parent a01b622 commit 67cbbc9

File tree

8 files changed

+418
-50
lines changed

8 files changed

+418
-50
lines changed

go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0
1414
github.com/charmbracelet/bubbles v0.17.1
1515
github.com/charmbracelet/bubbletea v0.25.0
16+
github.com/charmbracelet/lipgloss v0.9.1
1617
github.com/charmbracelet/log v0.3.1
1718
github.com/fatih/color v1.16.0
1819
github.com/google/go-cmp v0.6.0
@@ -48,7 +49,7 @@ require (
4849
github.com/aws/smithy-go v1.19.0 // indirect
4950
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
5051
github.com/caarlos0/env/v9 v9.0.0 // indirect
51-
github.com/charmbracelet/lipgloss v0.9.1 // indirect
52+
github.com/charmbracelet/harmonica v0.2.0 // indirect
5253
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
5354
github.com/go-logfmt/logfmt v0.6.0 // indirect
5455
github.com/google/subcommands v1.0.1 // indirect

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ github.com/charmbracelet/bubbles v0.17.1 h1:0SIyjOnkrsfDo88YvPgAWvZMwXe26TP6drRv
5252
github.com/charmbracelet/bubbles v0.17.1/go.mod h1:9HxZWlkCqz2PRwsCbYl7a3KXvGzFaDHpYbSYMJ+nE3o=
5353
github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM=
5454
github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg=
55+
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
56+
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
5557
github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg=
5658
github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I=
5759
github.com/charmbracelet/log v0.3.1 h1:TjuY4OBNbxmHWSwO3tosgqs5I3biyY8sQPny/eCMTYw=

ui/common.go

+43
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ func Checkbox(label string, checked bool) string {
3939
return fmt.Sprintf("[ ] %s", label)
4040
}
4141

42+
// ToggleWidget represents a toggle.
43+
func ToggleWidget(label string, now, enabled bool) string {
44+
if now {
45+
if enabled {
46+
return ColorFg("▶ [x] "+label, "212")
47+
}
48+
return ColorFg("▶ [ ] "+label, "212")
49+
}
50+
if enabled {
51+
return ColorFg(" [x] "+label, "212")
52+
}
53+
return fmt.Sprintf(" [ ] %s", label)
54+
}
55+
4256
// Split splits a string into multiple lines.
4357
// Each line has a maximum length of 80 characters.
4458
func Split(s string) []string {
@@ -103,3 +117,32 @@ func (c *Choice) Decrement() {
103117
c.Choice = c.Max
104118
}
105119
}
120+
121+
// Toggle represents a toggle.
122+
type Toggle struct {
123+
Enabled bool
124+
}
125+
126+
// NewToggle returns a new toggle.
127+
func NewToggle() *Toggle {
128+
return &Toggle{
129+
Enabled: false,
130+
}
131+
}
132+
133+
// Toggle toggles the toggle.
134+
func (t *Toggle) Toggle() {
135+
t.Enabled = !t.Enabled
136+
}
137+
138+
// ToggleSets represents a set of toggles.
139+
type ToggleSets []*Toggle
140+
141+
// NewToggleSets returns a new toggle sets.
142+
func NewToggleSets(n int) ToggleSets {
143+
ts := make([]*Toggle, 0, n)
144+
for i := 0; i < n; i++ {
145+
ts = append(ts, NewToggle())
146+
}
147+
return ts
148+
}

ui/s3hub/command.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package s3hub
2+
3+
import (
4+
"context"
5+
"math/rand"
6+
"time"
7+
8+
tea "github.com/charmbracelet/bubbletea"
9+
"github.com/nao1215/rainbow/app/di"
10+
"github.com/nao1215/rainbow/app/domain/model"
11+
"github.com/nao1215/rainbow/app/usecase"
12+
"github.com/nao1215/rainbow/ui"
13+
)
14+
15+
// fetchS3BucketMsg is the message that is sent when the user wants to fetch the list of the S3 buckets.
16+
type fetchS3BucketMsg struct {
17+
buckets model.BucketSets
18+
}
19+
20+
// fetchS3BucketListCmd fetches the list of the S3 buckets.
21+
func fetchS3BucketListCmd(ctx context.Context, app *di.S3App) tea.Cmd {
22+
return tea.Cmd(func() tea.Msg {
23+
output, err := app.S3BucketLister.ListS3Buckets(ctx, &usecase.S3BucketListerInput{})
24+
if err != nil {
25+
return ui.ErrMsg(err)
26+
}
27+
return fetchS3BucketMsg{
28+
buckets: output.Buckets,
29+
}
30+
})
31+
}
32+
33+
type deleteS3BucketMsg struct {
34+
deletedBucket model.Bucket
35+
}
36+
37+
// deleteS3BucketCmd deletes the S3 bucket.
38+
func deleteS3BucketCmd(ctx context.Context, app *di.S3App, bucket model.Bucket) tea.Cmd {
39+
d := time.Millisecond * time.Duration(rand.Intn(500)) //nolint:gosec
40+
return tea.Tick(d, func(t time.Time) tea.Msg {
41+
_, err := app.S3BucketDeleter.DeleteS3Bucket(ctx, &usecase.S3BucketDeleterInput{
42+
Bucket: bucket,
43+
})
44+
if err != nil {
45+
return ui.ErrMsg(err)
46+
}
47+
return deleteS3BucketMsg{
48+
deletedBucket: bucket,
49+
}
50+
})
51+
}

ui/s3hub/create.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func (m *s3hubCreateBucketModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
135135
return m, nil
136136
}
137137

138-
if m.choice == s3hubCreateBucketBucketNameChoice {
138+
if m.state != s3hubCreateBucketStateCreated && m.choice == s3hubCreateBucketBucketNameChoice {
139139
var cmd tea.Cmd
140140
m.bucketNameInput, cmd = m.bucketNameInput.Update(msg)
141141
return m, cmd

0 commit comments

Comments
 (0)