updates
This commit is contained in:
@@ -210,7 +210,7 @@
|
|||||||
|
|
||||||
let outstandingConfigs = $derived(allBonusConfigs.filter((c: BonusConfig) => isOutstanding(c)));
|
let outstandingConfigs = $derived(allBonusConfigs.filter((c: BonusConfig) => isOutstanding(c)));
|
||||||
let doneConfigs = $derived(
|
let doneConfigs = $derived(
|
||||||
allBonusConfigs.filter((c: BonusConfig) => isCompleted(c) && !isOutstanding(c))
|
configs.filter((c: BonusConfig) => c.status === 'completed') as BonusConfig[]
|
||||||
);
|
);
|
||||||
|
|
||||||
function isCompleted(cfg: BonusConfig): boolean {
|
function isCompleted(cfg: BonusConfig): boolean {
|
||||||
@@ -223,6 +223,7 @@
|
|||||||
return prog.progress.every((p) => p.achieved);
|
return prog.progress.every((p) => p.achieved);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo - redundant?
|
||||||
function isOutstanding(cfg: BonusConfig): boolean {
|
function isOutstanding(cfg: BonusConfig): boolean {
|
||||||
if (!isCompleted(cfg)) return false;
|
if (!isCompleted(cfg)) return false;
|
||||||
const rewards = allRewards.filter((r) => r.bonusConfigId === cfg.id);
|
const rewards = allRewards.filter((r) => r.bonusConfigId === cfg.id);
|
||||||
@@ -296,12 +297,10 @@
|
|||||||
<div class="column member-col" ondragover={handleDragOver} ondrop={handleDropToMember}>
|
<div class="column member-col" ondragover={handleDragOver} ondrop={handleDropToMember}>
|
||||||
<h3>Member</h3>
|
<h3>Member</h3>
|
||||||
{#each allBonusConfigs.filter((c) => c.target === 'individual' && !doneConfigs.includes(c)) as cfg}
|
{#each allBonusConfigs.filter((c) => c.target === 'individual' && !doneConfigs.includes(c)) as cfg}
|
||||||
{@const done = isCompleted(cfg)}
|
|
||||||
{@const outstanding = isOutstanding(cfg)}
|
|
||||||
<div
|
<div
|
||||||
class="col-card"
|
class="col-card"
|
||||||
class:done
|
class:done={outstandingConfigs.includes(cfg)}
|
||||||
class:outstanding
|
class:outstanding={outstandingConfigs.includes(cfg)}
|
||||||
class:disabled={disabledIds.has(cfg.id)}
|
class:disabled={disabledIds.has(cfg.id)}
|
||||||
>
|
>
|
||||||
<div class="col-card-head">
|
<div class="col-card-head">
|
||||||
@@ -334,14 +333,14 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<span class="stat {p?.state ?? 'pending'}">
|
<span class="stat {p?.state ?? 'pending'}">
|
||||||
{p ? (outstanding ? 'Outstanding' : p.state) : 'Pending'}
|
{p ? (outstandingConfigs.includes(cfg) ? 'Outstanding' : p.state) : 'Pending'}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
<div class="col-card-foot">
|
<div class="col-card-foot">
|
||||||
{#if !done}
|
{#if !outstandingConfigs.includes(cfg)}
|
||||||
<Button variant="secondary" size="sm" onclick={() => openEditConfig(cfg)}>
|
<Button variant="secondary" size="sm" onclick={() => openEditConfig(cfg)}>
|
||||||
Edit
|
Edit
|
||||||
</Button>
|
</Button>
|
||||||
@@ -358,13 +357,11 @@
|
|||||||
<div class="column comp-col" ondragover={handleDragOver} ondrop={handleDropToCompetition}>
|
<div class="column comp-col" ondragover={handleDragOver} ondrop={handleDropToCompetition}>
|
||||||
<h3>Competition</h3>
|
<h3>Competition</h3>
|
||||||
{#each allBonusConfigs.filter((c) => c.target === 'competitive' && !doneConfigs.includes(c)) as cfg}
|
{#each allBonusConfigs.filter((c) => c.target === 'competitive' && !doneConfigs.includes(c)) as cfg}
|
||||||
{@const done = isCompleted(cfg)}
|
|
||||||
{@const outstanding = isOutstanding(cfg)}
|
|
||||||
{@const prog = progressByConfigId.get(cfg.id)}
|
{@const prog = progressByConfigId.get(cfg.id)}
|
||||||
<div
|
<div
|
||||||
class="col-card"
|
class="col-card"
|
||||||
class:done
|
class:done={outstandingConfigs.includes(cfg)}
|
||||||
class:outstanding
|
class:outstanding={outstandingConfigs.includes(cfg)}
|
||||||
class:disabled={disabledIds.has(cfg.id)}
|
class:disabled={disabledIds.has(cfg.id)}
|
||||||
>
|
>
|
||||||
<div class="col-card-head">
|
<div class="col-card-head">
|
||||||
@@ -394,14 +391,14 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<span class="stat {p.state}">
|
<span class="stat {p.state}">
|
||||||
{outstanding ? 'Outstanding' : p.state}
|
{outstandingConfigs.includes(cfg) ? 'Outstanding' : p.state}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="col-card-foot">
|
<div class="col-card-foot">
|
||||||
{#if !done}
|
{#if !outstandingConfigs.includes(cfg)}
|
||||||
<Button variant="secondary" size="sm" onclick={() => openEditConfig(cfg)}>
|
<Button variant="secondary" size="sm" onclick={() => openEditConfig(cfg)}>
|
||||||
Edit
|
Edit
|
||||||
</Button>
|
</Button>
|
||||||
@@ -418,13 +415,11 @@
|
|||||||
<div class="column collab-col" ondragover={handleDragOver} ondrop={handleDropToCollaboration}>
|
<div class="column collab-col" ondragover={handleDragOver} ondrop={handleDropToCollaboration}>
|
||||||
<h3>Collaboration</h3>
|
<h3>Collaboration</h3>
|
||||||
{#each allBonusConfigs.filter((c) => c.target === 'collaborative') as cfg}
|
{#each allBonusConfigs.filter((c) => c.target === 'collaborative') as cfg}
|
||||||
{@const done = isCompleted(cfg)}
|
|
||||||
{@const outstanding = isOutstanding(cfg)}
|
|
||||||
{@const prog = progressByConfigId.get(cfg.id)}
|
{@const prog = progressByConfigId.get(cfg.id)}
|
||||||
<div
|
<div
|
||||||
class="col-card"
|
class="col-card"
|
||||||
class:done
|
class:done={outstandingConfigs.includes(cfg)}
|
||||||
class:outstanding
|
class:outstanding={outstandingConfigs.includes(cfg)}
|
||||||
class:disabled={disabledIds.has(cfg.id)}
|
class:disabled={disabledIds.has(cfg.id)}
|
||||||
>
|
>
|
||||||
<div class="col-card-head">
|
<div class="col-card-head">
|
||||||
@@ -457,13 +452,13 @@
|
|||||||
{cfg.type === 'threshold' ? 'pts' : 'chores'}</span
|
{cfg.type === 'threshold' ? 'pts' : 'chores'}</span
|
||||||
>
|
>
|
||||||
<span class="stat {team.state}">
|
<span class="stat {team.state}">
|
||||||
{team.state}
|
{outstandingConfigs.includes(cfg) ? 'Outstanding' : team.state}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
<div class="col-card-foot">
|
<div class="col-card-foot">
|
||||||
{#if !done}
|
{#if !outstandingConfigs.includes(cfg)}
|
||||||
<Button variant="secondary" size="sm" onclick={() => openEditConfig(cfg)}>
|
<Button variant="secondary" size="sm" onclick={() => openEditConfig(cfg)}>
|
||||||
Edit
|
Edit
|
||||||
</Button>
|
</Button>
|
||||||
@@ -775,6 +770,22 @@
|
|||||||
>
|
>
|
||||||
{editingConfig.status === 'disabled' ? 'Enable' : 'Disable'}
|
{editingConfig.status === 'disabled' ? 'Enable' : 'Disable'}
|
||||||
</button>
|
</button>
|
||||||
|
{#if editingConfig.status !== 'completed'}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="complete-btn"
|
||||||
|
onclick={async () => {
|
||||||
|
if (!editingConfig) return;
|
||||||
|
if (!confirm('Mark this bonus as completed?')) return;
|
||||||
|
const fd = new FormData();
|
||||||
|
fd.append('id', editingConfig.id);
|
||||||
|
const res = await fetch('?/completeConfig', { method: 'POST', body: fd });
|
||||||
|
if (res.ok) showEditModal = false;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Mark Complete
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="delete-btn"
|
class="delete-btn"
|
||||||
@@ -1049,6 +1060,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
.modal-actions button {
|
.modal-actions button {
|
||||||
padding: 0.5rem 1rem;
|
padding: 0.5rem 1rem;
|
||||||
@@ -1069,6 +1081,10 @@
|
|||||||
background: #f59e0b;
|
background: #f59e0b;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
.modal-actions button.complete-btn {
|
||||||
|
background: #10b981;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
.modal-actions button.delete-btn {
|
.modal-actions button.delete-btn {
|
||||||
background: #ef4444;
|
background: #ef4444;
|
||||||
color: white;
|
color: white;
|
||||||
|
|||||||
Reference in New Issue
Block a user