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.

77 lines
2.2 KiB

  1. <script lang="ts" context="module">
  2. let lastProjectId = "";
  3. </script>
  4. <script lang="ts">
  5. import stuffLogClient from "../clients/stufflog";
  6. import Modal from "../components/Modal.svelte";
  7. import ProjectSelect from "../components/ProjectSelect.svelte";
  8. import TaskSelect from "../components/TaskSelect.svelte";
  9. import markStale from "../stores/markStale";
  10. import modalStore from "../stores/modal";
  11. export let deletion = false;
  12. export let creation = false;
  13. const md = $modalStore;
  14. let projectId = "";
  15. let taskId = "";
  16. let groupId = "";
  17. let verb = "Add";
  18. if (md.name === "tasklink.delete") {
  19. projectId = md.project.id;
  20. taskId = md.task.id;
  21. groupId = md.project.groupId;
  22. verb = "Delete";
  23. } else if (md.name === "tasklink.add") {
  24. projectId = (md.project||{id:""}).id || lastProjectId;
  25. taskId = (md.task||{id:""}).id;
  26. groupId = md.project?.groupId;
  27. } else {
  28. throw new Error(`Wrong form ${md.name}`)
  29. }
  30. let error = null;
  31. let loading = false;
  32. function onSubmit() {
  33. loading = true;
  34. error = null;
  35. if (creation) {
  36. stuffLogClient.createTaskLink(projectId, taskId).then(() => {
  37. markStale("goal", "project");
  38. modalStore.close();
  39. }).catch(err => {
  40. error = err.message ? err.message : err.toString();
  41. }).finally(() => {
  42. loading = false;
  43. lastProjectId = projectId;
  44. })
  45. } else if (deletion) {
  46. stuffLogClient.deleteTaskLink(projectId, taskId).then(() => {
  47. markStale("goal", "project");
  48. modalStore.close();
  49. }).catch(err => {
  50. error = err.message ? err.message : err.toString();
  51. }).finally(() => {
  52. loading = false;
  53. lastProjectId = projectId;
  54. })
  55. }
  56. }
  57. </script>
  58. <Modal show title="{verb} Link" error={error} closable on:close={modalStore.close}>
  59. <form on:submit|preventDefault={onSubmit}>
  60. <label for="taskId">Source Task</label>
  61. <TaskSelect disabled={deletion} name="taskId" bind:value={taskId} />
  62. <label for="projectId">Destination Project</label>
  63. <ProjectSelect disabled={deletion} name="projectId" bind:value={projectId} groupId={groupId || ""} />
  64. <hr />
  65. <button disabled={loading} type="submit">{verb} Link</button>
  66. </form>
  67. </Modal>