import Image from "next/image"; import Link from "next/link"; import type { IconType } from "react-icons"; import { IoCheckbox, IoDocumentText, IoInformation, IoPeople, IoPerson, IoSchool, } from "react-icons/io5"; import type { QuestionCardIcon, QuestionListItem } from "@/data/question-data"; import { localizePath } from "@/translations/config"; import { useI18n } from "@/translations/provider"; type QuestionCardProps = { item: QuestionListItem; progress?: number | null; onInfoClick?: (item: QuestionListItem) => void; }; const RADIUS = 8; const CIRCUMFERENCE = 2 * Math.PI * RADIUS; const iconAssetMap: Partial> = { profile: "/assets/images/mingcute_user-info-fill.svg", education: "/assets/images/boxicons_education-filled.svg", details: "/assets/images/Grfdasfoup.svg", checklist: "/assets/images/noun-test-4525471 1.svg", contact: "/assets/images/solar_user-id-bold.svg", family_marital: "/assets/images/Grfdasfoup.svg", }; const iconMap: Record = { profile: IoPerson, education: IoSchool, details: IoDocumentText, checklist: IoCheckbox, contact: IoPeople, family_marital: IoPeople, }; export function QuestionCard({ item, progress = item.progress, onInfoClick, }: QuestionCardProps) { const { dictionary: t, locale } = useI18n(); const hasProgress = typeof progress === "number" && Number.isFinite(progress); const normalizedProgress = hasProgress ? Math.max(0, Math.min(Math.round(progress), 100)) : 0; const dashOffset = CIRCUMFERENCE - (normalizedProgress / 100) * CIRCUMFERENCE; const CardIcon = iconMap[item.icon]; const iconAsset = iconAssetMap[item.icon]; return (
{iconAsset ? ( ) : (

{item.title}

{t.common.estimateTime}: {item.estimate}

{item.required ? ( {t.common.required} ) : item.showInfoBadge ? ( ) : (
{item.note ? (

{item.note}

) : null}
); } export default QuestionCard;