Skip to content

Commit be48c08

Browse files
committed
feat: working loading state with all correct animation sequence
1 parent 48a365c commit be48c08

File tree

3 files changed

+27
-34
lines changed

3 files changed

+27
-34
lines changed

models/weaveinit/run_l1_node.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,15 @@ func (m *InitializingAppLoading) Init() tea.Cmd {
609609
}
610610

611611
func (m *InitializingAppLoading) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
612-
md, cmd := m.Loading.Update(msg)
613-
return md, cmd
612+
loader, cmd := m.Loading.Update(msg)
613+
m.Loading = loader
614+
if m.Loading.Completing {
615+
m.state.weave.PreviousResponse += styles.RenderPreviousResponse(styles.NoSeparator, "Initialization successful.", []string{}, "")
616+
return m, tea.Quit
617+
}
618+
return m, cmd
614619
}
615620

616621
func (m *InitializingAppLoading) View() string {
617-
return m.Loading.View()
622+
return m.Loading.View(m.state.weave.PreviousResponse)
618623
}

styles/text.go

+6-15
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,12 @@ func RenderPrompt(text string, highlights []string, status PromptStatus) string
7474
return prompt + text
7575
}
7676

77-
type ResponseSeparator int64
78-
79-
const (
80-
ArrowSeparator ResponseSeparator = iota
81-
DotsSeparator
77+
var (
78+
NoSeparator string = ""
79+
ArrowSeparator string = Text(" > ", Gray)
80+
DotsSeparator string = Text(" ... ", Gray)
8281
)
8382

84-
func RenderPreviousResponse(separator ResponseSeparator, question string, highlights []string, answer string) string {
85-
var separatorString string
86-
switch separator {
87-
case ArrowSeparator:
88-
separatorString = Text(" > ", Gray)
89-
case DotsSeparator:
90-
separatorString = Text(" ... ", Gray)
91-
}
92-
93-
return RenderPrompt(question, highlights, Completed) + separatorString + answer + "\n"
83+
func RenderPreviousResponse(separator string, question string, highlights []string, answer string) string {
84+
return RenderPrompt(question, highlights, Completed) + separator + answer + "\n"
9485
}

utils/loading.go

+13-16
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ var Dot = Spinner{
2323
}
2424

2525
type Loading struct {
26-
Spinner Spinner
27-
Style lipgloss.Style
28-
Text string
26+
Spinner Spinner
27+
Style lipgloss.Style
28+
Text string
29+
Completing bool
2930

30-
quitting bool
31-
completing bool
32-
frame int
31+
quitting bool
32+
frame int
3333
}
3434

3535
func NewLoading(text string) Loading {
@@ -44,16 +44,16 @@ func (m Loading) Init() tea.Cmd {
4444
return m.tick()
4545
}
4646

47-
func (m Loading) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
47+
func (m Loading) Update(msg tea.Msg) (Loading, tea.Cmd) {
4848
switch msg := msg.(type) {
4949
case tea.KeyMsg:
5050
switch msg.String() {
5151
case "q", "esc", "ctrl+c":
5252
m.quitting = true
5353
return m, tea.Quit
5454
case "f":
55-
m.completing = true
56-
return m, tea.Quit
55+
m.Completing = true
56+
return m, nil
5757
default:
5858
return m, nil
5959
}
@@ -69,19 +69,16 @@ func (m Loading) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6969
}
7070
}
7171

72-
func (m Loading) View() string {
72+
func (m Loading) View(previousResponse string) string {
7373
if m.frame >= len(m.Spinner.Frames) {
7474
return "(error)"
7575
}
7676
spinner := m.Style.Render(m.Spinner.Frames[m.frame])
7777

78-
if m.completing {
79-
return fmt.Sprintf("\n%s %s\n", m.Spinner.Complete, m.Text)
80-
}
81-
str := fmt.Sprintf("\n%s %s\n", spinner, m.Text)
82-
if m.quitting {
83-
return str + "\n"
78+
if m.Completing {
79+
return previousResponse
8480
}
81+
str := fmt.Sprintf("%s%s%s\n", previousResponse, spinner, m.Text)
8582
return str
8683
}
8784

0 commit comments

Comments
 (0)