Fix performer preview TypeScript types for CI.

Use full findPerformer data for mismatch comparisons and selected hover content, and normalize scraped card mapping to satisfy PerformerDataFragment shape.

Made-with: Cursor
This commit is contained in:
KennyG 2026-04-21 16:44:54 -04:00
parent 8fcaf3a596
commit 9ba90cb715
2 changed files with 24 additions and 9 deletions

View file

@ -46,7 +46,7 @@ const pushDeltaIfDifferent = (
const buildPerformerDeltaRows = (
remote: GQL.ScrapedPerformer,
local: Performer
local: GQL.PerformerDataFragment
): IPerformerDeltaRow[] => {
const rows: IPerformerDeltaRow[] = [];
@ -157,6 +157,12 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
stashID.stash_id === performer.remote_site_id
);
const [selectedPerformer, setSelectedPerformer] = useState<Performer>();
const { data: selectedPerformerData, loading: selectedPerformerLoading } =
GQL.useFindPerformerQuery({
variables: { id: selectedID ?? "" },
skip: !selectedID,
});
const selectedPerformerDetails = selectedPerformerData?.findPerformer;
const stashboxPerformerPrefix = endpoint
? `${getStashboxBase(endpoint)}performers/`
@ -189,7 +195,7 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
selectPerformer(undefined);
};
if (stashLoading) return <div>Loading performer</div>;
if (stashLoading || selectedPerformerLoading) return <div>Loading performer</div>;
if (matchedPerformer && matchedStashID) {
return (
@ -232,15 +238,15 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
const selectedSource = !selectedID ? "skip" : "existing";
const selectedPerformerConflictStashID =
endpoint && performer.remote_site_id && selectedPerformer
? selectedPerformer.stash_ids.find(
endpoint && performer.remote_site_id && selectedPerformerDetails
? selectedPerformerDetails.stash_ids.find(
(stashID) =>
stashID.endpoint === endpoint &&
stashID.stash_id !== performer.remote_site_id
)
: undefined;
const selectedPerformerDeltaRows = selectedPerformer
? buildPerformerDeltaRows(performer, selectedPerformer)
const selectedPerformerDeltaRows = selectedPerformerDetails
? buildPerformerDeltaRows(performer, selectedPerformerDetails)
: [];
const safeBuildPerformerScraperLink = (id: string | null | undefined) => {
@ -274,7 +280,7 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
</Button>
<MatchedPerformerPreview
performerID={selectedPerformer?.id}
performer={selectedPerformer}
performer={selectedPerformerDetails}
warningStashID={selectedPerformerConflictStashID}
deltaRows={selectedPerformerDeltaRows}
>

View file

@ -18,23 +18,32 @@ const toPerformerCardData = (performer: GQL.ScrapedPerformer) =>
performer.remote_site_id ??
`scraped-${performer.name?.replace(/\s+/g, "-").toLowerCase() ?? "performer"}`,
name: performer.name ?? "Unknown performer",
alias_list: performer.aliases
? performer.aliases
.split(",")
.map((a) => a.trim())
.filter(Boolean)
: [],
disambiguation: performer.disambiguation ?? null,
gender: performer.gender ?? null,
birthdate: performer.birthdate ?? null,
death_date: performer.death_date ?? null,
country: performer.country ?? null,
image_path: performer.images?.[0] ?? performer.image_path ?? null,
image_path: performer.images?.[0] ?? null,
tags: [],
custom_fields: [],
stash_ids: [],
favorite: false,
ignore_auto_tag: false,
scene_count: null,
image_count: null,
gallery_count: null,
group_count: null,
performer_count: null,
o_counter: null,
rating100: null,
urls: performer.urls ?? [],
}) as GQL.PerformerDataFragment;
} as unknown as GQL.PerformerDataFragment);
const ScrapedPerformerCard = ({ performer }: { performer: GQL.ScrapedPerformer }) => {
return (