diff --git a/api/src/engine/models/result/common/chart-axis.model.ts b/api/src/engine/models/result/common/chart-axis.model.ts index f5045887954c5399f107718ae539bfcc9ac7d739..16fc1f68a10e379b0bf4e45225c7912710d1d34d 100644 --- a/api/src/engine/models/result/common/chart-axis.model.ts +++ b/api/src/engine/models/result/common/chart-axis.model.ts @@ -6,5 +6,5 @@ export class ChartAxis { label?: string; @Field(() => [String], { nullable: true, defaultValue: [] }) - categories: string[]; + categories?: string[]; } diff --git a/api/src/engine/models/result/common/result-union.model.ts b/api/src/engine/models/result/common/result-union.model.ts index 9957a6068e693c7c99cc9ffd59ebec2ddc61a635..2f56bb4d1f6ef577e9e836972f45dd59ede7fc28 100644 --- a/api/src/engine/models/result/common/result-union.model.ts +++ b/api/src/engine/models/result/common/result-union.model.ts @@ -1,11 +1,19 @@ import { createUnionType } from '@nestjs/graphql'; import { GroupsResult } from '../groups-result.model'; +import { HeatMapResult } from '../heat-map-result.model'; +import { LineChartResult } from '../line-chart-result.model'; import { RawResult } from '../raw-result.model'; import { TableResult } from '../table-result.model'; export const ResultUnion = createUnionType({ name: 'ResultUnion', - types: () => [TableResult, RawResult, GroupsResult], + types: () => [ + TableResult, + RawResult, + GroupsResult, + HeatMapResult, + LineChartResult, + ], resolveType(value) { if (value.headers) { return TableResult; @@ -19,6 +27,14 @@ export const ResultUnion = createUnionType({ return GroupsResult; } + if (value.matrix) { + return HeatMapResult; + } + + if (value.x) { + return LineChartResult; + } + return null; }, }); diff --git a/api/src/engine/models/result/heat-map-result.model.ts b/api/src/engine/models/result/heat-map-result.model.ts index ab4d2d86ca410f8a65e61f971caff1384eb35b65..267dc3c20201236e5d11ee1cbcbb6d6d89af15a7 100644 --- a/api/src/engine/models/result/heat-map-result.model.ts +++ b/api/src/engine/models/result/heat-map-result.model.ts @@ -10,9 +10,9 @@ export class HeatMapResult extends Result { @Field(() => [[Number]]) matrix: number[][]; - @Field(() => [ChartAxis]) + @Field(() => ChartAxis) xAxis: ChartAxis; - @Field(() => [ChartAxis]) + @Field(() => ChartAxis) yAxis: ChartAxis; } diff --git a/api/src/engine/models/result/line-chart-result.model.ts b/api/src/engine/models/result/line-chart-result.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..85ea4ff66e9780a1cb01de9ea68621b6486e9de5 --- /dev/null +++ b/api/src/engine/models/result/line-chart-result.model.ts @@ -0,0 +1,54 @@ +import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; +import { ChartAxis } from './common/chart-axis.model'; +import { Result } from './common/result.model'; + +export enum LineType { + NORMAL, + DASHED, +} + +registerEnumType(LineType, { + name: 'LineType', +}); + +@ObjectType() +export class ExtraLineInfo { + @Field() + label: string; + + @Field(() => [String]) + values: string[]; +} + +@ObjectType() +export class LineResult { + @Field() + label: string; + + @Field(() => [Number]) + x: number[]; + + @Field(() => [Number]) + y: number[]; + + @Field(() => [ExtraLineInfo], { nullable: true, defaultValue: [] }) + extraLineInfos?: ExtraLineInfo[]; + + @Field(() => LineType, { nullable: true, defaultValue: LineType.NORMAL }) + type?: LineType; +} + +@ObjectType() +export class LineChartResult extends Result { + @Field() + name: string; + + @Field(() => ChartAxis, { nullable: true }) + xAxis?: ChartAxis; + + @Field(() => ChartAxis, { nullable: true }) + yAxis?: ChartAxis; + + @Field(() => [LineResult]) + lines: LineResult[]; +} diff --git a/api/src/schema.gql b/api/src/schema.gql index 86b31a4d2dcb38a15ab00200462ce2c5bd220d97..b2c3ddb14a0cd1ade6d856616c0f56634915c969 100644 --- a/api/src/schema.gql +++ b/api/src/schema.gql @@ -63,7 +63,7 @@ type GroupResult { results: [ResultUnion!]! } -union ResultUnion = TableResult | RawResult | GroupsResult +union ResultUnion = TableResult | RawResult | GroupsResult | HeatMapResult | LineChartResult type TableResult { name: String! @@ -84,6 +84,43 @@ type GroupsResult { groups: [GroupResult!]! } +type HeatMapResult { + name: String! + matrix: [[Float!]!]! + xAxis: ChartAxis! + yAxis: ChartAxis! +} + +type LineChartResult { + name: String! + xAxis: ChartAxis + yAxis: ChartAxis + lines: [LineResult!]! +} + +type ChartAxis { + label: String + categories: [String!] +} + +type ExtraLineInfo { + label: String! + values: [String!]! +} + +type LineResult { + label: String! + x: [Float!]! + y: [Float!]! + extraLineInfos: [ExtraLineInfo!] + type: LineType +} + +enum LineType { + NORMAL + DASHED +} + type Header { name: String! type: String!