Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(frontend): 設定の検索 #15505

Merged
merged 131 commits into from
Mar 6, 2025
Merged

feat(frontend): 設定の検索 #15505

merged 131 commits into from
Mar 6, 2025

Conversation

syuilo
Copy link
Member

@syuilo syuilo commented Feb 16, 2025

What

Resolve #13189

TODO

  • コントロールパネル
  • 設定画面のHMRが効かない
  • 日本語対応の検索(ひらがなカタカナ区別しない等)
  • IME確定前でも検索する

Why

Additional info (optional)

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

@github-actions github-actions bot added the packages/frontend Client side specific issue/PR label Feb 16, 2025
Copy link

codecov bot commented Feb 16, 2025

Codecov Report

Attention: Patch coverage is 1.84382% with 3620 lines in your changes missing coverage. Please review.

Project coverage is 14.27%. Comparing base (a3d236c) to head (ae53a40).
Report is 701 commits behind head on develop.

Files with missing lines Patch % Lines
...es/frontend/lib/vite-plugin-create-search-index.ts 0.10% 997 Missing ⚠️
...ntend/src/scripts/autogen/settings-search-index.ts 0.12% 794 Missing ⚠️
...ckages/frontend/src/pages/settings/preferences.vue 0.00% 362 Missing and 1 partial ⚠️
...ackages/frontend/src/pages/settings/appearance.vue 0.00% 243 Missing and 1 partial ⚠️
packages/frontend/src/pages/settings/privacy.vue 0.00% 171 Missing ⚠️
...ackages/frontend/src/pages/settings/mute-block.vue 0.00% 136 Missing ⚠️
...ages/frontend/src/pages/settings/import-export.vue 0.00% 128 Missing ⚠️
packages/frontend/src/pages/settings/profile.vue 0.00% 126 Missing ⚠️
packages/frontend/src/components/MkSuperMenu.vue 0.00% 115 Missing ⚠️
packages/frontend/src/pages/settings/other.vue 0.00% 81 Missing ⚠️
... and 11 more
Additional details and impacted files
@@             Coverage Diff              @@
##           develop   #15505       +/-   ##
============================================
- Coverage    41.74%   14.27%   -27.48%     
============================================
  Files         1549      779      -770     
  Lines       196555    71368   -125187     
  Branches      2767     1243     -1524     
============================================
- Hits         82055    10187    -71868     
+ Misses      113939    60758    -53181     
+ Partials       561      423      -138     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

地道に設定項目のインデックス化をしてくださる方を募集しています

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

  1. 検索の対象にしたい要素(設定項目)を<MkSearchMarker markerId="UUID">で囲む
  2. packages/frontend/src/scripts/settings-index.ts にインデックスを定義する

@anatawa12
Copy link
Member

anatawa12 commented Feb 16, 2025

今後設定項目増えたときも大変だし項目移動したとき更新を忘れる気がするのでなんか.vueファイルを探索して自動でインデックス作りたい気がする

MkSearchMarkerのuuidもできたら自動で埋めたい

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

vueファイルの解析は実装が困難かも

  • どのように項目ごとの(i18n対応した)検索キーワードを定義するか?

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

windowsの設定とかiosの設定の検索は自分が確認した感じインデックスを手動で用意する方式っぽい挙動してた(過去のバージョンで削除された機能が検索だと出てきたり(押しても何も起こらない)、逆に結果に漏れがあったり)

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

ベストプラクティス募集中

@anatawa12
Copy link
Member

misskeyjsみたいな事前生成を考えてたのでMkSearchMarkerを正規表現マッチとかでできないかなと思ってたのですがむりかなぁ

アンジャッシュしてる気もしてるので明示するとsettings-index.tsだけを自動生成してMkSearchMarkerは手動で振るのを考えてました。locationLabelとキーワード系はMkSearchMarkerのatrtributeとかにある程度手動で振ったうえで、ページタイトルからも勝手に持ってきて
MkSearchMarkerも自動生成できるといいのですが難しいともうので

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

locationLabelとキーワード系はMkSearchMarkerのatrtributeとかにある程度手動で振ったうえで

これが難しい気がするのよね
キーワードは静的に決定できない(ユーザーの言語によって変わるため)

@samunohito
Copy link
Member

①「プロフィールの名前だけを変えるコンポーネント」を用意する
↓これを単独のコンポーネントにするイメージ

<MkInput v-model="profile.name" :max="30" manualSave :mfmAutocomplete="['emoji']">
  <template #label>{{ i18n.ts._profile.name }}</template>
</MkInput>

②既存のページコンポーネントの中身を①に置き換える(今までと同じ機能を提供させるため)
③検索用キーワード(i18n対応)とコンポーネントのレンダリング用関数の組み合わたオブジェクト配列をインデックスとして用意し、検索時はキーワードにヒットしたやつのみレンダリングするとか…

@Sayamame-beans
Copy link
Member

全言語いずれもヒットするようになれば影響なしです…?

@anatawa12
Copy link
Member

anatawa12 commented Feb 16, 2025

ソースコードを解析して属性上のi18n.ts.someThingsettings-index.tsコピペできればいいかなと考えてました

もしくはi18n.ts.somethingの戻り値にidをもたせる

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

ソースコードを解析して属性上のi18n.ts.someThingsettings-index.tsコピペできればいいかなと考えてました

これ考えたけど、(ないとは思うけど)コンポーネント側が i18n という変数名以外でインポートしてたら壊れるなと

@samunohito
Copy link
Member

(いずれにせよ、手で紐づけは現実的ではなく、動的なアプローチじゃないと厳しい認識)

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

ソースコードを解析して属性上のi18n.ts.someThingsettings-index.tsコピペできればいいかなと考えてました

これ考えたけど、(ないとは思うけど)コンポーネント側が i18n という変数名以外でインポートしてたら壊れるなと

壊れたら壊れたでビルド時にエラーになって気付けそうだから別に良いか

@anatawa12
Copy link
Member

壊れたら気付けると思いますし、'@/i18n.js'で全ファイルgrepしてi18n以外の場合を探して(またそれこそlintして)上げればいいかなと

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

というわけでマニュアルインデックス定義は廃止して

	<MkSearchMarker
		:locationLabel="[i18n.ts.privacy, i18n.ts.makeFollowManuallyApprove]"
		:icon="'ti ti-lock-open'"
		:keywords="['follow', 'lock', i18n.ts.lockedAccountInfo]"
		:path="'/settings/privacy'"
	>
		<MkSwitch v-model="isLocked" @update:modelValue="save()">{{ i18n.ts.makeFollowManuallyApprove }}<template #caption>{{ i18n.ts.lockedAccountInfo }}</template></MkSwitch>
	</MkSearchMarker>

でやっていくことにしました

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

  • vueファイルを解析してインデックスを生成する処理の実装を行ってくださる方を募集しています
  • MkSearchMarkerを各検索対象項目に設置していく作業を行ってくださる方を募集しています

@anatawa12
Copy link
Member

anatawa12 commented Feb 16, 2025

:pathも現状packages/frontend/src/pages/settings/(ページのパス名).(分けてる場合の名前).vueになってるので省略可能(違う場合にのみ指定)にして良さそう。

@anatawa12
Copy link
Member

vueファイルを解析してインデックスを生成する処理の実装を行ってくださる方を募集しています

着手未定だけど興味はあります

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

正規表現だと難しい可能性があるからXMLとかHTMLパーサーを使って解析すると柔軟にできそう

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

vue独自の構文とかは存在しないため

@anatawa12
Copy link
Member

正規表現だと難しい可能性があるからXMLとかHTMLパーサーを使って解析すると柔軟にできそう

これはそうだと思ってます

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

動的に設定項目が生成される(v-for等)ケースは対応が困難かも

@syuilo
Copy link
Member Author

syuilo commented Feb 16, 2025

例えばサウンドの設定は種類ごとにv-forで設定項目が動的に生成されている

image

@kakkokari-gtyih
Copy link
Contributor

例えばサウンドの設定は種類ごとにv-forで設定項目が動的に生成されている

正確にそこを指し示すことができなかったとしてもページに飛ばすことはできるだろうから、キーワードにサウンド名を全部入れるのでとりあえずは良い気はする

@kakkokari-gtyih
Copy link
Contributor

インデックス更新のときに出る大量のログどうにかしたいわね

@syuilo
Copy link
Member Author

syuilo commented Mar 5, 2025

コントロールパネルのインデックス化を担当してくださる人材を募集しています

@kakkokari-gtyih kakkokari-gtyih modified the milestones: v2025.3.0, v2025.3.1 Mar 5, 2025
@syuilo syuilo marked this pull request as ready for review March 6, 2025 14:14
@syuilo
Copy link
Member Author

syuilo commented Mar 6, 2025

コンパネなどは追々

@syuilo syuilo merged commit 0214a00 into develop Mar 6, 2025
24 of 26 checks passed
@syuilo syuilo deleted the settings-search branch March 6, 2025 14:15
@syuilo
Copy link
Member Author

syuilo commented Mar 6, 2025

🙏

@Sayamame-beans
Copy link
Member

コンパネなどは追々

後で(機運が来れば)実装される/出来るものは、issueにしておいてもらえると助かるかもしれません 🙏 (忘れてしまいそうなので… & それを見た誰かが作業出来るかもなので)

harumaki2000 pushed a commit to harumaki2000/misskey-layp that referenced this pull request Mar 7, 2025
* wip

* wip

* wip

* test

* wip rollup pluginでsearchIndexの情報生成

* wip

* SPDX

* wip: markerIdを自動付与

* rollupでビルド時・devモード時に毎回uuidを生成するように

* 開発サーバーでだけ必要な挙動は開発サーバーのみで

* 条件が逆

* wip: childrenの生成

* update comment

* update comment

* rename auto generated file

* hashをパスと行数から決定

* Update privacy.vue

* Update privacy.vue

* wip

* Update general.vue

* Update general.vue

* wip

* wip

* Update SearchMarker.vue

* wip

* Update profile.vue

* Update mute-block.vue

* Update mute-block.vue

* Update general.vue

* Update general.vue

* childrenがduplicate key errorを吐く問題をいったん解決

* マーカーの形を成形

* loggerを置きかえ

* とりあえず省略記法に対応

* Refactor and Format codes

* wip

* Update settings-search-index.ts

* wip

* wip

* とりあえず不確定要因の仮置きidを削除

* hashの生成を正規化(絶対パスになっていたのを緩和)

* pathの入力を省略可能に

* adminでもパス生成できるように

* Update settings-search-index.ts

* Update privacy.vue

* wip

* build searchIndex

* wip

* build

* Update general.vue

* build

* Update sounds.vue

* build

* build

* Update sounds.vue

* 🎨

* 🎨

* Update privacy.vue

* Update privacy.vue

* Update security.vue

* create-search-indexを多少改善

* build

* Update 2fa.vue

* wip

* 必ずtransformCodeCacheを利用するように, キャッシュの明確な受け渡しを定義

* キャッシュはdevServerでなくても更新

* Revert "wip"

This reverts commit 41bffd3.

* inlining

* wip

* Update theme.vue

* 🎨

* wip normalize

* Update theme.vue

* キャッシュのパス変換

* build

* wip

* wip

* Update SearchMarker.vue

* i18n.ts['key'] の形式が取り出せない問題のFix

* build

* 仮でpath入れ

* 必ず絶対パスが使われるように

* wip

* 🎨

* storybookビルド時はcreateSearchIndexをしない

* inliningの構造化

* format code

* Update index.vue

* wip

* wip

* 🎨

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* clean up

* Update navbar.vue

* enhance: 検索で上下矢印を使用することで検索結果を移動できるように

* refactor

* fix(frontend): PageWindowでSearchMarkerが動作するように

* enhance(frontend): SearchMarkerの点滅を一定時間で止める

* lint fix

* fix: 子要素監視が抜けていたのを修正

* アニメーションの回数はCSSで制御するように

* refactor

* enhance(frontend): 検索インデックス作成時のログを削減

* revert

* fix

* fix

---------

Co-authored-by: tai-cha <dev@taichan.site>
Co-authored-by: taichan <40626578+tai-cha@users.noreply.github.com>
Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
@tai-cha
Copy link
Contributor

tai-cha commented Mar 7, 2025

インデックス更新のときに出る大量のログどうにかしたいわね

これ実装落ち着いたら消そうと思ってて忘れていたやつなので感謝 🙏

DA-TENSHI pushed a commit to SHINANOSKEY-Projekt/SHINANOSKEY that referenced this pull request Mar 8, 2025
* wip

* wip

* wip

* test

* wip rollup pluginでsearchIndexの情報生成

* wip

* SPDX

* wip: markerIdを自動付与

* rollupでビルド時・devモード時に毎回uuidを生成するように

* 開発サーバーでだけ必要な挙動は開発サーバーのみで

* 条件が逆

* wip: childrenの生成

* update comment

* update comment

* rename auto generated file

* hashをパスと行数から決定

* Update privacy.vue

* Update privacy.vue

* wip

* Update general.vue

* Update general.vue

* wip

* wip

* Update SearchMarker.vue

* wip

* Update profile.vue

* Update mute-block.vue

* Update mute-block.vue

* Update general.vue

* Update general.vue

* childrenがduplicate key errorを吐く問題をいったん解決

* マーカーの形を成形

* loggerを置きかえ

* とりあえず省略記法に対応

* Refactor and Format codes

* wip

* Update settings-search-index.ts

* wip

* wip

* とりあえず不確定要因の仮置きidを削除

* hashの生成を正規化(絶対パスになっていたのを緩和)

* pathの入力を省略可能に

* adminでもパス生成できるように

* Update settings-search-index.ts

* Update privacy.vue

* wip

* build searchIndex

* wip

* build

* Update general.vue

* build

* Update sounds.vue

* build

* build

* Update sounds.vue

* 🎨

* 🎨

* Update privacy.vue

* Update privacy.vue

* Update security.vue

* create-search-indexを多少改善

* build

* Update 2fa.vue

* wip

* 必ずtransformCodeCacheを利用するように, キャッシュの明確な受け渡しを定義

* キャッシュはdevServerでなくても更新

* Revert "wip"

This reverts commit 41bffd3.

* inlining

* wip

* Update theme.vue

* 🎨

* wip normalize

* Update theme.vue

* キャッシュのパス変換

* build

* wip

* wip

* Update SearchMarker.vue

* i18n.ts['key'] の形式が取り出せない問題のFix

* build

* 仮でpath入れ

* 必ず絶対パスが使われるように

* wip

* 🎨

* storybookビルド時はcreateSearchIndexをしない

* inliningの構造化

* format code

* Update index.vue

* wip

* wip

* 🎨

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* clean up

* Update navbar.vue

* enhance: 検索で上下矢印を使用することで検索結果を移動できるように

* refactor

* fix(frontend): PageWindowでSearchMarkerが動作するように

* enhance(frontend): SearchMarkerの点滅を一定時間で止める

* lint fix

* fix: 子要素監視が抜けていたのを修正

* アニメーションの回数はCSSで制御するように

* refactor

* enhance(frontend): 検索インデックス作成時のログを削減

* revert

* fix

* fix

---------

Co-authored-by: tai-cha <dev@taichan.site>
Co-authored-by: taichan <40626578+tai-cha@users.noreply.github.com>
Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
packages/frontend Client side specific issue/PR
Projects
Development

Successfully merging this pull request may close these issues.

設定の項目の検索
6 participants