Add all eligible files to beta setup
CI / checks (push) Successful in 5m59s

This commit is contained in:
2026-10-14 19:47:31 -04:00
parent 1fc329b123
commit 68616327ec
3 changed files with 202 additions and 5 deletions
+35 -5
View File
@@ -84,6 +84,7 @@
allowLeave = false;
let hasLinkedSetup = $state(false);
let loadingVersions = $state<Set<number>>(new Set());
let addingAllFiles = $state(false);
const rowRequests = new Map<number, number>();
let versionRequest = 0;
let betaLabel = $state('');
@@ -103,6 +104,9 @@
picks.some((pick) => pick.scriptId === file.id && versionsFor(pick).length > 0))
)
);
const remainingFiles = $derived(
eligibleFiles.filter((file) => !picks.some((pick) => pick.scriptId === file.id))
);
const filesReady = $derived(
picks.length > 0 &&
picks.every(
@@ -526,6 +530,22 @@
loadingVersions = new Set([...loadingVersions].filter((key) => key !== pick.key));
}
}
async function addAllFiles() {
if (addingAllFiles || loadingVersions.size || !remainingFiles.length) return;
const selected = picks.filter((pick) => pick.scriptId !== null);
const additions = remainingFiles.map((file) => ({
key: nextKey++,
scriptId: file.id,
versionId: null
}));
picks = [...selected, ...additions];
addingAllFiles = true;
try {
await Promise.all(additions.map((_, index) => onPickFile(selected.length + index)));
} finally {
addingAllFiles = false;
}
}
function toggleServer(name: string) {
const next = new Set(pickedServers);
if (next.has(name)) next.delete(name);
@@ -749,11 +769,21 @@
</p>{/if}{/if}
</section>{/each}
</div>
<Button
onclick={() =>
(picks = [...picks, { key: nextKey++, scriptId: null, versionId: null }])}
disabled={picks.length >= eligibleFiles.length}>Add file</Button
>
<div class="actions">
<Button
onclick={() =>
(picks = [
...picks,
{ key: nextKey++, scriptId: null, versionId: null }
])}
disabled={picks.length >= eligibleFiles.length}>Add file</Button
>
<Button
onclick={addAllFiles}
disabled={!remainingFiles.length || loadingVersions.size > 0}
loading={addingAllFiles}>Add all eligible files</Button
>
</div>
<p class="muted">
Combine files for different games in one beta. Each file installs only on
servers matching its scope, and every file needs at least one test participant.