Redesign iOS resource readers - #384
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1506055517
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| slides = fixture.presentationSlides[entry.item.id] ?? [] | ||
| assignmentSubmissions = fixture.assignmentSubmissions[entry.item.id] ?? [] | ||
| questions = fixture.quizQuestions[entry.item.id] ?? [] | ||
| discussionPage = fixture.discussionPosts[entry.item.id] |
There was a problem hiding this comment.
Defer loading the full submission roster
When a teacher or admin opens any assignment, this immediately calls the unpaginated submissions endpoint before displaying even the Requirements tab. Each returned row includes a text answer of up to 100,000 characters plus attachment metadata, so assignments in large courses can produce a very large response, exceed the client's 30-second timeout, and replace the otherwise-local requirements with an error. Fetch the roster only when the Submissions tab is selected, ideally using a paginated API.
Useful? React with 👍 / 👎.
| slides = fixture.presentationSlides[entry.item.id] ?? [] | ||
| assignmentSubmissions = fixture.assignmentSubmissions[entry.item.id] ?? [] | ||
| questions = fixture.quizQuestions[entry.item.id] ?? [] | ||
| discussionPage = fixture.discussionPosts[entry.item.id] |
There was a problem hiding this comment.
Use the grouped endpoint for group assignments
For an assignment whose submissionMode is group, this always requests the individual submissions endpoint instead of /submissions/grouped. The former returns one row per group member, while the grouped endpoint supplies one shared submission with the group name, complete union of team attachments, and members; consequently this screen presents duplicate copies of the same group response and can omit files attached through another member's row. Branch on entry.item.submissionMode and render the grouped response for group work.
Useful? React with 👍 / 👎.
| ForEach(submission.attachments) { attachment in | ||
| SubmissionAttachmentRow(attachment: attachment) |
There was a problem hiding this comment.
Make submitted attachments openable
When a submission is file-only or relies on an attached document, this renders only a non-interactive filename row, and fileAssetID is never used anywhere else in the Apple app. A reviewer therefore cannot inspect the submitted work despite the API exposing /api/files/:fileId/download-url. Wrap the row in an action that obtains and opens the authorized download URL.
Useful? React with 👍 / 👎.
| .font(.subheadline) | ||
| .foregroundStyle(.white.opacity(0.88)) | ||
| .lineSpacing(3) | ||
| .lineLimit(6) |
There was a problem hiding this comment.
Preserve access to complete slide content
For slides whose body occupies more than six rendered lines, this limit permanently hides the remainder because the deck has no expansion or alternate full-text view. Slide content may be up to 100,000 characters, and the previous PresentationSlideCard rendered it without truncation, so existing presentations can lose visible material after this redesign. Remove the limit or provide a way to expand the selected slide.
Useful? React with 👍 / 👎.
What changed
Why
Resource detail pages previously treated rich Markdown and slides as plain content, while assignment submissions had no mobile review experience. This redesign improves readability and provides a professional, role-safe review flow without introducing grading controls.
Validation
git diff --check