feat(releases): delete based on age/indexer/status (#1522)

* feat(releases): delete based on age/indexer/status

* fix: sanitize releaseStatuses

* swap to RMSC

* add AgeSelect component

* improve texts

* refactor: streamline form layout

* improve text

* remove a paragraph

* improved UX

explaining the options, better error handling

* reinstate red border

* fix: labels to match other similar labels for selects

- improved contrast for the word "required" in desc
- added red asterisk to required select

* minor text improvement to warning

* fix: delete-button vertical alignment

* feat: cleanup queries

* feat: cleanup delete

---------

Co-authored-by: ze0s <ze0s@riseup.net>
This commit is contained in:
soup 2024-05-03 11:32:20 +02:00 committed by GitHub
parent f8715c193c
commit 19e129e55f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 289 additions and 67 deletions

View file

@ -211,6 +211,31 @@ func (h releaseHandler) deleteReleases(w http.ResponseWriter, r *http.Request) {
req.OlderThan = duration
}
indexers := r.URL.Query()["indexer"]
if len(indexers) > 0 {
req.Indexers = indexers
}
releaseStatuses := r.URL.Query()["releaseStatus"]
validStatuses := map[string]bool{
"PUSH_APPROVED": true,
"PUSH_REJECTED": true,
"PUSH_ERROR": true,
}
var filteredStatuses []string
for _, status := range releaseStatuses {
if _, valid := validStatuses[status]; valid {
filteredStatuses = append(filteredStatuses, status)
} else {
h.encoder.StatusResponse(w, http.StatusBadRequest, map[string]interface{}{
"code": "INVALID_RELEASE_STATUS",
"message": "releaseStatus contains invalid value",
})
return
}
}
req.ReleaseStatuses = filteredStatuses
if err := h.service.Delete(r.Context(), &req); err != nil {
h.encoder.Error(w, err)
return