Skip to content

Commit fd834b7

Browse files
committed
add async toggle to the instructor assignments page
1 parent da3938a commit fd834b7

3 files changed

Lines changed: 50 additions & 2 deletions

File tree

bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/AssignmentBuilder.module.css

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,34 @@
6868
}
6969

7070
.typeColumn {
71-
width: 120px;
71+
width: 160px;
7272
}
7373

7474
.typeCell {
7575
display: flex;
76+
flex-direction: row;
77+
align-items: flex-end;
78+
gap: 0.5rem;
79+
}
80+
81+
.asyncPeerGroup {
82+
display: flex;
83+
flex-direction: column;
7684
align-items: center;
77-
justify-content: flex-start;
85+
gap: 0.2rem;
86+
padding-bottom: 0.25rem;
87+
cursor: pointer;
88+
user-select: none;
89+
}
90+
91+
.asyncPeerText {
92+
font-size: 0.7rem;
93+
color: var(--surface-500);
94+
white-space: nowrap;
95+
}
96+
97+
.asyncPeerGroup:hover .asyncPeerText {
98+
color: var(--surface-700);
7899
}
79100

80101
.typeTag {

bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/AssignmentBuilder.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,18 @@ export const AssignmentBuilder = () => {
144144
}
145145
};
146146

147+
const handlePeerAsyncChange = async (assignment: Assignment, peer_async_visible: boolean) => {
148+
try {
149+
await updateAssignment({
150+
...assignment,
151+
peer_async_visible
152+
});
153+
toast.success(`Async peer ${peer_async_visible ? "enabled" : "disabled"}`);
154+
} catch (error) {
155+
toast.error("Failed to update async peer setting");
156+
}
157+
};
158+
147159
const handleWizardComplete = async () => {
148160
const formValues = getValues();
149161
const payload: CreateAssignmentPayload = {
@@ -195,6 +207,7 @@ export const AssignmentBuilder = () => {
195207
onVisibilityChange={handleVisibilityChange}
196208
onReleasedChange={handleReleasedChange}
197209
onEnforceDueChange={handleEnforceDueChange}
210+
onPeerAsyncChange={handlePeerAsyncChange}
198211
onRemove={onRemove}
199212
/>
200213
)}

bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/list/AssignmentList.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { SearchInput } from "@components/ui/SearchInput";
22
import { Button } from "primereact/button";
3+
import { Checkbox } from "primereact/checkbox";
34
import { Column } from "primereact/column";
45
import { confirmDialog, ConfirmDialog } from "primereact/confirmdialog";
56
import { DataTable } from "primereact/datatable";
@@ -21,6 +22,7 @@ interface AssignmentListProps {
2122
onVisibilityChange: (assignment: Assignment, visible: boolean) => void;
2223
onReleasedChange: (assignment: Assignment, released: boolean) => void;
2324
onEnforceDueChange: (assignment: Assignment, enforce_due: boolean) => void;
25+
onPeerAsyncChange: (assignment: Assignment, peer_async_visible: boolean) => void;
2426
onRemove: (assignment: Assignment) => void;
2527
}
2628

@@ -34,6 +36,7 @@ export const AssignmentList = ({
3436
onVisibilityChange,
3537
onReleasedChange,
3638
onEnforceDueChange,
39+
onPeerAsyncChange,
3740
onRemove
3841
}: AssignmentListProps) => {
3942
const visibilityBodyTemplate = (rowData: Assignment) => (
@@ -100,6 +103,17 @@ export const AssignmentList = ({
100103
>
101104
{rowData.kind || "Unknown"}
102105
</span>
106+
{rowData.kind === "Peer" && (
107+
<label className={styles.asyncPeerGroup}>
108+
<Checkbox
109+
checked={rowData.peer_async_visible}
110+
onChange={(e) => onPeerAsyncChange(rowData, !!e.checked)}
111+
tooltip={rowData.peer_async_visible ? "Disable async peer" : "Enable async peer"}
112+
tooltipOptions={{ position: "top" }}
113+
/>
114+
<span className={styles.asyncPeerText}>Async Peer</span>
115+
</label>
116+
)}
103117
</div>
104118
);
105119

0 commit comments

Comments
 (0)