@forestadmin/datasource-customizer 1.35.5 → 1.36.1

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,82 @@ 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 (!values)
33
+ return [];
34
+ if (Array.isArray(values))
35
+ return ResultBuilder.buildTimeBasedChartResult(timeRange, values);
36
+ const formattedValues = [];
37
+ Object.entries(values).forEach(([stringDate, value]) => {
38
+ formattedValues.push({ date: new Date(stringDate), value });
39
+ });
40
+ return ResultBuilder.buildTimeBasedChartResult(timeRange, formattedValues);
41
+ }
42
+ /**
43
+ * Add a MultipleTimeBasedChart based on a time range,
44
+ * an array of dates, and multiple lines of data.
45
+ *
46
+ * @param {DateOperation} timeRange - The time range for the chart, specified as a DateOperation.
47
+ * @param {Date[]} dates - An array of dates that define the x-axis values for the chart.
48
+ * @param {Array<{ label: string; values: Array<number | null> }>} lines - An array of lines,
49
+ * each containing a label and an array of numeric data values (or null)
50
+ * corresponding to the dates.
51
+ *
52
+ * @returns {MultipleTimeBasedChart} Returns a MultipleTimeBasedChart representing multiple
53
+ * lines of data within the specified time range.
54
+ *
55
+ * @example
56
+ * multipleTimeBased(
57
+ * 'Day',
58
+ * [
59
+ * new Date('1985-10-26'),
60
+ * new Date('2011-10-05T14:48:00.000Z'),
61
+ * new Date()
62
+ * ],
63
+ * [
64
+ * { label: 'line1', values: [1, 2, 3] },
65
+ * { label: 'line2', values: [3, 4, null] }
66
+ * ],
67
+ * );
68
+ */
69
+ multipleTimeBased(timeRange, dates, lines) {
70
+ if (!dates || !lines)
71
+ return { labels: null, values: null };
72
+ let formattedTimes = null;
73
+ const formattedLine = lines.map(line => {
74
+ const values = dates.reduce((computed, date, index) => {
75
+ computed.push({ date, value: line.values[index] });
76
+ return computed;
77
+ }, []);
78
+ const buildTimeBased = ResultBuilder.buildTimeBasedChartResult(timeRange, values);
79
+ if (!formattedTimes)
80
+ formattedTimes = buildTimeBased.map(timeBased => timeBased.label);
81
+ return { key: line.label, values: buildTimeBased.map(timeBased => timeBased.values.value) };
82
+ });
83
+ return {
84
+ labels: formattedTimes,
85
+ values: formattedTimes && formattedTimes.length > 0 ? formattedLine : null,
86
+ };
27
87
  }
28
88
  percentage(value) {
29
89
  return value;
@@ -37,6 +97,48 @@ class ResultBuilder {
37
97
  smart(data) {
38
98
  return data;
39
99
  }
100
+ /*
101
+ * Normalize the time based chart result to have a value for each time range.
102
+ * For example, if the time range is 'Month' and the values are:
103
+ * [
104
+ * // YYYY-MM-DD
105
+ * { date: new Date('2022-01-07'), value: 1 }, // Jan 22
106
+ * { date: new Date('2022-02-02'), value: 2 }, // Feb 22
107
+ * { date: new Date('2022-01-01'), value: 3 }, // Jan 22
108
+ * { date: new Date('2022-02-01'), value: 4 }, // Feb 22
109
+ * ]
110
+ * The result will be:
111
+ * [
112
+ * { label: 'Jan 22', values: { value: 4 } },
113
+ * { label: 'Feb 22', values: { value: 6 } },
114
+ * ]
115
+ */
116
+ static buildTimeBasedChartResult(timeRange, points) {
117
+ if (!points.length)
118
+ return [];
119
+ const pointsInDateTime = [];
120
+ points.forEach(point => {
121
+ pointsInDateTime.push({ date: luxon_1.DateTime.fromJSDate(point.date), value: point.value });
122
+ });
123
+ const format = ResultBuilder.formats[timeRange];
124
+ const formatted = {};
125
+ pointsInDateTime.forEach(point => {
126
+ const label = point.date.toFormat(format);
127
+ if (typeof point.value === 'number')
128
+ formatted[label] = (formatted[label] ?? 0) + point.value;
129
+ });
130
+ const dataPoints = [];
131
+ const dates = pointsInDateTime
132
+ .map(p => p.date)
133
+ .sort((dateA, dateB) => dateA.toUnixInteger() - dateB.toUnixInteger());
134
+ const first = dates[0].startOf(timeRange.toLowerCase());
135
+ const last = dates[dates.length - 1];
136
+ for (let current = first; current <= last; current = current.plus({ [timeRange]: 1 })) {
137
+ const label = current.toFormat(format);
138
+ dataPoints.push({ label, values: { value: formatted[label] ?? null } });
139
+ }
140
+ return dataPoints;
141
+ }
40
142
  }
41
143
  exports.default = ResultBuilder;
42
144
  ResultBuilder.formats = {
@@ -45,4 +147,4 @@ ResultBuilder.formats = {
45
147
  Month: 'MMM yy',
46
148
  Year: 'yyyy',
47
149
  };
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9jaGFydC9yZXN1bHQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLGlDQUErQztBQUUvQyxNQUFxQixhQUFhO0lBUWhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsYUFBc0I7UUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBMkI7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQXdCLEVBQUUsTUFBOEI7UUFDaEUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDcEQ7UUFFRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQWtCLENBQUMsQ0FBQztRQUMxRixNQUFNLElBQUksR0FBRyxnQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELEtBQUssSUFBSSxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDckYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQTJCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWE7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXBESCxnQ0FxREM7QUFwRHlCLHFCQUFPLEdBQWtDO0lBQy9ELEdBQUcsRUFBRSxZQUFZO0lBQ2pCLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxRQUFRO0lBQ2YsSUFBSSxFQUFFLE1BQU07Q0FDYixDQUFDIn0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9jaGFydC9yZXN1bHQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLGlDQUErQztBQUUvQyxNQUFxQixhQUFhO0lBUWhDLEtBQUssQ0FBQyxLQUFhLEVBQUUsYUFBc0I7UUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBMkI7UUFDdEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxTQUFTLENBQ1AsU0FBd0IsRUFDeEIsTUFBbUY7UUFFbkYsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxhQUFhLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTdGLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDckQsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxh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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.1",
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",