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.

99 lines
2.4 KiB

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