func()

in internal/ui/progress/progress.go [57:107]


func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
	switch msg := msg.(type) {
	case tea.WindowSizeMsg:
		m.progress.Width = msg.Width - 4
		return m, nil
	// FrameMsg is sent when the progress bar wants to animate itself
	case prog.FrameMsg:
		progressModel, cmd := m.progress.Update(msg)
		m.progress = progressModel.(prog.Model)
		return m, cmd

	case aztfexportclient.ImportItemsDoneMsg:
		var cmds []tea.Cmd

		// Update results
		items := msg.Items
		for i := range items {
			m.l[m.idx+i] = items[i]

			emoji := common.RandomHappyEmoji()
			if items[i].ImportError != nil {
				emoji = common.WarningEmoji
			}
			res := result{
				item:  items[i],
				emoji: emoji,
			}
			m.results = append(m.results[1:], res)
		}

		m.idx += m.parallelism

		if m.iterationDone() {
			cmds = append(cmds, m.progress.SetPercent(1))
			cmds = append(cmds, aztfexportclient.FinishImport(m.l))
			return m, tea.Batch(cmds...)
		}

		cmds = append(cmds, m.progress.SetPercent(float64(m.idx)/float64(len(m.l))))

		n := m.parallelism
		if m.idx+m.parallelism > len(m.l) {
			n = len(m.l) - m.idx
		}
		cmds = append(cmds, aztfexportclient.ImportItems(m.ctx, m.c, m.l[m.idx:m.idx+n]))
		return m, tea.Batch(cmds...)

	default:
		return m, nil
	}
}