import { ImageProps } from "next/image"; import { TNewTabLink } from "../shared/Link"; export interface IProductV2Props { className?: string; isMobile: boolean; isLoading?: boolean; index?: number; parentCategory: string; category: string; productData: IProductV2; scoreInfoType?: "rankingScore" | "totalScore"; showIndex?: boolean; showReviewAndTwoLineSummary?: boolean; NextImage?: (props: ImageProps) => JSX.Element | null; NewTabLink?: (props: TNewTabLink) => JSX.Element; } export interface IProductV2 { modelName: string; productName?: string; brandName?: string; thumbnailUrl: string; price: string; colors: string; pickType: "none" | "best" | "plus" | "premium" | "cost_effective"; pickTypeName?: string; keySpec?: IKeySpec; totalScoreInfo: ITotalScoreInfo; rankingScoreInfo: IRankingScoreInfo; rankingRuleTagInfo?: IRankingRuleTagInfo; twoLineSummary: string; summary: string; reviewCount: number; reviewAverage: number; } export interface IKeySpec { name: string; specList: IProductKeySpec[]; } export interface IProductKeySpec { name: string; value: string; hiddenOnEmptyValue: boolean; } export interface ITotalScoreInfo { title: string; score: number; composedScoreList: { title: string; score: number }[]; } export interface IRankingRuleTagInfo { name: string; rank: number; } export interface IRankingScoreInfo { title: string; score: number; rankOfTheProduct: number; productCount: number; description: string; prosList: string[]; consList: string[]; composedScoreList: { scoreId: number; title: string; hasScoreInfo: boolean; scoreRatio: number; score: number; }[]; }