Skip to content

Lecture view additional features - #390

Merged
szebiniso-tuwien merged 36 commits into
feat/new-labextensionfrom
feat/lecture-view-additional-features
Aug 28, 2026
Merged

szebiniso-tuwien merged 36 commits into
feat/new-labextensionfrom
feat/lecture-view-additional-features

Conversation

@nadjajovancevic

@nadjajovancevic nadjajovancevic commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Additional features include:

  • collapsible groups
  • global release button

Fixes:

  • combobox in create/edit assignment dialog works as expected: users can remove the group after it's been selected
  • late submissions' field in create/edit assignment dialog: the entries are being removed as expected

Nadja Jovancevic and others added 30 commits July 30, 2026 15:41
…lecture-view

# Conflicts:
#	packages/labextension/src/app/components/grader-service/assignments/assignment-group.tsx
#	packages/labextension/style/css/output.css
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…onal-features-dialog-overflow

fix: overflowing text for release, delete, edit dialogs
…-Wien-dataLAB/grader-service into feat/lecture-view-additional-features
szebiniso-tuwien and others added 5 commits August 19, 2026 13:48
…b.com/TU-Wien-dataLAB/grader-service into feat/lecture-view-additional-features

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
…-Wien-dataLAB/grader-service into feat/lecture-view-additional-features

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I looked through the design again, and I think that we need this component only for the release dialog. Maybe it would be also fine if we just migrate this component to release-dialog.tsx? :)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sense, I just moved that out to make release-dialog component more shorten so it looks easier to read and understand. Should I move that in? ))

case 'released':
return <ReleasedAssignmentBadge />;
case 'complete':
return <Badge>Completed</Badge>;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a CompletedAssignmentBadge component that we can use here :)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I'll use that ))

Comment on lines +68 to +80
if (!props.assignments) {
return 'Release assignments';
}

if (props.isAssignmentsGrouped || Array.isArray(props.assignments)) {
return 'Release assignments';
}

if (typeof props.assignments === 'object' && props.assignments.name) {
return `Release ${props.assignments.name}`;
}

return 'Release assignments';

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I might be missing something, but I am a bit confused regarding the checks here. I don't know if the suggestion would be correct, I tried it out and it seemed to work fine as well :) But please correct me if I am missing something!

Suggested change
if (!props.assignments) {
return 'Release assignments';
}
if (props.isAssignmentsGrouped || Array.isArray(props.assignments)) {
return 'Release assignments';
}
if (typeof props.assignments === 'object' && props.assignments.name) {
return `Release ${props.assignments.name}`;
}
return 'Release assignments';
if (props.isAssignmentsGrouped || Array.isArray(props.assignments)) {
return 'Release assignments';
}
return `Release ${props.assignments.name}`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, make sense, looks good. Let me check all test cases with version ))

Comment on lines +47 to +58
onSubmit: async ({ value }) => {
if (props.isAssignmentsGrouped) {
const flatAssignments = Object.values(props.assignments).flat();
await handleAssignmentsRelease(flatAssignments, props.lectureId);
}
if (Array.isArray(props.assignments)) {
await handleAssignmentsRelease(props.assignments, props.lectureId);
} else {
await handleRelease(props.assignments, props.lectureId);
}
props.setOpenDialog(false);
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know it might seem weird, but the hooks (handleAssignmentsRelease and handleRelease) are actually not asynchronous, since we use mutate in the background and not mutateAsync. So the await and async operators are not necessary here :)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh, really. Okk I'll look again and fix this moment )

Comment on lines 29 to 31
style={{ wordBreak: 'break-all' }}
className={
'flex flex-col p-6 gap-4 items-start self-stretch border-t border-border'

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
style={{ wordBreak: 'break-all' }}
className={
'flex flex-col p-6 gap-4 items-start self-stretch border-t border-border'
className={
'flex flex-col p-6 gap-4 items-start self-stretch border-t border-border break-all'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does it work? just that option wasn't working on my end

Comment on lines 29 to 31
style={{ wordBreak: 'break-all' }}
className={
'flex flex-col p-6 gap-4 items-start self-stretch border-t border-border'

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
style={{ wordBreak: 'break-all' }}
className={
'flex flex-col p-6 gap-4 items-start self-stretch border-t border-border'
className={
'flex flex-col p-6 gap-4 items-start self-stretch border-t border-border break-all'

});

const handleDeleteAssignment = (assignmentId: number, lectureId: number) => {
const handleDeleteAssignment = async (

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know how this reappeared but async is not needed here :)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, I will remove ))

render={
<span className="inline-block">
<Button
className={'ml-auto cursor-pointer'}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that cursor-pointer has been added at multiple places for button, maybe we should just add the class in the button component? :)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, make sense, I thought about that and maybe add switcher to turn on/off the cursor style

Comment on lines 178 to 182
<DialogTitle>
{props.assignment
? `Edit ${props.assignment.name}`
? `Edit ${truncateText(props.assignment.name, 40)}`
: 'New Assignment'}
</DialogTitle>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we achieve the same behavior with css classes?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried, but tailwind.css seems doesn't support. Or you mean css itself?

@nadjajovancevic nadjajovancevic left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few small remarks, nothing too important :)

@szebiniso-tuwien
szebiniso-tuwien merged commit 004f4a2 into feat/new-labextension Aug 28, 2026
@nadjajovancevic
nadjajovancevic deleted the feat/lecture-view-additional-features branch September 23, 2026 12:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants