diff --git a/BlazorOpenApi/Controls/SchemaChildControl.razor b/BlazorOpenApi/Controls/SchemaChildControl.razor index 5afd793..ec0a233 100644 --- a/BlazorOpenApi/Controls/SchemaChildControl.razor +++ b/BlazorOpenApi/Controls/SchemaChildControl.razor @@ -5,9 +5,24 @@ @if (Value.Type == "array") { -
- -
+ @if (Value.Items?.Type == "object" && SchemaControl.Resolve(Value.Items, Api)?.Properties != null) + { + @* Skip one level *@ +
+ + @foreach (var p in SchemaControl.Resolve(Value.Items, Api)!.Properties) + { + + } +
+
+ } + else + { +
+ +
+ }
} else if (Value.Type == "object") @@ -55,6 +70,8 @@ } @code { + [CascadingParameter] + public OpenApiDocument? Api { get; set; } [Parameter] public OpenApiSchema? Value { get; set; } [Parameter] @@ -73,11 +90,15 @@ if (Value?.Type != "array") return ""; + string arrayType = Value.Items?.Type ?? ""; + if ( Value.Items?.Type != "array" && Value.Items?.Type != "object") + arrayType = Value.Items?.Type ?? "array"; + var nullable = Value.Nullable ? "?" : ""; if (Value.MinItems != null || Value.MaxItems != null) - return $"array{nullable} [{(Value.MinItems == null ? "" : Value.MinItems.Value)}..{(Value.MaxItems == null ? "" : Value.MaxItems.Value)}]"; - return $"array{nullable} []"; + return $"{arrayType}{nullable} [{(Value.MinItems == null ? "" : Value.MinItems.Value)}..{(Value.MaxItems == null ? "" : Value.MaxItems.Value)}]"; + return $"{arrayType}{nullable} []"; } } diff --git a/BlazorOpenApi/Controls/SchemaControl.razor b/BlazorOpenApi/Controls/SchemaControl.razor index 310bcdf..1091f23 100644 --- a/BlazorOpenApi/Controls/SchemaControl.razor +++ b/BlazorOpenApi/Controls/SchemaControl.razor @@ -19,15 +19,17 @@ [CascadingParameter] public OpenApiDocument? Api { get; set; } - private OpenApiSchema? ResolvedValue + private OpenApiSchema? ResolvedValue => Resolve(Value, Api) ?? Value; + + public static OpenApiSchema? Resolve(OpenApiSchema? schema, OpenApiDocument? api) { - get + if (schema == null) + return null; + if (schema.Reference != null && api != null) { - if (Api == null || Value?.Reference == null ) - return Value; - if (!Api.Components.Schemas.TryGetValue(Value.Reference.Id, out var resolved)) - return Value; - return resolved; + if (api.Components.Schemas.TryGetValue(schema.Reference.Id, out var resolved)) + return resolved; } + return schema; } }