import * as React from 'react'; import { Document, Image, Page, Text, View } from '@react-pdf/renderer'; import type { DatasheetModel, DatasheetVoltageTable } from '../model/types'; import { styles } from './styles'; import { Header } from './components/Header'; import { Footer } from './components/Footer'; import { Section } from './components/Section'; import { KeyValueGrid } from './components/KeyValueGrid'; import { DenseTable } from './components/DenseTable'; type Assets = { logoDataUrl: string | null; heroDataUrl: string | null; qrDataUrl: string | null; }; function chunk(arr: T[], size: number): T[][] { if (size <= 0) return [arr]; const out: T[][] = []; for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size)); return out; } export function DatasheetDocument(props: { model: DatasheetModel; assets: Assets }): React.ReactElement { const { model, assets } = props; const headerTitle = model.labels.datasheet; const footerLeft = `${model.labels.sku}: ${model.product.sku}`; const firstColLabel = model.locale === 'de' ? 'Adern & Querschnitt' : 'Cores & cross-section'; const tablePages: Array<{ table: DatasheetVoltageTable; rows: DatasheetVoltageTable['rows'] }> = model.voltageTables.flatMap(t => { const perPage = 30; const chunks = chunk(t.rows, perPage); return chunks.map(rows => ({ table: t, rows })); }); return (