@genspectrum/dashboard-components 1.12.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +0 -7
  2. package/custom-elements.json +6 -25
  3. package/dist/components.d.ts +30 -36
  4. package/dist/components.js +943 -757
  5. package/dist/components.js.map +1 -1
  6. package/dist/util.d.ts +46 -30
  7. package/package.json +1 -5
  8. package/src/lapisApi/lapisApi.ts +21 -1
  9. package/src/lapisApi/lapisTypes.ts +36 -0
  10. package/src/preact/components/annotated-mutation.tsx +2 -2
  11. package/src/preact/{mutationsOverTime/mutations-over-time-grid.tsx → components/features-over-time-grid.tsx} +45 -52
  12. package/src/preact/genomeViewer/genome-data-viewer.tsx +2 -2
  13. package/src/preact/mutationsOverTime/MutationOverTimeData.ts +6 -4
  14. package/src/preact/mutationsOverTime/__mockData__/aminoAcidMutationsByDay/aminoAcidMutations.json +5482 -0
  15. package/src/preact/mutationsOverTime/__mockData__/aminoAcidMutationsByDay/aminoAcidMutationsOverTime.json +5496 -0
  16. package/src/preact/mutationsOverTime/__mockData__/byWeek/mutationsOverTime.json +7100 -0
  17. package/src/preact/mutationsOverTime/__mockData__/byWeek/nucleotideMutations.json +10122 -0
  18. package/src/preact/mutationsOverTime/__mockData__/defaultMockData/mutationsOverTime.json +12646 -0
  19. package/src/preact/mutationsOverTime/__mockData__/defaultMockData/nucleotideMutations.json +12632 -0
  20. package/src/preact/mutationsOverTime/__mockData__/request1800s/mutationsOverTime.json +16 -0
  21. package/src/preact/mutationsOverTime/__mockData__/request1800s/nucleotideMutations.json +11 -0
  22. package/src/preact/mutationsOverTime/__mockData__/withDisplayMutations/mutationsOverTime.json +52 -0
  23. package/src/preact/mutationsOverTime/getFilteredMutationsOverTime.spec.ts +3 -3
  24. package/src/preact/mutationsOverTime/mutations-over-time-grid-tooltip.tsx +3 -6
  25. package/src/preact/mutationsOverTime/mutations-over-time.stories.tsx +199 -12
  26. package/src/preact/mutationsOverTime/mutations-over-time.tsx +30 -35
  27. package/src/preact/wastewater/mutationsOverTime/wastewater-mutations-over-time.tsx +30 -3
  28. package/src/query/queryDatesInDataset.ts +89 -0
  29. package/src/query/queryMutationsOverTime.spec.ts +526 -548
  30. package/src/query/queryMutationsOverTime.ts +21 -232
  31. package/src/query/queryQueriesOverTime.spec.ts +432 -0
  32. package/src/query/queryQueriesOverTime.ts +125 -0
  33. package/src/utilEntrypoint.ts +3 -1
  34. package/src/utils/mutations.spec.ts +6 -0
  35. package/src/utils/mutations.ts +1 -1
  36. package/src/utils/temporalClass.ts +4 -0
  37. package/src/web-components/visualization/gs-mutations-over-time.spec-d.ts +0 -3
  38. package/src/web-components/visualization/gs-mutations-over-time.stories.ts +283 -17
  39. package/src/web-components/visualization/gs-mutations-over-time.tsx +0 -9
  40. package/standalone-bundle/dashboard-components.js +8935 -8781
  41. package/standalone-bundle/dashboard-components.js.map +1 -1
  42. package/dist/assets/mutationOverTimeWorker-f8Kp0S6V.js.map +0 -1
  43. package/src/preact/mutationsOverTime/__mockData__/aminoAcidMutationsByDay.ts +0 -47170
  44. package/src/preact/mutationsOverTime/__mockData__/byWeek.ts +0 -54026
  45. package/src/preact/mutationsOverTime/__mockData__/defaultMockData.ts +0 -108385
  46. package/src/preact/mutationsOverTime/__mockData__/mockConversion.ts +0 -54
  47. package/src/preact/mutationsOverTime/__mockData__/noDataWhenNoMutationsAreInFilter.ts +0 -23
  48. package/src/preact/mutationsOverTime/__mockData__/noDataWhenThereAreNoDatesInFilter.ts +0 -23
  49. package/src/preact/mutationsOverTime/__mockData__/showsMessageWhenTooManyMutations.ts +0 -65527
  50. package/src/preact/mutationsOverTime/__mockData__/withDisplayMutations.ts +0 -352
  51. package/src/preact/mutationsOverTime/__mockData__/withGaps.ts +0 -298
  52. package/src/preact/mutationsOverTime/mutationOverTimeWorker.mock.ts +0 -33
  53. package/src/preact/mutationsOverTime/mutationOverTimeWorker.ts +0 -29
  54. package/src/preact/webWorkers/useWebWorker.ts +0 -74
  55. package/src/preact/webWorkers/workerFunction.ts +0 -30
  56. package/src/query/queryMutationsOverTimeNewEndpoint.spec.ts +0 -988
  57. package/standalone-bundle/assets/mutationOverTimeWorker-AhhjjklP.js.map +0 -1
@@ -0,0 +1,89 @@
1
+ import { mapDateToGranularityRange } from './queryAggregatedDataOverTime';
2
+ import { FetchAggregatedOperator } from '../operator/FetchAggregatedOperator';
3
+ import { GroupByAndSumOperator } from '../operator/GroupByAndSumOperator';
4
+ import { MapOperator } from '../operator/MapOperator';
5
+ import { RenameFieldOperator } from '../operator/RenameFieldOperator';
6
+ import { SortOperator } from '../operator/SortOperator';
7
+ import { type LapisFilter, type TemporalGranularity } from '../types';
8
+ import {
9
+ dateRangeCompare,
10
+ generateAllInRange,
11
+ getMinMaxTemporal,
12
+ parseDateStringToTemporal,
13
+ } from '../utils/temporalClass';
14
+
15
+ /**
16
+ * Returns a list of date ranges as TemporalClass.
17
+ * Respects date range filters given in the lapisFilter as <lapisDateField>From and <lapisDateField>To.
18
+ * If either side (or both sides) of the range are not given, the min and max are determined from
19
+ * the available data.
20
+ */
21
+ export async function queryDatesInDataset(
22
+ lapisFilter: LapisFilter,
23
+ lapis: string,
24
+ granularity: TemporalGranularity,
25
+ lapisDateField: string,
26
+ signal: AbortSignal | undefined,
27
+ ) {
28
+ const { dateFrom, dateTo } = getDateRangeFromFilter(lapisFilter, lapisDateField, granularity);
29
+ if (dateFrom !== null && dateTo !== null) {
30
+ return generateAllInRange(dateFrom, dateTo);
31
+ }
32
+
33
+ const { content: availableDates } = await queryAvailableDates(
34
+ lapisFilter,
35
+ lapis,
36
+ granularity,
37
+ lapisDateField,
38
+ signal,
39
+ );
40
+
41
+ const { min, max } = getMinMaxTemporal(availableDates);
42
+
43
+ return generateAllInRange(dateFrom ?? min, dateTo ?? max);
44
+ }
45
+
46
+ function getDateRangeFromFilter(lapisFilter: LapisFilter, lapisDateField: string, granularity: TemporalGranularity) {
47
+ const valueFromFilter = lapisFilter[lapisDateField] as string | null;
48
+
49
+ if (valueFromFilter) {
50
+ return {
51
+ dateFrom: parseDateStringToTemporal(valueFromFilter, granularity),
52
+ dateTo: parseDateStringToTemporal(valueFromFilter, granularity),
53
+ };
54
+ }
55
+
56
+ const minFromFilter = lapisFilter[`${lapisDateField}From`] as string | null;
57
+ const maxFromFilter = lapisFilter[`${lapisDateField}To`] as string | null;
58
+
59
+ return {
60
+ dateFrom: minFromFilter ? parseDateStringToTemporal(minFromFilter, granularity) : null,
61
+ dateTo: maxFromFilter ? parseDateStringToTemporal(maxFromFilter, granularity) : null,
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Returns the sorted list of date ranges that have data in them.
67
+ * Date ranges have the size of the given granularity.
68
+ */
69
+ function queryAvailableDates(
70
+ lapisFilter: LapisFilter,
71
+ lapis: string,
72
+ granularity: TemporalGranularity,
73
+ lapisDateField: string,
74
+ signal?: AbortSignal,
75
+ ) {
76
+ return fetchAndPrepareDates(lapisFilter, granularity, lapisDateField).evaluate(lapis, signal);
77
+ }
78
+
79
+ function fetchAndPrepareDates(filter: LapisFilter, granularity: TemporalGranularity, lapisDateField: string) {
80
+ // fetch data aggregated by date
81
+ const fetchData = new FetchAggregatedOperator<Record<string, string | null>>(filter, [lapisDateField]);
82
+ const dataWithFixedDateKey = new RenameFieldOperator(fetchData, lapisDateField, 'date');
83
+ // now we have a list of { count, date }
84
+ const mapData = new MapOperator(dataWithFixedDateKey, (data) => mapDateToGranularityRange(data, granularity));
85
+ const groupByData = new GroupByAndSumOperator(mapData, 'dateRange', 'count');
86
+ // how we have a list of { dateRange, count }
87
+ const sortData = new SortOperator(groupByData, dateRangeCompare);
88
+ return new MapOperator(sortData, (data) => data.dateRange);
89
+ }