this repo has no description

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

Signed-off-by: Winter <winter@winter.cafe>

authored by Winter and committed by Tangled 4e26cfdd 7bc709a6

Changed files
+32 -17
appview
db
pages
templates
repo
settings
repo
+1 -1
appview/db/repos.go
··· 556 return err 557 } 558 559 - func UpdateSpindle(e Execer, repoAt, spindle string) error { 560 _, err := e.Exec( 561 `update repos set spindle = ? where at_uri = ?`, spindle, repoAt) 562 return err
··· 556 return err 557 } 558 559 + func UpdateSpindle(e Execer, repoAt string, spindle *string) error { 560 _, err := e.Exec( 561 `update repos set spindle = ? where at_uri = ?`, spindle, repoAt) 562 return err
+6 -1
appview/pages/templates/repo/settings/pipelines.html
··· 38 name="spindle" 39 required 40 class="p-1 max-w-64 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700"> 41 - <option value="" disabled> 42 Choose a spindle 43 </option> 44 {{ range $.Spindles }} 45 <option value="{{ . }}" class="py-1" {{ if eq . $.CurrentSpindle }}selected{{ end }}>
··· 38 name="spindle" 39 required 40 class="p-1 max-w-64 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700"> 41 + {{/* 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? */}} 42 + <option value="[[none]]" class="py-1" {{ if not $.CurrentSpindle }}selected{{ end }}> 43 + {{ if not $.CurrentSpindle }} 44 Choose a spindle 45 + {{ else }} 46 + Disable pipelines 47 + {{ end }} 48 </option> 49 {{ range $.Spindles }} 50 <option value="{{ . }}" class="py-1" {{ if eq . $.CurrentSpindle }}selected{{ end }}>
+25 -15
appview/repo/repo.go
··· 657 } 658 659 newSpindle := r.FormValue("spindle") 660 client, err := rp.oauth.AuthorizedClient(r) 661 if err != nil { 662 fail("Failed to authorize. Try again later.", err) 663 return 664 } 665 666 - // ensure that this is a valid spindle for this user 667 - validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did) 668 - if err != nil { 669 - fail("Failed to find spindles. Try again later.", err) 670 - return 671 } 672 673 - if !slices.Contains(validSpindles, newSpindle) { 674 - fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles)) 675 - return 676 } 677 678 // optimistic update 679 - err = db.UpdateSpindle(rp.db, string(repoAt), newSpindle) 680 if err != nil { 681 fail("Failed to update spindle. Try again later.", err) 682 return ··· 699 Owner: user.Did, 700 CreatedAt: f.CreatedAt, 701 Description: &f.Description, 702 - Spindle: &newSpindle, 703 }, 704 }, 705 }) ··· 709 return 710 } 711 712 - // add this spindle to spindle stream 713 - rp.spindlestream.AddSource( 714 - context.Background(), 715 - eventconsumer.NewSpindleSource(newSpindle), 716 - ) 717 718 rp.pages.HxRefresh(w) 719 }
··· 657 } 658 659 newSpindle := r.FormValue("spindle") 660 + removingSpindle := newSpindle == "[[none]]" // see pages/templates/repo/settings/pipelines.html for more info on why we use this value 661 client, err := rp.oauth.AuthorizedClient(r) 662 if err != nil { 663 fail("Failed to authorize. Try again later.", err) 664 return 665 } 666 667 + if !removingSpindle { 668 + // ensure that this is a valid spindle for this user 669 + validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did) 670 + if err != nil { 671 + fail("Failed to find spindles. Try again later.", err) 672 + return 673 + } 674 + 675 + if !slices.Contains(validSpindles, newSpindle) { 676 + fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles)) 677 + return 678 + } 679 } 680 681 + spindlePtr := &newSpindle 682 + if removingSpindle { 683 + spindlePtr = nil 684 } 685 686 // optimistic update 687 + err = db.UpdateSpindle(rp.db, string(repoAt), spindlePtr) 688 if err != nil { 689 fail("Failed to update spindle. Try again later.", err) 690 return ··· 707 Owner: user.Did, 708 CreatedAt: f.CreatedAt, 709 Description: &f.Description, 710 + Spindle: spindlePtr, 711 }, 712 }, 713 }) ··· 717 return 718 } 719 720 + if !removingSpindle { 721 + // add this spindle to spindle stream 722 + rp.spindlestream.AddSource( 723 + context.Background(), 724 + eventconsumer.NewSpindleSource(newSpindle), 725 + ) 726 + } 727 728 rp.pages.HxRefresh(w) 729 }