Plan stuff. Log 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.

66 lines
2.1 KiB

  1. <script>
  2. import pluralize from "pluralize";
  3. import Link from "../Link.svelte";
  4. import Table from "../Table.svelte";
  5. import { createEventDispatcher } from 'svelte';
  6. import ActivityIcon from "../ActivityIcon.svelte";
  7. import ActivityDisplay from "../ActivityDisplay.svelte";
  8. import ActivityAmount from "../ActivityAmount.svelte";
  9. import ItemDisplay from "../ItemDisplay.svelte";
  10. import PointsBar from "../PointsBar.svelte";
  11. import dateStr from "../../utils/dateStr";
  12. export let period = {goals: []};
  13. export let activities = [];
  14. export let items = [];
  15. const dispatch = createEventDispatcher();
  16. let subActivityMap = {};
  17. function onOption(name, logId) {
  18. const log = period.logs.find(l => l.id === logId);
  19. const goal = period.goals.find(g => g.id === log.goalId)
  20. const activity = goal != null ? activities.find(a => a.id === goal.activityId) : null;
  21. const subActivity = activity != null ? activity.subActivities.find(s => s.id === log.subActivityId) : null;
  22. dispatch("option", {name, period, log, goal, activity, subActivity})
  23. }
  24. $: subActivityMap = activities.map(a => a.subActivities).flat().reduce((p, v) => ({...p, [v.id]: v}), {});
  25. </script>
  26. <Table
  27. headers={["Date", "Goal", "Item", "Amount", "Points", "Options"]}
  28. percentages={[25, 25, 15, 15, 5, 15]}
  29. >
  30. {#each period.logs as log (log.id)}
  31. <tr>
  32. <td>{dateStr(log.date)}</td>
  33. <td class="ellipsis">
  34. <ActivityDisplay
  35. activity={activities.find(a => a.id === (period.goals.find(g => g.id === log.goalId) || {}).activityId)}
  36. subActivity={subActivityMap[log.subActivityId]}
  37. />
  38. </td>
  39. <td>
  40. <ItemDisplay id={log.itemId} item={items.find(i => i.id === log.itemId)} />
  41. </td>
  42. <td>
  43. <ActivityAmount
  44. amount={log.amount}
  45. subActivity={subActivityMap[log.subActivityId]}
  46. />
  47. </td>
  48. <td>
  49. <Link on:click={() => onOption("periodlog.info", log.id)}>{log.score.total}</Link>
  50. </td>
  51. <td class="td-options">
  52. <Link on:click={() => onOption("periodlog.remove", log.id)}>Delete</Link>
  53. </td>
  54. </tr>
  55. {/each}
  56. </Table>