added buttons to move projects to completed/failed when you're out of stuff to do.
continuous-integration/drone/push Build encountered an error
continuous-integration/drone/push Build encountered an error
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
import modalStore from "../stores/modal";
|
import modalStore from "../stores/modal";
|
||||||
|
|
||||||
export let open: ModalData = {name: "none"};
|
export let open: ModalData = {name: "none"};
|
||||||
export let green: boolean = false;
|
export let color: "red" | "green" | "blue" | "yellow" | "purple" | undefined = undefined;
|
||||||
export let disabled: boolean = false;
|
export let disabled: boolean = false;
|
||||||
|
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div on:click={handleClick} class="option" class:green class:disabled><slot></slot></div>
|
<div on:click={handleClick} class={`option ${color}`} class:disabled><slot></slot></div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
div.option {
|
div.option {
|
||||||
@@ -44,4 +44,36 @@
|
|||||||
div.option.green:hover {
|
div.option.green:hover {
|
||||||
color: #78ff78;
|
color: #78ff78;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.option.red {
|
||||||
|
color: #852a24;
|
||||||
|
}
|
||||||
|
div.option.red:hover {
|
||||||
|
color: #ff4545;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.option.blue {
|
||||||
|
color: #446d88;
|
||||||
|
}
|
||||||
|
div.option.blue:hover {
|
||||||
|
color: #78c9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.option.yellow {
|
||||||
|
color: #7a7429;
|
||||||
|
}
|
||||||
|
div.option.yellow:hover {
|
||||||
|
color: #e7e55e;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.option.purple {
|
||||||
|
color: #7a2973;
|
||||||
|
}
|
||||||
|
div.option.purple:hover {
|
||||||
|
color: #e75ed0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.option.disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import stuffLogClient from "../clients/stufflog";
|
import stuffLogClient from "../clients/stufflog";
|
||||||
|
|
||||||
import type { ProjectResult } from "../models/project";
|
import type { ProjectResult, ProjectUpdate } from "../models/project";
|
||||||
import type { TaskResult } from "../models/task";
|
import type { TaskResult } from "../models/task";
|
||||||
import markStale from "../stores/markStale";
|
import markStale from "../stores/markStale";
|
||||||
import type { ModalData } from "../stores/modal";
|
import type { ModalData } from "../stores/modal";
|
||||||
@@ -37,15 +37,13 @@ import stuffLogClient from "../clients/stufflog";
|
|||||||
let toggling = false;
|
let toggling = false;
|
||||||
let canComplete = false;
|
let canComplete = false;
|
||||||
|
|
||||||
function toggleFavorite() {
|
function updateProject(update: ProjectUpdate) {
|
||||||
if (toggling) {
|
if (toggling) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
toggling = true
|
toggling = true
|
||||||
|
|
||||||
stuffLogClient.updateProject(project.id, {
|
stuffLogClient.updateProject(project.id, {...update}).then(() => {
|
||||||
favorite: !project.favorite,
|
|
||||||
}).then(() => {
|
|
||||||
markStale("project");
|
markStale("project");
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.warn("Failed to toggle favorite:", err);
|
console.warn("Failed to toggle favorite:", err);
|
||||||
@@ -54,21 +52,23 @@ import stuffLogClient from "../clients/stufflog";
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function markCompleted() {
|
function toggleFavorite() {
|
||||||
if (toggling) {
|
updateProject({
|
||||||
return
|
favorite: !project.favorite,
|
||||||
}
|
});
|
||||||
toggling = true
|
}
|
||||||
|
|
||||||
stuffLogClient.updateProject(project.id, {
|
function markCompleted() {
|
||||||
|
updateProject({
|
||||||
statusTag: "completed",
|
statusTag: "completed",
|
||||||
active: false,
|
active: false,
|
||||||
}).then(() => {
|
})
|
||||||
markStale("project");
|
}
|
||||||
}).catch(err => {
|
|
||||||
console.warn("Failed to mark completed:", err);
|
function markFailed() {
|
||||||
}).finally(() => {
|
updateProject({
|
||||||
toggling = false;
|
statusTag: "failed",
|
||||||
|
active: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,7 +117,8 @@ import stuffLogClient from "../clients/stufflog";
|
|||||||
<Option open={mdProjectEdit}>Edit</Option>
|
<Option open={mdProjectEdit}>Edit</Option>
|
||||||
<Option open={mdProjectDelete}>Delete</Option>
|
<Option open={mdProjectDelete}>Delete</Option>
|
||||||
{#if canComplete}
|
{#if canComplete}
|
||||||
<Option disabled={!toggling} green on:click={markCompleted}>Complete Project</Option>
|
<Option disabled={!toggling} color="green" on:click={markCompleted}>Complete Project</Option>
|
||||||
|
<Option disabled={!toggling} color="red" on:click={markFailed}>Fail Project</Option>
|
||||||
{/if}
|
{/if}
|
||||||
</OptionRow>
|
</OptionRow>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ import { tick } from "svelte";
|
|||||||
updateTask({statusTag: "on hold", active: false});
|
updateTask({statusTag: "on hold", active: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function moveToCompleted() {
|
||||||
|
updateTask({statusTag: "completed", active: false});
|
||||||
|
}
|
||||||
|
|
||||||
function moveToFailed() {
|
function moveToFailed() {
|
||||||
updateTask({statusTag: "failed", active: false});
|
updateTask({statusTag: "failed", active: false});
|
||||||
}
|
}
|
||||||
@@ -83,16 +87,19 @@ import { tick } from "svelte";
|
|||||||
<Option on:click={moveToActive}>Active</Option>
|
<Option on:click={moveToActive}>Active</Option>
|
||||||
{/if}
|
{/if}
|
||||||
{#if !isMoving && (task.statusTag !== "to do") }
|
{#if !isMoving && (task.statusTag !== "to do") }
|
||||||
<Option on:click={moveToToDo}>To Do</Option>
|
<Option color="yellow" on:click={moveToToDo}>To Do</Option>
|
||||||
{/if}
|
{/if}
|
||||||
{#if !isMoving && (task.statusTag !== "on hold") }
|
{#if !isMoving && (task.statusTag !== "on hold") }
|
||||||
<Option on:click={moveToOnHold}>On Hold</Option>
|
<Option color="blue" on:click={moveToOnHold}>On Hold</Option>
|
||||||
{/if}
|
{/if}
|
||||||
{#if !isMoving && (task.statusTag !== "declined") }
|
{#if !isMoving && (task.statusTag !== "declined") }
|
||||||
<Option on:click={moveToDeclined}>Won't Do</Option>
|
<Option color="purple" on:click={moveToDeclined}>Won't Do</Option>
|
||||||
|
{/if}
|
||||||
|
{#if !isMoving && task.active }
|
||||||
|
<Option color="green" on:click={moveToCompleted}>Completed</Option>
|
||||||
{/if}
|
{/if}
|
||||||
{#if !isMoving && (task.statusTag !== "failed") }
|
{#if !isMoving && (task.statusTag !== "failed") }
|
||||||
<Option on:click={moveToFailed}>Failed</Option>
|
<Option color="red" on:click={moveToFailed}>Failed</Option>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
</OptionRow>
|
</OptionRow>
|
||||||
|
|||||||
Reference in New Issue
Block a user