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.
36 lines
980 B
36 lines
980 B
<script lang="ts">
|
|
import projectStore from "../stores/project";
|
|
|
|
export let value = "";
|
|
export let name = "";
|
|
export let disabled = false;
|
|
export let optional = false;
|
|
|
|
$: {
|
|
if ($projectStore.stale && !$projectStore.loading) {
|
|
projectStore.load({});
|
|
}
|
|
}
|
|
|
|
$: {
|
|
if ($projectStore.projects.length > 0 && value === "" && !optional) {
|
|
const nonEmpty = $projectStore.projects.find(g => g.tasks.length > 0);
|
|
if (nonEmpty != null) {
|
|
value = nonEmpty.tasks[0].id;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<select name={name} bind:value={value} disabled={disabled || $projectStore.loading}>
|
|
{#if optional}
|
|
<option value={""} selected={"" === value}>None</option>
|
|
{/if}
|
|
{#each $projectStore.projects as project (project.id)}
|
|
<optgroup label={project.name}>
|
|
{#each project.tasks as task (task.id)}
|
|
<option value={task.id} selected={task.id === value}>{task.name}</option>
|
|
{/each}
|
|
</optgroup>
|
|
{/each}
|
|
</select>
|