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.
85 lines
2.6 KiB
85 lines
2.6 KiB
<script lang="ts">
|
|
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 ScheduledDateInput from "$lib/components/controls/ScheduledDateInput.svelte";
|
|
import type Item from "$lib/models/item";
|
|
|
|
const {currentModal, closeModal} = getModalContext();
|
|
const {reloadProject} = getProjectContext();
|
|
const {reloadItemList} = getItemListContext();
|
|
const {reloadSprintList} = getSprintListContext();
|
|
const {reloadItemLists} = getItemMultiListContext();
|
|
|
|
let items: Item[]
|
|
let openedDate: Date
|
|
let scheduleDate: string;
|
|
|
|
let error: string
|
|
let loading: boolean
|
|
let show: boolean
|
|
|
|
$: switch ($currentModal.name) {
|
|
case "item.multischedule":
|
|
init($currentModal.items)
|
|
break;
|
|
|
|
default:
|
|
loading = false;
|
|
error = null;
|
|
show = false;
|
|
}
|
|
|
|
function init(selectedItems: Item[]) {
|
|
openedDate = new Date();
|
|
items = selectedItems.map(i => ({...i}));
|
|
show = true;
|
|
scheduleDate = selectedItems.find(i => i.scheduledDate)?.scheduledDate || "";
|
|
}
|
|
|
|
async function submit() {
|
|
error = null;
|
|
loading = true;
|
|
|
|
try {
|
|
for (const item of items) {
|
|
await sl3(fetch).updateItem(item.scopeId, item.id, {
|
|
scheduledDate: scheduleDate || void(0),
|
|
clearScheduledDate: scheduleDate === "",
|
|
});
|
|
}
|
|
|
|
reloadItemLists();
|
|
|
|
await reloadProject();
|
|
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="Schedule" noun="Items" disabled={loading} error={error}>
|
|
<ModalBody>
|
|
<label for="stats">Date</label>
|
|
<ScheduledDateInput notScheduledText="Clear Scheduled Date" openDate={openedDate} bind:value={scheduleDate} />
|
|
<p>This changes the scheduled date on all items in the requirement, regardless of whether they already have a scheduled date.</p>
|
|
</ModalBody>
|
|
</Modal>
|
|
</form>
|