appview/repo: make pipelines page actually reflect if no spindle is selected, allow removing a spindle from a repo #439

merged
opened by winter.bsky.social targeting master from winter.bsky.social/core: push-pxstrpokmqmn
Changed files
+25 -15
appview
repo
+25 -15
appview/repo/repo.go
···
}
newSpindle := r.FormValue("spindle")
+
removingSpindle := newSpindle == "[[none]]" // see pages/templates/repo/settings/pipelines.html for more info on why we use this value
client, err := rp.oauth.AuthorizedClient(r)
if err != nil {
fail("Failed to authorize. Try again later.", err)
return
}
-
// ensure that this is a valid spindle for this user
-
validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did)
-
if err != nil {
-
fail("Failed to find spindles. Try again later.", err)
-
return
+
if !removingSpindle {
+
// ensure that this is a valid spindle for this user
+
validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did)
+
if err != nil {
+
fail("Failed to find spindles. Try again later.", err)
+
return
+
}
+
+
if !slices.Contains(validSpindles, newSpindle) {
+
fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles))
+
return
+
}
}
-
if !slices.Contains(validSpindles, newSpindle) {
-
fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles))
-
return
+
spindlePtr := &newSpindle
+
if removingSpindle {
+
spindlePtr = nil
}
// optimistic update
-
err = db.UpdateSpindle(rp.db, string(repoAt), newSpindle)
+
err = db.UpdateSpindle(rp.db, string(repoAt), spindlePtr)
if err != nil {
fail("Failed to update spindle. Try again later.", err)
return
···
Owner: user.Did,
CreatedAt: f.CreatedAt,
Description: &f.Description,
-
Spindle: &newSpindle,
+
Spindle: spindlePtr,
},
},
})
···
return
}
-
// add this spindle to spindle stream
-
rp.spindlestream.AddSource(
-
context.Background(),
-
eventconsumer.NewSpindleSource(newSpindle),
-
)
+
if !removingSpindle {
+
// add this spindle to spindle stream
+
rp.spindlestream.AddSource(
+
context.Background(),
+
eventconsumer.NewSpindleSource(newSpindle),
+
)
+
}
rp.pages.HxRefresh(w)
}