This commit is contained in:
@@ -28,39 +28,46 @@
|
||||
let title = "";
|
||||
|
||||
$: {
|
||||
let level = Math.floor(count / target);
|
||||
if (level >= COLORS.length - 1 || (level > 1 && green)) {
|
||||
offs = 0;
|
||||
ons = target;
|
||||
offClass = "gold";
|
||||
onClass = "diamond";
|
||||
} else {
|
||||
if (count > 0 && count == (level * target)) {
|
||||
level -= 1;
|
||||
if (count > 0 && target > 0) {
|
||||
let level = Math.floor(count / target);
|
||||
if (level >= COLORS.length - 1 || (level > 1 && green)) {
|
||||
offs = 0;
|
||||
ons = target;
|
||||
offClass = "gold";
|
||||
onClass = "diamond";
|
||||
} else {
|
||||
if (count > 0 && count == (level * target)) {
|
||||
level -= 1;
|
||||
}
|
||||
|
||||
ons = count - (level * target);
|
||||
offs = target - ons;
|
||||
offClass = COLORS[level];
|
||||
onClass = COLORS[level + 1];
|
||||
}
|
||||
|
||||
ons = count - (level * target);
|
||||
offs = target - ons;
|
||||
offClass = COLORS[level];
|
||||
onClass = COLORS[level + 1];
|
||||
}
|
||||
if (green) {
|
||||
onClass = "green"
|
||||
offClass = "none"
|
||||
}
|
||||
if (gray) {
|
||||
onClass = "gray"
|
||||
offClass = "none"
|
||||
}
|
||||
if (contextColor) {
|
||||
onClass = "sccpb"
|
||||
offClass = "none"
|
||||
}
|
||||
|
||||
if (green) {
|
||||
onClass = "green"
|
||||
offClass = "none"
|
||||
// Mark it non-segmented if the target is too high. This prevents a clunky progress bar,
|
||||
// or a browser freeze if you set the target very high.
|
||||
nonSegmented = (target >= 60);
|
||||
} else {
|
||||
offClass = "none";
|
||||
nonSegmented = false;
|
||||
ons = 0;
|
||||
offs = 1;
|
||||
}
|
||||
if (gray) {
|
||||
onClass = "gray"
|
||||
offClass = "none"
|
||||
}
|
||||
if (contextColor) {
|
||||
onClass = "sccpb"
|
||||
offClass = "none"
|
||||
}
|
||||
|
||||
// Mark it non-segmented if the target is too high. This prevents a clunky progress bar,
|
||||
// or a browser freeze if you set the target very high.
|
||||
nonSegmented = (target >= 60);
|
||||
}
|
||||
|
||||
$: {
|
||||
@@ -94,10 +101,10 @@
|
||||
<div style="flex: {offs}" class={"non-segmented off " + offClass}></div>
|
||||
{/if}
|
||||
{:else}
|
||||
{#each {length: ons} as _}
|
||||
{#each {length: Math.max(ons, 0)} as _}
|
||||
<div class={"on " + onClass}></div>
|
||||
{/each}
|
||||
{#each {length: offs} as _}
|
||||
{#each {length: Math.max(offs, 0)} as _}
|
||||
<div class={"off " + offClass}></div>
|
||||
{/each}
|
||||
{/if}
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
|
||||
progressTarget = Math.max((project.tasks||[]).map(t => t.itemAmount * (t.item.groupWeight || 1)).reduce((n,m) => n+m, 0), 1);
|
||||
|
||||
progressAmount = Math.max(progressAmount - project.subtractAmount, 0);
|
||||
progressTarget = Math.max(progressTarget - project.subtractAmount, 0);
|
||||
|
||||
if (project.endTime) {
|
||||
const start = Date.parse(project.startTime || project.createdTime);
|
||||
const end = Date.parse(project.endTime);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
interface ProjectLike {
|
||||
tasks?: TaskResult[]
|
||||
statusTag?: string
|
||||
subtractAmount?: number,
|
||||
}
|
||||
|
||||
export let project: ProjectLike;
|
||||
@@ -12,11 +13,16 @@
|
||||
let progressAmount: number;
|
||||
let progressTarget: number;
|
||||
|
||||
$: progressAmount = (project.tasks||[]).map(t => (t.active || t.statusTag === "to do" || t.statusTag === "on hold")
|
||||
? Math.min(t.completedAmount, t.itemAmount) * (t.item.groupWeight || 1)
|
||||
: t.itemAmount * (t.item.groupWeight || 1)
|
||||
).reduce((n,m) => n+m, 0);
|
||||
$: progressTarget = Math.max((project.tasks||[]).map(t => t.itemAmount * (t.item.groupWeight || 1)).reduce((n,m) => n+m, 0), 1);
|
||||
$: {
|
||||
progressAmount = (project.tasks||[]).map(t => (t.active || t.statusTag === "to do" || t.statusTag === "on hold")
|
||||
? Math.min(t.completedAmount, t.itemAmount) * (t.item.groupWeight || 1)
|
||||
: t.itemAmount * (t.item.groupWeight || 1)
|
||||
).reduce((n,m) => n+m, 0);
|
||||
progressTarget = Math.max((project.tasks||[]).map(t => t.itemAmount * (t.item.groupWeight || 1)).reduce((n,m) => n+m, 0), 1);
|
||||
|
||||
progressAmount = Math.max(progressAmount - (project.subtractAmount||0), 0);
|
||||
progressTarget = Math.max(progressTarget - (project.subtractAmount||0), 0);
|
||||
}
|
||||
</script>
|
||||
|
||||
<Progress thin contextColor count={progressAmount} target={progressTarget} />
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
createdTime: "",
|
||||
tasks: [],
|
||||
favorite: false,
|
||||
subtractAmount: 0,
|
||||
}
|
||||
let verb = "Add";
|
||||
if (md.name === "project.edit" || md.name === "project.delete") {
|
||||
@@ -42,6 +43,7 @@
|
||||
let statusTag = project.statusTag || "";
|
||||
let icon = project.icon;
|
||||
let favorite = project.favorite;
|
||||
let subtractAmount = project.subtractAmount;
|
||||
let error = null;
|
||||
let loading = false;
|
||||
|
||||
@@ -57,6 +59,7 @@
|
||||
startTime: ( startTime == "" ) ? null : new Date(startTime),
|
||||
endTime: ( endTime == "" ) ? null : new Date(endTime),
|
||||
statusTag: statusTag !== "" ? statusTag : null,
|
||||
subtractAmount: Math.min(subtractAmount, 0),
|
||||
|
||||
name, description, icon, favorite,
|
||||
}).then(() => {
|
||||
@@ -85,6 +88,7 @@
|
||||
active: statusTag === "",
|
||||
statusTag: statusTag || null,
|
||||
clearStatusTag: statusTag === "",
|
||||
subtractAmount: subtractAmount,
|
||||
|
||||
name, description, icon, favorite,
|
||||
}).then(() => {
|
||||
@@ -119,6 +123,8 @@
|
||||
{#if endTime != ""}
|
||||
<label for="endTime">Start time</label>
|
||||
<StartTimeSelect disabled={deletion} bind:value={startTime} />
|
||||
<label for="subtractAmount">Subtract progress</label>
|
||||
<input disabled={deletion} name="subtractAmount" type="number" bind:value={subtractAmount} />
|
||||
{/if}
|
||||
<label for="statusTag">Status</label>
|
||||
<StatusTagSelect disabled={deletion} isProject bind:value={statusTag} />
|
||||
|
||||
@@ -9,6 +9,7 @@ export default interface Project {
|
||||
active: boolean
|
||||
createdTime: string
|
||||
favorite: boolean
|
||||
subtractAmount: number
|
||||
startTime?: string
|
||||
endTime?: string
|
||||
statusTag?: string
|
||||
@@ -30,6 +31,7 @@ export interface ProjectInput {
|
||||
description: string
|
||||
icon: IconName
|
||||
active: boolean
|
||||
subtractAmount: number
|
||||
startTime?: string | Date
|
||||
endTime?: string | Date
|
||||
statusTag?: string
|
||||
@@ -47,5 +49,6 @@ export interface ProjectUpdate {
|
||||
clearEndTime?: boolean
|
||||
statusTag?: string
|
||||
clearStatusTag?: boolean
|
||||
subtractAmount?: number
|
||||
favorite?: boolean
|
||||
}
|
||||
Reference in New Issue
Block a user