1
- import { DatasetLayer , VedaDatum , DatasetData } from '$types/veda' ;
1
+ import eachMonthOfInterval from 'date-fns/eachMonthOfInterval' ;
2
+ import eachDayOfInterval from 'date-fns/eachDayOfInterval' ;
3
+ import eachYearOfInterval from 'date-fns/eachYearOfInterval' ;
2
4
import {
3
5
EnhancedDatasetLayer ,
4
6
TimelineDataset ,
5
- DatasetStatus
7
+ DatasetStatus ,
8
+ StacDatasetData ,
9
+ TimeDensity ,
6
10
} from './types.d.ts' ;
7
11
import {
8
12
DataMetric ,
9
13
DATA_METRICS ,
10
14
DEFAULT_DATA_METRICS
11
15
} from './components/datasets/analysis-metrics' ;
16
+ import { utcString2userTzDate } from '$utils/date' ;
17
+ import { DatasetLayer , VedaDatum , DatasetData } from '$types/veda' ;
12
18
13
19
export const getDatasetLayers = ( datasets : VedaDatum < DatasetData > ) => Object . values ( datasets )
14
20
. flatMap ( ( dataset : VedaDatum < DatasetData > ) => {
@@ -21,7 +27,6 @@ export const getDatasetLayers = (datasets: VedaDatum<DatasetData>) => Object.val
21
27
} ) ) ;
22
28
} ) ;
23
29
24
-
25
30
/**
26
31
* Returns an array of metrics based on the given Dataset Layer configuration.
27
32
* If the layer has metrics defined, it returns only the metrics that match the
@@ -81,4 +86,39 @@ export function reconcileDatasets(
81
86
}
82
87
} ;
83
88
} ) ;
84
- }
89
+ }
90
+
91
+ export function resolveLayerTemporalExtent (
92
+ datasetId : string ,
93
+ datasetData : StacDatasetData
94
+ ) : Date [ ] {
95
+ const { domain, isPeriodic, timeDensity } = datasetData ;
96
+
97
+ if ( ! domain || domain . length === 0 ) {
98
+ throw new Error ( `Invalid domain on dataset [${ datasetId } ]` ) ;
99
+ }
100
+
101
+ if ( ! isPeriodic ) return domain . map ( ( d ) => utcString2userTzDate ( d ) ) ;
102
+
103
+ switch ( timeDensity ) {
104
+ case TimeDensity . YEAR :
105
+ return eachYearOfInterval ( {
106
+ start : utcString2userTzDate ( domain [ 0 ] ) ,
107
+ end : utcString2userTzDate ( domain [ domain . length - 1 ] )
108
+ } ) ;
109
+ case TimeDensity . MONTH :
110
+ return eachMonthOfInterval ( {
111
+ start : utcString2userTzDate ( domain [ 0 ] ) ,
112
+ end : utcString2userTzDate ( domain [ domain . length - 1 ] )
113
+ } ) ;
114
+ case TimeDensity . DAY :
115
+ return eachDayOfInterval ( {
116
+ start : utcString2userTzDate ( domain [ 0 ] ) ,
117
+ end : utcString2userTzDate ( domain [ domain . length - 1 ] )
118
+ } ) ;
119
+ default :
120
+ throw new Error (
121
+ `Invalid time density [${ timeDensity } ] on dataset [${ datasetId } ]`
122
+ ) ;
123
+ }
124
+ }
0 commit comments