raain-ui 2.3.7 → 2.3.9
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.
- package/CHANGELOG.md +30 -4
- package/README.md +158 -30
- package/data/globe.css +167 -0
- package/factories/DateStatusElement.d.ts +52 -52
- package/factories/DateStatusElement.js +167 -297
- package/factories/DateStatusUtils.d.ts +66 -0
- package/factories/DateStatusUtils.js +257 -0
- package/factories/DynamicDateStatusElement.d.ts +49 -0
- package/factories/DynamicDateStatusElement.js +143 -0
- package/factories/EarthMapElement.d.ts +20 -0
- package/factories/EarthMapElement.js +61 -0
- package/factories/ElementsFactory.d.ts +4 -0
- package/factories/ElementsFactory.js +13 -1
- package/factories/Tools.js +6 -6
- package/factories/index.d.ts +2 -0
- package/factories/index.js +3 -1
- package/globe/basic-style-geojson.d.ts +1327 -0
- package/globe/basic-style-geojson.js +1035 -0
- package/globe/dom.d.ts +2 -0
- package/globe/dom.js +17 -0
- package/globe/infobox.d.ts +11 -0
- package/globe/infobox.js +44 -0
- package/globe/main.d.ts +5 -0
- package/globe/main.js +88 -0
- package/globe/map.d.ts +1 -0
- package/globe/map.js +78 -0
- package/globe/markers.d.ts +13 -0
- package/globe/markers.js +52 -0
- package/globe/params.d.ts +18 -0
- package/globe/params.js +41 -0
- package/globe/reproject.d.ts +4 -0
- package/globe/reproject.js +56 -0
- package/globe/tooltip.d.ts +3 -0
- package/globe/tooltip.js +34 -0
- package/package.json +28 -15
- package/GUIDELINES.md +0 -168
- package/RELEASE_PROCESS.md +0 -92
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DateRange } from './Tools';
|
|
2
|
+
export declare class DateStatusUtils {
|
|
3
|
+
/**
|
|
4
|
+
* Gets the number of days in a month for a given date
|
|
5
|
+
*/
|
|
6
|
+
static getDaysInMonth(date: Date): number;
|
|
7
|
+
/**
|
|
8
|
+
* Filters data points based on the focus date and range
|
|
9
|
+
*/
|
|
10
|
+
static filterFocus(mapToFilter: Array<{
|
|
11
|
+
date: Date;
|
|
12
|
+
value: number;
|
|
13
|
+
}>, focusDate: Date, focusRange: DateRange): Array<{
|
|
14
|
+
date: Date;
|
|
15
|
+
value: number;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Groups data points based on the focus date and range
|
|
19
|
+
*/
|
|
20
|
+
static groupFocus(mapToFilter: Array<{
|
|
21
|
+
date: Date;
|
|
22
|
+
value: number;
|
|
23
|
+
}>, focusDate: Date, focusRange: DateRange, min: Date, max: Date): number[];
|
|
24
|
+
/**
|
|
25
|
+
* Generates labels for the chart based on the focus date and range
|
|
26
|
+
*/
|
|
27
|
+
static focusLabels(focusDate: Date, focusRange: DateRange, min: Date, max: Date, data: {
|
|
28
|
+
label: string;
|
|
29
|
+
style: string;
|
|
30
|
+
values: {
|
|
31
|
+
date: Date;
|
|
32
|
+
value: number;
|
|
33
|
+
}[];
|
|
34
|
+
}[]): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Gets the focus date and title for a given index
|
|
37
|
+
*/
|
|
38
|
+
static getFocusDateAndTitle(oldFocusDate: Date, focusRange: DateRange, index: number, min: Date, max: Date): {
|
|
39
|
+
newFocusDate: Date;
|
|
40
|
+
newTitle: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Builds a label for a date
|
|
44
|
+
*/
|
|
45
|
+
static buildLabel(date: Date): string;
|
|
46
|
+
/**
|
|
47
|
+
* Builds a label for a year
|
|
48
|
+
*/
|
|
49
|
+
static buildLabelYear(date: Date, year: number): string;
|
|
50
|
+
/**
|
|
51
|
+
* Builds a label for a month
|
|
52
|
+
*/
|
|
53
|
+
static buildLabelMonth(date: Date, month: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Builds a label for a day
|
|
56
|
+
*/
|
|
57
|
+
static buildLabelDate(date: Date, dateNumber: number): string;
|
|
58
|
+
/**
|
|
59
|
+
* Builds a label for an hour
|
|
60
|
+
*/
|
|
61
|
+
static buildLabelHour(date: Date, hour: number, withLocal?: boolean): string;
|
|
62
|
+
/**
|
|
63
|
+
* Builds a label for a minute
|
|
64
|
+
*/
|
|
65
|
+
static buildLabelMinute(date: Date, minute: number, withLocal?: boolean): string;
|
|
66
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DateStatusUtils = void 0;
|
|
4
|
+
const Tools_1 = require("./Tools");
|
|
5
|
+
class DateStatusUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Gets the number of days in a month for a given date
|
|
8
|
+
*/
|
|
9
|
+
static getDaysInMonth(date) {
|
|
10
|
+
// Create a new date for the first day of the next month, then get the day before (0th day)
|
|
11
|
+
// This gives us the last day of the current month, which is the number of days in the month
|
|
12
|
+
return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0)).getDate();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Filters data points based on the focus date and range
|
|
16
|
+
*/
|
|
17
|
+
static filterFocus(mapToFilter, focusDate, focusRange) {
|
|
18
|
+
return mapToFilter
|
|
19
|
+
.filter(e => {
|
|
20
|
+
let isIn = true;
|
|
21
|
+
if (isIn && focusRange >= Tools_1.DateRange.YEAR) {
|
|
22
|
+
isIn = e.date.getUTCFullYear() === focusDate.getUTCFullYear();
|
|
23
|
+
}
|
|
24
|
+
if (isIn && focusRange >= Tools_1.DateRange.MONTH) {
|
|
25
|
+
isIn = e.date.getUTCMonth() === focusDate.getUTCMonth();
|
|
26
|
+
}
|
|
27
|
+
if (isIn && focusRange >= Tools_1.DateRange.DAY) {
|
|
28
|
+
isIn = e.date.getUTCDate() === focusDate.getUTCDate();
|
|
29
|
+
}
|
|
30
|
+
if (isIn && focusRange >= Tools_1.DateRange.HOUR) {
|
|
31
|
+
isIn = e.date.getUTCHours() === focusDate.getUTCHours();
|
|
32
|
+
}
|
|
33
|
+
if (isIn && focusRange >= Tools_1.DateRange.MINUTE) {
|
|
34
|
+
isIn = e.date.getUTCMinutes() === focusDate.getUTCMinutes();
|
|
35
|
+
}
|
|
36
|
+
return isIn;
|
|
37
|
+
})
|
|
38
|
+
.sort((a, b) => a.date.getTime() - b.date.getTime());
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Groups data points based on the focus date and range
|
|
42
|
+
*/
|
|
43
|
+
static groupFocus(mapToFilter, focusDate, focusRange, min, max) {
|
|
44
|
+
const filteredAndSorted = DateStatusUtils.filterFocus(mapToFilter, focusDate, focusRange);
|
|
45
|
+
if (focusRange === Tools_1.DateRange.CENTURY) {
|
|
46
|
+
const groupedByYear = [];
|
|
47
|
+
for (let i = min.getUTCFullYear(); i <= max.getUTCFullYear(); i++) {
|
|
48
|
+
const yearDate = new Date(focusDate);
|
|
49
|
+
yearDate.setUTCFullYear(i);
|
|
50
|
+
const sum = DateStatusUtils.filterFocus(filteredAndSorted, yearDate, Tools_1.DateRange.YEAR)
|
|
51
|
+
.reduce((partialSum, a) => partialSum + a.value, 0);
|
|
52
|
+
groupedByYear.push(sum);
|
|
53
|
+
}
|
|
54
|
+
return groupedByYear;
|
|
55
|
+
}
|
|
56
|
+
if (focusRange === Tools_1.DateRange.YEAR) {
|
|
57
|
+
const groupedByMonth = [];
|
|
58
|
+
for (let i = 0; i < 12; i++) {
|
|
59
|
+
const monthDate = new Date(focusDate);
|
|
60
|
+
monthDate.setUTCMonth(i);
|
|
61
|
+
const sum = DateStatusUtils.filterFocus(filteredAndSorted, monthDate, Tools_1.DateRange.MONTH)
|
|
62
|
+
.reduce((partialSum, a) => partialSum + a.value, 0);
|
|
63
|
+
groupedByMonth.push(sum);
|
|
64
|
+
}
|
|
65
|
+
return groupedByMonth;
|
|
66
|
+
}
|
|
67
|
+
if (focusRange === Tools_1.DateRange.MONTH) {
|
|
68
|
+
const groupedByDay = [];
|
|
69
|
+
const daysInMonth = DateStatusUtils.getDaysInMonth(focusDate);
|
|
70
|
+
for (let i = 1; i <= daysInMonth; i++) {
|
|
71
|
+
const dayDate = new Date(focusDate);
|
|
72
|
+
dayDate.setUTCDate(i);
|
|
73
|
+
const sum = DateStatusUtils.filterFocus(filteredAndSorted, dayDate, Tools_1.DateRange.DAY)
|
|
74
|
+
.reduce((partialSum, a) => partialSum + a.value, 0);
|
|
75
|
+
groupedByDay.push(sum);
|
|
76
|
+
}
|
|
77
|
+
return groupedByDay;
|
|
78
|
+
}
|
|
79
|
+
if (focusRange === Tools_1.DateRange.DAY) {
|
|
80
|
+
const groupedByHour = [];
|
|
81
|
+
for (let i = 0; i < 24; i++) {
|
|
82
|
+
const hourDate = new Date(focusDate);
|
|
83
|
+
hourDate.setUTCHours(i);
|
|
84
|
+
const sum = DateStatusUtils.filterFocus(filteredAndSorted, hourDate, Tools_1.DateRange.HOUR)
|
|
85
|
+
.reduce((partialSum, a) => partialSum + a.value, 0);
|
|
86
|
+
groupedByHour.push(sum);
|
|
87
|
+
}
|
|
88
|
+
return groupedByHour;
|
|
89
|
+
}
|
|
90
|
+
if (focusRange === Tools_1.DateRange.HOUR) {
|
|
91
|
+
const groupedByMinutes = [];
|
|
92
|
+
for (let i = 0; i < 60; i++) {
|
|
93
|
+
const minuteDate = new Date(focusDate);
|
|
94
|
+
minuteDate.setUTCMinutes(i);
|
|
95
|
+
const sum = DateStatusUtils.filterFocus(filteredAndSorted, minuteDate, Tools_1.DateRange.MINUTE)
|
|
96
|
+
.reduce((partialSum, a) => partialSum + a.value, 0);
|
|
97
|
+
groupedByMinutes.push(sum);
|
|
98
|
+
}
|
|
99
|
+
return groupedByMinutes;
|
|
100
|
+
}
|
|
101
|
+
return filteredAndSorted.map(e => e.value);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Generates labels for the chart based on the focus date and range
|
|
105
|
+
*/
|
|
106
|
+
static focusLabels(focusDate, focusRange, min, max, data) {
|
|
107
|
+
if (focusRange === Tools_1.DateRange.CENTURY) {
|
|
108
|
+
const groupedByYear = [];
|
|
109
|
+
for (let i = min.getUTCFullYear(); i <= max.getUTCFullYear(); i++) {
|
|
110
|
+
groupedByYear.push(DateStatusUtils.buildLabelYear(new Date(focusDate), i));
|
|
111
|
+
}
|
|
112
|
+
return groupedByYear;
|
|
113
|
+
}
|
|
114
|
+
else if (focusRange === Tools_1.DateRange.YEAR) {
|
|
115
|
+
const groupedByMonth = [];
|
|
116
|
+
for (let i = 0; i < 12; i++) {
|
|
117
|
+
groupedByMonth.push(DateStatusUtils.buildLabelMonth(new Date(focusDate), i));
|
|
118
|
+
}
|
|
119
|
+
return groupedByMonth;
|
|
120
|
+
}
|
|
121
|
+
else if (focusRange === Tools_1.DateRange.MONTH) {
|
|
122
|
+
const groupedByDay = [];
|
|
123
|
+
const daysInMonth = DateStatusUtils.getDaysInMonth(focusDate);
|
|
124
|
+
for (let i = 1; i <= daysInMonth; i++) {
|
|
125
|
+
groupedByDay.push(DateStatusUtils.buildLabelDate(new Date(focusDate), i));
|
|
126
|
+
}
|
|
127
|
+
return groupedByDay;
|
|
128
|
+
}
|
|
129
|
+
else if (focusRange === Tools_1.DateRange.DAY) {
|
|
130
|
+
const groupedByHour = [];
|
|
131
|
+
for (let i = 0; i < 24; i++) {
|
|
132
|
+
groupedByHour.push(DateStatusUtils.buildLabelHour(new Date(focusDate), i));
|
|
133
|
+
}
|
|
134
|
+
return groupedByHour;
|
|
135
|
+
}
|
|
136
|
+
else if (focusRange === Tools_1.DateRange.HOUR) {
|
|
137
|
+
const groupedByMinutes = [];
|
|
138
|
+
for (let i = 0; i < 60; i++) {
|
|
139
|
+
groupedByMinutes.push(DateStatusUtils.buildLabelMinute(new Date(focusDate), i));
|
|
140
|
+
}
|
|
141
|
+
return groupedByMinutes;
|
|
142
|
+
}
|
|
143
|
+
// all elements that are in the current minute
|
|
144
|
+
let allDates = [];
|
|
145
|
+
data.forEach(d => {
|
|
146
|
+
allDates = allDates.concat(d.values);
|
|
147
|
+
});
|
|
148
|
+
const filteredDates = DateStatusUtils.filterFocus(allDates, focusDate, Tools_1.DateRange.MINUTE);
|
|
149
|
+
const filteredDatesISO = filteredDates
|
|
150
|
+
.map(v => DateStatusUtils.buildLabel(v.date));
|
|
151
|
+
return filteredDatesISO.filter((item, pos, self) => {
|
|
152
|
+
return self.indexOf(item) === pos;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Gets the focus date and title for a given index
|
|
157
|
+
*/
|
|
158
|
+
static getFocusDateAndTitle(oldFocusDate, focusRange, index, min, max) {
|
|
159
|
+
const newFocusDate = new Date(oldFocusDate);
|
|
160
|
+
let newTitle = '...';
|
|
161
|
+
if (focusRange === Tools_1.DateRange.YEAR) {
|
|
162
|
+
newTitle = DateStatusUtils.buildLabelYear(newFocusDate, min.getUTCFullYear() + index);
|
|
163
|
+
}
|
|
164
|
+
else if (focusRange === Tools_1.DateRange.MONTH) {
|
|
165
|
+
newTitle = DateStatusUtils.buildLabelMonth(newFocusDate, index);
|
|
166
|
+
}
|
|
167
|
+
else if (focusRange === Tools_1.DateRange.DAY) {
|
|
168
|
+
newTitle = DateStatusUtils.buildLabelDate(newFocusDate, index + 1);
|
|
169
|
+
}
|
|
170
|
+
else if (focusRange === Tools_1.DateRange.HOUR) {
|
|
171
|
+
newTitle = DateStatusUtils.buildLabelHour(newFocusDate, index, true);
|
|
172
|
+
}
|
|
173
|
+
else if (focusRange === Tools_1.DateRange.MINUTE) {
|
|
174
|
+
newTitle = DateStatusUtils.buildLabel(newFocusDate);
|
|
175
|
+
}
|
|
176
|
+
return { newFocusDate, newTitle };
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Builds a label for a date
|
|
180
|
+
*/
|
|
181
|
+
static buildLabel(date) {
|
|
182
|
+
// "2024-03-28 13:02:48 CET" l=23
|
|
183
|
+
return Tools_1.Tools.formatDate(date, Tools_1.DateRange.MINUTE);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Builds a label for a year
|
|
187
|
+
*/
|
|
188
|
+
static buildLabelYear(date, year) {
|
|
189
|
+
date.setUTCFullYear(year);
|
|
190
|
+
date.setUTCMonth(0);
|
|
191
|
+
date.setUTCDate(1);
|
|
192
|
+
date.setUTCHours(0);
|
|
193
|
+
date.setUTCMinutes(0);
|
|
194
|
+
date.setUTCSeconds(0);
|
|
195
|
+
return Tools_1.Tools.formatDate(date, Tools_1.DateRange.YEAR);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Builds a label for a month
|
|
199
|
+
*/
|
|
200
|
+
static buildLabelMonth(date, month) {
|
|
201
|
+
date.setUTCMonth(month);
|
|
202
|
+
date.setUTCDate(1);
|
|
203
|
+
date.setUTCHours(0);
|
|
204
|
+
date.setUTCMinutes(0);
|
|
205
|
+
date.setUTCSeconds(0);
|
|
206
|
+
return Tools_1.Tools.formatDate(date, Tools_1.DateRange.MONTH);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Builds a label for a day
|
|
210
|
+
*/
|
|
211
|
+
static buildLabelDate(date, dateNumber) {
|
|
212
|
+
date.setUTCDate(dateNumber);
|
|
213
|
+
date.setUTCHours(0);
|
|
214
|
+
date.setUTCMinutes(0);
|
|
215
|
+
date.setUTCSeconds(0);
|
|
216
|
+
return Tools_1.Tools.formatDate(date, Tools_1.DateRange.DAY);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Builds a label for an hour
|
|
220
|
+
*/
|
|
221
|
+
static buildLabelHour(date, hour, withLocal = false) {
|
|
222
|
+
date.setUTCHours(hour);
|
|
223
|
+
date.setUTCMinutes(0);
|
|
224
|
+
date.setUTCSeconds(0);
|
|
225
|
+
const utcFormatted = Tools_1.Tools.formatDate(date, Tools_1.DateRange.HOUR);
|
|
226
|
+
const local = new Date();
|
|
227
|
+
const userTimezoneOffset = local.getTimezoneOffset() * 60000;
|
|
228
|
+
const localDate = new Date(date.getTime() - userTimezoneOffset);
|
|
229
|
+
const localFormatted = Tools_1.Tools.formatDate(localDate, Tools_1.DateRange.HOUR);
|
|
230
|
+
if (withLocal) {
|
|
231
|
+
return `UTC ${utcFormatted} - Local ${localFormatted}`;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
return `UTC ${utcFormatted}`;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Builds a label for a minute
|
|
239
|
+
*/
|
|
240
|
+
static buildLabelMinute(date, minute, withLocal = false) {
|
|
241
|
+
date.setUTCMinutes(minute);
|
|
242
|
+
date.setUTCSeconds(0);
|
|
243
|
+
const utcFormatted = Tools_1.Tools.formatDate(date, Tools_1.DateRange.MINUTE);
|
|
244
|
+
const local = new Date();
|
|
245
|
+
const userTimezoneOffset = local.getTimezoneOffset() * 60000;
|
|
246
|
+
const localDate = new Date(date.getTime() - userTimezoneOffset);
|
|
247
|
+
const localFormatted = Tools_1.Tools.formatDate(localDate, Tools_1.DateRange.MINUTE);
|
|
248
|
+
if (withLocal) {
|
|
249
|
+
return `UTC ${utcFormatted} - Local ${localFormatted}`;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
return `UTC ${utcFormatted}`;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.DateStatusUtils = DateStatusUtils;
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVN0YXR1c1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhY3Rvcmllcy9EYXRlU3RhdHVzVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXlDO0FBRXpDLE1BQWEsZUFBZTtJQUN4Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBVTtRQUNuQywyRkFBMkY7UUFDM0YsNEZBQTRGO1FBQzVGLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFGLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBaUQsRUFBRSxTQUFlLEVBQUUsVUFBcUI7UUFJL0csT0FBTyxXQUFXO2FBQ2IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxpQkFBUyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEUsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxpQkFBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN4QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUQsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxpQkFBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUks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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DateRange } from './Tools';
|
|
2
|
+
import { DateStatusElement, DateStatusElementInput } from './DateStatusElement';
|
|
3
|
+
export declare class DynamicDateStatusElementInput extends DateStatusElementInput {
|
|
4
|
+
fetchDataFn: (focusDate: Date, focusRange: DateRange) => Promise<{
|
|
5
|
+
label: string;
|
|
6
|
+
style: string;
|
|
7
|
+
values: {
|
|
8
|
+
date: Date;
|
|
9
|
+
value: number;
|
|
10
|
+
}[];
|
|
11
|
+
}[]>;
|
|
12
|
+
options: {
|
|
13
|
+
dataLength?: number;
|
|
14
|
+
focusDate?: Date;
|
|
15
|
+
focusRange?: DateRange;
|
|
16
|
+
chartMinValue?: number;
|
|
17
|
+
chartMaxValue?: number;
|
|
18
|
+
};
|
|
19
|
+
constructor(fetchDataFn: (focusDate: Date, focusRange: DateRange) => Promise<{
|
|
20
|
+
label: string;
|
|
21
|
+
style: string;
|
|
22
|
+
values: {
|
|
23
|
+
date: Date;
|
|
24
|
+
value: number;
|
|
25
|
+
}[];
|
|
26
|
+
}[]>, options?: {
|
|
27
|
+
dataLength?: number;
|
|
28
|
+
focusDate?: Date;
|
|
29
|
+
focusRange?: DateRange;
|
|
30
|
+
chartMinValue?: number;
|
|
31
|
+
chartMaxValue?: number;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export declare class DynamicDateStatusElement extends DateStatusElement {
|
|
35
|
+
protected element: HTMLCanvasElement;
|
|
36
|
+
protected inputs: DynamicDateStatusElementInput;
|
|
37
|
+
protected fetchDataFn: (focusDate: Date, focusRange: DateRange) => Promise<{
|
|
38
|
+
label: string;
|
|
39
|
+
style: string;
|
|
40
|
+
values: {
|
|
41
|
+
date: Date;
|
|
42
|
+
value: number;
|
|
43
|
+
}[];
|
|
44
|
+
}[]>;
|
|
45
|
+
constructor(addSomeDebugInfos?: boolean);
|
|
46
|
+
build(element: HTMLCanvasElement, inputs: DynamicDateStatusElementInput): void;
|
|
47
|
+
private overrideFocusMethods;
|
|
48
|
+
private setLoadingState;
|
|
49
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamicDateStatusElement = exports.DynamicDateStatusElementInput = void 0;
|
|
4
|
+
const Tools_1 = require("./Tools");
|
|
5
|
+
const DateStatusElement_1 = require("./DateStatusElement");
|
|
6
|
+
const DateStatusUtils_1 = require("./DateStatusUtils");
|
|
7
|
+
class DynamicDateStatusElementInput extends DateStatusElement_1.DateStatusElementInput {
|
|
8
|
+
constructor(fetchDataFn, options = {
|
|
9
|
+
dataLength: 1,
|
|
10
|
+
focusDate: new Date(),
|
|
11
|
+
focusRange: Tools_1.DateRange.YEAR,
|
|
12
|
+
chartMinValue: 0,
|
|
13
|
+
chartMaxValue: 100,
|
|
14
|
+
}) {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
super([{ label: '...', style: 'bar', values: [] }], (_a = options.focusDate) !== null && _a !== void 0 ? _a : new Date(), (_b = options.focusRange) !== null && _b !== void 0 ? _b : Tools_1.DateRange.YEAR, options.chartMinValue, options.chartMaxValue);
|
|
17
|
+
this.fetchDataFn = fetchDataFn;
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.DynamicDateStatusElementInput = DynamicDateStatusElementInput;
|
|
22
|
+
class DynamicDateStatusElement extends DateStatusElement_1.DateStatusElement {
|
|
23
|
+
constructor(addSomeDebugInfos = false) {
|
|
24
|
+
super(addSomeDebugInfos);
|
|
25
|
+
}
|
|
26
|
+
build(element, inputs) {
|
|
27
|
+
console.log('DynamicDateStatusElement.build');
|
|
28
|
+
this.element = element;
|
|
29
|
+
this.inputs = inputs;
|
|
30
|
+
this.fetchDataFn = this.inputs.fetchDataFn;
|
|
31
|
+
// Call the parent build method with the fetched data
|
|
32
|
+
super.build(element, this.inputs);
|
|
33
|
+
// Override focus methods to fetch data asynchronously
|
|
34
|
+
this.overrideFocusMethods();
|
|
35
|
+
this.focusReset().then();
|
|
36
|
+
}
|
|
37
|
+
overrideFocusMethods() {
|
|
38
|
+
// Store original methods
|
|
39
|
+
const originalFocusReset = this.focusReset;
|
|
40
|
+
const originalFocusNext = this.focusNext;
|
|
41
|
+
const originalFocusPrevious = this.focusPrevious;
|
|
42
|
+
const originalFocusClick = this.focusClick;
|
|
43
|
+
// Override focusReset
|
|
44
|
+
this.focusReset = async () => {
|
|
45
|
+
// Show loading state
|
|
46
|
+
this.setLoadingState(true);
|
|
47
|
+
// Reset to top view
|
|
48
|
+
this.focusPos = 0;
|
|
49
|
+
this.focusDate = new Date(this.inputs.focusDate);
|
|
50
|
+
this.focusRange = this.inputs.focusRange;
|
|
51
|
+
try {
|
|
52
|
+
this.setOfData = await this.fetchDataFn(this.focusDate, this.focusRange);
|
|
53
|
+
const dataPoints = this.buildDateTimeSeries(this.inputs.focusDate, this.inputs.focusRange);
|
|
54
|
+
await originalFocusReset(dataPoints);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!document || !document['mocked']) {
|
|
58
|
+
console.error('Error fetching data and focus reset:', error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
this.setLoadingState(false);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
// Override focusNext
|
|
66
|
+
this.focusNext = async () => {
|
|
67
|
+
// Show loading state
|
|
68
|
+
this.setLoadingState(true);
|
|
69
|
+
const eFocusRange = this.focusRange;
|
|
70
|
+
const { pos, newFocusDate } = this.getFocusPosAdded(1, this.focusDate, eFocusRange);
|
|
71
|
+
try {
|
|
72
|
+
// Fetch new data
|
|
73
|
+
this.setOfData = await this.fetchDataFn(newFocusDate, eFocusRange);
|
|
74
|
+
// Call original's method
|
|
75
|
+
await originalFocusNext();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Error fetching data:', error);
|
|
79
|
+
// Handle error state
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
// Hide loading state
|
|
83
|
+
this.setLoadingState(false);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
// Override focusPrevious
|
|
87
|
+
this.focusPrevious = async () => {
|
|
88
|
+
// Show loading state
|
|
89
|
+
this.setLoadingState(true);
|
|
90
|
+
const eFocusRange = this.focusRange;
|
|
91
|
+
const { pos, newFocusDate } = this.getFocusPosAdded(-1, this.focusDate, eFocusRange);
|
|
92
|
+
try {
|
|
93
|
+
// Fetch new data
|
|
94
|
+
this.setOfData = await this.fetchDataFn(newFocusDate, eFocusRange);
|
|
95
|
+
// Call original's method
|
|
96
|
+
await originalFocusPrevious();
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error('Error fetching data:', error);
|
|
100
|
+
// Handle error state
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
// Hide loading state
|
|
104
|
+
this.setLoadingState(false);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
// Override focusClick
|
|
108
|
+
this.focusClick = async (e) => {
|
|
109
|
+
if (this.focusRange >= Tools_1.DateRange.HOUR) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Show loading state
|
|
113
|
+
this.setLoadingState(true);
|
|
114
|
+
try {
|
|
115
|
+
// Fetch new data
|
|
116
|
+
const focusPos = this.getFocusPosRelative(e, this.chart);
|
|
117
|
+
const { newFocusDate } = DateStatusUtils_1.DateStatusUtils.getFocusDateAndTitle(this.focusDate, this.focusRange + 1, focusPos, this.minDate, this.maxDate);
|
|
118
|
+
this.setOfData = await this.fetchDataFn(newFocusDate, this.focusRange + 1);
|
|
119
|
+
// Call original's method
|
|
120
|
+
await originalFocusClick(e);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error('Error fetching data:', error);
|
|
124
|
+
// Handle error state
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
// Hide loading state
|
|
128
|
+
this.setLoadingState(false);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
setLoadingState(isLoading) {
|
|
133
|
+
if (this.chart && (!document || !document['mocked'])) {
|
|
134
|
+
// Update chart title to show loading state
|
|
135
|
+
if (isLoading) {
|
|
136
|
+
this.updateChartTitle('Loading...');
|
|
137
|
+
this.chart.update();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.DynamicDateStatusElement = DynamicDateStatusElement;
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0RhdGVTdGF0dXNFbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhY3Rvcmllcy9EeW5hbWljRGF0ZVN0YXR1c0VsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBQ2xDLDJEQUE4RTtBQUM5RSx1REFBa0Q7QUFFbEQsTUFBYSw2QkFBOEIsU0FBUSwwQ0FBc0I7SUFDckUsWUFDVyxXQUlILEVBQ0csVUFNSDtRQUNBLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxpQkFBUyxDQUFDLElBQUk7UUFDMUIsYUFBYSxFQUFFLENBQUM7UUFDaEIsYUFBYSxFQUFFLEdBQUc7S0FDckI7O1FBRUQsS0FBSyxDQUNELENBQUMsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDLEVBQzFDLE1BQUEsT0FBTyxDQUFDLFNBQVMsbUNBQUksSUFBSSxJQUFJLEVBQUUsRUFDL0IsTUFBQSxPQUFPLENBQUMsVUFBVSxtQ0FBSSxpQkFBUyxDQUFDLElBQUksRUFDcEMsT0FBTyxDQUFDLGFBQWEsRUFDckIsT0FBTyxDQUFDLGFBQWEsQ0FDeEIsQ0FBQztRQXpCSyxnQkFBVyxHQUFYLFdBQVcsQ0FJZDtRQUNHLFlBQU8sR0FBUCxPQUFPLENBWWI7SUFTTCxDQUFDO0NBQ0o7QUE3QkQsc0VBNkJDO0FBRUQsTUFBYSx3QkFBeUIsU0FBUSxxQ0FBaUI7SUFTM0QsWUFBWSxpQkFBaUIsR0FBRyxLQUFLO1FBQ2pDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBMEIsRUFBRSxNQUFxQztRQUMxRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxP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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class for Earth map configuration
|
|
3
|
+
*/
|
|
4
|
+
export declare class EarthMapElementInput {
|
|
5
|
+
accessToken: string;
|
|
6
|
+
constructor(accessToken: string);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Factory class for creating interactive Earth maps
|
|
10
|
+
*/
|
|
11
|
+
export declare class EarthMapElement {
|
|
12
|
+
protected addSomeDebugInfos: boolean;
|
|
13
|
+
constructor(addSomeDebugInfos?: boolean);
|
|
14
|
+
/**
|
|
15
|
+
* Creates and initializes an interactive 3D Earth map
|
|
16
|
+
* @param element - HTML element to render the map
|
|
17
|
+
* @param inputs - Map configuration options
|
|
18
|
+
*/
|
|
19
|
+
build(element: HTMLElement, inputs: EarthMapElementInput): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The URL on your server where CesiumJS's static files are hosted.
|
|
3
|
+
// (window as any).CESIUM_BASE_URL = '/';
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.EarthMapElement = exports.EarthMapElementInput = void 0;
|
|
6
|
+
// import {Ion, Terrain, Viewer} from 'cesium';
|
|
7
|
+
// import 'cesium/Build/Cesium/Widgets/widgets.css';
|
|
8
|
+
// Your access token can be found at: https://ion.cesium.com/tokens.
|
|
9
|
+
// Replace `your_access_token` with your Cesium ion access token.
|
|
10
|
+
const main_1 = require("../globe/main");
|
|
11
|
+
/**
|
|
12
|
+
* Class for Earth map configuration
|
|
13
|
+
*/
|
|
14
|
+
class EarthMapElementInput {
|
|
15
|
+
constructor(accessToken) {
|
|
16
|
+
this.accessToken = accessToken;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.EarthMapElementInput = EarthMapElementInput;
|
|
20
|
+
/**
|
|
21
|
+
* Factory class for creating interactive Earth maps
|
|
22
|
+
*/
|
|
23
|
+
class EarthMapElement {
|
|
24
|
+
constructor(addSomeDebugInfos = false) {
|
|
25
|
+
this.addSomeDebugInfos = addSomeDebugInfos;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates and initializes an interactive 3D Earth map
|
|
29
|
+
* @param element - HTML element to render the map
|
|
30
|
+
* @param inputs - Map configuration options
|
|
31
|
+
*/
|
|
32
|
+
build(element, inputs) {
|
|
33
|
+
if (!element) {
|
|
34
|
+
throw new Error('Container element is required');
|
|
35
|
+
}
|
|
36
|
+
const params = {
|
|
37
|
+
container: element,
|
|
38
|
+
center: [-100, 38.5],
|
|
39
|
+
altitude: 6280,
|
|
40
|
+
};
|
|
41
|
+
(0, main_1.initGlobe)(params).then(globe => {
|
|
42
|
+
let spot;
|
|
43
|
+
let requestID = requestAnimationFrame(animate);
|
|
44
|
+
function animate(time) {
|
|
45
|
+
if (spot) {
|
|
46
|
+
globe.removeMarker(spot);
|
|
47
|
+
}
|
|
48
|
+
globe.update(time);
|
|
49
|
+
// Check for a mountain under the cursor
|
|
50
|
+
const mountain = globe.select('mountains', 12);
|
|
51
|
+
if (mountain) {
|
|
52
|
+
const position = mountain.geometry.coordinates;
|
|
53
|
+
spot = globe.addMarker({ position, type: 'spot' });
|
|
54
|
+
}
|
|
55
|
+
requestID = requestAnimationFrame(animate);
|
|
56
|
+
}
|
|
57
|
+
}).catch(console.log);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.EarthMapElement = EarthMapElement;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWFydGhNYXBFbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhY3Rvcmllcy9FYXJ0aE1hcEVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1FQUFtRTtBQUNuRSx5Q0FBeUM7OztBQUV6QywrQ0FBK0M7QUFDL0Msb0RBQW9EO0FBRXBELG9FQUFvRTtBQUNwRSxpRUFBaUU7QUFHakUsd0NBQXdDO0FBRXhDOztHQUVHO0FBQ0gsTUFBYSxvQkFBb0I7SUFDN0IsWUFDVyxXQUFtQjtRQUFuQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUU5QixDQUFDO0NBQ0o7QUFMRCxvREFLQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBRXhCLFlBQXNCLG9CQUFvQixLQUFLO1FBQXpCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxPQUFvQixFQUFFLE1BQTRCO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDWCxTQUFTLEVBQUUsT0FBTztZQUNsQixNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDcEIsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUVGLElBQUEsZ0JBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUM7WUFDVCxJQUFJLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUvQyxTQUFTLE9BQU8sQ0FBQyxJQUFJO2dCQUNqQixJQUFJLElBQUksRUFBRSxDQUFDO29CQUNQLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFbkIsd0NBQXdDO2dCQUN4QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDWCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztvQkFDL0MsSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBRUQsU0FBUyxHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLENBQUM7Q0FFSjtBQTVDRCwwQ0E0Q0MifQ==
|
|
@@ -3,10 +3,12 @@ import { MapElement, MapElementInput } from './MapElement';
|
|
|
3
3
|
import { CompareElement, CompareElementInput } from './CompareElement';
|
|
4
4
|
import { ConfigurationElement, ConfigurationElementInput } from './ConfigurationElement';
|
|
5
5
|
import { DateStatusElement, DateStatusElementInput } from './DateStatusElement';
|
|
6
|
+
import { DynamicDateStatusElement, DynamicDateStatusElementInput } from './DynamicDateStatusElement';
|
|
6
7
|
import { SpeedMatrixElement, SpeedMatrixElementInput } from './SpeedMatrixElement';
|
|
7
8
|
import { MonitoringBarsElement, MonitoringBarsElementInput } from './MonitoringBarsElement';
|
|
8
9
|
import { MonitoringLinesElement, MonitoringLinesElementInput } from './MonitoringLinesElement';
|
|
9
10
|
import { ScaleElement, ScaleElementInput } from './ScaleElement';
|
|
11
|
+
import { EarthMapElement, EarthMapElementInput } from './EarthMapElement';
|
|
10
12
|
export declare class ElementsFactory {
|
|
11
13
|
center: MapLatLng | {
|
|
12
14
|
lat: number;
|
|
@@ -31,4 +33,6 @@ export declare class ElementsFactory {
|
|
|
31
33
|
createMonitoringBars(element: HTMLCanvasElement, inputs: MonitoringBarsElementInput): MonitoringBarsElement;
|
|
32
34
|
createMonitoringLines(element: HTMLCanvasElement, inputs: MonitoringLinesElementInput): MonitoringLinesElement;
|
|
33
35
|
createScale(element: HTMLCanvasElement, inputs: ScaleElementInput): ScaleElement;
|
|
36
|
+
createEarthMap(element: HTMLElement, inputs: EarthMapElementInput): EarthMapElement;
|
|
37
|
+
createDynamicDateStatus(element: HTMLCanvasElement, inputs: DynamicDateStatusElementInput): DynamicDateStatusElement;
|
|
34
38
|
}
|