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.7 KiB

  1. <script lang="ts">
  2. import { navigate } from "svelte-routing";
  3. import stuffLogClient from "../clients/stufflog";
  4. import Modal from "../components/Modal.svelte";
  5. import type ProjectGroup from "../models/projectgroup";
  6. import markStale from "../stores/markStale";
  7. import modalStore from "../stores/modal";
  8. export let deletion = false;
  9. export let creation = false;
  10. const md = $modalStore;
  11. let group: ProjectGroup = {
  12. id: "",
  13. name: "",
  14. description: "",
  15. abbreviation: "",
  16. categoryNames: {},
  17. }
  18. let verb = "Add";
  19. if (md.name === "projectgroup.edit" || md.name === "projectgroup.delete") {
  20. group = md.projectGroup;
  21. verb = (md.name === "projectgroup.edit") ? "Edit" : "Delete";
  22. } else if (md.name !== "projectgroup.add") {
  23. throw new Error("Wrong form")
  24. }
  25. let name = group.name;
  26. let description = group.description;
  27. let abbreviation = group.abbreviation;
  28. let categoryNames = group.categoryNames || {};
  29. let error = null;
  30. let loading = false;
  31. function onSubmit() {
  32. loading = true;
  33. error = null;
  34. if (creation) {
  35. stuffLogClient.createProjectGroup({
  36. name, abbreviation, description, categoryNames
  37. }).then(newGroup => {
  38. markStale("project");
  39. modalStore.close();
  40. navigate(`/questlog/${newGroup.id}`);
  41. }).catch(err => {
  42. error = err.message ? err.message : err.toString();
  43. }).finally(() => {
  44. loading = false;
  45. })
  46. } else if (deletion) {
  47. stuffLogClient.deleteProjectGroup(group.id).then(() => {
  48. markStale("project");
  49. modalStore.close();
  50. navigate("/questlog/");
  51. }).catch(err => {
  52. error = err.message ? err.message : err.toString();
  53. }).finally(() => {
  54. loading = false;
  55. })
  56. } else {
  57. stuffLogClient.updateProjectGroup(group.id, {
  58. name, abbreviation, description,
  59. setCategoryNames: categoryNames,
  60. }).then(() => {
  61. markStale("project");
  62. modalStore.close();
  63. }).catch(err => {
  64. error = err.message ? err.message : err.toString();
  65. }).finally(() => {
  66. loading = false;
  67. })
  68. }
  69. }
  70. function onClose() {
  71. modalStore.close();
  72. }
  73. </script>
  74. <Modal show title="{verb} Project Group" error={error} closable on:close={onClose}>
  75. <form on:submit|preventDefault={onSubmit}>
  76. <label for="name">Name</label>
  77. <input disabled={deletion} name="name" type="text" bind:value={name} />
  78. <label for="abbreviation">Abbreviation</label>
  79. <input disabled={deletion} name="abbreviation" bind:value={abbreviation} />
  80. <label for="description">Description</label>
  81. <textarea disabled={deletion} name="description" bind:value={description} />
  82. <label for="name">Custom Labels</label>
  83. <input disabled={deletion} name="name" type="text" placeholder="Deadlines" bind:value={categoryNames["deadlines"]} />
  84. <input disabled={deletion} name="name" type="text" placeholder="Active" bind:value={categoryNames["active"]} />
  85. <input disabled={deletion} name="name" type="text" placeholder="Background" bind:value={categoryNames["background"]} />
  86. <input disabled={deletion} name="name" type="text" placeholder="Progress" bind:value={categoryNames["progress"]} />
  87. <input disabled={deletion} name="name" type="text" placeholder="To Do" bind:value={categoryNames["to do"]} />
  88. <input disabled={deletion} name="name" type="text" placeholder="On Hold" bind:value={categoryNames["on hold"]} />
  89. <input disabled={deletion} name="name" type="text" placeholder="Completed" bind:value={categoryNames["completed"]} />
  90. <input disabled={deletion} name="name" type="text" placeholder="Failed" bind:value={categoryNames["failed"]} />
  91. <hr />
  92. <button disabled={loading} type="submit">{verb} Project Group</button>
  93. </form>
  94. </Modal>