Browse Source

add option to show only active items.

master 0.1.13
Gisle Aune 2 years ago
parent
commit
396b87eea1
  1. 30
      frontend/src/lib/components/controls/PartInput.svelte

30
frontend/src/lib/components/controls/PartInput.svelte

@ -45,15 +45,20 @@
let groups: PartOptionGroup[] = [];
let showRequired = false;
let loading = false;
let onlyActive = true;
let loaded: SprintKind = SprintKind.Invalid
function forceReload() {
loaded = SprintKind.Invalid;
}
async function load(kind: SprintKind) {
loading = true;
try {
switch (kind) {
case SprintKind.Items: {
const items = await sl3(fetch).listItems($scope.id, {});
const items = await sl3(fetch).listItems($scope.id, {unAcquired: onlyActive});
const projects = items.filter(i => i.project != null).map(i => i.project).sort(compareStatus).filter((p, i, a) => p.id != a[i-1]?.id);
const requirements = items.filter(i => i.requirement != null).map(i => i.requirement).sort(compareStatus).filter((r, i, a) => r.id != a[i-1]?.id);
const loose = items.filter(i => i.requirementId == null);
@ -62,17 +67,17 @@
[c.requirementId]: c.projectId,
}), {} as Record<number, string>)
groups = projects.map(p => ({
groups = projects.filter(p => !onlyActive || p.status === Status.Active || p.status === Status.Background).map(p => ({
id: p.id,
label: `${p.name} (${p.statusName})`,
options: [],
subs: requirements.filter(r => reqProjectIdMap[r.id] === p.id).map(r => ({
subs: requirements.filter(r => !onlyActive || r.status === Status.Active || r.status === Status.Background).filter(r => reqProjectIdMap[r.id] === p.id).map(r => ({
id: r.id,
label: `${r.name} (${r.statusName})`,
options: items.filter(i => i.requirementId === r.id).map(i => ({
enabled: false,
partId: i.id,
name: `${i.name} (${shortestDecimal(i.weightedRequired)})`,
name: `${i.name} (${shortestDecimal(i.weightedRequired)})${!!i.acquiredTime?" ✓":""}`,
required: 0,
})).sort((a,b) => a.partId - b.partId),
subs: [],
@ -81,7 +86,7 @@
groups.push({id: -1, label: "Loose items", subs: [], options: loose.map(i => ({
enabled: false,
partId: i.id,
name: `${i.name} (${shortestDecimal(i.weightedRequired)})`,
name: `${i.name} (${shortestDecimal(i.weightedRequired)})${!!i.acquiredTime?" ✓":""}`,
required: 0,
})).sort((a,b) => a.partId - b.partId)})
@ -137,6 +142,11 @@
loading = false;
}
// Hax to make it reload if onlyActive changed.
$: if (onlyActive != null) {
forceReload();
}
$: if (loaded === kind && error === "") {
value = groups.flatMap(g => [...g.subs.flatMap(g => g.options), ...g.options]).filter(o => o.enabled).map(o => ({partId: o.partId, required: o.required}))
}
@ -172,6 +182,10 @@
</div>
{/each}
{/each}
{#if kind === SprintKind.Items}
<hr />
<Checkbox label="Show only active items" bind:checked={onlyActive} />
{/if}
</div>
<style lang="scss">
@ -208,6 +222,12 @@
}
}
hr {
margin-top: 2em;
border: 0;
border-bottom: 1px solid $color-entry2;
}
div.label {
margin-top: 0.5em;
border-bottom: 1px solid $color-entry2;

Loading…
Cancel
Save