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.

80 lines
3.2 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
  1. <script lang="ts">
  2. import type { ProjectResult } from "../models/project";
  3. import type { TaskResult } from "../models/task";
  4. import type { ModalData } from "../stores/modal";
  5. import IS_MOBILE from "../utils/phone-check";
  6. import Option from "./Option.svelte";
  7. import OptionRow from "./OptionRow.svelte";
  8. import ParentEntry from "./ParentEntry.svelte";
  9. import StatusColor from "./StatusColor.svelte";
  10. import TaskList from "./TaskList.svelte";
  11. export let project: ProjectResult = null;
  12. export let showAllOptions: boolean = false;
  13. export let hideInactive: boolean = false;
  14. export let hideProgress: boolean = false;
  15. export let linkProject: boolean = false;
  16. export let hideIcon: boolean = false;
  17. export let isFake: boolean = false;
  18. export let removeHook: boolean = false;
  19. let mdAddTask: ModalData;
  20. let mdProjectEdit: ModalData;
  21. let mdProjectDelete: ModalData;
  22. let linkTarget: string = "";
  23. let activeTasks: TaskResult[] = [];
  24. let inactiveTasks: TaskResult[] = [];
  25. let todoTasks: TaskResult[] = [];
  26. let completedTasks: TaskResult[] = [];
  27. let onholdTasks: TaskResult[] = [];
  28. let failedTasks: TaskResult[] = [];
  29. let nonHiddenTasks: TaskResult[] = [];
  30. $: mdAddTask = {name:"task.add", project};
  31. $: mdProjectEdit = {name:"project.edit", project};
  32. $: mdProjectDelete = {name:"project.delete", project};
  33. $: {
  34. activeTasks = project.tasks.filter(t => t.active);
  35. inactiveTasks = project.tasks.filter(t => !t.active);
  36. todoTasks = inactiveTasks.filter(t => t.statusTag === "to do" || t.statusTag === "idea");
  37. onholdTasks = inactiveTasks.filter(t => t.statusTag === "on hold");
  38. completedTasks = inactiveTasks.filter(t => t.statusTag === "completed" || t.statusTag == null);
  39. failedTasks = inactiveTasks.filter(t => t.statusTag === "failed" || t.statusTag === "declined");
  40. nonHiddenTasks = [...activeTasks, ...todoTasks, ...onholdTasks];
  41. }
  42. $: linkTarget = IS_MOBILE ? `/questlog#${project.id}` : `/projects#${project.id}`
  43. </script>
  44. <StatusColor affects="project" entry={project}>
  45. <ParentEntry
  46. full={showAllOptions}
  47. entry={project}
  48. headerLink={linkProject ? linkTarget : ""}
  49. hideProgress={hideProgress}
  50. hideIcon={hideIcon}
  51. showTimeProgress={!hideProgress}
  52. removeHook={removeHook}
  53. annotations={isFake ? ["list"] : []}
  54. >
  55. {#if showAllOptions}
  56. <OptionRow>
  57. <Option open={mdAddTask}>Add Task</Option>
  58. <Option open={mdProjectEdit}>Edit</Option>
  59. <Option open={mdProjectDelete}>Delete</Option>
  60. </OptionRow>
  61. {/if}
  62. {#if hideInactive}
  63. <TaskList header="" tasks={nonHiddenTasks} project={project} showAllOptions={showAllOptions} />
  64. {:else}
  65. <TaskList header="Active" tasks={activeTasks} project={project} showAllOptions={showAllOptions} />
  66. <TaskList header="To Do" tasks={todoTasks} project={project} showAllOptions={showAllOptions} />
  67. <TaskList header="On Hold" tasks={onholdTasks} project={project} showAllOptions={showAllOptions} />
  68. <TaskList header="Completed" tasks={completedTasks} project={project} showAllOptions={showAllOptions} />
  69. <TaskList header="Failed" tasks={failedTasks} project={project} showAllOptions={showAllOptions} />
  70. {/if}
  71. </ParentEntry>
  72. </StatusColor>