public Props(Optional <NonBlankTrimmedString> className, MessageEditState message, Action <MessageEditState> onChange, Action onSave)
 {
     this.CtorSet(_ => _.ClassName, className);
     this.CtorSet(_ => _.Message, message);
     this.CtorSet(_ => _.OnChange, onChange);
     this.CtorSet(_ => _.OnSave, onSave);
 }
        private MessageEditState UpdateValidationFor(MessageEditState messageEditState)
        {
            if (messageEditState == null)
            {
                throw new ArgumentNullException("messageEditState");
            }

            return(messageEditState
                   .With(_ => _.Caption, new NonBlankTrimmedString(messageEditState.Title.Text.Trim() == "" ? "Untitled" : messageEditState.Title.Text))
                   .With(_ => _.Title, SetValidationError(messageEditState.Title, messageEditState.Title.Text.Trim() == "", "Must enter a title"))
                   .With(_ => _.Content, SetValidationError(messageEditState.Content, messageEditState.Content.Text.Trim() == "", "Must enter message content")));
        }
 public MessageEditStateChanged(MessageEditState newState)
 {
     this.CtorSet(_ => _.NewState, newState);
 }
 public MessageEditor(Optional <NonBlankTrimmedString> className, MessageEditState message, Action <MessageEditState> onChange, Action onSave)
     : base(new Props(className, message, onChange, onSave))
 {
 }
 public State(MessageEditState newMessage, NonNullList <SavedMessageDetails> messageHistory)
 {
     this.CtorSet(_ => _.NewMessage, newMessage);
     this.CtorSet(_ => _.MessageHistory, messageHistory);
 }