feat: 議程軌詳細頁面#215
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds track browsing and detail pages with shared track session types, Pretalx session helpers, track APIs, local track metadata, new track components, a session modal, and track-route scroll preservation. ChangesTrack browsing and detail
Estimated code review effort: 4 (Complex) | ~60 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/components/feature/CpTrackHeader.vue`:
- Around line 57-68: The button component in the v-for loop iterating over days
is missing an aria-pressed attribute to announce the selected state to assistive
technologies. Add an aria-pressed attribute to the button element that is bound
to the same condition used for styling (day === activeDay), so that when a day
is selected, aria-pressed will be set to true and announced to screen readers.
- Line 80: The hardcoded Chinese delimiter `、` in the rooms.join('、') call on
the span element needs to be replaced with a localized separator that adapts to
the current language/locale. Instead of hardcoding the delimiter, use your
application's i18n system (such as this.$t() or useI18n()) to retrieve the
appropriate room separator string based on the user's locale, ensuring that
English pages display English delimiters (typically commas or comma-space) and
other languages display their respective separators.
In `@app/components/feature/CpTrackSchedule.vue`:
- Around line 24-30: In the parseMinutes function, change the return value from
0 to null (or undefined) when the regex match fails, since 0 represents midnight
and is a valid time that can distort grid calculations. Then update all callers
of parseMinutes (in the range/session-row calculation code around lines 51-57
and 98-105) to check for null/undefined return values and skip invalid entries
rather than treating them as valid session times that contribute to the grid
layout.
In `@app/pages/track/`[id].vue:
- Around line 166-167: The day label in the zh locale configuration is using
English text "Day {n}" instead of a Chinese translation. Locate the day key in
the zh locale section and replace the English string with the appropriate
Chinese translation while preserving the {n} placeholder for dynamic day
numbering.
- Around line 36-45: The issue is that when the `days` array changes (such as
when navigating between different track IDs), the `manualSelectedDay` retains
its previous value even if that day no longer exists in the new `days` array,
causing `daySessions` to become empty and `dayIndex` to show Day 0. Add a
watcher on the `days` array that monitors changes and validates whether the
current `selectedDay.value` still exists in the updated `days` array. If the
selected day is no longer present in the new days list, reset
`manualSelectedDay` to null so that the computed property `selectedDay` will
properly default to the first available day from the new `days` array.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: b983e647-a695-415d-9ea9-7748502388d2
📒 Files selected for processing (11)
app/components/feature/CpTrackHeader.vueapp/components/feature/CpTrackSchedule.vueapp/components/feature/CpTrackSessionBlock.vueapp/data/trackMeta.tsapp/pages/track/[id].vueapp/pages/track/index.vueserver/api/session/index.get.tsserver/api/track/[id]/index.get.tsserver/api/track/index.get.tsserver/utils/pretalx/sessions.tsshared/types/session.ts
mirumodapon
left a comment
There was a problem hiding this comment.
當列表中的議程被點擊,會被轉跳到議程的網址,並且在這個網址關閉之後,會維持在議程表,期待可以直接在原頁面展開議程,應該用 clientonly 就可以了
好,我來調整一下設計~ |
mirumodapon
left a comment
There was a problem hiding this comment.
資料顯示好像只有英文,沒有正確再中文模式下顯示中文
|
@mirumodapon 已在 f660d56 處理: ① 直接在原頁面展開議程 ② 中文模式只顯示英文 |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/components/feature/CpTrackSessionPanel.vue`:
- Around line 45-53: The dialog in CpTrackSessionPanel.vue currently locks body
scroll and handles Escape, but it does not manage keyboard focus, so users can
tab behind the modal. Update the panel’s mounted/unmounted behavior and focus
handlers to move focus into the dialog when it opens, keep Tab/Shift+Tab trapped
within the dialog content, and restore focus to the previously focused element
when it closes; use the existing onMounted, onUnmounted, and onKeydown logic in
CpTrackSessionPanel.vue as the entry points.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: b6c5b18b-b7aa-45d9-b350-b9ed02bad285
📒 Files selected for processing (5)
app/components/feature/CpTrackHeader.vueapp/components/feature/CpTrackSchedule.vueapp/components/feature/CpTrackSessionPanel.vueapp/pages/track/[id].vueapp/router.options.ts
🚧 Files skipped from review as they are similar to previous changes (3)
- app/components/feature/CpTrackSchedule.vue
- app/components/feature/CpTrackHeader.vue
- app/pages/track/[id].vue
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f660d56b9a
ℹ️ 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".
Dokploy Preview Deployment
|
Add a per-track agenda page at `/track/[id]` showing the track title, session count, day toggles, room(s), community links, announcement, and a time-aligned schedule (CSS-grid timeline with hour/half-hour gridlines). - server/api/track/[id]: track name/description + sessions grouped by day - server/api/track: track index (id, name, session count) for the checking list - server/utils/pretalx/sessions: shared buildSessionSummary/groupSessionsByDay (session index endpoint refactored to reuse it) - app/data/trackMeta: local source for subtitle/links/announcement (not in Pretalx) - app/pages/track/[id] + index, CpTrackHeader/Schedule/SessionBlock components Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Clicking a session in the track schedule now opens a ClientOnly side panel on the same page (driven by a `?session=<id>` query string) instead of navigating away to /session/<id>. Scroll position is kept when opening/closing the panel. Also addresses CodeRabbit review: - aria-pressed on day filter buttons - localized room/speaker separator via i18n block - parseMinutes returns null on parse failure; callers skip invalid slots - reset selected day when it no longer exists in the available days - Chinese label for the "day" string Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The fixed w-120 drawer anchored with right-0 pushed its left edge off-screen on viewports narrower than 30rem, and the body scroll lock made that content unreachable. Use max-w-120 w-full so the drawer fits small viewports and caps at 30rem on larger ones.
58a7ff0 to
0ec1549
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
app/components/feature/CpTrackSessionPanel.vue (1)
60-60: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUnoCSS class ordering flagged by linter.
Static analysis flags unordered utility classes on these lines; low-effort cleanup to keep lint clean.
Also applies to: 66-66
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/components/feature/CpTrackSessionPanel.vue` at line 60, The UnoCSS utilities in CpTrackSessionPanel are out of the expected order, so reorder the class lists on the affected template elements to satisfy the linter. Update the static class strings in the component’s overlay markup (including the matching element on the other flagged line) so the utilities follow the project’s prescribed ordering without changing behavior.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/components/feature/CpTrackSessionPanel.vue`:
- Around line 16-22: The locale resolution in `sessionInfo` is being handled
manually with `localeKey` and inline room fallback ternaries, which should
instead use the shared `useLocaleContent` composable. Update
`CpTrackSessionPanel.vue` to resolve both session content and room locale
content through `useLocaleContent`, so fallback behavior is centralized and
consistent with the rest of the app.
- Around line 18-37: The CpSessionInfoCard usage in CpTrackSessionPanel is
missing the required ad prop, so update the template to pass an explicit null
value unless ad data is available to thread through. Locate the
CpSessionInfoCard binding in CpTrackSessionPanel.vue and add the ad prop
alongside the existing sessionInfo data so the component receives the expected
Ad | null input.
---
Nitpick comments:
In `@app/components/feature/CpTrackSessionPanel.vue`:
- Line 60: The UnoCSS utilities in CpTrackSessionPanel are out of the expected
order, so reorder the class lists on the affected template elements to satisfy
the linter. Update the static class strings in the component’s overlay markup
(including the matching element on the other flagged line) so the utilities
follow the project’s prescribed ordering without changing behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: a9a1f1da-3b25-4c2c-9313-f01699854992
📒 Files selected for processing (13)
app/components/feature/CpTrackHeader.vueapp/components/feature/CpTrackSchedule.vueapp/components/feature/CpTrackSessionBlock.vueapp/components/feature/CpTrackSessionPanel.vueapp/data/trackMeta.tsapp/pages/track/[id].vueapp/pages/track/index.vueapp/router.options.tsserver/api/session/index.get.tsserver/api/track/[id]/index.get.tsserver/api/track/index.get.tsserver/utils/pretalx/sessions.tsshared/types/session.ts
🚧 Files skipped from review as they are similar to previous changes (12)
- app/components/feature/CpTrackHeader.vue
- server/api/track/index.get.ts
- app/components/feature/CpTrackSessionBlock.vue
- shared/types/session.ts
- app/router.options.ts
- server/api/track/[id]/index.get.ts
- server/api/session/index.get.ts
- server/utils/pretalx/sessions.ts
- app/data/trackMeta.ts
- app/pages/track/index.vue
- app/pages/track/[id].vue
- app/components/feature/CpTrackSchedule.vue
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0ec1549110
ℹ️ 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".
實作 #209:獨立的議程軌頁面。
內容
議程軌詳細頁
/track/[id](依新設計)議程軌索引頁
/track(內部檢查用)設計決定
primary來保證語意一致app/data/trackMeta.ts。待辦(非本 PR 範圍)
app/data/trackMeta.ts目前只有範例結構,需填入各議程軌真實資料。/track,可視情況調整。🤖 Generated with Claude Code
Summary by CodeRabbit