/** * OurImpact Component - React Wrapper for Vendor JS * * @vendor-dependency @vendor-web/js/components/ourImpact.js * @cleanup-status ⚠️ Pending vendor update - needs cleanup function */ import React, { useRef, useEffect } from 'react'; import { OurImpact } from '@vendor-web/js/components/ourImpact.js'; interface KpiItem { value: number; formatted: string; } interface KpiData { kpi: { annual_conferences: KpiItem; programs: KpiItem; technical_study_cases: KpiItem; trainee_companies: KpiItem; trainee: KpiItem; industry_user_cases: KpiItem; lectures: KpiItem; industry_involved: KpiItem; }; updated_at: string | null; } interface OurImpactProps { dataEnd?: boolean; kpiData?: KpiData; } // Default KPI values (fallback) const DEFAULT_KPI: KpiData = { kpi: { annual_conferences: { value: 6, formatted: '6' }, programs: { value: 129, formatted: '129' }, technical_study_cases: { value: 661, formatted: '661' }, trainee_companies: { value: 2157, formatted: '2,157' }, trainee: { value: 11496, formatted: '11,496' }, industry_user_cases: { value: 714, formatted: '714' }, lectures: { value: 431, formatted: '431' }, industry_involved: { value: 15, formatted: '15' }, }, updated_at: null, }; export default function Impact({ dataEnd = false, kpiData = DEFAULT_KPI }: OurImpactProps) { const kpi = kpiData?.kpi ?? DEFAULT_KPI.kpi; const ourImpactRef = useRef(null); useEffect(() => { if (!ourImpactRef.current) return; // 初始化廠商 ourImpact.js const cleanup = OurImpact(ourImpactRef.current); // Cleanup 函數:當元件卸載時清理資源 return () => { if (typeof cleanup === 'function') { cleanup(); } else { // @todo Request vendor to add cleanup function // @see VENDOR-CLEANUP-REQUEST.md console.warn('[OurImpact] No cleanup function provided by vendor JS'); } }; }, []); return (

Our Impact

  • {kpi.annual_conferences.formatted} Annual Conferences
  • {kpi.programs.formatted} Programs in Management and Engineering
  • {kpi.technical_study_cases.formatted} Technical Study Cases
  • {kpi.trainee_companies.formatted} Trainee Companies
  • {kpi.trainee.formatted} Trainee
  • {kpi.industry_user_cases.formatted} Industry User Cases
  • {kpi.lectures.formatted} Lectures
  • {kpi.industry_involved.formatted} Industry Involved
  • {kpi.annual_conferences.formatted} Annual Conferences
  • {kpi.industry_involved.formatted} Industry Involved
  • {kpi.programs.formatted} Programs in Management and Engineering
  • {kpi.lectures.formatted} Lectures
  • {kpi.technical_study_cases.formatted} Technical Study Cases
  • {kpi.industry_user_cases.formatted} Industry User Cases
  • {kpi.trainee_companies.formatted} Trainee Companies
  • {kpi.trainee.formatted} Trainee
); }