1<script lang="ts">
2  import { createEventDispatcher } from "svelte";
3  import type {
4    DatasetSelection,
5    DatasetSelectionEvent,
6    MetricSelection,
7    MetricSelectionEvent,
8    StatEvent,
9    StatInfo,
10  } from "../types/events.js";
11  import { Session, type IndexedWrapper } from "../wrappers/session.js";
12  import Dataset from "./Dataset.svelte";
13
14  export let className: string;
15  export let datasetGroup: IndexedWrapper[];
16  export let suppressedMetrics: Set<string>;
17
18  let datasetDispatcher = createEventDispatcher<DatasetSelectionEvent>();
19  let metricsDispatcher = createEventDispatcher<MetricSelectionEvent>();
20  let statDispatcher = createEventDispatcher<StatEvent>();
21  let datasetNames: Set<string>;
22
23  // Forward events.
24  let datasetSelection = function (event: CustomEvent<DatasetSelection[]>) {
25    datasetDispatcher("datasetSelections", event.detail);
26  };
27
28  let stat = function (event: CustomEvent<StatInfo[]>) {
29    statDispatcher("info", event.detail);
30  };
31
32  let metricSelection = function (event: CustomEvent<MetricSelection[]>) {
33    metricsDispatcher("metricSelections", event.detail);
34  };
35
36  $: {
37    datasetNames = Session.datasetNames(datasetGroup);
38  }
39</script>
40
41<details open>
42  <summary>{className}</summary>
43  <div class="details">
44    {#each datasetNames as name (name)}
45      <Dataset
46        {datasetGroup}
47        {suppressedMetrics}
48        {name}
49        on:datasetSelections={datasetSelection}
50        on:metricSelections={metricSelection}
51        on:info={stat}
52      />
53    {/each}
54  </div>
55</details>
56