diff --git a/src/platform/plugins/shared/dashboard/test/scout_oas_schema/api/fixtures/schema_snapshot.json b/src/platform/plugins/shared/dashboard/test/scout_oas_schema/api/fixtures/schema_snapshot.json index dd72b4b069b2b..4a36874b0678e 100644 --- a/src/platform/plugins/shared/dashboard/test/scout_oas_schema/api/fixtures/schema_snapshot.json +++ b/src/platform/plugins/shared/dashboard/test/scout_oas_schema/api/fixtures/schema_snapshot.json @@ -154,10 +154,7 @@ "type": "string" } }, - "additionalProperties": false, - "required": [ - "group_by" - ] + "additionalProperties": false }, "overview_mode": { "type": "string", diff --git a/x-pack/solutions/observability/plugins/slo/common/embeddables/overview/transforms/transform_group_overview_out.ts b/x-pack/solutions/observability/plugins/slo/common/embeddables/overview/transforms/transform_group_overview_out.ts index 842823aac71f5..7f859e5ae9d39 100644 --- a/x-pack/solutions/observability/plugins/slo/common/embeddables/overview/transforms/transform_group_overview_out.ts +++ b/x-pack/solutions/observability/plugins/slo/common/embeddables/overview/transforms/transform_group_overview_out.ts @@ -50,7 +50,7 @@ function transformGroupFilters( return { ...state, - group_by: groupBy, + group_by: groupBy ?? 'status', ...(filters ? { filters: fromStoredFilters(groupFilters.filters) } : {}), ...(kqlQuery ? { kql_query: kqlQuery } : {}), }; diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx index 4ae32ee7dfdc3..fdde03c4e7791 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx @@ -101,8 +101,9 @@ export function SloGroupFilters({ selectedFilters, onSelected }: Props) { const { dataView } = useCreateDataView({ indexPatternString: SUMMARY_DESTINATION_INDEX_NAME, }); - const [selectedGroupBy, setSelectedGroupBy] = - useState(selectedFilters.group_by) ?? 'status'; + const [selectedGroupBy, setSelectedGroupBy] = useState( + selectedFilters.group_by ?? 'status' + ); const [filters, setFilters] = useState(() => ensureFiltersHaveState(toStoredFilters(selectedFilters.filters) ?? []) ); diff --git a/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.test.ts b/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.test.ts index fd3f58ecd9c9d..8120c2c3c47db 100644 --- a/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.test.ts +++ b/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.test.ts @@ -135,6 +135,22 @@ describe('schema validation', () => { expect(() => overviewEmbeddableSchema.validate(minimalState)).not.toThrow(); }); + + it('should validate group overview state with empty group_filters or missing group_by', () => { + const stateWithEmptyGroupFilters = { + group_filters: {}, + overview_mode: 'groups' as const, + }; + expect(() => overviewEmbeddableSchema.validate(stateWithEmptyGroupFilters)).not.toThrow(); + + const stateWithGroupFiltersWithoutGroupBy = { + group_filters: { groups: ['healthy'] }, + overview_mode: 'groups' as const, + }; + expect(() => + overviewEmbeddableSchema.validate(stateWithGroupFiltersWithoutGroupBy) + ).not.toThrow(); + }); }); it('should validate single overview state with optional fields omitted', () => { diff --git a/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.ts b/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.ts index 7b189147fa574..48c38fb6afaa0 100644 --- a/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.ts +++ b/x-pack/solutions/observability/plugins/slo/server/lib/embeddables/schema.ts @@ -42,7 +42,7 @@ const groupBySchema = schema.oneOf([ const GroupOverviewCustomSchema = schema.object({ group_filters: schema.maybe( schema.object({ - group_by: groupBySchema, + group_by: schema.maybe(groupBySchema), groups: schema.maybe(schema.arrayOf(schema.string())), filters: schema.maybe(schema.arrayOf(asCodeFilterSchema)), kql_query: schema.maybe(schema.string()),