Skip to content

Commit 1678eb6

Browse files
committed
feat: add rediscuss status
1 parent 82f76a9 commit 1678eb6

13 files changed

Lines changed: 114 additions & 13 deletions

File tree

src/app/api/models/feedback-template.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ export class FeedbackTemplate extends Entity {
1010
description: string;
1111
commentText: string;
1212
summaryText: string;
13-
taskStatus: 'fix_and_resubmit' | 'discuss' | 'redo' | 'complete' | 'feedback_exceeded';
13+
taskStatus:
14+
| 'fix_and_resubmit'
15+
| 'discuss'
16+
| 'rediscuss'
17+
| 'redo'
18+
| 'complete'
19+
| 'feedback_exceeded';
1420
parentChipId: number;
1521
learningOutcomeId: number;
1622

src/app/api/models/project.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,14 @@ export class Project extends Entity {
439439
const tasks = this.tasks;
440440

441441
const readyOrCompleteTasks = tasks.filter((task) =>
442-
['ready_for_feedback', 'discuss', 'demonstrate', 'complete', 'assess_in_portfolio'].includes(
443-
task.status,
444-
),
442+
[
443+
'ready_for_feedback',
444+
'discuss',
445+
'rediscuss',
446+
'demonstrate',
447+
'complete',
448+
'assess_in_portfolio',
449+
].includes(task.status),
445450
);
446451
// let lastTargetDate: Date;
447452

src/app/api/models/task-status.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export type TaskStatusEnum =
1414
| 'fail'
1515
| 'time_exceeded'
1616
| 'assess_in_portfolio'
17-
| 'attention_required';
17+
| 'attention_required'
18+
| 'rediscuss';
1819

1920
export interface TaskStatusUiData {
2021
status: TaskStatusEnum;
@@ -41,6 +42,7 @@ export class TaskStatus {
4142
'time_exceeded',
4243
'assess_in_portfolio',
4344
'attention_required',
45+
'rediscuss',
4446
];
4547

4648
public static readonly VALID_TOP_TASKS: TaskStatusEnum[] = [
@@ -53,6 +55,7 @@ export class TaskStatus {
5355
'discuss',
5456
'attention_required',
5557
'demonstrate',
58+
'rediscuss',
5659
];
5760

5861
public static readonly SUBMITTED_STATUSES: TaskStatusEnum[] = [
@@ -65,6 +68,7 @@ export class TaskStatus {
6568
'time_exceeded',
6669
'assess_in_portfolio',
6770
'attention_required',
71+
'rediscuss',
6872
];
6973

7074
public static readonly FINAL_STATUSES: TaskStatusEnum[] = [
@@ -78,6 +82,7 @@ export class TaskStatus {
7882
public static readonly GRADEABLE_STATUSES: TaskStatusEnum[] = [
7983
'fail',
8084
'discuss',
85+
'rediscuss',
8186
'demonstrate',
8287
'complete',
8388
];
@@ -93,6 +98,7 @@ export class TaskStatus {
9398
'discuss',
9499
'attention_required',
95100
'demonstrate',
101+
'rediscuss',
96102
];
97103

98104
public static readonly STATE_THAT_ALLOWS_EXTENSION: TaskStatusEnum[] = [
@@ -109,6 +115,7 @@ export class TaskStatus {
109115
'demonstrate',
110116
'ready_for_feedback',
111117
'discuss',
118+
'rediscuss',
112119
'complete',
113120
'time_exceeded',
114121
'fail',
@@ -129,6 +136,7 @@ export class TaskStatus {
129136
'fix_and_resubmit',
130137
'feedback_exceeded',
131138
'discuss',
139+
'rediscuss',
132140
'demonstrate',
133141
'complete',
134142
'attention_required',
@@ -137,6 +145,7 @@ export class TaskStatus {
137145
public static readonly FEEDBACK_TEMPLATE_STATUSES: TaskStatusEnum[] = [
138146
'complete',
139147
'discuss',
148+
'rediscuss',
140149
'fix_and_resubmit',
141150
'redo',
142151
'feedback_exceeded',
@@ -156,6 +165,7 @@ export class TaskStatus {
156165
['fix_and_resubmit', 0.3],
157166
['ready_for_feedback', 0.5],
158167
['discuss', 0.8],
168+
['rediscuss', 0.8],
159169
['demonstrate', 0.8],
160170
['complete', 1.0],
161171
['time_exceeded', 0.3],
@@ -175,6 +185,7 @@ export class TaskStatus {
175185
['feedback_exceeded', 'DNR'],
176186
['fix_and_resubmit', 'FIX'],
177187
['discuss', 'DIS'],
188+
['rediscuss', 'RDS'],
178189
['demonstrate', 'DEM'],
179190
['complete', 'COM'],
180191
['fail', 'FAL'],
@@ -194,6 +205,7 @@ export class TaskStatus {
194205
['ready_for_feedback', []],
195206
['complete', ['ready_for_feedback', 'not_started', 'working_on_it', 'need_help']],
196207
['discuss', ['ready_for_feedback', 'not_started', 'working_on_it', 'need_help']],
208+
['rediscuss', ['ready_for_feedback', 'not_started', 'working_on_it', 'need_help']],
197209
['demonstrate', ['ready_for_feedback', 'not_started', 'working_on_it', 'need_help']],
198210
['fix_and_resubmit', []],
199211
['redo', []],
@@ -213,6 +225,7 @@ export class TaskStatus {
213225
['feedback_exceeded', 'Feedback Exceeded'],
214226
['fix_and_resubmit', 'Resubmit'],
215227
['discuss', 'Discuss'],
228+
['rediscuss', 'Rediscuss'],
216229
['demonstrate', 'Demonstrate'],
217230
['complete', 'Complete'],
218231
['fail', 'Fail'],
@@ -231,6 +244,8 @@ export class TaskStatus {
231244
['Feedback Exceeded', 'feedback_exceeded'],
232245
['Resubmit', 'fix_and_resubmit'],
233246
['Discuss', 'discuss'],
247+
['Rediscuss', 'rediscuss'],
248+
['Re-discuss', 'rediscuss'],
234249
['Demonstrate', 'demonstrate'],
235250
['Complete', 'complete'],
236251
['Fail', 'fail'],
@@ -246,6 +261,7 @@ export class TaskStatus {
246261
['feedback_exceeded', 'visibility_off'],
247262
['fix_and_resubmit', 'construction'],
248263
['discuss', 'question_answer'],
264+
['rediscuss', 'feedback'],
249265
['demonstrate', 'record_voice_over'],
250266
['complete', 'done_all'],
251267
['fail', 'close'],
@@ -264,6 +280,7 @@ export class TaskStatus {
264280
['feedback_exceeded', 'visibility_off'],
265281
['fix_and_resubmit', 'construction'],
266282
['discuss', 'question_answer'],
283+
['rediscuss', 'feedback'],
267284
['demonstrate', 'record_voice_over'],
268285
['complete', 'done'],
269286
['fail', 'close'],
@@ -282,6 +299,7 @@ export class TaskStatus {
282299
['feedback_exceeded', '#d46b54'],
283300
['redo', '#804000'],
284301
['discuss', '#31b0d5'],
302+
['rediscuss', '#126352'],
285303
['demonstrate', '#428bca'],
286304
['complete', '#5BB75B'],
287305
['fail', '#d93713'],
@@ -305,13 +323,15 @@ export class TaskStatus {
305323
['complete', 12],
306324
['assess_in_portfolio', 13],
307325
['attention_required', 14],
326+
['rediscuss', 15],
308327
]);
309328

310329
public static readonly SWITCHABLE_STATES = {
311330
student: ['not_started', 'working_on_it', 'need_help', 'ready_for_feedback'],
312331
tutor: [
313332
'complete',
314333
'discuss',
334+
'rediscuss',
315335
'attention_required',
316336
'demonstrate',
317337
'fix_and_resubmit',
@@ -402,6 +422,16 @@ export class TaskStatus {
402422
action: 'For this to be marked as complete, attend class and discuss it with your tutor.',
403423
},
404424
],
425+
[
426+
'rediscuss',
427+
{
428+
detail: 'Your work needs another discussion.',
429+
reason:
430+
'You attempted to discuss this task, but the discussion was not adequate to sign it off.',
431+
action:
432+
'Brush up your knowledge and return for another discussion with your tutor to get the task signed off.',
433+
},
434+
],
405435
[
406436
'attention_required',
407437
{

src/app/common/footer/footer.component.html

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,17 @@
8787
}
8888

8989
<button
90-
aria-label=""
91-
class="button status-chip discuss"
90+
aria-label="Mark as {{ discussActionLabel }}"
91+
class="button status-chip"
9292
mat-icon-button
93-
matTooltip="Mark as Discuss"
93+
matTooltip="Mark as {{ discussActionLabel }}"
9494
matTooltipPosition="above"
9595
[class.large-button]="!(selectedTask && selectedTask.suggestedTaskStatus)"
9696
[disabled]="!actionButtonEnabled"
97-
(click)="selectedTask?.updateTaskStatus('discuss')"
97+
[ngClass]="discussActionClass"
98+
(click)="selectedTask?.updateTaskStatus(discussActionStatus)"
9899
>
99-
<mat-icon>question_answer</mat-icon>
100+
<mat-icon>{{ discussActionIcon }}</mat-icon>
100101
</button>
101102

102103
<div

src/app/common/footer/footer.component.scss

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@
167167
@include status-icon('discuss');
168168
color: #000;
169169
}
170+
&.rediscuss {
171+
@include status-icon('rediscuss');
172+
}
170173
&.working-on-it {
171174
@include status-icon('working-on-it');
172175
}
@@ -192,7 +195,10 @@
192195
&.fix-and-resubmit.mdc-icon-button--disabled,
193196
&.discuss:disabled,
194197
&.discuss.mat-mdc-button-disabled,
195-
&.discuss.mdc-icon-button--disabled {
198+
&.discuss.mdc-icon-button--disabled,
199+
&.rediscuss:disabled,
200+
&.rediscuss.mat-mdc-button-disabled,
201+
&.rediscuss.mdc-icon-button--disabled {
196202
color: rgba(0, 0, 0, 0.25);
197203
}
198204
}

src/app/common/footer/footer.component.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from '@angular/core';
1010
import {Observable} from 'rxjs';
1111
import {Task} from 'src/app/api/models/task';
12+
import {TaskStatusEnum} from 'src/app/api/models/task-status';
1213
import {UnitRole} from 'src/app/api/models/unit-role';
1314
import {ProjectService} from 'src/app/api/services/project.service';
1415
import {TaskService} from 'src/app/api/services/task.service';
@@ -206,6 +207,22 @@ export class FooterComponent implements OnInit {
206207
return this.actionButtonEnabled && !!this.selectedTask?.canMarkComplete;
207208
}
208209

210+
public get discussActionStatus(): TaskStatusEnum {
211+
return this.selectedTask?.status === 'discuss' ? 'rediscuss' : 'discuss';
212+
}
213+
214+
public get discussActionLabel(): string {
215+
return this.taskService.statusData(this.discussActionStatus).label;
216+
}
217+
218+
public get discussActionIcon(): string {
219+
return this.taskService.statusData(this.discussActionStatus).materialIcon;
220+
}
221+
222+
public get discussActionClass(): string {
223+
return this.taskService.statusData(this.discussActionStatus).class;
224+
}
225+
209226
public get hideMainActionButtonsForModeration(): boolean {
210227
return this.viewType === 'moderation' && !this.showModerationStatusButtons;
211228
}

src/app/common/status-icon/status-icon.component.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
&.discuss {
4242
@include status-icon('discuss');
4343
}
44+
&.rediscuss {
45+
@include status-icon('rediscuss');
46+
}
4447
&.demonstrate {
4548
@include status-icon('demonstrate');
4649
}

src/app/projects/states/tutor-discussion/tutor-discussion.component.html

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
style="padding: 0; min-height: 60px; height: min-content"
9393
togglePosition="before"
9494
[selected]="
95-
(task.status === 'discuss' || attendance) &&
95+
(['discuss', 'rediscuss'].includes(task.status) || attendance) &&
9696
(!task.definition.lockAssessmentsToTutorialStream ||
9797
currentUserTutorsInStream(task.definition.tutorialStream))
9898
"
@@ -222,6 +222,17 @@ <h4 class="mt-[8px] mb-[2px] text-[15px]">{{ task.definition.name }}</h4>
222222
<!-- Mark as Discussed -->
223223
<mat-icon>group</mat-icon>
224224
</button>
225+
@if (selectedTasksIncludeDiscuss) {
226+
<button
227+
class="medium-icon-button bg-[#126352] text-white"
228+
mat-fab
229+
matTooltip="Mark as Rediscuss"
230+
[disabled]="!tasks.selectedOptions.selected.length"
231+
(click)="setSelectedTasksStatus('rediscuss')"
232+
>
233+
<mat-icon>feedback</mat-icon>
234+
</button>
235+
}
225236
}
226237
</div>
227238
</div>

src/app/projects/states/tutor-discussion/tutor-discussion.component.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,14 @@ export class TutorDiscussionComponent implements AfterViewInit, OnDestroy {
482482
});
483483
}
484484

485+
public get selectedTasksIncludeDiscuss(): boolean {
486+
const selectedTasks = this.tasksList?.selectedOptions?.selected ?? [];
487+
return selectedTasks.some((taskOption) => {
488+
const task = taskOption.value as Task;
489+
return task.status === 'discuss';
490+
});
491+
}
492+
485493
public markSelectedTasksDicussed() {
486494
const selectedTasks = this.tasksList.selectedOptions.selected;
487495
if (!this.unit?.enforceFeedbackBeforeDiscussedInClass) {
@@ -588,6 +596,7 @@ export class TutorDiscussionComponent implements AfterViewInit, OnDestroy {
588596
// 'complete',
589597
'fix_and_resubmit',
590598
'redo',
599+
'rediscuss',
591600
];
592601

593602
public viewAllSubmittedTasks() {

src/app/units/states/edit/directives/unit-communications-editor/unit-communications-editor.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ export class UnitCommunicationsEditorComponent implements OnInit, OnChanges, OnD
180180
'time_exceeded',
181181
'assess_in_portfolio',
182182
'attention_required',
183+
'rediscuss',
183184
];
184185

185186
newConditions: Record<number, Partial<CommunicationCondition>> = {};

0 commit comments

Comments
 (0)