in internal/ui/importlist/importlist.go [112:195]
func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
var cmd tea.Cmd
switch msg := msg.(type) {
case tea.KeyMsg:
// Don't intercept the keys (e.g. "w") when user is inputting.
if m.isUserTyping() {
break
}
switch {
case key.Matches(msg, m.listkeys.apply):
// Leave filter applied state before applying the import list
if m.list.FilterState() == list.FilterApplied {
m.list.ResetFilter()
}
// In case all items are marked as skip, show a warning and do nothing.
if m.isNothingToImport() {
return m, m.list.NewStatusMessage(common.ErrorMsgStyle.Render("All resources are skipped, nothing to import"))
}
// Ensure all items pass validation
if !m.userInputsAreValid() {
return m, m.list.NewStatusMessage(common.ErrorMsgStyle.Render("One or more user input is invalid"))
}
return m, aztfexportclient.StartImport(m.importList(true))
case key.Matches(msg, m.listkeys.skip):
sel := m.list.SelectedItem()
if sel == nil {
return m, nil
}
selItem := sel.(Item)
if !selItem.v.Skip() {
selItem.v.TFAddr = tfaddr.TFAddr{}
selItem.textinput.Model.SetValue("")
} else {
selItem.v.TFAddr = selItem.v.TFAddrCache
selItem.textinput.Model.SetValue(selItem.v.TFAddr.String())
}
m.list.SetItem(selItem.idx, selItem)
return m, nil
case key.Matches(msg, m.listkeys.error):
sel := m.list.SelectedItem()
if sel == nil {
return m, nil
}
selItem := sel.(Item)
if selItem.v.ImportError == nil {
return m, nil
}
return m, aztfexportclient.ShowImportError(selItem.v, selItem.idx, m.importList(false))
case key.Matches(msg, m.listkeys.recommendation):
sel := m.list.SelectedItem()
if sel == nil {
return m, nil
}
selItem := sel.(Item)
if len(selItem.v.Recommendations) == 0 {
return m, m.list.NewStatusMessage(common.InfoStyle.Render("No resource type recommendation is available..."))
}
return m, m.list.NewStatusMessage(common.InfoStyle.Render(fmt.Sprintf("Possible resource type(s): %s", strings.Join(selItem.v.Recommendations, ","))))
case key.Matches(msg, m.listkeys.save):
m.list.NewStatusMessage(common.InfoStyle.Render("Saving the resouce mapping..."))
err := m.c.ExportResourceMapping(m.ctx, m.importList(false))
if err == nil {
m.list.NewStatusMessage(common.InfoStyle.Render("Resource mapping saved"))
} else {
m.list.NewStatusMessage(common.ErrorMsgStyle.Render(err.Error()))
}
case key.Matches(msg, m.list.KeyMap.Quit):
return m, aztfexportclient.Quit(m.ctx, m.c)
}
case tea.WindowSizeMsg:
// The height here minus the height occupied by the title
m.list.SetSize(msg.Width, msg.Height-3)
}
m.list, cmd = m.list.Update(msg)
return m, cmd
}