mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-24 15:25:46 +00:00
refactor(FE): Refactor PdfTable components to support generic data types
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
'use client';
|
||||
|
||||
import { View, StyleSheet } from '@react-pdf/renderer';
|
||||
import { PdfThead, PdfColumn } from './PdfThead';
|
||||
import { PdfTbody, PdfTbodyCell } from './PdfTbody';
|
||||
import { PdfTfoot, PdfTfootCell } from './PdfTfoot';
|
||||
import type { PdfColumn } from './types';
|
||||
import { PdfThead } from './PdfThead';
|
||||
import { PdfTbody } from './PdfTbody';
|
||||
import { PdfTfoot } from './PdfTfoot';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
table: {
|
||||
@@ -13,10 +14,10 @@ const styles = StyleSheet.create({
|
||||
},
|
||||
});
|
||||
|
||||
interface PdfTableProps {
|
||||
columns: PdfColumn[];
|
||||
data: PdfTbodyCell[][];
|
||||
footer?: PdfTfootCell[];
|
||||
interface PdfTableProps<TData = Record<string, unknown>> {
|
||||
columns: PdfColumn<TData>[];
|
||||
data: TData[];
|
||||
showFooter?: boolean;
|
||||
footerLabel?: string;
|
||||
firstRow?: {
|
||||
valueKey: string;
|
||||
@@ -26,20 +27,26 @@ interface PdfTableProps {
|
||||
};
|
||||
}
|
||||
|
||||
export const PdfTable = ({
|
||||
export const PdfTable = <TData = Record<string, unknown>,>({
|
||||
columns,
|
||||
data,
|
||||
footer,
|
||||
showFooter = false,
|
||||
footerLabel = 'Total',
|
||||
firstRow,
|
||||
}: PdfTableProps) => {
|
||||
}: PdfTableProps<TData>) => {
|
||||
// Check if any column has footer defined
|
||||
const hasFooter =
|
||||
showFooter || columns.some((col) => col.footer !== undefined);
|
||||
|
||||
return (
|
||||
<View style={styles.table}>
|
||||
<PdfThead columns={columns} />
|
||||
<PdfTbody columns={columns} rows={data} firstRow={firstRow} />
|
||||
{footer && footer.length > 0 && (
|
||||
<PdfTfoot columns={columns} cells={footer} label={footerLabel} />
|
||||
<PdfThead columns={columns} data={data} />
|
||||
<PdfTbody columns={columns} data={data} firstRow={firstRow} />
|
||||
{hasFooter && data.length > 0 && (
|
||||
<PdfTfoot columns={columns} data={data} label={footerLabel} />
|
||||
)}
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export type { PdfColumn };
|
||||
|
||||
Reference in New Issue
Block a user