feat: queued mutations while reloading or offline

This commit is contained in:
2026-08-03 12:14:31 +02:00
parent 63b6a645e0
commit cc5b4eba1e
11 changed files with 1068 additions and 28 deletions

View File

@@ -100,8 +100,11 @@ func (m App) pullRequestUpdateUnavailable() string {
if m.loading {
return "pull request update unavailable while PR data is refreshing"
}
if m.details.FromCache {
return "pull request update unavailable from an offline cached snapshot"
if m.details.FromCache && m.mutations == nil {
return "offline mutation queue is unavailable"
}
if m.mutations != nil && m.mutations.loadErr != nil {
return "mutation queue is unavailable: " + m.mutations.loadErr.Error()
}
if _, ok := m.service.(GitHubPullRequestWriteService); !ok {
return "configured GitHub service does not support pull request updates"
@@ -302,6 +305,21 @@ func (m App) positionPREditHardwareCursor(scroll, viewportHeight int) {
}
func (m App) submitPREdit() tea.Cmd {
if m.mutations != nil {
operation := mutationOperation{
Kind: mutationPREdit, Owner: m.details.Owner, Repository: m.details.Repository,
Number: m.details.Number, PRID: m.details.ID, Viewer: m.details.ViewerLogin,
Original: m.prEditOriginal, Update: m.prEditMetadata(),
Permissions: m.details.Permissions,
}
if m.editingMutationID != "" {
if existing, ok := m.mutations.get(m.editingMutationID); ok {
operation.ID, operation.EnqueuedAt = existing.ID, existing.EnqueuedAt
return m.replaceMutation(operation)
}
}
return m.enqueueMutation(operation)
}
writer := m.service.(GitHubPullRequestWriteService)
peopleWriter := m.service.(GitHubPullRequestPeopleWriteService)
id := m.details.ID
@@ -447,6 +465,7 @@ func (m *App) applyPREditPeople(people PullRequestPeople) {
}
func (m *App) clearPREdit() {
m.editingMutationID = ""
m.prEditField = 0
m.prEditEditors = [prEditFieldCount]textEditor{}
m.prEditOriginal = PullRequestMetadata{}