@forestadmin/datasource-customizer 1.35.5 → 1.36.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.
@@ -1,12 +1,67 @@
1
- import { DateOperation, DistributionChart, LeaderboardChart, ObjectiveChart, PercentageChart, SmartChart, TimeBasedChart, ValueChart } from '@forestadmin/datasource-toolkit';
1
+ import { DateOperation, DistributionChart, LeaderboardChart, MultipleTimeBasedChart, ObjectiveChart, PercentageChart, SmartChart, TimeBasedChart, ValueChart } from '@forestadmin/datasource-toolkit';
2
2
  export default class ResultBuilder {
3
3
  private static readonly formats;
4
4
  value(value: number, previousValue?: number): ValueChart;
5
5
  distribution(obj: Record<string, number>): DistributionChart;
6
- timeBased(timeRange: DateOperation, values: Record<string, number>): TimeBasedChart;
6
+ /**
7
+ * Add a TimeBasedChart based on a time range and a set of values.
8
+ * @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
9
+ * @param {Array<{ date: Date; value: number | null }> | Record<string, number>} values -
10
+ * This can be an array of objects with 'date' and 'value' properties,
11
+ * or a record (object) with date-value pairs.
12
+ *
13
+ * @returns {TimeBasedChart} Returns a TimeBasedChart representing the data within the specified
14
+ * time range.
15
+ *
16
+ * @example
17
+ * timeBased(
18
+ * 'Day',
19
+ * [
20
+ * { date: new Date('2023-01-01'), value: 42 },
21
+ * { date: new Date('2023-01-02'), value: 55 },
22
+ * { date: new Date('2023-01-03'), value: null },
23
+ * ]
24
+ * );
25
+ */
26
+ timeBased(timeRange: DateOperation, values: Array<{
27
+ date: Date;
28
+ value: number | null;
29
+ }> | Record<string, number | null>): TimeBasedChart;
30
+ /**
31
+ * Add a MultipleTimeBasedChart based on a time range,
32
+ * an array of dates, and multiple lines of data.
33
+ *
34
+ * @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
35
+ * @param {Date[]} dates - An array of dates that define the x-axis values for the chart.
36
+ * @param {Array<{ label: string; values: Array<number | null> }>} lines - An array of lines,
37
+ * each containing a label and an array of numeric data values (or null)
38
+ * corresponding to the dates.
39
+ *
40
+ * @returns {MultipleTimeBasedChart} Returns a MultipleTimeBasedChart representing multiple
41
+ * lines of data within the specified time range.
42
+ *
43
+ * @example
44
+ * multipleTimeBased(
45
+ * 'Day',
46
+ * [
47
+ * new Date('1985-10-26'),
48
+ * new Date('2011-10-05T14:48:00.000Z'),
49
+ * new Date()
50
+ * ],
51
+ * [
52
+ * { label: 'line1', values: [1, 2, 3] },
53
+ * { label: 'line2', values: [3, 4, null] }
54
+ * ],
55
+ * );
56
+ */
57
+ multipleTimeBased(timeRange: DateOperation, dates: Date[], lines: Array<{
58
+ label: string;
59
+ values: Array<number | null>;
60
+ }>): MultipleTimeBasedChart;
7
61
  percentage(value: number): PercentageChart;
8
62
  objective(value: number, objective: number): ObjectiveChart;
9
63
  leaderboard(obj: Record<string, number>): LeaderboardChart;
10
64
  smart(data: unknown): SmartChart;
65
+ private static buildTimeBasedChartResult;
11
66
  }
12
67
  //# sourceMappingURL=result-builder.d.ts.map
@@ -8,22 +8,75 @@ class ResultBuilder {
8
8
  distribution(obj) {
9
9
  return Object.entries(obj).map(([key, value]) => ({ key, value }));
10
10
  }
11
+ /**
12
+ * Add a TimeBasedChart based on a time range and a set of values.
13
+ * @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
14
+ * @param {Array<{ date: Date; value: number | null }> | Record<string, number>} values -
15
+ * This can be an array of objects with 'date' and 'value' properties,
16
+ * or a record (object) with date-value pairs.
17
+ *
18
+ * @returns {TimeBasedChart} Returns a TimeBasedChart representing the data within the specified
19
+ * time range.
20
+ *
21
+ * @example
22
+ * timeBased(
23
+ * 'Day',
24
+ * [
25
+ * { date: new Date('2023-01-01'), value: 42 },
26
+ * { date: new Date('2023-01-02'), value: 55 },
27
+ * { date: new Date('2023-01-03'), value: null },
28
+ * ]
29
+ * );
30
+ */
11
31
  timeBased(timeRange, values) {
12
- const format = ResultBuilder.formats[timeRange];
13
- const formatted = {};
14
- for (const [date, value] of Object.entries(values)) {
15
- const label = luxon_1.DateTime.fromISO(date).toFormat(format);
16
- formatted[label] = (formatted[label] ?? 0) + value;
17
- }
18
- const dataPoints = [];
19
- const dates = Object.keys(values).sort((dateA, dateB) => dateA.localeCompare(dateB));
20
- const first = luxon_1.DateTime.fromISO(dates[0]).startOf(timeRange.toLowerCase());
21
- const last = luxon_1.DateTime.fromISO(dates[dates.length - 1]);
22
- for (let current = first; current <= last; current = current.plus({ [timeRange]: 1 })) {
23
- const label = current.toFormat(format);
24
- dataPoints.push({ label, values: { value: formatted[label] ?? 0 } });
25
- }
26
- return dataPoints;
32
+ if (Array.isArray(values))
33
+ return ResultBuilder.buildTimeBasedChartResult(timeRange, values);
34
+ const formattedValues = [];
35
+ Object.entries(values).forEach(([stringDate, value]) => {
36
+ formattedValues.push({ date: new Date(stringDate), value });
37
+ });
38
+ return ResultBuilder.buildTimeBasedChartResult(timeRange, formattedValues);
39
+ }
40
+ /**
41
+ * Add a MultipleTimeBasedChart based on a time range,
42
+ * an array of dates, and multiple lines of data.
43
+ *
44
+ * @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
45
+ * @param {Date[]} dates - An array of dates that define the x-axis values for the chart.
46
+ * @param {Array<{ label: string; values: Array<number | null> }>} lines - An array of lines,
47
+ * each containing a label and an array of numeric data values (or null)
48
+ * corresponding to the dates.
49
+ *
50
+ * @returns {MultipleTimeBasedChart} Returns a MultipleTimeBasedChart representing multiple
51
+ * lines of data within the specified time range.
52
+ *
53
+ * @example
54
+ * multipleTimeBased(
55
+ * 'Day',
56
+ * [
57
+ * new Date('1985-10-26'),
58
+ * new Date('2011-10-05T14:48:00.000Z'),
59
+ * new Date()
60
+ * ],
61
+ * [
62
+ * { label: 'line1', values: [1, 2, 3] },
63
+ * { label: 'line2', values: [3, 4, null] }
64
+ * ],
65
+ * );
66
+ */
67
+ multipleTimeBased(timeRange, dates, lines) {
68
+ let formattedTimes;
69
+ const formattedLine = lines.map(line => {
70
+ const values = dates.reduce((computed, date, index) => {
71
+ computed.push({ date, value: line.values[index] });
72
+ return computed;
73
+ }, []);
74
+ const buildTimeBased = ResultBuilder.buildTimeBasedChartResult(timeRange, values);
75
+ if (!formattedTimes)
76
+ formattedTimes = buildTimeBased.map(timeBased => timeBased.label);
77
+ return { key: line.label, values: buildTimeBased.map(timeBased => timeBased.values.value) };
78
+ });
79
+ return { labels: formattedTimes, values: formattedLine };
27
80
  }
28
81
  percentage(value) {
29
82
  return value;
@@ -37,6 +90,46 @@ class ResultBuilder {
37
90
  smart(data) {
38
91
  return data;
39
92
  }
93
+ /*
94
+ * Normalize the time based chart result to have a value for each time range.
95
+ * For example, if the time range is 'Month' and the values are:
96
+ * [
97
+ * // YYYY-MM-DD
98
+ * { date: new Date('2022-01-07'), value: 1 }, // Jan 22
99
+ * { date: new Date('2022-02-02'), value: 2 }, // Feb 22
100
+ * { date: new Date('2022-01-01'), value: 3 }, // Jan 22
101
+ * { date: new Date('2022-02-01'), value: 4 }, // Feb 22
102
+ * ]
103
+ * The result will be:
104
+ * [
105
+ * { label: 'Jan 22', values: { value: 4 } },
106
+ * { label: 'Feb 22', values: { value: 6 } },
107
+ * ]
108
+ */
109
+ static buildTimeBasedChartResult(timeRange, points) {
110
+ const pointsInDateTime = [];
111
+ points.forEach(point => {
112
+ pointsInDateTime.push({ date: luxon_1.DateTime.fromJSDate(point.date), value: point.value });
113
+ });
114
+ const format = ResultBuilder.formats[timeRange];
115
+ const formatted = {};
116
+ pointsInDateTime.forEach(point => {
117
+ const label = point.date.toFormat(format);
118
+ if (typeof point.value === 'number')
119
+ formatted[label] = (formatted[label] ?? 0) + point.value;
120
+ });
121
+ const dataPoints = [];
122
+ const dates = pointsInDateTime
123
+ .map(p => p.date)
124
+ .sort((dateA, dateB) => dateA.toUnixInteger() - dateB.toUnixInteger());
125
+ const first = dates[0].startOf(timeRange.toLowerCase());
126
+ const last = dates[dates.length - 1];
127
+ for (let current = first; current <= last; current = current.plus({ [timeRange]: 1 })) {
128
+ const label = current.toFormat(format);
129
+ dataPoints.push({ label, values: { value: formatted[label] ?? null } });
130
+ }
131
+ return dataPoints;
132
+ }
40
133
  }
41
134
  exports.default = ResultBuilder;
42
135
  ResultBuilder.formats = {
@@ -45,4 +138,4 @@ ResultBuilder.formats = {
45
138
  Month: 'MMM yy',
46
139
  Year: 'yyyy',
47
140
  };
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9jaGFydC9yZXN1bHQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLGlDQUErQztBQUUvQyxNQUFxQixhQUFhO0lBUWhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsYUFBc0I7UUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBMkI7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQXdCLEVBQUUsTUFBOEI7UUFDaEUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDcEQ7UUFFRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQWtCLENBQUMsQ0FBQztRQUMxRixNQUFNLElBQUksR0FBRyxnQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELEtBQUssSUFBSSxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDckYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQTJCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWE7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXBESCxnQ0FxREM7QUFwRHlCLHFCQUFPLEdBQWtDO0lBQy9ELEdBQUcsRUFBRSxZQUFZO0lBQ2pCLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxRQUFRO0lBQ2YsSUFBSSxFQUFFLE1BQU07Q0FDYixDQUFDIn0=
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9jaGFydC9yZXN1bHQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLGlDQUErQztBQUUvQyxNQUFxQixhQUFhO0lBUWhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsYUFBc0I7UUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBMkI7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxTQUFTLENBQ1AsU0FBd0IsRUFDeEIsTUFBbUY7UUFFbkYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sYUFBYSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMs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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/datasource-customizer",
3
- "version": "1.35.5",
3
+ "version": "1.36.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -28,7 +28,7 @@
28
28
  "@types/uuid": "^9.0.0"
29
29
  },
30
30
  "dependencies": {
31
- "@forestadmin/datasource-toolkit": "1.28.1",
31
+ "@forestadmin/datasource-toolkit": "1.29.0",
32
32
  "file-type": "^16.5.4",
33
33
  "luxon": "^3.2.1",
34
34
  "object-hash": "^3.0.0",