Loggest thine Stuff
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.

44 lines
2.4 KiB

2 years ago
2 years ago
2 years ago
2 years ago
  1. <script lang="ts">
  2. import Markdown from "$lib/components/common/Markdown.svelte";
  3. import Progress from "$lib/components/common/Progress.svelte";
  4. import Section from "$lib/components/layout/Section.svelte";
  5. import Option from "$lib/components/layout/Option.svelte";
  6. import OptionsRow from "$lib/components/layout/OptionsRow.svelte";
  7. import type { Requirement } from "$lib/models/project";
  8. import LabeledProgress from "../common/LabeledProgress.svelte";
  9. import LabeledProgressRow from "../common/LabeledProgressRow.svelte";
  10. import { STATUS_ICONS } from "../common/StatusIcon.svelte";
  11. import ItemEntry from "./ItemSubSection.svelte";
  12. import Icon from "../layout/Icon.svelte";
  13. import { projectPrettyId } from "$lib/utils/prettyIds";
  14. import AggregateAmountRow from "./AggregateAmountRow.svelte";
  15. import TagRow from "../common/TagRow.svelte";
  16. export let requirement: Requirement;
  17. </script>
  18. <div id={projectPrettyId(requirement)} />
  19. <Section title={requirement.name} icon={STATUS_ICONS[requirement.status]} status={requirement.status}>
  20. <Progress alwaysSmooth titlePercentageOnly thin green status={requirement.status} count={requirement.totalAcquired} target={requirement.totalRequired} />
  21. <Progress alwaysSmooth titlePercentageOnly thinner gray count={requirement.totalPlanned} target={requirement.totalRequired} />
  22. <TagRow names={requirement.tags} />
  23. <Markdown source={requirement.description} />
  24. <OptionsRow slot="right">
  25. <Option open={{name: "item.multischedule", items: requirement.items}}><Icon name="calendar" /></Option>
  26. <Option open={{name: "item.create", requirement}}><Icon name="plus" /></Option>
  27. <Option open={{name: "requirement.edit", requirement}}><Icon name="pen" /></Option>
  28. <Option open={{name: "requirement.delete", requirement}} color="red"><Icon name="trash" /></Option>
  29. </OptionsRow>
  30. <LabeledProgressRow>
  31. {#each requirement.stats as stat (stat.id)}
  32. {#if !requirement.isCoarse || stat.required > 0}
  33. <LabeledProgress count={stat.acquired} target={stat.required} planned={stat.planned} name={stat.name} />
  34. {/if}
  35. {/each}
  36. </LabeledProgressRow>
  37. {#each (requirement.items||[]) as item (item.id)}
  38. <ItemEntry item={item} />
  39. {/each}
  40. {#if requirement.aggregateRequired > 0}
  41. <AggregateAmountRow items={requirement.items||[]} totalAcquired={requirement.totalAcquired} aggregateRequired={requirement.aggregateRequired} />
  42. {/if}
  43. </Section>