add new flag to disable some future features and make some updates to chat ux
This commit is contained in:
@@ -56,7 +56,12 @@
|
||||
// Kanban columns can collapse (accordion) so templates can be dragged onto
|
||||
// the desired area on tablet/mobile without cramming three columns.
|
||||
let collapsed = $state({ member: false, comp: false, collab: false });
|
||||
// `rewardsTargets` platform flag: OFF = simplified flow — rewards are always
|
||||
// Individual, and the Competition/Collaboration columns become locked
|
||||
// (faded, "Coming soon") row accordions instead of a 3-column grid.
|
||||
let targetsEnabled = $derived(!!page.data.platformFlags?.rewardsTargets);
|
||||
function toggleCol(key: 'member' | 'comp' | 'collab') {
|
||||
if (!targetsEnabled && key !== 'member') return;
|
||||
collapsed[key] = !collapsed[key];
|
||||
}
|
||||
|
||||
@@ -146,7 +151,7 @@
|
||||
editVals.targetChoreIds = { ...editVals.targetChoreIds, [memberId]: value };
|
||||
}
|
||||
|
||||
let templateConfigs = $derived((templates as BonusTemplate[]).filter((t) => t.global));
|
||||
let templateConfigs = $derived((templates as BonusTemplate[]).filter((t) => t.global && !t.isPocketMoney));
|
||||
let allBonusConfigs = $derived(
|
||||
configs.filter((c: BonusConfig) => c.status !== 'completed') as BonusConfig[]
|
||||
);
|
||||
@@ -212,7 +217,7 @@
|
||||
editVals = {
|
||||
name: tpl.name,
|
||||
description: tpl.description || '',
|
||||
target: targetType,
|
||||
target: !targetsEnabled ? 'individual' : targetType,
|
||||
memberId: '',
|
||||
type: tpl.type,
|
||||
thresholdType: tpl.thresholdType || 'points',
|
||||
@@ -272,7 +277,7 @@
|
||||
editVals = {
|
||||
name: cfg.name,
|
||||
description: cfg.description || '',
|
||||
target: cfg.target,
|
||||
target: !targetsEnabled ? 'individual' : cfg.target,
|
||||
memberId: cfg.memberId || '',
|
||||
type: cfg.type,
|
||||
thresholdType: cfg.thresholdType || 'points',
|
||||
@@ -359,7 +364,7 @@
|
||||
</div>
|
||||
</Card>
|
||||
<Card cols={3} scrollX>
|
||||
<div class="kanban">
|
||||
<div class="kanban" class:rows={!targetsEnabled}>
|
||||
<!-- Member Column -->
|
||||
<div class="column member-col" class:collapsed={collapsed.member} ondragover={handleDragOver} ondrop={handleDropToMember}>
|
||||
<button class="col-header" type="button" onclick={() => toggleCol('member')}>
|
||||
@@ -440,10 +445,19 @@
|
||||
</div>
|
||||
|
||||
<!-- Competition Column -->
|
||||
<div class="column comp-col" class:collapsed={collapsed.comp} ondragover={handleDragOver} ondrop={handleDropToCompetition}>
|
||||
<div
|
||||
class="column comp-col"
|
||||
class:locked={!targetsEnabled}
|
||||
class:collapsed={targetsEnabled ? collapsed.comp : true}
|
||||
ondragover={targetsEnabled ? handleDragOver : undefined}
|
||||
ondrop={targetsEnabled ? handleDropToCompetition : undefined}
|
||||
>
|
||||
<button class="col-header" type="button" onclick={() => toggleCol('comp')}>
|
||||
<span class="col-title">Competition</span>
|
||||
<span class="chev" class:open={!collapsed.comp}>{@html chevronRight}</span>
|
||||
{#if !targetsEnabled}
|
||||
<span class="soon-badge">Coming soon</span>
|
||||
{/if}
|
||||
<span class="chev" class:open={targetsEnabled ? !collapsed.comp : false}>{@html chevronRight}</span>
|
||||
</button>
|
||||
<div class="col-body">
|
||||
{#each allBonusConfigs.filter((c) => c.target === 'competitive' && !doneConfigs.includes(c)) as cfg}
|
||||
@@ -506,10 +520,19 @@
|
||||
</div>
|
||||
|
||||
<!-- Collaboration Column -->
|
||||
<div class="column collab-col" class:collapsed={collapsed.collab} ondragover={handleDragOver} ondrop={handleDropToCollaboration}>
|
||||
<div
|
||||
class="column collab-col"
|
||||
class:locked={!targetsEnabled}
|
||||
class:collapsed={targetsEnabled ? collapsed.collab : true}
|
||||
ondragover={targetsEnabled ? handleDragOver : undefined}
|
||||
ondrop={targetsEnabled ? handleDropToCollaboration : undefined}
|
||||
>
|
||||
<button class="col-header" type="button" onclick={() => toggleCol('collab')}>
|
||||
<span class="col-title">Collaboration</span>
|
||||
<span class="chev" class:open={!collapsed.collab}>{@html chevronRight}</span>
|
||||
{#if !targetsEnabled}
|
||||
<span class="soon-badge">Coming soon</span>
|
||||
{/if}
|
||||
<span class="chev" class:open={targetsEnabled ? !collapsed.collab : false}>{@html chevronRight}</span>
|
||||
</button>
|
||||
<div class="col-body">
|
||||
{#each allBonusConfigs.filter((c) => c.target === 'collaborative') as cfg}
|
||||
@@ -637,14 +660,19 @@
|
||||
<input name="description" bind:value={editVals.description} />
|
||||
</label>
|
||||
{/if}
|
||||
{#if targetsEnabled}
|
||||
<label>
|
||||
<span class="field-label"><UsersRound size={14} /> Target (who)</span>
|
||||
<select name="target" bind:value={editVals.target}>
|
||||
<option value="individual">Individual</option>
|
||||
<option value="competitive">Competition</option>
|
||||
<option value="collaborative">Collaborative</option>
|
||||
</select>
|
||||
</label>
|
||||
<span class="field-label"><UsersRound size={14} /> Target (who)</span>
|
||||
<select name="target" bind:value={editVals.target}>
|
||||
<option value="individual">Individual</option>
|
||||
<option value="competitive">Competition</option>
|
||||
<option value="collaborative">Collaborative</option>
|
||||
</select>
|
||||
</label>
|
||||
{:else}
|
||||
<input type="hidden" name="target" value="individual" />
|
||||
<p class="hint">Rewards are always created for individual members.</p>
|
||||
{/if}
|
||||
{#if (editingConfig || creatingFromTemplate) && editVals.target === 'individual'}
|
||||
<label>
|
||||
<span class="field-label"><UsersRound size={14} /> Member</span>
|
||||
@@ -1100,6 +1128,33 @@
|
||||
.column.collapsed .col-body {
|
||||
display: none;
|
||||
}
|
||||
.kanban.rows {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
.kanban.rows .column {
|
||||
width: 100%;
|
||||
}
|
||||
.column.locked {
|
||||
opacity: 0.55;
|
||||
pointer-events: none;
|
||||
}
|
||||
.column.locked .col-header {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.soon-badge {
|
||||
margin-left: auto;
|
||||
font-size: 0.65rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
padding: 0.15rem 0.45rem;
|
||||
border-radius: 999px;
|
||||
background: #e5e7eb;
|
||||
color: #6b7280;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.card-head {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
Reference in New Issue
Block a user