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