Skip to content

Commit

Permalink
Work on Subscribe Button
Browse files Browse the repository at this point in the history
  • Loading branch information
chidozieononiwu committed Aug 26, 2024
1 parent 9040deb commit 32635f4
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ public class ReviewsController : BaseApiController
public readonly UserPreferenceCache _preferenceCache;
private readonly ICosmosUserProfileRepository _userProfileRepository;
private readonly IHubContext<SignalRHub> _signalRHubContext;
private readonly INotificationManager _notificationManager;
private readonly IWebHostEnvironment _env;

public ReviewsController(ILogger<ReviewsController> logger,
IAPIRevisionsManager reviewRevisionsManager, IReviewManager reviewManager,
ICommentsManager commentManager, IBlobCodeFileRepository codeFileRepository,
IConfiguration configuration, UserPreferenceCache preferenceCache,
ICosmosUserProfileRepository userProfileRepository, IHubContext<SignalRHub> signalRHub, IWebHostEnvironment env)
ICosmosUserProfileRepository userProfileRepository, IHubContext<SignalRHub> signalRHub,
INotificationManager notificationManager, IWebHostEnvironment env)
{
_logger = logger;
_apiRevisionsManager = reviewRevisionsManager;
Expand All @@ -47,6 +49,7 @@ public ReviewsController(ILogger<ReviewsController> logger,
_preferenceCache = preferenceCache;
_userProfileRepository = userProfileRepository;
_signalRHubContext = signalRHub;
_notificationManager = notificationManager;
_env = env;
}

Expand Down Expand Up @@ -120,6 +123,20 @@ public async Task<ActionResult> ToggleReviewApprovalAsync(string reviewId, strin
return new LeanJsonResult(updatedReview, StatusCodes.Status200OK);
}

/// <summary>
/// Endpoint used by Client SPA toggling Subscription to a review
/// </summary>
/// <param name="reviewId"></param>
/// <param name="state"></param> true = subscribe, false = unsubscribe
/// <returns></returns>
[HttpPost("{reviewId}/toggleSubscribe", Name = "ToggleSubscribe")]
public async Task<ActionResult<APIRevisionListItemModel>> ToggleSubscribeAsync(string reviewId, [FromQuery] bool state)
{
string userName = User.GetGitHubLogin();
await _notificationManager.ToggleSubscribedAsync(User, reviewId, state);
return Ok();
}

///<summary>
///Retrieve the Content (codeLines and Navigation) of a review
///</summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public interface INotificationManager
public Task NotifyUserOnCommentTag(CommentItemModel comment);
public Task NotifyApproversOfReview(ClaimsPrincipal user, string apiRevisionId, HashSet<string> reviewers);
public Task NotifySubscribersOnNewRevisionAsync(ReviewListItemModel review, APIRevisionListItemModel revision, ClaimsPrincipal user);
public Task ToggleSubscribedAsync(ClaimsPrincipal user, string reviewId);
public Task ToggleSubscribedAsync(ClaimsPrincipal user, string reviewId, bool? state = null);
public Task SubscribeAsync(ReviewListItemModel review, ClaimsPrincipal user);
public Task UnsubscribeAsync(ReviewListItemModel review, ClaimsPrincipal user);
}
Expand Down
13 changes: 12 additions & 1 deletion src/dotnet/APIView/APIViewWeb/Managers/NotificationManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,27 @@ public async Task NotifySubscribersOnNewRevisionAsync(ReviewListItemModel review
/// </summary>
/// <param name="user"></param>
/// <param name="reviewId"></param>
/// <param name="state"></param> true = subscribe, false = unsubscribe
/// <returns></returns>
public async Task ToggleSubscribedAsync(ClaimsPrincipal user, string reviewId)
public async Task ToggleSubscribedAsync(ClaimsPrincipal user, string reviewId, bool? state = null)
{
var review = await _reviewRepository.GetReviewAsync(reviewId);
if (PageModelHelpers.IsUserSubscribed(user, review.Subscribers))
{
if (state == false)
{
return; // already unsubscribed
}

await UnsubscribeAsync(review, user);
}
else
{
if (state == true)
{
return; // already subscribed
}

await SubscribeAsync(review, user);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,16 @@
</ul>
</app-page-options-section>

<app-page-options-section sectionName="Review Options">
<ul class="list-group">
<li class="list-group-item">
<p-inputSwitch [(ngModel)]="markedAsViewSwitch"
(onChange)="onSubscribeSwitchChange($event)" />
<label class="ms-2">Subscribe</label>
</li>
</ul>
</app-page-options-section>

<app-page-options-section sectionName="Change History" [collapsedInput]="true">
<ul class="list-group">
<li class="list-group-item change-history">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export class ReviewPageOptionsComponent implements OnInit, OnChanges{
@Output() showLeftNavigationEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
@Output() disableCodeLinesLazyLoadingEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
@Output() markAsViewedEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
@Output() subscribeEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
@Output() showLineNumbersEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
@Output() apiRevisionApprovalEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
@Output() reviewApprovalEmitter : EventEmitter<boolean> = new EventEmitter<boolean>();
Expand All @@ -48,6 +49,7 @@ export class ReviewPageOptionsComponent implements OnInit, OnChanges{
showHiddenAPISwitch : boolean = false;
showLeftNavigationSwitch : boolean = true;
markedAsViewSwitch : boolean = false;
subscribeSwitch : boolean = false;
showLineNumbersSwitch : boolean = true;
disableCodeLinesLazyLoading: boolean = false;

Expand Down Expand Up @@ -118,6 +120,7 @@ export class ReviewPageOptionsComponent implements OnInit, OnChanges{
}

if (changes['review']) {
this.subscribeSwitch = this.review!.subscribers.includes(this.userProfile?.userName!);
this.setReviewApprovalStatus();
}
}
Expand Down Expand Up @@ -187,6 +190,14 @@ export class ReviewPageOptionsComponent implements OnInit, OnChanges{
this.markAsViewedEmitter.emit(event.checked);
}

/**
* Callback for markedAsViewSwitch Change
* @param event the Filter event
*/
onSubscribeSwitchChange(event: InputSwitchOnChangeEvent) {
this.subscribeEmitter.emit(event.checked);
}

/**
* Callback for showLineNumbersSwitch Change
* @param event the Filter event
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
(showLeftNavigationEmitter)="handleShowLeftNavigationEmitter($event)"
(diffStyleEmitter)="handleDiffStyleEmitter($event)"
(markAsViewedEmitter)="handleMarkAsViewedEmitter($event)"
(subscribeEmitter)="handleSubscribeEmitter($event)"
(showLineNumbersEmitter)="handleShowLineNumbersEmitter($event)"
(apiRevisionApprovalEmitter)="handleApiRevisionApprovalEmitter($event)"
(reviewApprovalEmitter)="handleReviewApprovalEmitter($event)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,14 @@ export class ReviewPageComponent implements OnInit {
});
}

handleSubscribeEmitter(state: boolean) {
this.reviewsService.toggleReviewSubscriptionByUser(this.reviewId!, state).pipe(take(1)).subscribe({
next: (apiRevision: APIRevision) => {
// update review
}
});
}

handleApiRevisionApprovalEmitter(value: boolean) {
if (value) {
this.apiRevisionsService.toggleAPIRevisionApproval(this.reviewId!, this.activeApiRevisionId!).pipe(take(1)).subscribe({
Expand Down
2 changes: 2 additions & 0 deletions src/dotnet/APIView/ClientSPA/src/app/_models/review.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export class Review {
isDeleted: boolean
isApproved: boolean
changeHistory: ChangeHistory[]
subscribers: string[]

constructor() {
this.id = ''
Expand All @@ -23,6 +24,7 @@ export class Review {
this.isDeleted = false
this.isApproved = false
this.changeHistory = []
this.subscribers = []
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,22 @@ export class ReviewsService {
});
}

toggleReviewSubscriptionByUser(reviewId: string, state: boolean) {
let params = new HttpParams();
params = params.append('state', state.toString());

const headers = new HttpHeaders({
'Content-Type': 'application/json',
});

return this.http.post<APIRevision>(this.baseUrl + `/${reviewId}/toggleSubscribe`, {},
{
headers: headers,
params: params,
withCredentials: true
});
}

getReviewContent(reviewId: string, activeApiRevisionId: string | null = null, diffApiRevisionId: string | null = null) : Observable<ArrayBuffer>{
let params = new HttpParams();
if (activeApiRevisionId) {
Expand Down

0 comments on commit 32635f4

Please sign in to comment.