Skip to content

Commit 83e2ff9

Browse files
ohltylerlezzago
andauthored
[Feature Anywhere] Fix bug of tooltip showing 'undefined' in certain cases (#4281)
* Fix undefined tooltip bug when multiple resource types Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com> * Dont overwrite to 0 by default Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com> * Fix to not hardcode only overriding index 0 in table Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com> --------- Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com> Co-authored-by: Ashish Agrawal <ashish81394@gmail.com>
1 parent 1009efe commit 83e2ff9

File tree

3 files changed

+93
-65
lines changed

3 files changed

+93
-65
lines changed

src/plugins/vis_augmenter/public/test_constants.ts

+82-51
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,17 @@ const TEST_VALUES_SINGLE_ROW_SINGLE_VIS_LAYER = [
3939
];
4040

4141
const TEST_VALUES_ONLY_VIS_LAYERS = [
42-
{ [TEST_X_AXIS_ID]: 0 },
42+
{ [TEST_X_AXIS_ID]: 0, [TEST_PLUGIN_EVENT_TYPE]: 0 },
4343
{ [TEST_X_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 2 },
44-
{ [TEST_X_AXIS_ID]: 10 },
45-
{ [TEST_X_AXIS_ID]: 15 },
46-
{ [TEST_X_AXIS_ID]: 20 },
47-
{ [TEST_X_AXIS_ID]: 25 },
48-
{ [TEST_X_AXIS_ID]: 30 },
44+
{ [TEST_X_AXIS_ID]: 10, [TEST_PLUGIN_EVENT_TYPE]: 0 },
45+
{ [TEST_X_AXIS_ID]: 15, [TEST_PLUGIN_EVENT_TYPE]: 0 },
46+
{ [TEST_X_AXIS_ID]: 20, [TEST_PLUGIN_EVENT_TYPE]: 0 },
47+
{ [TEST_X_AXIS_ID]: 25, [TEST_PLUGIN_EVENT_TYPE]: 0 },
48+
{ [TEST_X_AXIS_ID]: 30, [TEST_PLUGIN_EVENT_TYPE]: 0 },
4949
{ [TEST_X_AXIS_ID]: 35, [TEST_PLUGIN_EVENT_TYPE]: 1 },
50-
{ [TEST_X_AXIS_ID]: 40 },
51-
{ [TEST_X_AXIS_ID]: 45 },
52-
{ [TEST_X_AXIS_ID]: 50 },
50+
{ [TEST_X_AXIS_ID]: 40, [TEST_PLUGIN_EVENT_TYPE]: 0 },
51+
{ [TEST_X_AXIS_ID]: 45, [TEST_PLUGIN_EVENT_TYPE]: 0 },
52+
{ [TEST_X_AXIS_ID]: 50, [TEST_PLUGIN_EVENT_TYPE]: 0 },
5353
];
5454

5555
const TEST_VALUES_NO_VIS_LAYERS = [
@@ -66,6 +66,20 @@ const TEST_VALUES_NO_VIS_LAYERS = [
6666
{ [TEST_X_AXIS_ID]: 50, [TEST_VALUE_AXIS_ID]: 5 },
6767
];
6868

69+
const TEST_VALUES_SINGLE_VIS_LAYER_EMPTY = [
70+
{ [TEST_X_AXIS_ID]: 0, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
71+
{ [TEST_X_AXIS_ID]: 5, [TEST_VALUE_AXIS_ID]: 10, [TEST_PLUGIN_EVENT_TYPE]: 0 },
72+
{ [TEST_X_AXIS_ID]: 10, [TEST_VALUE_AXIS_ID]: 6, [TEST_PLUGIN_EVENT_TYPE]: 0 },
73+
{ [TEST_X_AXIS_ID]: 15, [TEST_VALUE_AXIS_ID]: 4, [TEST_PLUGIN_EVENT_TYPE]: 0 },
74+
{ [TEST_X_AXIS_ID]: 20, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
75+
{ [TEST_X_AXIS_ID]: 25, [TEST_PLUGIN_EVENT_TYPE]: 0 },
76+
{ [TEST_X_AXIS_ID]: 30, [TEST_PLUGIN_EVENT_TYPE]: 0 },
77+
{ [TEST_X_AXIS_ID]: 35, [TEST_PLUGIN_EVENT_TYPE]: 0 },
78+
{ [TEST_X_AXIS_ID]: 40, [TEST_PLUGIN_EVENT_TYPE]: 0 },
79+
{ [TEST_X_AXIS_ID]: 45, [TEST_VALUE_AXIS_ID]: 3, [TEST_PLUGIN_EVENT_TYPE]: 0 },
80+
{ [TEST_X_AXIS_ID]: 50, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
81+
];
82+
6983
const TEST_VALUES_NO_VIS_LAYERS_DIRTY = [
7084
{ [TEST_X_AXIS_ID_DIRTY]: 0, [TEST_VALUE_AXIS_ID_DIRTY]: 5 },
7185
{ [TEST_X_AXIS_ID_DIRTY]: 5, [TEST_VALUE_AXIS_ID_DIRTY]: 10 },
@@ -81,50 +95,80 @@ const TEST_VALUES_NO_VIS_LAYERS_DIRTY = [
8195
];
8296

8397
const TEST_VALUES_SINGLE_VIS_LAYER = [
84-
{ [TEST_X_AXIS_ID]: 0, [TEST_VALUE_AXIS_ID]: 5 },
98+
{ [TEST_X_AXIS_ID]: 0, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
8599
{ [TEST_X_AXIS_ID]: 5, [TEST_VALUE_AXIS_ID]: 10, [TEST_PLUGIN_EVENT_TYPE]: 2 },
86-
{ [TEST_X_AXIS_ID]: 10, [TEST_VALUE_AXIS_ID]: 6 },
87-
{ [TEST_X_AXIS_ID]: 15, [TEST_VALUE_AXIS_ID]: 4 },
88-
{ [TEST_X_AXIS_ID]: 20, [TEST_VALUE_AXIS_ID]: 5 },
89-
{ [TEST_X_AXIS_ID]: 25 },
90-
{ [TEST_X_AXIS_ID]: 30 },
100+
{ [TEST_X_AXIS_ID]: 10, [TEST_VALUE_AXIS_ID]: 6, [TEST_PLUGIN_EVENT_TYPE]: 0 },
101+
{ [TEST_X_AXIS_ID]: 15, [TEST_VALUE_AXIS_ID]: 4, [TEST_PLUGIN_EVENT_TYPE]: 0 },
102+
{ [TEST_X_AXIS_ID]: 20, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
103+
{ [TEST_X_AXIS_ID]: 25, [TEST_PLUGIN_EVENT_TYPE]: 0 },
104+
{ [TEST_X_AXIS_ID]: 30, [TEST_PLUGIN_EVENT_TYPE]: 0 },
91105
{ [TEST_X_AXIS_ID]: 35, [TEST_PLUGIN_EVENT_TYPE]: 1 },
92-
{ [TEST_X_AXIS_ID]: 40 },
93-
{ [TEST_X_AXIS_ID]: 45, [TEST_VALUE_AXIS_ID]: 3 },
94-
{ [TEST_X_AXIS_ID]: 50, [TEST_VALUE_AXIS_ID]: 5 },
106+
{ [TEST_X_AXIS_ID]: 40, [TEST_PLUGIN_EVENT_TYPE]: 0 },
107+
{ [TEST_X_AXIS_ID]: 45, [TEST_VALUE_AXIS_ID]: 3, [TEST_PLUGIN_EVENT_TYPE]: 0 },
108+
{ [TEST_X_AXIS_ID]: 50, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
95109
];
96110

97111
const TEST_VALUES_SINGLE_VIS_LAYER_ON_BOUNDS = [
98112
{ [TEST_X_AXIS_ID]: 0, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 2 },
99-
{ [TEST_X_AXIS_ID]: 5, [TEST_VALUE_AXIS_ID]: 10 },
100-
{ [TEST_X_AXIS_ID]: 10, [TEST_VALUE_AXIS_ID]: 6 },
101-
{ [TEST_X_AXIS_ID]: 15, [TEST_VALUE_AXIS_ID]: 4 },
102-
{ [TEST_X_AXIS_ID]: 20, [TEST_VALUE_AXIS_ID]: 5 },
103-
{ [TEST_X_AXIS_ID]: 25 },
104-
{ [TEST_X_AXIS_ID]: 30 },
105-
{ [TEST_X_AXIS_ID]: 35 },
106-
{ [TEST_X_AXIS_ID]: 40 },
107-
{ [TEST_X_AXIS_ID]: 45, [TEST_VALUE_AXIS_ID]: 3 },
113+
{ [TEST_X_AXIS_ID]: 5, [TEST_VALUE_AXIS_ID]: 10, [TEST_PLUGIN_EVENT_TYPE]: 0 },
114+
{ [TEST_X_AXIS_ID]: 10, [TEST_VALUE_AXIS_ID]: 6, [TEST_PLUGIN_EVENT_TYPE]: 0 },
115+
{ [TEST_X_AXIS_ID]: 15, [TEST_VALUE_AXIS_ID]: 4, [TEST_PLUGIN_EVENT_TYPE]: 0 },
116+
{ [TEST_X_AXIS_ID]: 20, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 0 },
117+
{ [TEST_X_AXIS_ID]: 25, [TEST_PLUGIN_EVENT_TYPE]: 0 },
118+
{ [TEST_X_AXIS_ID]: 30, [TEST_PLUGIN_EVENT_TYPE]: 0 },
119+
{ [TEST_X_AXIS_ID]: 35, [TEST_PLUGIN_EVENT_TYPE]: 0 },
120+
{ [TEST_X_AXIS_ID]: 40, [TEST_PLUGIN_EVENT_TYPE]: 0 },
121+
{ [TEST_X_AXIS_ID]: 45, [TEST_VALUE_AXIS_ID]: 3, [TEST_PLUGIN_EVENT_TYPE]: 0 },
108122
{ [TEST_X_AXIS_ID]: 50, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE]: 1 },
109123
];
110124

111125
const TEST_VALUES_MULTIPLE_VIS_LAYERS = [
112-
{ [TEST_X_AXIS_ID]: 0, [TEST_VALUE_AXIS_ID]: 5 },
126+
{
127+
[TEST_X_AXIS_ID]: 0,
128+
[TEST_VALUE_AXIS_ID]: 5,
129+
[TEST_PLUGIN_EVENT_TYPE]: 0,
130+
[TEST_PLUGIN_EVENT_TYPE_2]: 0,
131+
},
113132
{
114133
[TEST_X_AXIS_ID]: 5,
115134
[TEST_VALUE_AXIS_ID]: 10,
116135
[TEST_PLUGIN_EVENT_TYPE]: 2,
117136
[TEST_PLUGIN_EVENT_TYPE_2]: 1,
118137
},
119-
{ [TEST_X_AXIS_ID]: 10, [TEST_VALUE_AXIS_ID]: 6 },
120-
{ [TEST_X_AXIS_ID]: 15, [TEST_VALUE_AXIS_ID]: 4, [TEST_PLUGIN_EVENT_TYPE_2]: 1 },
121-
{ [TEST_X_AXIS_ID]: 20, [TEST_VALUE_AXIS_ID]: 5 },
122-
{ [TEST_X_AXIS_ID]: 25 },
123-
{ [TEST_X_AXIS_ID]: 30 },
124-
{ [TEST_X_AXIS_ID]: 35, [TEST_PLUGIN_EVENT_TYPE]: 1 },
125-
{ [TEST_X_AXIS_ID]: 40 },
126-
{ [TEST_X_AXIS_ID]: 45, [TEST_VALUE_AXIS_ID]: 3 },
127-
{ [TEST_X_AXIS_ID]: 50, [TEST_VALUE_AXIS_ID]: 5, [TEST_PLUGIN_EVENT_TYPE_2]: 2 },
138+
{
139+
[TEST_X_AXIS_ID]: 10,
140+
[TEST_VALUE_AXIS_ID]: 6,
141+
[TEST_PLUGIN_EVENT_TYPE]: 0,
142+
[TEST_PLUGIN_EVENT_TYPE_2]: 0,
143+
},
144+
{
145+
[TEST_X_AXIS_ID]: 15,
146+
[TEST_VALUE_AXIS_ID]: 4,
147+
[TEST_PLUGIN_EVENT_TYPE]: 0,
148+
[TEST_PLUGIN_EVENT_TYPE_2]: 1,
149+
},
150+
{
151+
[TEST_X_AXIS_ID]: 20,
152+
[TEST_VALUE_AXIS_ID]: 5,
153+
[TEST_PLUGIN_EVENT_TYPE]: 0,
154+
[TEST_PLUGIN_EVENT_TYPE_2]: 0,
155+
},
156+
{ [TEST_X_AXIS_ID]: 25, [TEST_PLUGIN_EVENT_TYPE]: 0, [TEST_PLUGIN_EVENT_TYPE_2]: 0 },
157+
{ [TEST_X_AXIS_ID]: 30, [TEST_PLUGIN_EVENT_TYPE]: 0, [TEST_PLUGIN_EVENT_TYPE_2]: 0 },
158+
{ [TEST_X_AXIS_ID]: 35, [TEST_PLUGIN_EVENT_TYPE]: 1, [TEST_PLUGIN_EVENT_TYPE_2]: 0 },
159+
{ [TEST_X_AXIS_ID]: 40, [TEST_PLUGIN_EVENT_TYPE]: 0, [TEST_PLUGIN_EVENT_TYPE_2]: 0 },
160+
{
161+
[TEST_X_AXIS_ID]: 45,
162+
[TEST_VALUE_AXIS_ID]: 3,
163+
[TEST_PLUGIN_EVENT_TYPE]: 0,
164+
[TEST_PLUGIN_EVENT_TYPE_2]: 0,
165+
},
166+
{
167+
[TEST_X_AXIS_ID]: 50,
168+
[TEST_VALUE_AXIS_ID]: 5,
169+
[TEST_PLUGIN_EVENT_TYPE]: 0,
170+
[TEST_PLUGIN_EVENT_TYPE_2]: 2,
171+
},
128172
];
129173

130174
export const TEST_COLUMNS_NO_VIS_LAYERS = [
@@ -204,6 +248,7 @@ export const TEST_DATATABLE_NO_VIS_LAYERS_DIRTY = {
204248
export const TEST_DATATABLE_SINGLE_VIS_LAYER_EMPTY = {
205249
...TEST_DATATABLE_NO_VIS_LAYERS,
206250
columns: TEST_COLUMNS_SINGLE_VIS_LAYER,
251+
rows: TEST_VALUES_SINGLE_VIS_LAYER_EMPTY,
207252
} as OpenSearchDashboardsDatatable;
208253

209254
export const TEST_DATATABLE_SINGLE_VIS_LAYER = {
@@ -390,20 +435,6 @@ export const TEST_VIS_LAYERS_SINGLE_INVALID_BOUNDS = [
390435
},
391436
];
392437

393-
export const TEST_VIS_LAYERS_SINGLE_EMPTY_EVENTS = [
394-
{
395-
originPlugin: TEST_PLUGIN,
396-
type: VisLayerTypes.PointInTimeEvents,
397-
pluginResource: {
398-
type: TEST_PLUGIN_RESOURCE_TYPE,
399-
id: TEST_PLUGIN_RESOURCE_ID,
400-
name: TEST_PLUGIN_RESOURCE_NAME,
401-
urlPath: TEST_PLUGIN_RESOURCE_PATH,
402-
},
403-
pluginEventType: TEST_PLUGIN_EVENT_TYPE,
404-
},
405-
];
406-
407438
export const TEST_VIS_LAYERS_SINGLE_ON_BOUNDS = [
408439
{
409440
originPlugin: TEST_PLUGIN,

src/plugins/vis_augmenter/public/vega/helpers.test.ts

-14
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import {
3838
TEST_SPEC_SINGLE_VIS_LAYER,
3939
TEST_VIS_LAYERS_MULTIPLE,
4040
TEST_VIS_LAYERS_SINGLE,
41-
TEST_VIS_LAYERS_SINGLE_EMPTY_EVENTS,
4241
TEST_VIS_LAYERS_SINGLE_INVALID_BOUNDS,
4342
TEST_VIS_LAYERS_SINGLE_ON_BOUNDS,
4443
} from '../test_constants';
@@ -409,19 +408,6 @@ describe('helpers', function () {
409408
)
410409
).toStrictEqual(TEST_DATATABLE_SINGLE_VIS_LAYER_EMPTY);
411410
});
412-
// below case should not happen since only VisLayers with a populated
413-
// set of events should be passed from the plugins. but, if it does
414-
// happen, we can handle it more gracefully instead of throwing an error
415-
it('vis layer with empty events adds nothing to datatable', function () {
416-
expect(
417-
addPointInTimeEventsLayersToTable(
418-
TEST_DATATABLE_NO_VIS_LAYERS,
419-
TEST_DIMENSIONS,
420-
// @ts-ignore
421-
TEST_VIS_LAYERS_SINGLE_EMPTY_EVENTS
422-
)
423-
).toStrictEqual(TEST_DATATABLE_SINGLE_VIS_LAYER_EMPTY);
424-
});
425411
it('vis layer with events on edge of bounds are added', function () {
426412
expect(
427413
addPointInTimeEventsLayersToTable(

src/plugins/vis_augmenter/public/vega/helpers.ts

+11
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,17 @@ export const addPointInTimeEventsLayersToTable = (
228228
if (isEmpty(visLayer.events)) return;
229229
const visLayerColumnId = `${visLayer.pluginEventType}`;
230230

231+
// Add placeholder values of 0 for every event value. This is so the tooltip
232+
// can render correctly without showing the 'undefined' string
233+
let row = 0;
234+
while (row < augmentedTable.rows.length) {
235+
augmentedTable.rows[row] = {
236+
...augmentedTable.rows[row],
237+
[visLayerColumnId]: get(augmentedTable.rows[row], visLayerColumnId, 0) as number,
238+
};
239+
row++;
240+
}
241+
231242
// if only one row / one datapoint, put all events into this bucket
232243
if (augmentedTable.rows.length === 1) {
233244
augmentedTable.rows[0] = {

0 commit comments

Comments
 (0)