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.

96 lines
2.3 KiB

  1. <script lang="ts">
  2. import type { ProjectResult } from "../models/project";
  3. import selectionStore from "../stores/selection";
  4. import DaysLeft from "./DaysLeft.svelte";
  5. import Icon from "./Icon.svelte";
  6. import ProjectIcon from "./ProjectIcon.svelte";
  7. import ProjectProgress from "./ProjectProgress.svelte";
  8. import StatusColor from "./StatusColor.svelte";
  9. import TimeProgress from "./TimeProgress.svelte";
  10. export let project: ProjectResult;
  11. let selected: boolean;
  12. let completed: boolean;
  13. let deadline: boolean;
  14. function handleClick() {
  15. selectionStore.change("hash", project.id);
  16. }
  17. $: selected = $selectionStore.hash === project.id;
  18. $: completed = !project.active;
  19. $: deadline = !!project.endTime;
  20. </script>
  21. <StatusColor affects="project" entry={project} selected={selected}>
  22. <div class="ql-list-item" on:click={handleClick} class:selected class:deadline={deadline}>
  23. <div class="icon sccfg" class:completed>
  24. <Icon block name={project.icon} />
  25. </div>
  26. <div class="header">
  27. <div class="name">
  28. <div class="content">{project.name}</div>
  29. {#if project.endTime}
  30. <div class="times">
  31. <DaysLeft compact startTime={project.startTime || project.createdTime} endTime={project.endTime} />
  32. </div>
  33. {/if}
  34. </div>
  35. <ProjectProgress project={project} />
  36. {#if project.endTime}
  37. <TimeProgress startTime={project.startTime || project.createdTime} endTime={project.endTime} />
  38. {/if}
  39. </div>
  40. </div>
  41. </StatusColor>
  42. <style>
  43. div.ql-list-item {
  44. display: flex;
  45. flex-direction: row;
  46. -webkit-user-select: none;
  47. -moz-user-select: none;
  48. color: #777;
  49. padding: 0.2em;
  50. padding-top: 0.3em;
  51. padding-bottom: 0.05em;
  52. cursor: pointer;
  53. }
  54. div.ql-list-item:hover {
  55. background-color: #191919;
  56. }
  57. div.ql-list-item.selected {
  58. background-color: #222;
  59. color: #aaa;
  60. }
  61. div.ql-list-item:hover {
  62. color: #ccc;
  63. }
  64. div.ql-list-item.deadline {
  65. padding-top: 0.275em;
  66. }
  67. div.icon {
  68. padding: 0.3em 0.5ch;
  69. padding-right: 1ch;
  70. padding-top: 0.4em;
  71. }
  72. div.header {
  73. flex-grow: 1;
  74. flex-shrink: 0;
  75. padding-right: 0.5ch;
  76. }
  77. div.name {
  78. display: flex;
  79. flex-direction: row;
  80. }
  81. div.name > div.times {
  82. margin-left: auto;
  83. }
  84. </style>