[Feature] Tagger performer match improvements#6854
[Feature] Tagger performer match improvements#6854Stash-KennyG wants to merge 30 commits intostashapp:developfrom
Conversation
…rmerPreview component - Added cardClassName prop to PerformerPopoverCard and PerformerPopover for customizable styling. - Introduced MatchedPerformerPreview component to encapsulate PerformerPopover usage with a performerID. - Updated PerformerResult to utilize MatchedPerformerPreview for improved structure and styling.
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
…component - Added delta row functionality to display differences between local and remote performer data in MatchedPerformerPreview. - Introduced ScrapedPerformerPreview component for displaying scraped performer details with hover functionality. - Updated PerformerResult to integrate ScrapedPerformerPreview and pass necessary props for delta rows and warnings. - Enhanced styling for performer popovers to improve user experience.
- Simplified conditions for displaying remote aliases and URLs by removing unnecessary checks against local counts. - Ensured that rows are only pushed when remote counts exceed local counts, improving clarity and performance.
Document summary, test plan, and compatibility note for card class shape changes. Made-with: Cursor
Cursor overzealous.
Use full findPerformer data for mismatch comparisons and selected hover content, and normalize scraped card mapping to satisfy PerformerDataFragment shape. Made-with: Cursor
Apply Prettier-compatible formatting updates in matched preview, performer result, and scraped preview components. Made-with: Cursor
Normalize formatting patterns to align with repository Prettier output. Made-with: Cursor
Restructure imports and helper formatting to better match repository Prettier conventions. Made-with: Cursor
Rework formatting structure in performer result and scraped preview to match established Prettier output style. Made-with: Cursor
Format PerformerResult and ScrapedPerformerPreview with Prettier to satisfy validate-ui format checks. Made-with: Cursor
Use repository Prettier version to align with CI format-check expectations. Made-with: Cursor
Gykes
left a comment
There was a problem hiding this comment.
Static review only, no actual testing was done.
- Refactored buildPerformerDeltaRows to utilize `intl` for label formatting, improving localization. - Updated loading state message to use `FormattedMessage` for better internationalization. - Ensured all performer attributes are displayed with localized labels, enhancing user experience across different languages.
- Added `useIntl` hook to support localized performer names. - Updated `toPerformerCardData` function to utilize `intl` for formatting unknown performer names, enhancing user experience across different languages.
…tionality. - Replaced `PerformerCard` with `LocalPerformerCard` in `MatchedPerformerPreview` for better encapsulation. - Introduced `RemotePerformerCard` in `ScrapedPerformerPreview` to enhance the display of performer details, including gender and country flag. - Updated content rendering in `ScrapedPerformerPreview` to utilize the new `RemotePerformerCard` component.
…roved value handling. - Enhanced the normalizeValue function to handle numeric-like strings, converting them to numbers when applicable. - Maintained existing functionality for trimming and lowercasing non-numeric strings, ensuring consistent value normalization.
Convert scraped performer gender strings to GenderEnum using stringToGender before rendering GenderIcon so UI type-check passes in CI. Made-with: Cursor
…azy/async functionality - Updated MatchedPerformerPreview to utilize scraped performer data and handle loading states more effectively. - Introduced delta row calculations for displaying differences between local and scraped performer data. - Removed redundant code and improved the overall organization of the components for better maintainability.
Gykes
left a comment
There was a problem hiding this comment.
Another static review.
Looking better, once these are addressed/chatted about I will do app testing.
Refactor PerformerPopover and related components for improved functionality and structure - Updated PerformerPopover to accept preview data, loading states, and additional card extras for enhanced flexibility. - Replaced PerformerCard with PerformerPreviewCard in PerformerPopoverCard for better encapsulation and display of performer details. - Refactored MatchedPerformerPreview and ScrapedPerformerPreview to utilize PerformerPopover, streamlining the rendering of performer information and loading states. - Improved styling by renaming CSS classes for consistency and clarity.
- Replaced PerformerPreviewCard with PerformerCard in PerformerPopover for better encapsulation and display. - Simplified MatchedPerformerPreview by removing unnecessary loading state handling and age calculations. - Enhanced styling in Tagger component with additional padding for better layout consistency.
- Updated CSS class names from `tagger-performer-popover` to `performer-preview-popover` for clarity. - Enhanced styling for the new `performer-preview-popover` class to ensure consistent dimensions and image handling. - Removed outdated styles related to the previous tagger popover implementation.
Reorder padding declarations in the matched performer popover extra block to satisfy alphabetical property order enforced by stylelint. Made-with: Cursor
Use full PerformerCard in PerformerPopover ID mode so favorites and card button overlays render again, while keeping previewData mode for scraped/tagger previews. Made-with: Cursor
Normalize import formatting in ScrapedPerformerPreview to match repository Prettier output and unblock validate-ui format-check. Made-with: Cursor
What Changed Since PR Opened
Data Shape Strategy (No Unsafe Casts)
Hover/Lazy-Load Behavior
UI/Styling Adjustments
CI/Validation Fixes Applied
|
|
So, after some quick testing of the feature it looks okay. There is a small UX thing that I noticed and not sure if it is intended.
From a UX standpoint I would image that, since there is no hyperlinked information in this modal, then it should go away when you remove your hover from the name of the performer on the tagger card. This is, of course, opinionated and I think no matter what way you do it you will get pushback. In my opinion, the hover should disappear when you move your mouse off of the performer name. With that in mind lets go ahead and go that route and if there is a large enough of a pushback then we can revert. |
|
Current behavior is intentional. When you hover a performer and the modal appears, it remains active if the cursor moves into the modal. That allows click or ctrl/middle-click actions directly from the modal (open stash or stashdb). The primary driver was the right side where that interaction did not exist before. The left side already supported it, but I kept behavior consistent across both sides rather than introducing different hover models. Implementation differs slightly (inline block vs box picker), but both treat the modal as part of the hover region by design. Net effect: dismissal is lateral movement, not vertical. The suggestion is valid from a simplicity standpoint. Current design prioritizes interaction over quick dismissal. If that tradeoff proves wrong, it can be adjusted, but would lose the ability to interact with the card in case someone wanted to get more details. Also, in highlighting performer mis-matches - interaction with middle click may be necssary... |
|
If it is intentional then you can keep it as is. I imagine that people will want to be directed to the Stash Box link to verify performer at some point. Off the top of my head I don't have a solution for the issue I was having but I don't think it's a massive one. I think this is mostly ready for WP review anyway so will probably give it another quick look over and test then send it his way, |
Enhance Tagger performer match UX with hover previews and mismatch warnings
Closes #6853
Functionality
Behavior Details
PerformerCard.attached stash_id != incoming remote_site_idANDattached stash_endpoint == incoming stash_endpointMismatch Fields Covers
Test Plan
Notes
LLM Details
[✔] LLM use is openly disclosed. Made with Cursor
[✔] Code is reviewed by a human.
[✔] Human testing and validation was performed.
[✔] You take full responsibility for the code (including license compliance).