grade-teacher.html 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <div>
  2. <div>
  3. <h1>{{subject?.name}}</h1>
  4. </div>
  5. <div>
  6. <form (ngSubmit)="f.form.valid && addGrade()" #f="ngForm" novalidate>
  7. <div>
  8. <label for="grade">Grade</label>
  9. <select id="grade" name="grade" [(ngModel)]="form.grade" #grade="ngModel" required>
  10. <option *ngFor="let g of gradeOptions" [value]="g">{{ g }}</option>
  11. </select>
  12. @if (f.submitted && grade.invalid) {
  13. <div>
  14. @if (grade.errors?.['required']) {
  15. <div>Grade is required</div>
  16. }
  17. </div>
  18. }
  19. </div>
  20. <div *ngIf="errorMessage === 'Student already has a grade'">
  21. Student already has a grade
  22. </div>
  23. <div>
  24. <label for="student">Student</label>
  25. <select id="student" name="student" [(ngModel)]="form.student" #student="ngModel" required>
  26. <option *ngFor="let student of studentList" [value]="student.id">{{ student.firstname }} {{ student.lastname }}</option>
  27. </select>
  28. @if (f.submitted && student.invalid) {
  29. <div>
  30. @if (student.errors?.['required']) {
  31. <div>Student is required</div>
  32. }
  33. </div>
  34. }
  35. </div>
  36. <div>
  37. <button type="submit">Add Grade</button>
  38. </div>
  39. </form>
  40. </div>
  41. <div>
  42. <table>
  43. <thead>
  44. <tr>
  45. <th>Name</th>
  46. <th>Last Name</th>
  47. <th>Grades</th>
  48. </tr>
  49. </thead>
  50. <tbody>
  51. <ng-container *ngFor="let student of studentList; index as i">
  52. <tr [class.even-row]="i % 2 === 1">
  53. <td>{{ student.firstname }}</td>
  54. <td>{{ student.lastname }}</td>
  55. <td>
  56. <div>
  57. <ng-container *ngFor="let grade of gradeList">
  58. @if (grade.student.id === student.id) {
  59. <div>
  60. @if (selectedGrade === grade) {
  61. <select [(ngModel)]="selectedGradeValue">
  62. <option *ngFor="let g of gradeOptions" [value]="g">{{ g }}</option>
  63. </select>
  64. <button (click)="saveGrade()">Save</button>
  65. <button (click)="cancelEdit()">Cancel</button>
  66. } @else {
  67. <span>{{ grade.grade }}</span>
  68. <button (click)="editGrade(grade)">Edit</button>
  69. }
  70. </div>
  71. }
  72. </ng-container>
  73. </div>
  74. </td>
  75. </tr>
  76. </ng-container>
  77. </tbody>
  78. </table>
  79. </div>
  80. </div>