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.

39 lines
1.1 KiB

3 years ago
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. export let enableWholeGroup = false;
  8. $: {
  9. if ($groupStore.stale && !$groupStore.loading) {
  10. groupStore.load();
  11. }
  12. }
  13. $: {
  14. if ($groupStore.groups.length > 0 && value === "" && !optional) {
  15. const nonEmpty = $groupStore.groups.find(g => g.items.length > 0);
  16. if (nonEmpty != null) {
  17. value = nonEmpty.items[0].id;
  18. }
  19. }
  20. }
  21. </script>
  22. <select name={name} bind:value={value} disabled={disabled || $groupStore.loading}>
  23. {#if optional}
  24. <option value={""} selected={"" === value}>None</option>
  25. {/if}
  26. {#each $groupStore.groups as group (group.id)}
  27. <optgroup label={group.name}>
  28. {#if enableWholeGroup}
  29. <option value={group.items.map(it => it.id).join(",")}>All "{group.name}" items</option>
  30. {/if}
  31. {#each group.items as item (item.id)}
  32. <option value={item.id} selected={item.id === value}>{item.name} ({item.groupWeight})</option>
  33. {/each}
  34. </optgroup>
  35. {/each}
  36. </select>