Skip to content

[feature] 列表支援 ?open=<id> 深連結,訂閱與合約可互相跳轉 - #68

Merged
YJack0000 merged 1 commit into
mainfrom
feat/row-deep-link
Sep 7, 2026
Merged

[feature] 列表支援 ?open=<id> 深連結,訂閱與合約可互相跳轉#68
YJack0000 merged 1 commit into
mainfrom
feat/row-deep-link

Conversation

@YJack0000

Copy link
Copy Markdown
Contributor

問題

PR #64 在訂閱列表加了「合約」欄,但它是純文字 —— 看到某筆訂閱掛在哪張合約上,卻沒辦法點過去。

而且就算做成連到 /dashboard/contracts 的連結也不夠用:列表頁的編輯視窗只有「點那一列」才會打開(src/components/row-dialog.tsx),沒有任何方式用網址指定要開哪一列,使用者跳過去之後還是得自己在表格裡翻。

做法:?open=<id> 深連結

RowDialog 新增兩個選用 prop:

  • rowId —— 給了就支援深連結
  • openParam —— query 參數名,預設 open

網址帶 ?open=<rowId> 時,那一列的編輯視窗會自動打開,並把該列捲到畫面中央(關掉視窗後看得到自己剛剛開的是哪一列)。視窗關掉時把 open 從網址上拿掉(router.replace,其餘 query 原樣保留),重新整理才不會又跳出來;只有網址真的帶著這個參數時才會動網址。

實作上兩點:

  • useEffect 開啟而不是 initial state,server / client 首次 render 才會一致,不會 hydration mismatch。
  • 讀 query 的部分抽成 RowDeepLink 小元件並包在 <Suspense fallback={null}> 裡(useSearchParams 的要求),它不畫任何東西。

原有行為完全不動:互動元素的 hit test、鍵盤操作、dialog / sheet 兩種變體都照舊。

哪些頁面吃到

rowId 已接上:合約、訂閱 / 月費、專案、往來對象、發票、交易。

互相跳轉

  • 訂閱列表的合約欄 → 有綁合約時變成連到 /dashboard/contracts?open=<contractId> 的連結,保留原本的截斷與 tooltip。RowDialog 本來就會忽略點在 <a> 上的點擊,所以點連結不會同時打開訂閱的編輯視窗。
  • 訂閱編輯視窗 → 最上面多一行「合約:<標題> →」,一樣連到該張合約。
  • 合約編輯視窗的「綁定的訂閱」 → 每筆訂閱名稱變成連到 /dashboard/subscriptions?open=<id>;底部原有的「到訂閱 / 月費管理」連結保留。
  • 請款看板 → 項目底下那行來源說明:訂閱期別連回該筆訂閱、掛了合約的一次性項目連回該張合約,其餘(只有專案或什麼都沒綁)維持純文字。

其他

  • i18n 新增一個 key(subscriptions.list.contractLinkLabel,zh-TW + en)。
  • 沒有 schema 變更,src/db/*src/lib/mcp/*、migrations 都沒動。
  • bun run lint 乾淨、tsc --noEmit 零錯誤、bun run build 通過(沒有 Suspense boundary 的警告)。

@YJack0000
YJack0000 requested a review from yui0303 September 7, 2026 16:53
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

✅ SonarQube Quality Gate passed — pathorsAI_internal

0 open issues on this PR.

@YJack0000
YJack0000 enabled auto-merge (squash) September 7, 2026 16:55
@YJack0000
YJack0000 merged commit a74d62d into main Sep 7, 2026
1 check 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