···3838 name="spindle"
3939 required
4040 class="p-1 max-w-64 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700">
4141- <option value="" disabled>
4141+ {{/* For some reason, we can't use an empty string in a <select> in all scenarios unless it is preceded by a disabled select?? No idea, could just be a Firefox thing? */}}
4242+ <option value="[[none]]" class="py-1" {{ if not $.CurrentSpindle }}selected{{ end }}>
4343+ {{ if not $.CurrentSpindle }}
4244 Choose a spindle
4545+ {{ else }}
4646+ Disable pipelines
4747+ {{ end }}
4348 </option>
4449 {{ range $.Spindles }}
4550 <option value="{{ . }}" class="py-1" {{ if eq . $.CurrentSpindle }}selected{{ end }}>
+25-15
appview/repo/repo.go
···657657 }
658658659659 newSpindle := r.FormValue("spindle")
660660+ removingSpindle := newSpindle == "[[none]]" // see pages/templates/repo/settings/pipelines.html for more info on why we use this value
660661 client, err := rp.oauth.AuthorizedClient(r)
661662 if err != nil {
662663 fail("Failed to authorize. Try again later.", err)
663664 return
664665 }
665666666666- // ensure that this is a valid spindle for this user
667667- validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did)
668668- if err != nil {
669669- fail("Failed to find spindles. Try again later.", err)
670670- return
667667+ if !removingSpindle {
668668+ // ensure that this is a valid spindle for this user
669669+ validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did)
670670+ if err != nil {
671671+ fail("Failed to find spindles. Try again later.", err)
672672+ return
673673+ }
674674+675675+ if !slices.Contains(validSpindles, newSpindle) {
676676+ fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles))
677677+ return
678678+ }
671679 }
672680673673- if !slices.Contains(validSpindles, newSpindle) {
674674- fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles))
675675- return
681681+ spindlePtr := &newSpindle
682682+ if removingSpindle {
683683+ spindlePtr = nil
676684 }
677685678686 // optimistic update
679679- err = db.UpdateSpindle(rp.db, string(repoAt), newSpindle)
687687+ err = db.UpdateSpindle(rp.db, string(repoAt), spindlePtr)
680688 if err != nil {
681689 fail("Failed to update spindle. Try again later.", err)
682690 return
···699707 Owner: user.Did,
700708 CreatedAt: f.CreatedAt,
701709 Description: &f.Description,
702702- Spindle: &newSpindle,
710710+ Spindle: spindlePtr,
703711 },
704712 },
705713 })
···709717 return
710718 }
711719712712- // add this spindle to spindle stream
713713- rp.spindlestream.AddSource(
714714- context.Background(),
715715- eventconsumer.NewSpindleSource(newSpindle),
716716- )
720720+ if !removingSpindle {
721721+ // add this spindle to spindle stream
722722+ rp.spindlestream.AddSource(
723723+ context.Background(),
724724+ eventconsumer.NewSpindleSource(newSpindle),
725725+ )
726726+ }
717727718728 rp.pages.HxRefresh(w)
719729}