Skip to content

Redesign iOS resource readers - #384

Merged
lastcow merged 1 commit into
mainfrom
codex/redesign-resource-readers
Aug 6, 2026
Merged

Redesign iOS resource readers#384
lastcow merged 1 commit into
mainfrom
codex/redesign-resource-readers

Conversation

@lastcow

@lastcow lastcow commented Aug 6, 2026

Copy link
Copy Markdown
Owner

What changed

  • render teaching materials and assignment requirements as structured Markdown with headings, lists, quotes, code, and inline formatting
  • replace the presentation list with a responsive 16:9 slide deck, thumbnails, progress, navigation, and speaker notes
  • add a read-only assignment submissions list and detailed submission view with status, timestamps, attachments, response, and existing outcome data
  • preserve role safety by fetching the complete submissions list only for teachers and admins
  • add English and Simplified Chinese copy plus model/UI coverage

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

  • iPhone simulator end-to-end module/resource UI test
  • iPad Pro simulator end-to-end module/resource UI test
  • 14 iOS unit tests
  • Release build for generic iOS Simulator
  • visual review of exported light- and dark-mode screenshots
  • git diff --check

@lastcow
lastcow marked this pull request as ready for review August 6, 2026 16:05

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 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".

Comment on lines 1518 to 1521
slides = fixture.presentationSlides[entry.item.id] ?? []
assignmentSubmissions = fixture.assignmentSubmissions[entry.item.id] ?? []
questions = fixture.quizQuestions[entry.item.id] ?? []
discussionPage = fixture.discussionPosts[entry.item.id]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge 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 👍 / 👎.

Comment on lines 1518 to 1521
slides = fixture.presentationSlides[entry.item.id] ?? []
assignmentSubmissions = fixture.assignmentSubmissions[entry.item.id] ?? []
questions = fixture.quizQuestions[entry.item.id] ?? []
discussionPage = fixture.discussionPosts[entry.item.id]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Comment on lines +2223 to +2224
ForEach(submission.attachments) { attachment in
SubmissionAttachmentRow(attachment: attachment)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

@lastcow
lastcow merged commit 614c486 into main Aug 6, 2026
4 checks passed
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