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
967 B

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