Loggest thine Stuff
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

104 lines
3.2 KiB

<script lang="ts">
import { getStores } from "$app/stores";
import { sl3 } from "$lib/clients/sl3";
import Modal from "$lib/components/common/Modal.svelte";
import ModalBody from "$lib/components/common/ModalBody.svelte";
import { getItemListContext } from "$lib/components/contexts/ItemListContext.svelte";
import { getItemMultiListContext } from "$lib/components/contexts/ItemMultiListContext.svelte";
import { getModalContext } from "$lib/components/contexts/ModalContext.svelte";
import { getProjectContext } from "$lib/components/contexts/ProjectContext.svelte";
import { getSprintListContext } from "$lib/components/contexts/SprintListContext.svelte";
import AcquiredTimeInput from "$lib/components/controls/AcquiredTimeInput.svelte";
import StatInput from "$lib/components/controls/StatInput.svelte";
import type Item from "$lib/models/item";
import type { ItemInput } from "$lib/models/item";
const {currentModal, closeModal} = getModalContext();
const {reloadProject} = getProjectContext();
const {reloadItemList} = getItemListContext();
const {reloadSprintList} = getSprintListContext();
const {reloadItemLists} = getItemMultiListContext();
const {page} = getStores();
let item: Partial<ItemInput>
let itemId: number
let scopeId: number
let requirementId: number
let openedDate: Date
let error: string
let loading: boolean
let show: boolean
$: switch ($currentModal.name) {
case "item.acquire":
init($currentModal.item)
break;
default:
loading = false;
error = null;
show = false;
}
function init(unaquiredItem: Item) {
openedDate = new Date();
item = {
acquiredTime: "",
description: unaquiredItem.description,
stats: unaquiredItem.stats.map(s => ({statId: s.id, acquired: s.required, required: s.required})),
}
show = true;
scopeId = unaquiredItem.scopeId;
itemId = unaquiredItem.id;
requirementId = unaquiredItem.requirementId;
}
async function submit() {
error = null;
loading = true;
try {
await sl3(fetch, $page.stuff.idToken).updateItem(scopeId, itemId, {
...item,
acquiredTime: new Date(item.acquiredTime).toISOString(),
});
// Wait for project reload if it's updating a project
if (requirementId != null) {
await reloadProject();
}
reloadItemLists();
await reloadItemList();
await reloadSprintList();
closeModal();
} catch(err) {
if (err.statusCode != null) {
error = err.statusMessage;
} else {
error = err
}
} finally {
loading = false;
}
}
</script>
<form on:submit|preventDefault={submit}>
<Modal closable show={show} verb="Acquire" noun="Item" disabled={loading} error={error}>
<ModalBody>
<label for="acquiredTime">Acquired</label>
<AcquiredTimeInput forced openDate={openedDate} bind:value={item.acquiredTime} />
<label for="description">Description</label>
<textarea name="description" bind:value={item.description} />
<label for="stats">Stats</label>
<StatInput overrideScopeId={scopeId} showAcquired hideUnseen noToggle bind:value={item.stats} />
</ModalBody>
</Modal>
</form>