Beispiel #1
0
 void OnBeginEdit()
 {
     // OldEditValue = ParseEditValue() 'sostituito con riga successiva xè aveva eccezioni in uscita
     OldEditValue = CurrentValue;
     this.UpdateStatus();
     BeginEdit?.Invoke(this);
 }
Beispiel #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CommentViewModel"/> class.
        /// </summary>
        /// <param name="commentService">The comment service</param>
        /// <param name="thread">The thread that the comment is a part of.</param>
        /// <param name="currentUser">The current user.</param>
        /// <param name="pullRequestId">The pull request id of the comment.</param>
        /// <param name="commentId">The GraphQL ID of the comment.</param>
        /// <param name="databaseId">The database id of the comment.</param>
        /// <param name="body">The comment body.</param>
        /// <param name="state">The comment edit state.</param>
        /// <param name="author">The author of the comment.</param>
        /// <param name="updatedAt">The modified date of the comment.</param>
        /// <param name="webUrl"></param>
        protected CommentViewModel(
            ICommentService commentService,
            ICommentThreadViewModel thread,
            IActorViewModel currentUser,
            int pullRequestId,
            string commentId,
            int databaseId,
            string body,
            CommentEditState state,
            IActorViewModel author,
            DateTimeOffset updatedAt,
            Uri webUrl)
        {
            this.commentService = commentService;
            Guard.ArgumentNotNull(thread, nameof(thread));
            Guard.ArgumentNotNull(currentUser, nameof(currentUser));
            Guard.ArgumentNotNull(author, nameof(author));

            Thread        = thread;
            CurrentUser   = currentUser;
            Id            = commentId;
            DatabaseId    = databaseId;
            PullRequestId = pullRequestId;
            Body          = body;
            EditState     = state;
            Author        = author;
            UpdatedAt     = updatedAt;
            WebUrl        = webUrl;

            var canDeleteObservable = this.WhenAnyValue(
                x => x.EditState,
                x => x == CommentEditState.None && author.Login == currentUser.Login);

            canDelete = canDeleteObservable.ToProperty(this, x => x.CanDelete);

            Delete = ReactiveCommand.CreateAsyncTask(canDeleteObservable, DoDelete);

            var canEdit = this.WhenAnyValue(
                x => x.EditState,
                x => x == CommentEditState.Placeholder || (x == CommentEditState.None && author.Login == currentUser.Login));

            BeginEdit = ReactiveCommand.Create(canEdit);
            BeginEdit.Subscribe(DoBeginEdit);
            AddErrorHandler(BeginEdit);

            CommitEdit = ReactiveCommand.CreateAsyncTask(
                Observable.CombineLatest(
                    this.WhenAnyValue(x => x.IsReadOnly),
                    this.WhenAnyValue(x => x.Body, x => !string.IsNullOrWhiteSpace(x)),
                    this.WhenAnyObservable(x => x.Thread.PostComment.CanExecuteObservable),
                    (readOnly, hasBody, canPost) => !readOnly && hasBody && canPost),
                DoCommitEdit);
            AddErrorHandler(CommitEdit);

            CancelEdit = ReactiveCommand.Create(CommitEdit.IsExecuting.Select(x => !x));
            CancelEdit.Subscribe(DoCancelEdit);
            AddErrorHandler(CancelEdit);

            OpenOnGitHub = ReactiveCommand.Create(this.WhenAnyValue(x => x.Id).Select(x => x != null));
        }
Beispiel #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CommentViewModel"/> class.
        /// </summary>
        /// <param name="thread">The thread that the comment is a part of.</param>
        /// <param name="currentUser">The current user.</param>
        /// <param name="commentId">The ID of the comment.</param>
        /// <param name="commentNodeId">The GraphQL ID of the comment.</param>
        /// <param name="body">The comment body.</param>
        /// <param name="state">The comment edit state.</param>
        /// <param name="user">The author of the comment.</param>
        /// <param name="updatedAt">The modified date of the comment.</param>
        protected CommentViewModel(
            ICommentThreadViewModel thread,
            IAccount currentUser,
            int commentId,
            string commentNodeId,
            string body,
            CommentEditState state,
            IAccount user,
            DateTimeOffset updatedAt)
        {
            Guard.ArgumentNotNull(thread, nameof(thread));
            Guard.ArgumentNotNull(currentUser, nameof(currentUser));
            Guard.ArgumentNotNull(body, nameof(body));
            Guard.ArgumentNotNull(user, nameof(user));

            Thread      = thread;
            CurrentUser = currentUser;
            Id          = commentId;
            NodeId      = commentNodeId;
            Body        = body;
            EditState   = state;
            User        = user;
            UpdatedAt   = updatedAt;

            var canDelete = this.WhenAnyValue(
                x => x.EditState,
                x => x == CommentEditState.None && user.Login.Equals(currentUser.Login));

            canDelete.ToProperty(this, x => x.CanDelete);

            Delete = ReactiveCommand.CreateAsyncTask(canDelete, DoDelete);

            var canEdit = this.WhenAnyValue(
                x => x.EditState,
                x => x == CommentEditState.Placeholder || (x == CommentEditState.None && user.Login.Equals(currentUser.Login)));

            BeginEdit = ReactiveCommand.Create(canEdit);
            BeginEdit.Subscribe(DoBeginEdit);
            AddErrorHandler(BeginEdit);

            CommitEdit = ReactiveCommand.CreateAsyncTask(
                Observable.CombineLatest(
                    this.WhenAnyValue(x => x.IsReadOnly),
                    this.WhenAnyValue(x => x.Body, x => !string.IsNullOrWhiteSpace(x)),
                    this.WhenAnyObservable(x => x.Thread.PostComment.CanExecuteObservable),
                    (readOnly, hasBody, canPost) => !readOnly && hasBody && canPost),
                DoCommitEdit);
            AddErrorHandler(CommitEdit);

            CancelEdit = ReactiveCommand.Create(CommitEdit.IsExecuting.Select(x => !x));
            CancelEdit.Subscribe(DoCancelEdit);
            AddErrorHandler(CancelEdit);

            OpenOnGitHub = ReactiveCommand.Create(this.WhenAnyValue(x => x.Id, x => x != 0));
        }
Beispiel #4
0
        private void OnBeginEdit()
        {
            if (ForcedText != null)
            {
                TB.Clear();
            }

            try { OldEditValue = ParseEditValue(); }
            catch { OldEditValue = _CurrentValue; }

            UpdateStatus();
            BeginEdit?.Invoke(this);
        }
Beispiel #5
0
 /// <summary>
 /// Triggers the <see cref="BeginEdit"/> event.
 /// </summary>
 /// <param name="e">Cell event arguments</param>
 protected virtual void OnBeginEdit(CellEventArgs e) => BeginEdit?.Invoke(this, e);