Fixed claim/blame damagedParts

This commit is contained in:
2026-05-03 13:54:48 +03:30
parent c2d59112cf
commit c579f8fa1d
16 changed files with 1347 additions and 299 deletions

View File

@@ -5,6 +5,13 @@
* into {@code media.damagedParts} and broke step-completion checks.
*/
import type { DamageSelectedPartV2 } from "src/helpers/outer-damage-parts";
import {
damageSelectedPartsToLookupStrings,
mediaRowHasCapture,
resolvePartCaptureIndex,
} from "src/helpers/outer-damage-parts";
export const CLAIM_CAR_ANGLE_KEYS = ["front", "back", "left", "right"] as const;
export type ClaimCarAngleKey = (typeof CLAIM_CAR_ANGLE_KEYS)[number];
@@ -54,9 +61,17 @@ export function hasClaimCarAngleCapture(
export function legacyAngleDamagedPartFieldKeysToUnset(
canonical: ClaimCarAngleKey,
rawCaptureKey: string,
selectedParts: string[],
selectedParts: unknown,
carType?: import("src/static/outer-car-parts-catalog").ClaimVehicleTypeV2,
selectedOuterPartsLegacy?: unknown,
): string[] {
const selected = new Set((selectedParts ?? []).map((p) => String(p)));
const selected = new Set(
damageSelectedPartsToLookupStrings(
selectedParts,
carType,
selectedOuterPartsLegacy,
),
);
const variants = new Set(
[
rawCaptureKey,
@@ -89,9 +104,23 @@ function normalizeDamagedPartKeyLoose(s: string): string {
export function getDamagedPartCaptureBlob(
damagedPartsData: unknown,
partKey: string,
selectedNormalized?: DamageSelectedPartV2[],
): unknown {
const pk = String(partKey ?? "").trim();
if (!pk || damagedPartsData == null) return undefined;
if (Array.isArray(damagedPartsData)) {
const norm = selectedNormalized ?? [];
const idx = resolvePartCaptureIndex(
pk,
norm,
damagedPartsData as Record<string, unknown>[],
);
if (idx >= 0) {
const row = (damagedPartsData as unknown[])[idx];
if (mediaRowHasCapture(row)) return row;
}
return undefined;
}
let b = getCaptureBlob(damagedPartsData, pk);
if (b) return b;
const titleEn = legacyDamagedPartTitleEnFromPartKey(pk);
@@ -120,8 +149,12 @@ export function getDamagedPartCaptureBlob(
export function hasDamagedPartCapture(
damagedPartsData: unknown,
partKey: string,
selectedNormalized?: DamageSelectedPartV2[],
): boolean {
return getDamagedPartCaptureBlob(damagedPartsData, partKey) != null;
return (
getDamagedPartCaptureBlob(damagedPartsData, partKey, selectedNormalized) !=
null
);
}
/**
@@ -129,11 +162,17 @@ export function hasDamagedPartCapture(
*/
export function resolveCanonicalDamagedPartStorageKey(
captureKeyRaw: string,
selectedParts: string[],
selectedParts: unknown,
carType?: import("src/static/outer-car-parts-catalog").ClaimVehicleTypeV2,
selectedOuterPartsLegacy?: unknown,
): string {
const raw = String(captureKeyRaw ?? "").trim();
if (!raw) return raw;
const parts = (selectedParts ?? []).map((p) => String(p).trim()).filter(Boolean);
const parts = damageSelectedPartsToLookupStrings(
selectedParts,
carType,
selectedOuterPartsLegacy,
);
if (parts.includes(raw)) return raw;
const n = normalizeDamagedPartKeyLoose(raw);
const matches = parts.filter((p) => normalizeDamagedPartKeyLoose(p) === n);