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

@ -15,6 +15,14 @@ interface HttpConfig {
queryString?: Record<string, Primitive | Primitive[]>;
}
interface DeleteParams {
olderThan?: number;
indexers?: string[];
releaseStatuses?: string[];
}
type QueryStringParams = Record<string, string | string[]>;
// See https://stackoverflow.com/a/62969380
function encodeRFC3986URIComponent(str: string): string {
return encodeURIComponent(str).replace(
@ -338,9 +346,22 @@ export const APIClient = {
},
indexerOptions: () => appClient.Get<string[]>("api/release/indexers"),
stats: () => appClient.Get<ReleaseStats>("api/release/stats"),
delete: (olderThan: number) => appClient.Delete("api/release", {
queryString: { olderThan }
}),
delete: (params: DeleteParams) => {
const queryString: QueryStringParams = {};
if (params.olderThan !== undefined) {
queryString.olderThan = params.olderThan.toString();
}
if (params.indexers && params.indexers.length > 0) {
queryString.indexer = params.indexers;
}
if (params.releaseStatuses && params.releaseStatuses.length > 0) {
queryString.releaseStatus = params.releaseStatuses;
}
return appClient.Delete("api/release", {
queryString
});
},
replayAction: (releaseId: number, actionId: number) => appClient.Post(
`api/release/${releaseId}/actions/${actionId}/retry`
)