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.

84 lines
2.6 KiB

  1. <script lang="ts">
  2. import { sl3 } from "$lib/clients/sl3";
  3. import Modal from "$lib/components/common/Modal.svelte";
  4. import ModalBody from "$lib/components/common/ModalBody.svelte";
  5. import { getItemListContext } from "$lib/components/contexts/ItemListContext.svelte";
  6. import { getItemMultiListContext } from "$lib/components/contexts/ItemMultiListContext.svelte";
  7. import { getModalContext } from "$lib/components/contexts/ModalContext.svelte";
  8. import { getProjectContext } from "$lib/components/contexts/ProjectContext.svelte";
  9. import { getSprintListContext } from "$lib/components/contexts/SprintListContext.svelte";
  10. import ScheduledDateInput from "$lib/components/controls/ScheduledDateInput.svelte";
  11. import type Item from "$lib/models/item";
  12. const {currentModal, closeModal} = getModalContext();
  13. const {reloadProject} = getProjectContext();
  14. const {reloadItemList} = getItemListContext();
  15. const {reloadSprintList} = getSprintListContext();
  16. const {reloadItemLists} = getItemMultiListContext();
  17. let items: Item[]
  18. let openedDate: Date
  19. let scheduleDate: string;
  20. let error: string
  21. let loading: boolean
  22. let show: boolean
  23. $: switch ($currentModal.name) {
  24. case "item.multischedule":
  25. init($currentModal.items)
  26. break;
  27. default:
  28. loading = false;
  29. error = null;
  30. show = false;
  31. }
  32. function init(selectedItems: Item[]) {
  33. openedDate = new Date();
  34. items = selectedItems.map(i => ({...i}));
  35. show = true;
  36. scheduleDate = selectedItems.find(i => i.scheduledDate)?.scheduledDate || "";
  37. }
  38. async function submit() {
  39. error = null;
  40. loading = true;
  41. try {
  42. for (const item of items) {
  43. await sl3(fetch).updateItem(item.scopeId, item.id, {
  44. scheduledDate: scheduleDate || void(0),
  45. clearScheduledDate: scheduleDate === "",
  46. });
  47. }
  48. reloadItemLists();
  49. await reloadProject();
  50. await reloadItemList();
  51. await reloadSprintList();
  52. closeModal();
  53. } catch(err) {
  54. if (err.statusCode != null) {
  55. error = err.statusMessage;
  56. } else {
  57. error = err
  58. }
  59. } finally {
  60. loading = false;
  61. }
  62. }
  63. </script>
  64. <form on:submit|preventDefault={submit}>
  65. <Modal closable show={show} verb="Schedule" noun="Items" disabled={loading} error={error}>
  66. <ModalBody>
  67. <label for="stats">Date</label>
  68. <ScheduledDateInput notScheduledText="Clear Scheduled Date" openDate={openedDate} bind:value={scheduleDate} />
  69. <p>This changes the scheduled date on all items in the requirement, regardless of whether they already have a scheduled date.</p>
  70. </ModalBody>
  71. </Modal>
  72. </form>