()
| 549 | } |
| 550 | |
| 551 | func (m modifyModel) View() string { |
| 552 | if m.quitting { |
| 553 | return "" |
| 554 | } |
| 555 | |
| 556 | var s strings.Builder |
| 557 | |
| 558 | // Title |
| 559 | s.WriteString(m.styles.Title.Render("Modify Instance Configuration")) |
| 560 | s.WriteString("\n") |
| 561 | |
| 562 | // Show current instance info |
| 563 | s.WriteString(m.styles.Label.Render(fmt.Sprintf("Instance: (%s) %s", m.currentInstance.ID, m.currentInstance.Name))) |
| 564 | s.WriteString("\n\n") |
| 565 | |
| 566 | // Render current step |
| 567 | switch m.step { |
| 568 | case modifyStepGPU: |
| 569 | s.WriteString(m.renderGPUStep()) |
| 570 | case modifyStepCompute: |
| 571 | s.WriteString(m.renderComputeStep()) |
| 572 | case modifyStepDiskSize: |
| 573 | s.WriteString(m.renderDiskSizeStep()) |
| 574 | case modifyStepConfirmation: |
| 575 | s.WriteString(m.renderConfirmationStep()) |
| 576 | } |
| 577 | |
| 578 | if m.pricing != nil { |
| 579 | price := m.computePreviewPrice() |
| 580 | s.WriteString("\n") |
| 581 | s.WriteString(m.styles.Help.Render(fmt.Sprintf("Estimated cost: %s", utils.FormatPrice(price)))) |
| 582 | } |
| 583 | |
| 584 | // Help text |
| 585 | s.WriteString("\n") |
| 586 | switch m.step { |
| 587 | case modifyStepConfirmation: |
| 588 | s.WriteString(m.styles.Help.Render("↑/↓: Navigate Enter: Confirm Esc: Back Q: Quit")) |
| 589 | case modifyStepDiskSize: |
| 590 | s.WriteString(m.styles.Help.Render("↑/↓: Navigate Enter: Select Esc: Back Q: Quit")) |
| 591 | default: |
| 592 | s.WriteString(m.styles.Help.Render("↑/↓: Navigate Enter: Select Esc: Back Q: Quit")) |
| 593 | } |
| 594 | |
| 595 | return s.String() |
| 596 | } |
| 597 | |
| 598 | // computePreviewPrice calculates the price for the resulting configuration, |
| 599 | // using current instance values as base and overriding with selections/hovered option. |
no test coverage detected