Conversation
Co-authored-by: ujiro99 <677231+ujiro99@users.noreply.github.com>
… keys Co-authored-by: ujiro99 <677231+ujiro99@users.noreply.github.com>
# Conflicts: # packages/extension/src/components/option/SettingForm.tsx
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #299 +/- ##
==========================================
- Coverage 19.03% 18.99% -0.05%
==========================================
Files 312 313 +1
Lines 28845 28949 +104
Branches 1322 1324 +2
==========================================
+ Hits 5490 5498 +8
- Misses 23355 23451 +96 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
リンクプレビューの開き方に「SidePanel」モードを追加し、SidePanel 表示時の自動非表示(オートクローズ)挙動を設定画面から制御できるようにする変更です。既存の SidePanel IPC を活用しつつ、タブ追跡データ(BgData)に「リンクプレビュー由来かどうか」を持たせて設定分岐できるようにしています。
Changes:
- リンクプレビューの新規モード
PREVIEW_SIDE_PANELを追加し、選択時に SidePanel を開く処理を実装 - SidePanel の自動非表示設定(通常コマンド用 / リンクプレビュー用)を UI・設定型・デフォルト・移行に追加
- SidePanel のタブ追跡を拡張(
tabIdに加えてisLinkCommandを保持)し、onClosed 等でクリーンアップ
Reviewed changes
Copilot reviewed 32 out of 32 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/extension/src/types/index.ts | LinkCommand 設定に sidePanelAutoHide を追加 |
| packages/extension/src/test/setup.ts | chrome.sidePanel.onClosed のテスト用モックを追加 |
| packages/extension/src/services/sidePanelDetector.ts | sidePanelTabs の新型に追従(some で判定) |
| packages/extension/src/services/sidePanelDetector.test.ts | sidePanelTabs の新型に合わせてテスト更新 |
| packages/extension/src/services/settings/settings.ts | 0.15.0 向け移行(linkCommand.sidePanelAutoHide)を追加 |
| packages/extension/src/services/option/defaultSettings.ts | sidePanelAutoHide のデフォルト値を追加 |
| packages/extension/src/services/chrome.ts | OpenSidePanelProps に isLinkCommand を追加 / close の後処理を整理 |
| packages/extension/src/services/backgroundData.ts | sidePanelTabs をオブジェクト配列化(isLinkCommand を保持) |
| packages/extension/src/hooks/useSidePanelAutoClose.ts | SidePanel 表示中のクリックで自動クローズする hook を新規追加 |
| packages/extension/src/hooks/useSettings.test.tsx | LinkCommand 設定のモックに sidePanelAutoHide を追加 |
| packages/extension/src/const.ts | DRAG_OPEN_MODE.PREVIEW_SIDE_PANEL を追加 |
| packages/extension/src/components/option/field/SwitchField.tsx | SwitchField に tooltip 表示を追加 |
| packages/extension/src/components/option/SettingForm.tsx | SidePanel 自動非表示の設定 UI を追加(link/window) |
| packages/extension/src/components/Popup.tsx | useSidePanelAutoClose を組み込み |
| packages/extension/src/background_script.ts | SidePanel close イベント等で追跡データをクリーンアップ |
| packages/extension/src/action/linkPreview.ts | LinkPreview の SidePanel オープン分岐を追加(isLinkCommand: true) |
| packages/extension/src/action/helper.ts | SidePanel の open/close とクリーンアップを isLinkCommand 対応で拡張 |
| packages/extension/src/action/helper.test.ts | sidePanelTabs 新型に合わせてテスト更新 |
| packages/extension/public/_locales/zh_CN/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/ru/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/pt_PT/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/pt_BR/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/ms/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/ko/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/ja/messages.json | SidePanel 新規UI/モード文言を追加(既存表記も調整) |
| packages/extension/public/_locales/it/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/id/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/hi/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/fr/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/es/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/en/messages.json | SidePanel 新規UI/モード文言を追加 |
| packages/extension/public/_locales/de/messages.json | SidePanel 新規UI/モード文言を追加 |
| useEffect(() => { | ||
| if (tabId == null) return | ||
| if (!sidePanelVisible) return | ||
|
|
||
| // Determine which setting to use based on whether this is a link command | ||
| const autoHideEnabled = isLinkCommand | ||
| ? userSettings?.linkCommand?.sidePanelAutoHide | ||
| : userSettings?.windowOption?.sidePanelAutoHide | ||
|
|
||
| // Only enable auto-close if the setting is enabled | ||
| if (!autoHideEnabled) return | ||
|
|
||
| const close = () => Ipc.send(BgCommand.closeSidePanel) | ||
|
|
||
| window.addEventListener("click", close) | ||
| return () => { | ||
| window.removeEventListener("click", close) | ||
| } | ||
| }, [tabId, sidePanelVisible, userSettings, isLinkCommand]) |
There was a problem hiding this comment.
useSidePanelAutoCloseはクリックイベントの登録/解除と、設定値(linkCommand.sidePanelAutoHide/windowOption.sidePanelAutoHide)の分岐という挙動が追加されていますが、同種の hook(例:useSidePanelNavigation)にはテストがある一方で本 hook にはテストがありません。BgData.watchの更新に応じてリスナーが付く/外れること、isLinkCommandによって参照設定が切り替わること、クリックでBgCommand.closeSidePanelが送信されることを最低限カバーするテストを追加してください。
| } | ||
| if (versionDiff(data.settingVersion, "0.15.0") === VersionDiff.Old) { | ||
| data.settingVersion = VERSION as Version | ||
| data = migrate0_15_0(data) | ||
| } |
There was a problem hiding this comment.
migrate()内でsettingVersionを先にVERSIONに更新しているため、0.14.3 の移行が走ったケース(=古い設定)では、その直後の0.15.0判定がOldにならずmigrate0_15_0()がスキップされる可能性があります。- その結果、
linkCommand.sidePanelAutoHideが追加されず、SettingFormのz.boolean()で読み込み時に不整合が起き得ます。 - 対応案: 移行判定は「元の settingVersion」を基準にする /
settingVersionの更新は全移行の最後にまとめて行う / もしくは各ブロックでVERSIONではなく対象バージョン(例: "0.14.3")へ段階的に更新する、のいずれかに揃えると安全です。
| BgData.update((data) => { | ||
| const { [tabId]: _, ...rest } = data.sidePanelUrls | ||
| return { | ||
| sidePanelTabs: data.sidePanelTabs.filter((t) => t.tabId !== tabId), | ||
| sidePanelUrls: rest, | ||
| } | ||
| }) |
There was a problem hiding this comment.
sidePanelClosed()内のBgData.update(...)がawaitされていないため、更新が完了する前に関数が終了します。BgData.updateはPromiseを返すので、例外もtry/catchで拾えず(未処理の Promise rejection になり得ます)、タブ削除/サイドパネル閉鎖時のクリーンアップが不安定になります。await BgData.update(...)として、必要なら呼び出し側(イベントリスナ)でも非同期の完了を待たない前提でエラーハンドリングだけ担保してください。
| @@ -14,7 +19,7 @@ export class BgData { | |||
| public pageActionStop: boolean | |||
| public activeScreenId: string | null | |||
| public connectedTabs: number[] | |||
| public sidePanelTabs: number[] | |||
| public sidePanelTabs: SidePanelTab[] | |||
| public sidePanelUrls: Record<number, string> | |||
There was a problem hiding this comment.
sidePanelTabsの型がnumber[]からSidePanelTab[]に変わっていますが、chrome.storage.session(SESSION_STORAGE_KEY.BG)に旧形式の配列が残っている場合、t.tabIdアクセスで実行時エラー/判定ミスになります。- 対応案:
BgDataの constructor でsidePanelTabsを正規化し、要素が number の場合は{ tabId: n, isLinkCommand: false }に変換して後方互換を確保してください。
リンクプレビューの開き方がPopupとWindowのみだったところに、SidePanelを追加。また、SidePanel使用時の自動非表示動作をオプションページから制御できるUIを追加。
変更点
新しいプレビューモード
DRAG_OPEN_MODEにPREVIEW_SIDE_PANEL = "previewSidePanel"を追加(const.ts)linkPreview.ts:PREVIEW_SIDE_PANEL選択時は既存のBgCommand.openSidePanelIPC コマンドを使用してSidePanelを開く設定UI
SettingForm.tsxのウィンドウ設定セクションにwindowOption.sidePanelAutoHideのSwitchFieldを追加closeSidePanelハンドラ(action/helper.ts)がこの設定を参照してSidePanelを自動的に閉じる動作は実装済みだったが、設定UIが未実装だったi18n
Option_openMode_previewSidePanel・Option_sidePanelAutoHide・Option_sidePanelAutoHide_descを追加(各言語で翻訳済み)Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
www.google-analytics.com/opt/hostedtoolcache/node/24.13.1/x64/bin/node /opt/hostedtoolcache/node/24.13.1/x64/bin/node --conditions node --conditions development /home/REDACTED/work/selection-command/selection-command/node_modules/tinypool/dist/entry/process.js(dns block)/opt/hostedtoolcache/node/24.13.1/x64/bin/node /opt/hostedtoolcache/node/24.13.1/x64/bin/node --conditions node --conditions development /home/REDACTED/work/selection-command/selection-command/node_modules/tinypool/dist/entry/process.js main tnet/tools/git(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.