Commit 9c558301 authored by Kristyna Pekarkova's avatar Kristyna Pekarkova
Browse files

Added exporting reviews to IS Notebooks

parent c7ae9564
Loading
Loading
Loading
Loading
+39 −1
Original line number Original line Diff line number Diff line
@@ -70,6 +70,11 @@
        </select>
        </select>
      </form>
      </form>
    </div>
    </div>
    <div class="col">
      <span style="float: right">
      <button type="button" class="btn btn-outline-primary" (click)="exportToISNotebooks()" data-toggle="modal" data-target="#exportModal" [disabled]="selectedReviews.length == 0">Export to IS Notebooks</button>
      </span>
    </div>
  </div>
  </div>
</div>
</div>


@@ -89,7 +94,9 @@
              <span style="float: right">
              <span style="float: right">
                <i class="fas fa-history mr-3" title="View history" data-toggle="modal" data-target="#historyReviewModal" (click)="selected = item"></i>
                <i class="fas fa-history mr-3" title="View history" data-toggle="modal" data-target="#historyReviewModal" (click)="selected = item"></i>
                <i *ngIf="canEditReview(item['review'])" class="fas fa-pencil-alt mr-3" title="Edit review" data-toggle="modal" data-target="#editReviewModal" (click)="initEditReviewFormValue(item['review']); selected = item"></i>
                <i *ngIf="canEditReview(item['review'])" class="fas fa-pencil-alt mr-3" title="Edit review" data-toggle="modal" data-target="#editReviewModal" (click)="initEditReviewFormValue(item['review']); selected = item"></i>
                <i *ngIf="canDeleteReview(item['review'])" class="fas fa-times" title="Delete review" data-toggle="modal" data-target="#deleteReviewModal" (click)="selected = item"></i>
                <i *ngIf="canDeleteReview(item['review'])" class="fas fa-times mr-3" title="Delete review" data-toggle="modal" data-target="#deleteReviewModal" (click)="selected = item"></i>
                <input *ngIf="canEditReview(item['review'])" type="checkbox" class="form-check-input" id="exampleCheck1" (change)="addToSelectedReviews(item['review'])">
                <label class="form-check-label" for="exampleCheck1">Select for export</label>
             </span>
             </span>
            </div>
            </div>
            <span style="font-weight: bold">{{item['review']?.user?.name}}</span>
            <span style="font-weight: bold">{{item['review']?.user?.name}}</span>
@@ -190,3 +197,34 @@
  </div>
  </div>
</div>
</div>


<!-- export to IS notebooks modal -->
<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true" id="exportModal">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">

      <div class="modal-header">
        <h5 class="modal-title" id="exportModalLabel">Export Review Items to the IS Notebook</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <p>
          Do you wish to export the following content to IS notebooks? Any future changes to the exported review items will
          NOT be automatically added to the IS Notebook and will have to be changed manually if needed.
        </p>
        <form [formGroup]="exportISNotebooksForm">
          <div class="form-group">
            <textarea class="form-control" style="min-height: 500px" id="exportReviewItemsTextArea" rows="3" formControlName="content" readonly></textarea>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary" data-dismiss="modal" (click)="writeToNotebook()">Export</button>
      </div>

    </div>
  </div>
</div>
+52 −2
Original line number Original line Diff line number Diff line
@@ -9,6 +9,7 @@ import {FlashMessagesService} from 'angular2-flash-messages';
import {AuthService} from '../../../services/auth.service';
import {AuthService} from '../../../services/auth.service';
import {PermissionsService} from '../../../services/permissions.service';
import {PermissionsService} from '../../../services/permissions.service';
import {EditorService} from '../../services/editor.service';
import {EditorService} from '../../services/editor.service';
import {NotebookService} from '../../services/notebook.service';


@Component({
@Component({
  selector: 'app-review-list',
  selector: 'app-review-list',
@@ -26,11 +27,12 @@ export class ReviewListComponent implements OnInit, OnDestroy {
  createReviewItemForm: FormGroup;
  createReviewItemForm: FormGroup;
  editReviewItemForm: FormGroup;
  editReviewItemForm: FormGroup;
  reviewListForm: FormGroup;
  reviewListForm: FormGroup;
  exportISNotebooksForm: FormGroup;
  reviewItems = [];
  reviewItems = [];
  selected = null;
  filesForReview = [];
  filesForReview = [];
  selectedFile: string;
  selectedFile: string;
  order = 0;
  order = 0;
  selectedReviews: ReviewItem[] = [];




  constructor(private treeViewService: TreeViewService,
  constructor(private treeViewService: TreeViewService,
@@ -41,7 +43,8 @@ export class ReviewListComponent implements OnInit, OnDestroy {
              private flashMessagesService: FlashMessagesService,
              private flashMessagesService: FlashMessagesService,
              public auth: AuthService,
              public auth: AuthService,
              private router: Router,
              private router: Router,
              private permissions: PermissionsService) {
              private permissions: PermissionsService,
              private notebookService: NotebookService) {


    this.createReviewItemForm = formBuilder.group({
    this.createReviewItemForm = formBuilder.group({
      content: [''],
      content: [''],
@@ -55,6 +58,9 @@ export class ReviewListComponent implements OnInit, OnDestroy {
    this.reviewListForm = formBuilder.group({
    this.reviewListForm = formBuilder.group({
      order: ['']
      order: ['']
    });
    });
    this.exportISNotebooksForm = formBuilder.group( {
      content: ['']
    });
  }
  }


  ngOnInit() {
  ngOnInit() {
@@ -194,4 +200,48 @@ export class ReviewListComponent implements OnInit, OnDestroy {
    this.reviewItems = this.reviewItems.reverse();
    this.reviewItems = this.reviewItems.reverse();
  }
  }


  addToSelectedReviews(review: ReviewItem) {
    if (!this.selectedReviews.includes(review)) {
      this.selectedReviews.push(review);
    } else {
      this.selectedReviews = this.selectedReviews.filter(item => item !== review);
    }
    console.log(this.selectedReviews);
  }

  exportToISNotebooks() {
    if (this.selectedReviews.length === 0) {
      return;
    }
    let exp = 'Exported reviews from Kontr 2 Review Tool: \n\n';
    for (const item of this.selectedReviews) {
      let str = '';
      const content = item['content'];
      const firstLine = item['line_start'];
      const lastLine = item['line_end'];
      const file = item['file'];
      const author = item.user.name;
      if (author) {
        str = str + 'Author: ' + author;
      }
      if (file) {
        str = str + 'File: ' + file;
        if (firstLine && lastLine) {
          str = str + ' | First line: ' + firstLine + ' | Last line: ' + lastLine;
        }
        str = str + '\n';
      }
      str = str + content + '\n';
      exp = exp + str + '\n';
    }
    this.exportISNotebooksForm.controls['content'].setValue(exp);
  }

  writeToNotebook() {
      const content = this.exportISNotebooksForm.value['content'];
      this.subscriptions.push(this.notebookService.postNotebook(this.submission.id, content).subscribe( () => {
        console.log('Updated the IS notebook content', content);
      }));
  }

}
}