import { DetailedHTMLProps, HTMLAttributes, ReactNode, TdHTMLAttributes } from "react"; import { twMerge } from "tailwind-merge"; import { Skeleton } from "../Skeleton"; export type TableContainerProps = { children: ReactNode; isRounded?: boolean; className?: string; } & DetailedHTMLProps, HTMLDivElement>; export const TableContainer = ({ children, className, isRounded = true, ...props }: TableContainerProps): JSX.Element => (
{children}
); // main parent table export type TableProps = { className?: string; children: ReactNode; }; export const Table = ({ children, className }: TableProps): JSX.Element => ( {children}
); // table head export type THeadProps = { children: ReactNode; className?: string; }; export const THead = ({ children, className }: THeadProps): JSX.Element => ( {children} ); export type TFootProps = { children: ReactNode; className?: string; }; export const TFoot = ({ children, className }: TFootProps): JSX.Element => ( {children} ); // table rows export type TrProps = { children: ReactNode; className?: string; isHoverable?: boolean; isSelectable?: boolean; } & HTMLAttributes; export const Tr = ({ children, className, isHoverable, isSelectable, ...props }: TrProps): JSX.Element => ( {children} ); // table head columns export type ThProps = { children?: ReactNode; className?: string; }; export const Th = ({ children, className }: ThProps): JSX.Element => ( {children} ); // table body export type TBodyProps = { children: ReactNode; className?: string; }; export const TBody = ({ children, className }: TBodyProps): JSX.Element => ( {children} ); // table body columns export type TdProps = { children?: ReactNode; className?: string; } & TdHTMLAttributes; export const Td = ({ children, className, ...props }: TdProps): JSX.Element => ( {children} ); export type TBodyLoader = { rows?: number; columns: number; className?: string; // unique key for mapping innerKey: string; }; export const TableSkeleton = ({ rows = 3, columns, innerKey, className }: TBodyLoader): JSX.Element => ( <> {Array.apply(0, Array(rows)).map((_x, i) => ( {Array.apply(0, Array(columns)).map((_y, j) => ( ))} ))} );