Skip to content

Commit

Permalink
Add vis layer interfaces
Browse files Browse the repository at this point in the history
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
  • Loading branch information
ohltyler committed Dec 22, 2022
1 parent ba6f9eb commit 9e1c51b
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import { render } from './render';
import { shape } from './shape';
import { string } from './string';
import { style } from './style';
import { visLayers } from './vis_layers';
import { AnyExpressionTypeDefinition } from '../types';

export const typeSpecs: AnyExpressionTypeDefinition[] = [
Expand All @@ -63,6 +64,7 @@ export const typeSpecs: AnyExpressionTypeDefinition[] = [
shape,
string,
style,
visLayers,
];

export * from './boolean';
Expand All @@ -81,3 +83,4 @@ export * from './render';
export * from './shape';
export * from './string';
export * from './style';
export * from './vis_layers';
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { ExpressionTypeDefinition } from '../types';
import { VisLayers } from '../../../../vis_augmenter/common';

const name = 'vis_layers';

export interface ExprVisLayers {
type: typeof name;
layers: VisLayers;
}

// Setting default empty arrays for null & undefined edge cases
export const visLayers: ExpressionTypeDefinition<typeof name, ExprVisLayers> = {
name,
from: {
null: () => {
return {
type: name,
layers: [] as VisLayers,
} as ExprVisLayers;
},
undefined: () => {
return {
type: name,
layers: [] as VisLayers,
} as ExprVisLayers;
},
},
};
1 change: 1 addition & 0 deletions src/plugins/expressions/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,5 +132,6 @@ export {
TypeString,
TypeToString,
UnmappedTypeStrings,
ExprVisLayers,
ExpressionValueRender as Render,
} from '../common';
15 changes: 15 additions & 0 deletions src/plugins/vis_augmenter/common/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

export {
VisLayer,
VisLayers,
PointInTimeEventsVisLayer,
PointInTimeEvent,
PointInTimeEventMetadata,
isPointInTimeEventsVisLayer,
VisLayerResponseValue,
VisLayerFunctionDefinition,
} from './types';
33 changes: 33 additions & 0 deletions src/plugins/vis_augmenter/common/types.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { VisLayer, isPointInTimeEventsVisLayer } from './types';

describe('isPointInTimeEventsVisLayer()', function () {
it('should return false if no events field', function () {
const visLayer = {
id: 'visLayerId',
name: 'visLayerName',
field1: 'value1',
field2: 'value2',
} as VisLayer;
expect(isPointInTimeEventsVisLayer(visLayer)).toBe(false);
});

it('should return true if events field exists', function () {
const visLayer = {
id: 'testId',
name: 'testName',
events: [
{
timestamp: 123,
resourceId: 'testId',
resourceName: 'testName',
},
],
} as VisLayer;
expect(isPointInTimeEventsVisLayer(visLayer)).toBe(true);
});
});
47 changes: 47 additions & 0 deletions src/plugins/vis_augmenter/common/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { ExpressionFunctionDefinition } from '../../expressions';

export interface VisLayer {
// will be used as the column ID
id: string;
// will be used as the name when hovering over the tooltip
name: string;
}

export type VisLayers = VisLayer[];

export interface PointInTimeEventMetadata {
resourceId: string;
resourceName: string;
tooltip?: string;
}

export interface PointInTimeEvent {
timestamp: number;
metadata: PointInTimeEventMetadata;
}

export interface PointInTimeEventsVisLayer extends VisLayer {
events: PointInTimeEvent[];
}

// used to determine what vis layer's interface is being implemented.
// currently PointInTimeEventsLayer is the only interface extending VisLayer
export const isPointInTimeEventsVisLayer = (obj: any) => {
return 'events' in obj;
};

export interface VisLayerResponseValue {
visLayers: object;
}

export type VisLayerFunctionDefinition = ExpressionFunctionDefinition<
string,
VisLayerResponseValue,
any,
Promise<VisLayerResponseValue>
>;

0 comments on commit 9e1c51b

Please sign in to comment.