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.

35 lines
980 B

  1. <script lang="ts">
  2. import projectStore from "../stores/project";
  3. export let value = "";
  4. export let name = "";
  5. export let disabled = false;
  6. export let optional = false;
  7. $: {
  8. if ($projectStore.stale && !$projectStore.loading) {
  9. projectStore.load({});
  10. }
  11. }
  12. $: {
  13. if ($projectStore.projects.length > 0 && value === "" && !optional) {
  14. const nonEmpty = $projectStore.projects.find(g => g.tasks.length > 0);
  15. if (nonEmpty != null) {
  16. value = nonEmpty.tasks[0].id;
  17. }
  18. }
  19. }
  20. </script>
  21. <select name={name} bind:value={value} disabled={disabled || $projectStore.loading}>
  22. {#if optional}
  23. <option value={""} selected={"" === value}>None</option>
  24. {/if}
  25. {#each $projectStore.projects as project (project.id)}
  26. <optgroup label={project.name}>
  27. {#each project.tasks as task (task.id)}
  28. <option value={task.id} selected={task.id === value}>{task.name}</option>
  29. {/each}
  30. </optgroup>
  31. {/each}
  32. </select>