File: Forms\InputRadioContext.cs
Web Access
Project: src\src\Components\Web\src\Microsoft.AspNetCore.Components.Web.csproj (Microsoft.AspNetCore.Components.Web)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Microsoft.AspNetCore.Components.Forms;
 
/// <summary>
/// Describes context for an <see cref="InputRadio{TValue}"/> component.
/// </summary>
internal sealed class InputRadioContext
{
    private readonly IInputRadioValueProvider _valueProvider;
 
    public InputRadioContext? ParentContext { get; }
    public EventCallback<ChangeEventArgs> ChangeEventCallback { get; }
    public object? CurrentValue => _valueProvider.CurrentValue;
 
    // Mutable properties that may change any time an InputRadioGroup is rendered
    public string? GroupName { get; set; }
    public string? FieldClass { get; set; }
 
    public InputRadioContext(IInputRadioValueProvider valueProvider, InputRadioContext? parentContext, EventCallback<ChangeEventArgs> changeEventCallback)
    {
        _valueProvider = valueProvider;
        ParentContext = parentContext;
        ChangeEventCallback = changeEventCallback;
    }
 
    /// <summary>
    /// Finds an <see cref="InputRadioContext"/> in the context's ancestors with the matching <paramref name="groupName"/>.
    /// </summary>
    /// <param name="groupName">The group name of the ancestor <see cref="InputRadioContext"/>.</param>
    /// <returns>The <see cref="InputRadioContext"/>, or <c>null</c> if none was found.</returns>
    public InputRadioContext? FindContextInAncestors(string groupName)
        => string.Equals(GroupName, groupName) ? this : ParentContext?.FindContextInAncestors(groupName);
}