Skip to content

תצוגה מקדימה בחיפוש: העברת פרמטרי החיפוש לטאב, לא רק השאילתה - #1175

Merged
Y-PLONI merged 2 commits into
Otzaria:devfrom
yakov100:fix/1147-preview-highlight-search-params
Sep 5, 2026
Merged

תצוגה מקדימה בחיפוש: העברת פרמטרי החיפוש לטאב, לא רק השאילתה#1175
Y-PLONI merged 2 commits into
Otzaria:devfrom
yakov100:fix/1147-preview-highlight-search-params

Conversation

@yakov100

@yakov100 yakov100 commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

מה השינוי?

בתצוגה המקדימה של תוצאות החיפוש רק חלק מהתוצאות קיבלו הדגשה. אותה תוצאה, בפתיחה בחלון מלא, כן הודגשה.

השורש: שני מסלולים באותה פונקציה ב-tantivy_search_results.dart. פתיחה בחלון מלא מעבירה שישה פרמטרים — searchOptions, alternativeWords, spacingValues, searchMode, searchDistance, matchPolicy — דרך InBookSearchRouting.resolveForReadingTab. התצוגה המקדימה העבירה רק searchText, ו-BookPreviewPanel בנה TextBookTab בלי השאר, למרות שהטאב כבר מכיל את כל השדות.

לכן שאילתה ליטרלית הודגשה בשתי התצוגות, ואילו תוצאה שהתאימה רק דרך קידומת, מילה חלופית או מרחק בין מילים הודגשה בחלון המלא בלבד. זה גם מסביר את "חלק מודגשות וחלק לא" בתוך אותו חיפוש.

התיקון: התצוגה המקדימה מקבלת את אותה קונפיגורציה, מחושבת דרך אותו resolveForReadingTab. בניית הטאב חולצה ל-buildPreviewTextTab כדי שאפשר יהיה לנעול אותה בטסט.

מה אומת ומה לא

השרשרת אומתה חוליה-חוליה בקריאת קוד:
BookPreviewPanelbuildPreviewTextTabTextBookTabTextBookInitial.namedTextBookBloc (initial.searchOptions → state) → CombinedViewRenderSettings → הדגשה. 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

הצהרות התורם

  • אני מאשר שה-PR שלי עומד בתנאי התרומה המפורטים ב-README
  • פיצ'ר חדש? — התייעצתי לפני כן (בפורום או ב-issue)
  • שינוי UI? — צירפתי צילומי מסך לפני/אחרי בסוף התיאור
  • הרצתי flutter analyze על הקוד ואין שגיאות

צילומי מסך

אין שינוי בפריסה או ברכיבים — ההבדל הוא אילו מילים נצבעות בתצוגה המקדימה. flutter analyze נקי, הטסט החדש עובר (3), ו-716 טסטים ב-test/library/ ו-test/search/ עוברים פרט לטסט שנכשל מראש שצוין למעלה.

🤖 Generated with Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +97 to +101
searchOptions: hasTarget ? searchOptions : const {},
alternativeWords: hasTarget ? alternativeWords : const {},
spacingValues: hasTarget ? spacingValues : const {},
searchMode: hasTarget ? searchMode : SearchMode.exact,
searchDistance: hasTarget ? searchDistance : 0,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge בנה מחדש את הטאב כשפרמטרי החיפוש משתנים

כאשר המשתמש משנה מצב חיפוש, מרחק או אפשרויות ומריץ שוב את אותה שאילתה בזמן שהתצוגה המקדימה פתוחה, ה־parent מעביר כאן פרמטרים חדשים אך BookPreviewPanel.didUpdateWidget בונה טאב מחדש רק כשהספר משתנה ומבצע גלילה בלבד כשהאינדקס משתנה. לכן, אם אותה תוצאה נשארת פתוחה, TextBookTab ממשיך להדגיש לפי התצורה הישנה והתיקון אינו חל עד שסוגרים ובוחרים מחדש את התוצאה; יש לזהות שינוי בפרמטרים ולעדכן או ליצור מחדש את הטאב.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

תודה — אימתתי את התרחיש והוא נגיש, כולל מלכוד נוסף.

_searchSignature ב-tantivy_search_results.dart הוא searchQuery + facets בלבד. שינוי מצב/מרחק/אפשרויות והרצה חוזרת של אותה שאילתה משאיר את החתימה זהה, ולכן previewTarget אינו מתאפס והחלונית נשארת פתוחה על אותו ספר ואותו אינדקס — בדיוק המצב שבו didUpdateWidget לא עשה כלום.

תוקן ב-1d4e991: זיהוי שינוי בפרמטרים ובניית הטאב מחדש.

מלכוד שנוסף בדרך: effectiveSearchOptions בונה מפה חדשה בכל קריאה, ולכן השוואת זהות הייתה מזהה "שינוי" בכל רינדור ובונה את הטאב מחדש בלי סוף. ההשוואה עמוקה (DeepCollectionEquality), ויש טסט ייעודי למקרה של מפות שוות-בתוכן ושונות-באינסטנס.

Comment on lines +49 to +51
/// פרמטרי החיפוש שהניבו את התוצאה. בלעדיהם ההדגשה בתצוגה המקדימה מכירה
/// רק את השאילתה המילולית, וכל תוצאה שנמצאה דרך קידומת, מילה חלופית או
/// מרחק בין מילים מוצגת בלי הדגשה (issue #1147).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge קצר את הערת הפרמטרים לשתי שורות

ההערה החדשה משתרעת על שלוש שורות, אף שכללי המאגר מחייבים שהערה נצרכת תהיה באורך מרבי של שתי שורות; קצר אותה כך שתתאר בתמצית מדוע הפרמטרים נדרשים.

AGENTS.md reference: AGENTS.md:L633-L633

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

תוקן ב-1d4e991 — ההערה קוצרה לשתי שורות.

yakov100 and others added 2 commits September 5, 2026 23:29
…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>
@Y-PLONI
Y-PLONI force-pushed the fix/1147-preview-highlight-search-params branch from 1d4e991 to c4de19b Compare September 5, 2026 20:29
@Y-PLONI
Y-PLONI merged commit f810f5a into Otzaria:dev Sep 5, 2026
7 checks 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