@using LANCommander.SDK.Models @RenderOptions(Schema?.Options, "") @code { [Parameter] public OptionSchema Schema { get; set; } [Parameter] public Guid RedistId { get; set; } [Parameter] public Dictionary> Options { get; set; } [Parameter] public EventCallback<(Guid redistId, string optionName, string value)> OnOptionChanged { get; set; } RenderFragment RenderOptions(Dictionary options, string prefix) => __builder => { if (options == null) return; var groups = options.Where(kvp => string.IsNullOrWhiteSpace(kvp.Value.Type) && kvp.Value.Options != null && kvp.Value.Options.Any()).ToList(); var leafOptions = options.Where(kvp => !string.IsNullOrWhiteSpace(kvp.Value.Type)).ToList(); // Render leaf options as form items if (leafOptions.Any()) {
@foreach (var kvp in leafOptions) { var optionKey = string.IsNullOrEmpty(prefix) ? kvp.Key : $"{prefix}.{kvp.Key}"; var option = kvp.Value; var label = !string.IsNullOrWhiteSpace(option.DisplayName) ? option.DisplayName : !string.IsNullOrWhiteSpace(option.Description) ? option.Description : kvp.Key; @if (!string.IsNullOrWhiteSpace(option.Description) && !string.IsNullOrWhiteSpace(option.DisplayName)) {

@option.Description

} @if (option.IsList) { } else { }
}
} // Render groups as collapsible panels if (groups.Any()) { @foreach (var kvp in groups) { var groupPrefix = string.IsNullOrEmpty(prefix) ? kvp.Key : $"{prefix}.{kvp.Key}"; var groupLabel = !string.IsNullOrWhiteSpace(kvp.Value.DisplayName) ? kvp.Value.DisplayName : !string.IsNullOrWhiteSpace(kvp.Value.Description) ? kvp.Value.Description : kvp.Key; @RenderOptions(kvp.Value.Options, groupPrefix) } } }; string GetOptionValue(string optionName, string defaultValue = "") { if (Options.TryGetValue(RedistId, out var opts) && opts.TryGetValue(optionName, out var value)) return value; return defaultValue ?? ""; } async Task SetValue(string optionName, string value) { if (OnOptionChanged.HasDelegate) await OnOptionChanged.InvokeAsync((RedistId, optionName, value)); } }