תצוגה מקדימה בחיפוש: העברת פרמטרי החיפוש לטאב, לא רק השאילתה - #1175
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8ad21dc8a2
ℹ️ 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".
| searchOptions: hasTarget ? searchOptions : const {}, | ||
| alternativeWords: hasTarget ? alternativeWords : const {}, | ||
| spacingValues: hasTarget ? spacingValues : const {}, | ||
| searchMode: hasTarget ? searchMode : SearchMode.exact, | ||
| searchDistance: hasTarget ? searchDistance : 0, |
There was a problem hiding this comment.
בנה מחדש את הטאב כשפרמטרי החיפוש משתנים
כאשר המשתמש משנה מצב חיפוש, מרחק או אפשרויות ומריץ שוב את אותה שאילתה בזמן שהתצוגה המקדימה פתוחה, ה־parent מעביר כאן פרמטרים חדשים אך BookPreviewPanel.didUpdateWidget בונה טאב מחדש רק כשהספר משתנה ומבצע גלילה בלבד כשהאינדקס משתנה. לכן, אם אותה תוצאה נשארת פתוחה, TextBookTab ממשיך להדגיש לפי התצורה הישנה והתיקון אינו חל עד שסוגרים ובוחרים מחדש את התוצאה; יש לזהות שינוי בפרמטרים ולעדכן או ליצור מחדש את הטאב.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
תודה — אימתתי את התרחיש והוא נגיש, כולל מלכוד נוסף.
_searchSignature ב-tantivy_search_results.dart הוא searchQuery + facets בלבד. שינוי מצב/מרחק/אפשרויות והרצה חוזרת של אותה שאילתה משאיר את החתימה זהה, ולכן previewTarget אינו מתאפס והחלונית נשארת פתוחה על אותו ספר ואותו אינדקס — בדיוק המצב שבו didUpdateWidget לא עשה כלום.
תוקן ב-1d4e991: זיהוי שינוי בפרמטרים ובניית הטאב מחדש.
מלכוד שנוסף בדרך: effectiveSearchOptions בונה מפה חדשה בכל קריאה, ולכן השוואת זהות הייתה מזהה "שינוי" בכל רינדור ובונה את הטאב מחדש בלי סוף. ההשוואה עמוקה (DeepCollectionEquality), ויש טסט ייעודי למקרה של מפות שוות-בתוכן ושונות-באינסטנס.
| /// פרמטרי החיפוש שהניבו את התוצאה. בלעדיהם ההדגשה בתצוגה המקדימה מכירה | ||
| /// רק את השאילתה המילולית, וכל תוצאה שנמצאה דרך קידומת, מילה חלופית או | ||
| /// מרחק בין מילים מוצגת בלי הדגשה (issue #1147). |
There was a problem hiding this comment.
קצר את הערת הפרמטרים לשתי שורות
ההערה החדשה משתרעת על שלוש שורות, אף שכללי המאגר מחייבים שהערה נצרכת תהיה באורך מרבי של שתי שורות; קצר אותה כך שתתאר בתמצית מדוע הפרמטרים נדרשים.
AGENTS.md reference: AGENTS.md:L633-L633
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
תוקן ב-1d4e991 — ההערה קוצרה לשתי שורות.
…tzaria#1147) התצוגה המקדימה בנתה TextBookTab עם searchText בלבד, בעוד פתיחה בחלון מלא מעבירה גם searchOptions, alternativeWords, spacingValues, mode, distance ו-matchPolicy. לכן תוצאה שנמצאה דרך קידומת, מילה חלופית או מרחק בין מילים הוצגה בתצוגה המקדימה בלי הדגשה, ובחלון המלא כן. הפרמטרים נגזרים מאותו InBookSearchRouting.resolveForReadingTab שהמסלול המלא משתמש בו, כדי ששתי התצוגות יזהו את אותן התאמות. תופעת לוואי: חיפוש מתקדם מפעיל כעת גם מהתצוגה המקדימה את הזנת תבנית ההדגשה במנוע (התנאי searchMode != exact לא התקיים שם קודם). זו פגיעת מטמון אחרי חיפוש טרי, ואותה התנהגות שיש כבר בפתיחה בחלון מלא. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ונית חתימת החיפוש שסוגרת את התצוגה המקדימה היא שאילתה + קטגוריות בלבד, ולכן שינוי מצב/מרחק/אפשרויות והרצה חוזרת של אותה שאילתה משאירים את אותה תוצאה פתוחה. didUpdateWidget הגיב רק לספר ולאינדקס, והטאב המשיך להדגיש לפי הפרמטרים הישנים. ההשוואה עמוקה בכוונה: effectiveSearchOptions בונה מפה חדשה בכל קריאה, והשוואת זהות הייתה בונה את הטאב מחדש בכל רינדור. הערת הפרמטרים קוצרה לשתי שורות לפי הנחיות המאגר. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1d4e991 to
c4de19b
Compare
מה השינוי?
בתצוגה המקדימה של תוצאות החיפוש רק חלק מהתוצאות קיבלו הדגשה. אותה תוצאה, בפתיחה בחלון מלא, כן הודגשה.
השורש: שני מסלולים באותה פונקציה ב-
tantivy_search_results.dart. פתיחה בחלון מלא מעבירה שישה פרמטרים —searchOptions,alternativeWords,spacingValues,searchMode,searchDistance,matchPolicy— דרךInBookSearchRouting.resolveForReadingTab. התצוגה המקדימה העבירה רקsearchText, ו-BookPreviewPanelבנהTextBookTabבלי השאר, למרות שהטאב כבר מכיל את כל השדות.לכן שאילתה ליטרלית הודגשה בשתי התצוגות, ואילו תוצאה שהתאימה רק דרך קידומת, מילה חלופית או מרחק בין מילים הודגשה בחלון המלא בלבד. זה גם מסביר את "חלק מודגשות וחלק לא" בתוך אותו חיפוש.
התיקון: התצוגה המקדימה מקבלת את אותה קונפיגורציה, מחושבת דרך אותו
resolveForReadingTab. בניית הטאב חולצה ל-buildPreviewTextTabכדי שאפשר יהיה לנעול אותה בטסט.מה אומת ומה לא
השרשרת אומתה חוליה-חוליה בקריאת קוד:
BookPreviewPanel→buildPreviewTextTab→TextBookTab→TextBookInitial.named→TextBookBloc(initial.searchOptions→ state) →CombinedView→RenderSettings→ הדגשה.isPreviewModeאינו חוסם הדגשה (הוא משפיע על תפריט ההקשר ורוחב הטקסט בלבד).הטסט מכסה את הצנרת — שהטאב נושא את הקונפיגורציה — ולא את הפיקסלים על המסך. אימתתי שהוא באמת שומר על משהו: בביטול זמני של התיקון מקרה הבקרה (שאילתה פשוטה) עבר, והמקרה המתקדם נכשל עם
Expected: {'אבל': {'prefixes': true}}מולActual: {}.תופעת לוואי מכוונת: התנאי
searchText.isNotEmpty && searchMode != SearchMode.exactב-text_book_bloc.dartלא התקיים בתצוגה המקדימה עד היום, כי היא תמיד קיבלהexact. כעת חיפוש מתקדם מפעיל גם ממנה את הזנת תבנית ההדגשה במנוע. הקריאהunawaitedולפי ההערה בקוד היא פגיעת מטמון אחרי חיפוש טרי — וזו בדיוק ההתנהגות שכבר קיימת בפתיחה בחלון מלא.מחוץ להיקף: התצוגה המקדימה של PDF אינה מקבלת טקסט להדגשה כלל, לא רק את הקונפיגורציה —
_buildPdfViewerו-PdfViewerParamsלא מקבלים שום פרמטר חיפוש. חסר נפרד ורחב יותר; לא הרחבתי אליו את הדיף.הערה:
test/search/search_scope_menu_search_actions_test.dartנכשל גם עלdevנקי בלי השינוי הזה (נבדק ב-git stash). לא קשור ל-PR.קישור לבעיה
Fixes #1147
הצהרות התורם
flutter analyzeעל הקוד ואין שגיאותצילומי מסך
אין שינוי בפריסה או ברכיבים — ההבדל הוא אילו מילים נצבעות בתצוגה המקדימה.
flutter analyzeנקי, הטסט החדש עובר (3), ו-716 טסטים ב-test/library/ו-test/search/עוברים פרט לטסט שנכשל מראש שצוין למעלה.🤖 Generated with Claude Code