in internal/ui/ui.go [119:202]
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if _, ok := msg.(spinner.TickMsg); !ok {
m.meta.Logger().Log(context.Background(), log.LevelTrace, "UI update", "status", m.status, "msg", fmt.Sprintf("%#v", msg))
}
switch msg := msg.(type) {
case tea.WindowSizeMsg:
m.winsize = msg
case tea.KeyMsg:
switch msg.Type {
case tea.KeyCtrlC:
m.status = statusQuitting
return m, aztfexportclient.Quit(m.ctx, m.meta)
}
case spinner.TickMsg:
var cmd tea.Cmd
m.spinner, cmd = m.spinner.Update(msg)
return m, cmd
case aztfexportclient.NewClientMsg:
m.meta = msg
m.status = statusInit
return m, aztfexportclient.Init(m.ctx, m.meta)
case aztfexportclient.InitProviderDoneMsg:
m.status = statusListingResource
return m, aztfexportclient.ListResource(m.ctx, m.meta)
case aztfexportclient.ListResourceDoneMsg:
m.status = statusBuildingImportList
m.importlist = importlist.NewModel(m.ctx, m.meta, msg.List, 0)
// Trigger a windows resize cmd to resize the importlist model.
// Though we can pass the winsize as input variable during model initialization.
// But this way we only need to maintain the resizing logic at one place (which takes consideration of the title height).
cmd := func() tea.Msg { return m.winsize }
return m, cmd
case aztfexportclient.ShowImportErrorMsg:
m.status = statusImportErrorMsg
m.importerrormsg = msg
return m, nil
case aztfexportclient.StartImportMsg:
m.status = statusImporting
m.progress = progress.NewModel(m.ctx, m.meta, m.parallelism, msg.List)
return m, tea.Batch(
m.progress.Init(),
// Resize the progress bar
func() tea.Msg { return m.winsize },
)
case aztfexportclient.ImportDoneMsg:
for idx, item := range msg.List {
if item.ImportError != nil {
m.status = statusBuildingImportList
m.importlist = importlist.NewModel(m.ctx, m.meta, msg.List, idx)
cmd := func() tea.Msg { return m.winsize }
return m, cmd
}
}
m.status = statusPushState
return m, aztfexportclient.PushState(m.ctx, m.meta, msg.List)
case aztfexportclient.PushStateDoneMsg:
m.status = statusExportResourceMapping
return m, aztfexportclient.ExportResourceMapping(m.ctx, m.meta, msg.List)
case aztfexportclient.ExportResourceMappingDoneMsg:
m.status = statusExportSkippedResources
return m, aztfexportclient.ExportSkippedResources(m.ctx, m.meta, msg.List)
case aztfexportclient.ExportSkippedResourcesDoneMsg:
m.status = statusGeneratingCfg
return m, aztfexportclient.GenerateCfg(m.ctx, m.meta, msg.List)
case aztfexportclient.GenerateCfgDoneMsg:
m.status = statusCleaningUpWorkspaceCfg
return m, aztfexportclient.CleanUpWorkspace(m.ctx, m.meta)
case aztfexportclient.WorkspaceCleanupDoneMsg:
m.status = statusSummary
return m, nil
case aztfexportclient.QuitMsg:
return m, tea.Quit
case aztfexportclient.CleanTFStateMsg:
m.meta.CleanTFState(m.ctx, msg.Addr)
return m, nil
case aztfexportclient.ErrMsg:
m.status = statusError
m.err = msg
return m, nil
}
return updateChildren(msg, m)
}