@@ -2,10 +2,13 @@ package tui
22
33import (
44 "fmt"
5+ "sort"
56
67 "github.com/charmbracelet/bubbles/progress"
78 "github.com/charmbracelet/bubbles/spinner"
89 tea "github.com/charmbracelet/bubbletea"
10+
11+ "github.com/chaindead/modup/internal/deps"
912)
1013
1114func (m model ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
@@ -33,7 +36,19 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
3336
3437 case spinner.TickMsg :
3538 var cmd tea.Cmd
36- m .spinner , cmd = m .spinner .Update (msg )
39+
40+ if msg .ID == m .spinner .ID () {
41+ m .spinner , cmd = m .spinner .Update (msg )
42+ return m , cmd
43+ }
44+
45+ for i := range m .scanning {
46+ if msg .ID == m .scanning [i ].spin .ID () {
47+ m .scanning [i ].spin , cmd = m .scanning [i ].spin .Update (msg )
48+ break
49+ }
50+ }
51+
3752 return m , cmd
3853 case progress.FrameMsg :
3954 progressModel , cmd := m .progress .Update (msg )
@@ -64,11 +79,17 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6479 return m , nil
6580 }
6681
67- m .scanning = append (m .scanning , pkg )
68- return m , getPkgInfo (pkg )
82+ m .scanning = append (m .scanning , namedSpinner {
83+ name : pkg ,
84+ spin : newSpinner (),
85+ })
86+ return m , tea .Batch (
87+ getPkgInfo (pkg ),
88+ m .scanning .lastSpinner ().Tick ,
89+ )
6990 case getPackageInfoMsg :
7091 m .packages .current ++
71- m .scanning = remove ( m .scanning , msg .mod .Path )
92+ m .scanning = m .scanning . remove ( msg .mod .Path )
7293 if msg .mod .Updatable {
7394 m .modules = append (m .modules , msg .mod )
7495 }
@@ -91,6 +112,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
91112 tea .Quit ,
92113 )
93114 }
115+ m .modules = sortModules (m .modules )
94116
95117 return m , tea .Sequence (
96118 textPrint ("%s %s" , mark , pkg ),
@@ -153,3 +175,18 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
153175
154176 return m , nil
155177}
178+
179+ var categoryMap = map [string ]int {
180+ "minor" : 1 ,
181+ "patch" : 2 ,
182+ "prerelease" : 3 ,
183+ "metadata" : 4 ,
184+ }
185+
186+ func sortModules (ms []deps.Module ) []deps.Module {
187+ sort .Slice (ms , func (i , j int ) bool {
188+ return categoryMap [ms [i ].UpdateCategory ] < categoryMap [ms [j ].UpdateCategory ]
189+ })
190+
191+ return ms
192+ }
0 commit comments