@@ -24,7 +24,7 @@ public class CommentViewModel : ReactiveObject, ICommentViewModel
2424 CommentEditState state ;
2525 DateTimeOffset updatedAt ;
2626 string undoBody ;
27- private bool canEditOrDelete ;
27+ private bool canDelete ;
2828
2929 /// <summary>
3030 /// Initializes a new instance of the <see cref="CommentViewModel"/> class.
@@ -61,49 +61,31 @@ protected CommentViewModel(
6161 User = user ;
6262 UpdatedAt = updatedAt ;
6363
64- var canEditOrDeleteObservable = this . WhenAnyValue (
64+ var canDelete = this . WhenAnyValue (
6565 x => x . EditState ,
6666 x => x == CommentEditState . None && user . Login . Equals ( currentUser . Login ) ) ;
6767
68- canEditOrDeleteObservable . Subscribe ( b => CanEditOrDelete = b ) ;
68+ canDelete . Subscribe ( b => CanDelete = b ) ;
6969
70- Delete = ReactiveCommand . CreateAsyncTask ( canEditOrDeleteObservable , DoDelete ) ;
70+ Delete = ReactiveCommand . CreateAsyncTask ( canDelete , DoDelete ) ;
7171
72- BeginEdit = ReactiveCommand . Create ( canEditOrDeleteObservable ) ;
73- BeginEdit . Subscribe ( DoBeginEdit ) ;
74- AddErrorHandler ( BeginEdit ) ;
75-
76- var canCreate = this . WhenAnyValue (
72+ var canEdit = this . WhenAnyValue (
7773 x => x . EditState ,
78- x => x == CommentEditState . Placeholder ||
79- ( x == CommentEditState . None && user . Login . Equals ( currentUser . Login ) ) ) ;
80-
81- BeginCreate = ReactiveCommand . Create ( canCreate ) ;
82- BeginCreate . Subscribe ( DoBeginCreate ) ;
83- AddErrorHandler ( BeginCreate ) ;
74+ x => x == CommentEditState . Placeholder || ( x == CommentEditState . None && user . Equals ( currentUser ) ) ) ;
8475
85- CommitCreate = ReactiveCommand . CreateAsyncTask (
86- Observable . CombineLatest (
87- this . WhenAnyValue ( x => x . IsReadOnly ) ,
88- this . WhenAnyValue ( x => x . Body , x => ! string . IsNullOrWhiteSpace ( x ) ) ,
89- this . WhenAnyObservable ( x => x . Thread . PostComment . CanExecuteObservable ) ,
90- ( readOnly , hasBody , canPost ) => ! readOnly && hasBody && canPost ) ,
91- DoCommitCreate ) ;
92- AddErrorHandler ( CommitCreate ) ;
76+ BeginEdit = ReactiveCommand . Create ( canEdit ) ;
77+ BeginEdit . Subscribe ( DoBeginEdit ) ;
78+ AddErrorHandler ( BeginEdit ) ;
9379
9480 CommitEdit = ReactiveCommand . CreateAsyncTask (
9581 Observable . CombineLatest (
9682 this . WhenAnyValue ( x => x . IsReadOnly ) ,
9783 this . WhenAnyValue ( x => x . Body , x => ! string . IsNullOrWhiteSpace ( x ) ) ,
98- this . WhenAnyObservable ( x => x . Thread . EditComment . CanExecuteObservable ) ,
84+ this . WhenAnyObservable ( x => x . Thread . PostComment . CanExecuteObservable ) ,
9985 ( readOnly , hasBody , canPost ) => ! readOnly && hasBody && canPost ) ,
10086 DoCommitEdit ) ;
10187 AddErrorHandler ( CommitEdit ) ;
10288
103- CancelCreate = ReactiveCommand . Create ( CommitCreate . IsExecuting . Select ( x => ! x ) ) ;
104- CancelCreate . Subscribe ( DoCancelCreate ) ;
105- AddErrorHandler ( CancelCreate ) ;
106-
10789 CancelEdit = ReactiveCommand . Create ( CommitEdit . IsExecuting . Select ( x => ! x ) ) ;
10890 CancelEdit . Subscribe ( DoCancelEdit ) ;
10991 AddErrorHandler ( CancelEdit ) ;
@@ -160,15 +142,6 @@ void DoBeginEdit(object unused)
160142 }
161143 }
162144
163- void DoBeginCreate ( object unused )
164- {
165- if ( state != CommentEditState . Creating )
166- {
167- undoBody = Body ;
168- EditState = CommentEditState . Creating ;
169- }
170- }
171-
172145 void DoCancelEdit ( object unused )
173146 {
174147 if ( EditState == CommentEditState . Editing )
@@ -180,50 +153,24 @@ void DoCancelEdit(object unused)
180153 }
181154 }
182155
183- void DoCancelCreate ( object unused )
184- {
185- if ( EditState == CommentEditState . Creating )
186- {
187- EditState = string . IsNullOrWhiteSpace ( undoBody ) ? CommentEditState . Placeholder : CommentEditState . None ;
188- Body = undoBody ;
189- ErrorMessage = null ;
190- undoBody = null ;
191- }
192- }
193-
194- async Task DoCommitCreate ( object unused )
156+ async Task DoCommitEdit ( object unused )
195157 {
196158 try
197159 {
198160 ErrorMessage = null ;
199161 IsSubmitting = true ;
200162
201- var model = await Thread . PostComment . ExecuteAsyncTask ( Body ) ;
202- Id = model . Id ;
203- NodeId = model . NodeId ;
204- EditState = CommentEditState . None ;
205- UpdatedAt = DateTimeOffset . Now ;
206- }
207- catch ( Exception e )
208- {
209- var message = e . Message ;
210- ErrorMessage = message ;
211- log . Error ( e , "Error posting comment" ) ;
212- }
213- finally
214- {
215- IsSubmitting = false ;
216- }
217- }
163+ ICommentModel model ;
218164
219- async Task DoCommitEdit ( object unused )
220- {
221- try
222- {
223- ErrorMessage = null ;
224- IsSubmitting = true ;
165+ if ( Id == 0 )
166+ {
167+ model = await Thread . PostComment . ExecuteAsyncTask ( Body ) ;
168+ }
169+ else
170+ {
171+ model = await Thread . EditComment . ExecuteAsyncTask ( new Tuple < int , string > ( Id , Body ) ) ;
172+ }
225173
226- var model = await Thread . EditComment . ExecuteAsyncTask ( new Tuple < int , string > ( Id , Body ) ) ;
227174 Id = model . Id ;
228175 NodeId = model . NodeId ;
229176 EditState = CommentEditState . None ;
@@ -233,7 +180,7 @@ async Task DoCommitEdit(object unused)
233180 {
234181 var message = e . Message ;
235182 ErrorMessage = message ;
236- log . Error ( e , "Error editing comment" ) ;
183+ log . Error ( e , "Error posting comment" ) ;
237184 }
238185 finally
239186 {
@@ -282,10 +229,10 @@ public bool IsSubmitting
282229 protected set { this . RaiseAndSetIfChanged ( ref isSubmitting , value ) ; }
283230 }
284231
285- public bool CanEditOrDelete
232+ public bool CanDelete
286233 {
287- get { return canEditOrDelete ; }
288- private set { this . RaiseAndSetIfChanged ( ref canEditOrDelete , value ) ; }
234+ get { return canDelete ; }
235+ private set { this . RaiseAndSetIfChanged ( ref canDelete , value ) ; }
289236 }
290237
291238 /// <inheritdoc/>
@@ -304,15 +251,6 @@ public DateTimeOffset UpdatedAt
304251 /// <inheritdoc/>
305252 public IAccount User { get ; }
306253
307- /// <inheritdoc/>
308- public ReactiveCommand < object > BeginCreate { get ; }
309-
310- /// <inheritdoc/>
311- public ReactiveCommand < object > CancelCreate { get ; }
312-
313- /// <inheritdoc/>
314- public ReactiveCommand < Unit > CommitCreate { get ; }
315-
316254 /// <inheritdoc/>
317255 public ReactiveCommand < object > BeginEdit { get ; }
318256
0 commit comments