using InABox.Core; using InABox.Mobile; using Xamarin.Forms; namespace PRS.Mobile { public class DigitalFormStringEntry : MobileCard, IDigitalFormField { private readonly MobileEntry _entry; private DFLayoutStringField _definition; public DFLayoutStringField Definition { get => _definition; set { _definition = value; Initialize(value ?? new DFLayoutStringField()); } } public string Value { get => _entry.Text; set => _entry.Text = value; } public bool IsEmpty => string.IsNullOrWhiteSpace(Value); private bool _readOnly; public bool ReadOnly { get => _readOnly; set { _readOnly = value; UpdateStatus(); } } public void Deserialize(string serialized) => Value = serialized; public string Serialize() => Value; public event DigitalFormViewChangedHandler ValueChanged; public DigitalFormStringEntry() { HeightRequest = 40; Padding = new Thickness(5,0); _entry = new MobileEntry() { Placeholder = "Enter answer", BackgroundColor = Color.Transparent }; _entry.TextChanged += (o,e) => { Value = _entry.Text; ValueChanged?.Invoke(this, new DigitalFormViewChangedArgs(Definition,Value)); }; Content = _entry; } private void Initialize(DFLayoutStringField definition) { UpdateStatus(); } private void UpdateStatus() { IsEnabled = !_readOnly || Definition.Properties.Secure; var colors = DigitalFormUtils.GetColors(!IsEnabled, Definition.Properties.Required, false); BackgroundColor = colors.Background; BorderColor = colors.Border; _entry.TextColor = colors.Foreground; } } }