diff --git a/BlazorOpenApi/Controls/ComponentsControl.razor b/BlazorOpenApi/Controls/ComponentsControl.razor index d5d53b0..11a7b2c 100644 --- a/BlazorOpenApi/Controls/ComponentsControl.razor +++ b/BlazorOpenApi/Controls/ComponentsControl.razor @@ -42,6 +42,5 @@ [Parameter] public OpenApiComponents? Value { get; set; } - private IList ToList(OpenApiParameter val) - => new List() { val }; + private IList ToList(OpenApiParameter val) => new List() { val }; } \ No newline at end of file diff --git a/BlazorOpenApi/Controls/Expander.razor b/BlazorOpenApi/Controls/Expander.razor index f0afb74..b4d0a8e 100644 --- a/BlazorOpenApi/Controls/Expander.razor +++ b/BlazorOpenApi/Controls/Expander.razor @@ -1,8 +1,8 @@ 
-
+
@Title -
+
@if (Collapsed) { diff --git a/BlazorOpenApi/Controls/OperationControl.razor b/BlazorOpenApi/Controls/OperationControl.razor index add8cec..a17dfa9 100644 --- a/BlazorOpenApi/Controls/OperationControl.razor +++ b/BlazorOpenApi/Controls/OperationControl.razor @@ -54,9 +54,9 @@ var example = GenerateExampleData(); if (!string.IsNullOrWhiteSpace(example)) { -
-

Example Data

-
@GenerateExampleData()
+
+

Example Data

+
@GenerateExampleData()
} @@ -133,7 +133,9 @@ } else { - exampleData[content.Key] = GenerateExampleFromSchema(content.Value.Schema); + var ex = GenerateExampleFromSchema(content.Value.Schema); + if ( ex != null ) + exampleData[content.Key] = ex; } } } @@ -144,32 +146,39 @@ ; } - private object GenerateExampleFromSchema(OpenApiSchema? schema) + private object? GenerateExampleFromSchema(OpenApiSchema? schema) { if (schema == null) { - return new object(); + return null; } if (schema.Type == "object" && schema.Properties != null) { - var obj = new Dictionary(); + var obj = new Dictionary(); foreach (var property in schema.Properties) { - obj[property.Key] = GenerateExampleFromSchema(property.Value); + var ex = GenerateExampleFromSchema(property.Value); + if (ex != null) + obj[property.Key] = ex; } + if ( obj.Count == 0 ) + return null; return obj; } if (schema.Type == "array" && schema.Items != null) { - return new[] { GenerateExampleFromSchema(schema.Items) }; + var ex = GenerateExampleFromSchema(schema.Items); + if (ex == null) + return null; + return new[] { ex }; } return schema.Default ?? schema.Example ?? GetDefaultValueForType(schema.Type); } - private object GetDefaultValueForType(string? type) + private object? GetDefaultValueForType(string? type) { return type switch { @@ -177,7 +186,7 @@ "integer" => 0, "number" => 0.0, "boolean" => false, - _ => new object() + _ => null }; } } diff --git a/BlazorOpenApi/Controls/TableOfContents.razor b/BlazorOpenApi/Controls/TableOfContents.razor index 044ddd7..d4166e7 100644 --- a/BlazorOpenApi/Controls/TableOfContents.razor +++ b/BlazorOpenApi/Controls/TableOfContents.razor @@ -2,7 +2,7 @@ @implements IDisposable
- @Title + @Title @foreach (var child in Tree.GetChildren(Anchor)) { diff --git a/BlazorOpenApi/ITableOfContentsTree.cs b/BlazorOpenApi/ITableOfContentsTree.cs index 6de751c..2d8f145 100644 --- a/BlazorOpenApi/ITableOfContentsTree.cs +++ b/BlazorOpenApi/ITableOfContentsTree.cs @@ -20,6 +20,7 @@ public interface ITableOfContentsTree { public event EventHandler Changed; + void Clear(); void Add(string name, string anchor, string parentAnchor, bool collapsed); void Collapse(string anchor, bool collapsed); bool IsCollapsed(string anchor); diff --git a/BlazorOpenApi/OpenAPIUIControl.razor b/BlazorOpenApi/OpenAPIUIControl.razor index 029f6e1..ae8eb1c 100644 --- a/BlazorOpenApi/OpenAPIUIControl.razor +++ b/BlazorOpenApi/OpenAPIUIControl.razor @@ -13,7 +13,9 @@ - + + + @@ -70,6 +72,9 @@ if (loadedFromUrl || loadedFromJson) return; + + _tree.Clear(); + if (!string.IsNullOrWhiteSpace(Json)) LoadFromJson(); else if (!string.IsNullOrWhiteSpace(Url)) diff --git a/BlazorOpenApi/TableOfContentsTree.cs b/BlazorOpenApi/TableOfContentsTree.cs index b4dd618..999b2bd 100644 --- a/BlazorOpenApi/TableOfContentsTree.cs +++ b/BlazorOpenApi/TableOfContentsTree.cs @@ -11,6 +11,12 @@ internal class TableOfContentsTree : ITableOfContentsTree public event EventHandler Changed; + public void Clear() + { + _nodes.Clear(); + _order.Clear(); + } + public void Add(string name, string anchor, string parentAnchor, bool collapsed) { if (_nodes.ContainsKey(anchor)) diff --git a/BlazorOpenApi/wwwroot/css/openapi-ui.css b/BlazorOpenApi/wwwroot/css/openapi-ui.css index 4480795..111591e 100644 --- a/BlazorOpenApi/wwwroot/css/openapi-ui.css +++ b/BlazorOpenApi/wwwroot/css/openapi-ui.css @@ -2,11 +2,23 @@ margin-left: 20px; } +.toc-text { + cursor: pointer; +} + +.toc-text:hover { + text-decoration: underline !important; +} + .descriminator { } .example {} -.e-item {} +.e-item { + font-family: monospace; + font-size: var(--oa-font-small); + color: lightseagreen; +} .e-name {} .e-title {} @@ -18,6 +30,7 @@ .ex-header { display: flex; flex-direction: row; + cursor: pointer; } .header {} @@ -73,6 +86,7 @@ padding: 5px; border-radius: 5px; color: var(--oa-fg-lighter); + cursor: pointer; } .op-summary { width: 100%;