using System.Collections.Generic; using BTCPayServer.Abstractions.Form; using Newtonsoft.Json.Linq; namespace BTCPayServer.Forms; public class FieldValueMirror : IFormComponentProvider { public string View { get; } = null; public void Validate(Form form, Field field) { if (form.GetFieldByFullName(field.Value) is null) { field.ValidationErrors = new List {$"{field.Name} requires {field.Value} to be present"}; } } public void Register(Dictionary typeToComponentProvider) { typeToComponentProvider.Add("mirror", this); } public string GetValue(Form form, Field field) { var rawValue = form.GetFieldByFullName(field.Value)?.Value; if (string.IsNullOrEmpty(rawValue)) return null; if (field.AdditionalData?.TryGetValue("valuemap", out var valueMap) is true && valueMap is JObject map) { return map.TryGetValue(rawValue, out var mappedValue) ? mappedValue.Value() : null; } return rawValue; } public void SetValue(Field field, JToken value) { //ignored } }