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.

92 lines
2.6 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <script lang="ts">
  2. import stuffLogClient from "../clients/stufflog";
  3. import Modal from "../components/Modal.svelte";
  4. import modalStore from "../stores/modal";
  5. import IconSelect from "../components/IconSelect.svelte";
  6. import { DEFAULT_ICON } from "../external/icons";
  7. import type { IconName } from "../external/icons";
  8. import type { GroupResult } from "../models/group";
  9. import markStale from "../stores/markStale";
  10. export let deletion = false;
  11. export let creation = false;
  12. const md = $modalStore;
  13. let group: GroupResult = {
  14. id: "",
  15. name: "",
  16. description: "",
  17. icon: DEFAULT_ICON,
  18. items: [],
  19. };
  20. let verb = "Add";
  21. if (md.name === "group.edit" || md.name === "group.delete") {
  22. group = md.group;
  23. verb = (md.name === "group.edit") ? "Edit" : "Delete";
  24. } else if (md.name !== "group.add") {
  25. throw new Error("Wrong form")
  26. }
  27. let name = group.name;
  28. let description = group.description;
  29. let icon = group.icon as IconName;
  30. let error = null;
  31. let loading = false;
  32. function onSubmit() {
  33. loading = true;
  34. if (creation) {
  35. stuffLogClient.createGroup({
  36. name, description, icon,
  37. }).then(() => {
  38. markStale("group");
  39. modalStore.close();
  40. }).catch(err => {
  41. error = err.message ? err.message : err.toString();
  42. }).finally(() => {
  43. loading = false;
  44. })
  45. } else if (deletion) {
  46. stuffLogClient.deleteGroup(group.id).then(() => {
  47. markStale("group");
  48. modalStore.close();
  49. }).catch(err => {
  50. error = err.message ? err.message : err.toString();
  51. }).finally(() => {
  52. loading = false;
  53. })
  54. } else {
  55. stuffLogClient.updateGroup(group.id, {
  56. name, description, icon,
  57. }).then(() => {
  58. markStale("group", "goal", "project", "task");
  59. modalStore.close();
  60. }).catch(err => {
  61. error = err.message ? err.message : err.toString();
  62. }).finally(() => {
  63. loading = false;
  64. })
  65. }
  66. error = null;
  67. }
  68. function onClose() {
  69. modalStore.close();
  70. }
  71. </script>
  72. <Modal show title="{verb} Group" error={error} closable on:close={onClose}>
  73. <form on:submit|preventDefault={onSubmit}>
  74. <label for="name">Name</label>
  75. <input disabled={deletion} name="name" type="text" bind:value={name} />
  76. <label for="description">Description</label>
  77. <textarea disabled={deletion} name="description" bind:value={description} />
  78. <label for="icon">Icon</label>
  79. <IconSelect disabled={deletion} bind:value={icon} />
  80. <hr />
  81. <button disabled={loading} type="submit">{verb} Group</button>
  82. </form>
  83. </Modal>